From 2943dd35b7591b8e84ee8bf2e8dbc78627f36632 Mon Sep 17 00:00:00 2001 From: Haihao Xiang Date: Thu, 10 May 2018 13:47:46 +0800 Subject: [PATCH] cbs_h265: read/write content light level information SEI message Signed-off-by: Haihao Xiang --- libavcodec/cbs_h2645.c | 1 + libavcodec/cbs_h265.h | 6 ++++++ libavcodec/cbs_h265_syntax_template.c | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index dd13d8ab5f..54f7e93755 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -488,6 +488,7 @@ static void cbs_h265_free_sei_payload(H265RawSEIPayload *payload) { switch (payload->payload_type) { case HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO: + case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO: break; default: av_buffer_unref(&payload->payload.other.data_ref); diff --git a/libavcodec/cbs_h265.h b/libavcodec/cbs_h265.h index 983357e383..cca1d7590b 100644 --- a/libavcodec/cbs_h265.h +++ b/libavcodec/cbs_h265.h @@ -533,11 +533,17 @@ typedef struct H265RawSEIMasteringDisplayColourVolume { uint32_t min_display_mastering_luminance; } H265RawSEIMasteringDisplayColourVolume; +typedef struct H265RawSEIContentLightLevelInfo { + uint16_t max_content_light_level; + uint16_t max_pic_average_light_level; +} H265RawSEIContentLightLevelInfo; + typedef struct H265RawSEIPayload { uint32_t payload_type; uint32_t payload_size; union { H265RawSEIMasteringDisplayColourVolume mastering_display; + H265RawSEIContentLightLevelInfo content_light_level; struct { uint8_t *data; size_t data_length; diff --git a/libavcodec/cbs_h265_syntax_template.c b/libavcodec/cbs_h265_syntax_template.c index 1c67271300..d4e4f7b1c2 100644 --- a/libavcodec/cbs_h265_syntax_template.c +++ b/libavcodec/cbs_h265_syntax_template.c @@ -1526,6 +1526,17 @@ static int FUNC(sei_mastering_display)(CodedBitstreamContext *ctx, RWContext *rw return 0; } +static int FUNC(sei_content_light_level)(CodedBitstreamContext *ctx, RWContext *rw, + H265RawSEIContentLightLevelInfo *current) +{ + int err; + + u(16, max_content_light_level, 0, MAX_UINT_BITS(16)); + u(16, max_pic_average_light_level, 0, MAX_UINT_BITS(16)); + + return 0; +} + static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw, H265RawSEIPayload *current) { @@ -1545,6 +1556,12 @@ static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw, break; + case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO: + CHECK(FUNC(sei_content_light_level) + (ctx, rw, ¤t->payload.content_light_level)); + + break; + default: { #ifdef READ