Signed-off-by: Haihao Xiang <haihao.xi...@intel.com> --- libavcodec/vaapi_encode_h265.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index 326fe4fe66..5fe487dfc5 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -37,6 +37,7 @@ enum { SEI_MASTERING_DISPLAY = 0x08, + SEI_CONTENT_LIGHT_LEVLE = 0x10, }; typedef struct VAAPIEncodeH265Context { @@ -55,6 +56,7 @@ typedef struct VAAPIEncodeH265Context { H265RawSEI sei; H265RawSEIMasteringDiplayColourVolume mastering_display; + H265RawSEIContentLightLevelInfo content_light_level; int64_t last_idr_frame; int pic_order_cnt; @@ -218,6 +220,12 @@ static int vaapi_encode_h265_write_extra_header(AVCodecContext *avctx, ++i; } + if (priv->sei_needed & SEI_CONTENT_LIGHT_LEVLE) { + priv->sei.payload[i].payload_type = HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO; + priv->sei.payload[i].payload.content_light_level = priv->content_light_level; + ++i; + } + priv->sei.payload_count = i; av_assert0(priv->sei.payload_count > 0); @@ -702,6 +710,22 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx, } } + if (opt->sei & SEI_CONTENT_LIGHT_LEVLE) { + AVFrameSideData *sd = + av_frame_get_side_data(pic->input_image, + AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); + + if (sd) { + AVContentLightMetadata *clm = + (AVContentLightMetadata *)sd->data; + + priv->content_light_level.max_content_light_level = clm->MaxCLL; + priv->content_light_level.max_pic_average_light_level = clm->MaxFALL; + + priv->sei_needed |= SEI_CONTENT_LIGHT_LEVLE; + } + } + vpic->decoded_curr_pic = (VAPictureHEVC) { .picture_id = pic->recon_surface, .pic_order_cnt = priv->pic_order_cnt, @@ -1123,11 +1147,14 @@ static const AVOption vaapi_encode_h265_options[] = { { "sei", "Set SEI to include", OFFSET(sei), AV_OPT_TYPE_FLAGS, - { .i64 = SEI_MASTERING_DISPLAY }, + { .i64 = SEI_MASTERING_DISPLAY | SEI_CONTENT_LIGHT_LEVLE }, 0, INT_MAX, FLAGS, "sei" }, { "mastering_display", "Include mastering display colour volume", 0, AV_OPT_TYPE_CONST, { .i64 = SEI_MASTERING_DISPLAY }, INT_MIN, INT_MAX, FLAGS, "sei" }, + { "content_light_level", "Include content light level information", + 0, AV_OPT_TYPE_CONST, { .i64 = SEI_CONTENT_LIGHT_LEVLE }, + INT_MIN, INT_MAX, FLAGS, "sei" }, { NULL }, }; -- 2.14.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel