[FFmpeg-devel] [PATCH] lavc/vaapi_encode_h265: fix conf_win_xxx_offset for 4:2:2/4:4:4 encoding

Linjie Fu linjie.fu at intel.com
Thu Mar 5 09:41:17 EET 2020


Based on Table 6-1, set SubWidth and SubHeightC depending on chroma format.

Based on D-28 and D-29, set the correct cropped width/height.

croppedWidth  = pic_width_in_luma_samples −
                SubWidthC * ( conf_win_right_offset + conf_win_left_offset );

croppedHeight = pic_height_in_luma_samples −
                SubHeightC * ( conf_win_bottom_offset + conf_win_top_offset );

Signed-off-by: Linjie Fu <linjie.fu at intel.com>
---
 libavcodec/vaapi_encode_h265.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
index 12f0e6f..db1bf24 100644
--- a/libavcodec/vaapi_encode_h265.c
+++ b/libavcodec/vaapi_encode_h265.c
@@ -268,6 +268,7 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx)
     VAEncPictureParameterBufferHEVC  *vpic = ctx->codec_picture_params;
     const AVPixFmtDescriptor *desc;
     int chroma_format, bit_depth;
+    int SubWidthC, SubHeightC;
     int i;
 
     memset(vps, 0, sizeof(*vps));
@@ -405,15 +406,19 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx)
     sps->pic_width_in_luma_samples  = ctx->surface_width;
     sps->pic_height_in_luma_samples = ctx->surface_height;
 
+    // Table 6-1
+    SubWidthC  = chroma_format == 1 || chroma_format == 2 ? 2 : 1;
+    SubHeightC = chroma_format == 1 ? 2 : 1;
+
     if (avctx->width  != ctx->surface_width ||
         avctx->height != ctx->surface_height) {
         sps->conformance_window_flag = 1;
         sps->conf_win_left_offset   = 0;
         sps->conf_win_right_offset  =
-            (ctx->surface_width - avctx->width) / 2;
+            (ctx->surface_width - avctx->width) / SubWidthC;
         sps->conf_win_top_offset    = 0;
         sps->conf_win_bottom_offset =
-            (ctx->surface_height - avctx->height) / 2;
+            (ctx->surface_height - avctx->height) / SubHeightC;
     } else {
         sps->conformance_window_flag = 0;
     }
-- 
2.7.4



More information about the ffmpeg-devel mailing list