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

Jan Ekström git at videolan.org
Fri Jan 13 21:36:41 EET 2023


ffmpeg | branch: master | Jan Ekström <jeebjp at gmail.com> | Mon Jan  9 22:49:49 2023 +0200| [f4bebc0c34b6aeac011adfdc6fdbbfc939ac5a64] | committer: Jan Ekström

avcodec/cbs_{h2645,sei}: add support for Ambient Viewing Environment SEI

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f4bebc0c34b6aeac011adfdc6fdbbfc939ac5a64
---

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



More information about the ffmpeg-cvslog mailing list