Message ID | 20230110211949.8195-1-jeebjp@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,1/4] avcodec/cbs_{h2645, sei}: add support for Ambient Viewing Environment SEI | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On 1/10/2023 6:19 PM, Jan Ekström wrote: > Defined by H.274, this SEI message is utilized by iPhones to save > the nominal ambient viewing environment for the display of recorded > HDR content. > --- > libavcodec/cbs_h2645.c | 6 ++++++ > libavcodec/cbs_sei.h | 6 ++++++ > libavcodec/cbs_sei_syntax_template.c | 17 +++++++++++++++++ > 3 files changed, 29 insertions(+) > > diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c > index 4ee06003c3..80e48829af 100644 > --- a/libavcodec/cbs_h2645.c > +++ b/libavcodec/cbs_h2645.c > @@ -1500,6 +1500,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = { > sizeof(SEIRawAlternativeTransferCharacteristics), > SEI_MESSAGE_RW(sei, alternative_transfer_characteristics), > }, > + { > + SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT, > + 1, 0, > + sizeof(SEIRawAmbientViewingEnvironment), > + SEI_MESSAGE_RW(sei, ambient_viewing_environment), > + }, > SEI_MESSAGE_TYPE_END, > }; > > diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h > index c7a7a95be0..1c327a4689 100644 > --- a/libavcodec/cbs_sei.h > +++ b/libavcodec/cbs_sei.h > @@ -65,6 +65,12 @@ typedef struct SEIRawAlternativeTransferCharacteristics { > uint8_t preferred_transfer_characteristics; > } SEIRawAlternativeTransferCharacteristics; > > +typedef struct SEIRawAmbientViewingEnvironment { > + uint32_t ambient_illuminance; > + uint16_t ambient_light_x; > + uint16_t ambient_light_y; > +} SEIRawAmbientViewingEnvironment; > + > typedef struct SEIRawMessage { > uint32_t payload_type; > uint32_t payload_size; > diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c > index 0ef7b42ed9..6a7cc36dda 100644 > --- a/libavcodec/cbs_sei_syntax_template.c > +++ b/libavcodec/cbs_sei_syntax_template.c > @@ -144,6 +144,23 @@ static int FUNC(alternative_transfer_characteristics) > return 0; > } > > +static int FUNC(ambient_viewing_environment) > + (CodedBitstreamContext *ctx, RWContext *rw, > + SEIRawAmbientViewingEnvironment *current, > + SEIMessageState *state) > +{ > + static const uint16_t max_ambient_light_value = 50000; > + int err; > + > + HEADER("Ambient Viewing Environment"); > + > + u(32, ambient_illuminance, 1, MAX_UINT_BITS(32)); > + u(16, ambient_light_x, 0, max_ambient_light_value); > + u(16, ambient_light_y, 0, max_ambient_light_value); > + > + return 0; > +} > + > static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw, > SEIRawMessage *current) > { Should be ok.
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index 4ee06003c3..80e48829af 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -1500,6 +1500,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = { sizeof(SEIRawAlternativeTransferCharacteristics), SEI_MESSAGE_RW(sei, alternative_transfer_characteristics), }, + { + SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT, + 1, 0, + sizeof(SEIRawAmbientViewingEnvironment), + SEI_MESSAGE_RW(sei, ambient_viewing_environment), + }, SEI_MESSAGE_TYPE_END, }; diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h index c7a7a95be0..1c327a4689 100644 --- a/libavcodec/cbs_sei.h +++ b/libavcodec/cbs_sei.h @@ -65,6 +65,12 @@ typedef struct SEIRawAlternativeTransferCharacteristics { uint8_t preferred_transfer_characteristics; } SEIRawAlternativeTransferCharacteristics; +typedef struct SEIRawAmbientViewingEnvironment { + uint32_t ambient_illuminance; + uint16_t ambient_light_x; + uint16_t ambient_light_y; +} SEIRawAmbientViewingEnvironment; + typedef struct SEIRawMessage { uint32_t payload_type; uint32_t payload_size; diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c index 0ef7b42ed9..6a7cc36dda 100644 --- a/libavcodec/cbs_sei_syntax_template.c +++ b/libavcodec/cbs_sei_syntax_template.c @@ -144,6 +144,23 @@ static int FUNC(alternative_transfer_characteristics) return 0; } +static int FUNC(ambient_viewing_environment) + (CodedBitstreamContext *ctx, RWContext *rw, + SEIRawAmbientViewingEnvironment *current, + SEIMessageState *state) +{ + static const uint16_t max_ambient_light_value = 50000; + int err; + + HEADER("Ambient Viewing Environment"); + + u(32, ambient_illuminance, 1, MAX_UINT_BITS(32)); + u(16, ambient_light_x, 0, max_ambient_light_value); + u(16, ambient_light_y, 0, max_ambient_light_value); + + return 0; +} + static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw, SEIRawMessage *current) {