[FFmpeg-cvslog] hevc: Use common SEI types

Mark Thompson git at videolan.org
Thu Jan 21 19:50:52 EET 2021


ffmpeg | branch: master | Mark Thompson <sw at jkqxz.net> | Thu Jan 21 14:38:58 2021 +0000| [773857df592d8f3095a548b3085c6b7fe6b30dfe] | committer: Mark Thompson

hevc: Use common SEI types

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

 libavcodec/cbs_h2645.c                | 28 ++++++++++++++--------------
 libavcodec/cbs_h265_syntax_template.c | 15 ++++++++-------
 libavcodec/hevc_sei.c                 | 22 +++++++++++-----------
 libavcodec/hevc_sei.h                 | 34 +---------------------------------
 libavcodec/nvenc.c                    |  2 +-
 libavcodec/vaapi_encode_h265.c        |  4 ++--
 6 files changed, 37 insertions(+), 68 deletions(-)

diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index d26d85bcd3..4478a6f810 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -1445,23 +1445,23 @@ static const CodedBitstreamUnitTypeDescriptor cbs_h264_unit_types[] = {
 static void cbs_h265_free_sei_payload(H265RawSEIPayload *payload)
 {
     switch (payload->payload_type) {
-    case HEVC_SEI_TYPE_BUFFERING_PERIOD:
-    case HEVC_SEI_TYPE_PICTURE_TIMING:
-    case HEVC_SEI_TYPE_PAN_SCAN_RECT:
-    case HEVC_SEI_TYPE_RECOVERY_POINT:
-    case HEVC_SEI_TYPE_DISPLAY_ORIENTATION:
-    case HEVC_SEI_TYPE_ACTIVE_PARAMETER_SETS:
-    case HEVC_SEI_TYPE_DECODED_PICTURE_HASH:
-    case HEVC_SEI_TYPE_TIME_CODE:
-    case HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO:
-    case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
-    case HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS:
-    case HEVC_SEI_TYPE_ALPHA_CHANNEL_INFO:
+    case SEI_TYPE_BUFFERING_PERIOD:
+    case SEI_TYPE_PIC_TIMING:
+    case SEI_TYPE_PAN_SCAN_RECT:
+    case SEI_TYPE_RECOVERY_POINT:
+    case SEI_TYPE_DISPLAY_ORIENTATION:
+    case SEI_TYPE_ACTIVE_PARAMETER_SETS:
+    case SEI_TYPE_DECODED_PICTURE_HASH:
+    case SEI_TYPE_TIME_CODE:
+    case SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME:
+    case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
+    case SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS:
+    case SEI_TYPE_ALPHA_CHANNEL_INFO:
         break;
-    case HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
+    case SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
         av_buffer_unref(&payload->payload.user_data_registered.data_ref);
         break;
-    case HEVC_SEI_TYPE_USER_DATA_UNREGISTERED:
+    case SEI_TYPE_USER_DATA_UNREGISTERED:
         av_buffer_unref(&payload->payload.user_data_unregistered.data_ref);
         break;
     default:
diff --git a/libavcodec/cbs_h265_syntax_template.c b/libavcodec/cbs_h265_syntax_template.c
index b792ec688a..64afc3f01d 100644
--- a/libavcodec/cbs_h265_syntax_template.c
+++ b/libavcodec/cbs_h265_syntax_template.c
@@ -2049,18 +2049,18 @@ static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw,
             } \
         } while (0)
 #define SEI_TYPE_N(type, prefix_valid, suffix_valid, name) \
-    case HEVC_SEI_TYPE_ ## type: \
+    case SEI_TYPE_ ## type: \
         SEI_TYPE_CHECK_VALID(name, prefix_valid, suffix_valid); \
         CHECK(FUNC(sei_ ## name)(ctx, rw, &current->payload.name)); \
         break
 #define SEI_TYPE_S(type, prefix_valid, suffix_valid, name) \
-    case HEVC_SEI_TYPE_ ## type: \
+    case SEI_TYPE_ ## type: \
         SEI_TYPE_CHECK_VALID(name, prefix_valid, suffix_valid); \
         CHECK(FUNC(sei_ ## name)(ctx, rw, &current->payload.name, \
                                  &current->payload_size)); \
         break
 #define SEI_TYPE_E(type, prefix_valid, suffix_valid, name) \
-    case HEVC_SEI_TYPE_ ## type: \
+    case SEI_TYPE_ ## type: \
         SEI_TYPE_CHECK_VALID(name, prefix_valid, suffix_valid); \
         CHECK(FUNC(sei_ ## name)(ctx, rw, &current->payload.name, \
                                  &current->payload_size, \
@@ -2068,19 +2068,19 @@ static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw,
         break
 
 #define SEI_TYPE_N2(type, prefix_valid, suffix_valid, name) \
-    case HEVC_SEI_TYPE_ ## type: \
+    case SEI_TYPE_ ## type: \
         SEI_TYPE_CHECK_VALID(name, prefix_valid, suffix_valid); \
         CHECK(FUNC_SEI(sei_ ## name)(ctx, rw, &current->payload.name)); \
         break
 #define SEI_TYPE_S2(type, prefix_valid, suffix_valid, name) \
-    case HEVC_SEI_TYPE_ ## type: \
+    case SEI_TYPE_ ## type: \
         SEI_TYPE_CHECK_VALID(name, prefix_valid, suffix_valid); \
         CHECK(FUNC_SEI(sei_ ## name)(ctx, rw, &current->payload.name, \
                                      &current->payload_size)); \
         break
 
         SEI_TYPE_E(BUFFERING_PERIOD,         1, 0, buffering_period);
-        SEI_TYPE_N(PICTURE_TIMING,           1, 0, pic_timing);
+        SEI_TYPE_N(PIC_TIMING,               1, 0, pic_timing);
         SEI_TYPE_N(PAN_SCAN_RECT,            1, 0, pan_scan_rect);
         SEI_TYPE_S2(USER_DATA_REGISTERED_ITU_T_T35,
                                              1, 1, user_data_registered);
@@ -2090,7 +2090,8 @@ static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw,
         SEI_TYPE_N(ACTIVE_PARAMETER_SETS,    1, 0, active_parameter_sets);
         SEI_TYPE_N(DECODED_PICTURE_HASH,     0, 1, decoded_picture_hash);
         SEI_TYPE_N(TIME_CODE,                1, 0, time_code);
-        SEI_TYPE_N2(MASTERING_DISPLAY_INFO,  1, 0, mastering_display_colour_volume);
+        SEI_TYPE_N2(MASTERING_DISPLAY_COLOUR_VOLUME,
+                                             1, 0, mastering_display_colour_volume);
         SEI_TYPE_N2(CONTENT_LIGHT_LEVEL_INFO,1, 0, content_light_level);
         SEI_TYPE_N2(ALTERNATIVE_TRANSFER_CHARACTERISTICS,
                                              1, 0, alternative_transfer_characteristics);
diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c
index a62b8bead3..227560c55b 100644
--- a/libavcodec/hevc_sei.c
+++ b/libavcodec/hevc_sei.c
@@ -402,25 +402,25 @@ static int decode_nal_sei_prefix(GetBitContext *gb, void *logctx, HEVCSEI *s,
     switch (type) {
     case 256:  // Mismatched value from HM 8.1
         return decode_nal_sei_decoded_picture_hash(&s->picture_hash, gb);
-    case HEVC_SEI_TYPE_FRAME_PACKING:
+    case SEI_TYPE_FRAME_PACKING_ARRANGEMENT:
         return decode_nal_sei_frame_packing_arrangement(&s->frame_packing, gb);
-    case HEVC_SEI_TYPE_DISPLAY_ORIENTATION:
+    case SEI_TYPE_DISPLAY_ORIENTATION:
         return decode_nal_sei_display_orientation(&s->display_orientation, gb);
-    case HEVC_SEI_TYPE_PICTURE_TIMING:
+    case SEI_TYPE_PIC_TIMING:
         return decode_nal_sei_pic_timing(s, gb, ps, logctx, size);
-    case HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO:
+    case SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME:
         return decode_nal_sei_mastering_display_info(&s->mastering_display, gb);
-    case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
+    case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
         return decode_nal_sei_content_light_info(&s->content_light, gb);
-    case HEVC_SEI_TYPE_ACTIVE_PARAMETER_SETS:
+    case SEI_TYPE_ACTIVE_PARAMETER_SETS:
         return decode_nal_sei_active_parameter_sets(s, gb, logctx);
-    case HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
+    case SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
         return decode_nal_sei_user_data_registered_itu_t_t35(s, gb, logctx, size);
-    case HEVC_SEI_TYPE_USER_DATA_UNREGISTERED:
+    case SEI_TYPE_USER_DATA_UNREGISTERED:
         return decode_nal_sei_user_data_unregistered(&s->unregistered, gb, size);
-    case HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS:
+    case SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS:
         return decode_nal_sei_alternative_transfer(&s->alternative_transfer, gb);
-    case HEVC_SEI_TYPE_TIME_CODE:
+    case SEI_TYPE_TIME_CODE:
         return decode_nal_sei_timecode(&s->timecode, gb);
     default:
         av_log(logctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type);
@@ -433,7 +433,7 @@ static int decode_nal_sei_suffix(GetBitContext *gb, void *logctx, HEVCSEI *s,
                                  int type, int size)
 {
     switch (type) {
-    case HEVC_SEI_TYPE_DECODED_PICTURE_HASH:
+    case SEI_TYPE_DECODED_PICTURE_HASH:
         return decode_nal_sei_decoded_picture_hash(&s->picture_hash, gb);
     default:
         av_log(logctx, AV_LOG_DEBUG, "Skipped SUFFIX SEI %d\n", type);
diff --git a/libavcodec/hevc_sei.h b/libavcodec/hevc_sei.h
index e9e2d46ed4..c67dbceb6c 100644
--- a/libavcodec/hevc_sei.h
+++ b/libavcodec/hevc_sei.h
@@ -24,40 +24,8 @@
 #include <stdint.h>
 
 #include "get_bits.h"
+#include "sei.h"
 
-/**
- * SEI message types
- */
-typedef enum {
-    HEVC_SEI_TYPE_BUFFERING_PERIOD                     = 0,
-    HEVC_SEI_TYPE_PICTURE_TIMING                       = 1,
-    HEVC_SEI_TYPE_PAN_SCAN_RECT                        = 2,
-    HEVC_SEI_TYPE_FILLER_PAYLOAD                       = 3,
-    HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35       = 4,
-    HEVC_SEI_TYPE_USER_DATA_UNREGISTERED               = 5,
-    HEVC_SEI_TYPE_RECOVERY_POINT                       = 6,
-    HEVC_SEI_TYPE_SCENE_INFO                           = 9,
-    HEVC_SEI_TYPE_FULL_FRAME_SNAPSHOT                  = 15,
-    HEVC_SEI_TYPE_PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
-    HEVC_SEI_TYPE_PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,
-    HEVC_SEI_TYPE_FILM_GRAIN_CHARACTERISTICS           = 19,
-    HEVC_SEI_TYPE_POST_FILTER_HINT                     = 22,
-    HEVC_SEI_TYPE_TONE_MAPPING_INFO                    = 23,
-    HEVC_SEI_TYPE_FRAME_PACKING                        = 45,
-    HEVC_SEI_TYPE_DISPLAY_ORIENTATION                  = 47,
-    HEVC_SEI_TYPE_SOP_DESCRIPTION                      = 128,
-    HEVC_SEI_TYPE_ACTIVE_PARAMETER_SETS                = 129,
-    HEVC_SEI_TYPE_DECODING_UNIT_INFO                   = 130,
-    HEVC_SEI_TYPE_TEMPORAL_LEVEL0_INDEX                = 131,
-    HEVC_SEI_TYPE_DECODED_PICTURE_HASH                 = 132,
-    HEVC_SEI_TYPE_SCALABLE_NESTING                     = 133,
-    HEVC_SEI_TYPE_REGION_REFRESH_INFO                  = 134,
-    HEVC_SEI_TYPE_TIME_CODE                            = 136,
-    HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO               = 137,
-    HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO             = 144,
-    HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147,
-    HEVC_SEI_TYPE_ALPHA_CHANNEL_INFO                   = 165,
-} HEVC_SEI_Type;
 
 typedef enum {
         HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING = 7,
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 0830db714c..a061dee880 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -2247,7 +2247,7 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame)
 
             if (tc_data) {
                 sei_data[sei_count].payloadSize = (uint32_t)tc_size;
-                sei_data[sei_count].payloadType = HEVC_SEI_TYPE_TIME_CODE;
+                sei_data[sei_count].payloadType = SEI_TYPE_TIME_CODE;
                 sei_data[sei_count].payload = (uint8_t*)tc_data;
                 sei_count ++;
             }
diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
index a7af763ae4..aa7faf39f3 100644
--- a/libavcodec/vaapi_encode_h265.c
+++ b/libavcodec/vaapi_encode_h265.c
@@ -218,14 +218,14 @@ static int vaapi_encode_h265_write_extra_header(AVCodecContext *avctx,
         i = 0;
 
         if (priv->sei_needed & SEI_MASTERING_DISPLAY) {
-            sei->payload[i].payload_type = HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO;
+            sei->payload[i].payload_type = SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME;
             sei->payload[i].payload.mastering_display_colour_volume =
                 priv->sei_mastering_display;
             ++i;
         }
 
         if (priv->sei_needed & SEI_CONTENT_LIGHT_LEVEL) {
-            sei->payload[i].payload_type = HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO;
+            sei->payload[i].payload_type = SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO;
             sei->payload[i].payload.content_light_level = priv->sei_content_light_level;
             ++i;
         }



More information about the ffmpeg-cvslog mailing list