diff mbox series

[FFmpeg-devel,1/4] avcodec/cbs_{h2645, sei}: add support for Ambient Viewing Environment SEI

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

Checks

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

Commit Message

Jan Ekström Jan. 10, 2023, 9:19 p.m. UTC
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(+)

Comments

James Almer Jan. 10, 2023, 9:34 p.m. UTC | #1
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 mbox series

Patch

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)
 {