]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/cbs_h265.h
doc/APIchanges: add hashes and version numbers for recent entries
[ffmpeg] / libavcodec / cbs_h265.h
index c9bc90187b07aff479d2650be1d8d4fae1cd9c64..f7753f1206ac4c65c8747464c02ca1c0a8c576eb 100644 (file)
 #include <stdint.h>
 
 #include "cbs_h2645.h"
+#include "cbs_sei.h"
 #include "hevc.h"
 
-enum {
-    // This limit is arbitrary - it is sufficient for one message of each
-    // type plus some repeats, and will therefore easily cover all sane
-    // streams.  However, it is possible to make technically-valid streams
-    // for which it will fail (for example, by including a large number of
-    // user-data-unregistered messages).
-    H265_MAX_SEI_PAYLOADS = 64,
-};
-
 typedef struct H265RawNALUnitHeader {
     uint8_t nal_unit_type;
     uint8_t nuh_layer_id;
@@ -182,11 +174,11 @@ typedef struct H265RawVUI {
     uint8_t log2_max_mv_length_vertical;
 } H265RawVUI;
 
-typedef struct H265RawPSExtensionData {
-    uint8_t *data;
-    size_t bit_length;
+typedef struct H265RawExtensionData {
+    uint8_t     *data;
     AVBufferRef *data_ref;
-} H265RawPSExtensionData;
+    size_t       bit_length;
+} H265RawExtensionData;
 
 typedef struct H265RawVPS {
     H265RawNALUnitHeader nal_unit_header;
@@ -221,7 +213,7 @@ typedef struct H265RawVPS {
     H265RawHRDParameters hrd_parameters[HEVC_MAX_LAYER_SETS];
 
     uint8_t vps_extension_flag;
-    H265RawPSExtensionData extension_data;
+    H265RawExtensionData extension_data;
 } H265RawVPS;
 
 typedef struct H265RawSTRefPicSet {
@@ -325,7 +317,7 @@ typedef struct H265RawSPS {
     uint8_t sps_scc_extension_flag;
     uint8_t sps_extension_4bits;
 
-    H265RawPSExtensionData extension_data;
+    H265RawExtensionData extension_data;
 
     // Range extension.
     uint8_t transform_skip_rotation_enabled_flag;
@@ -413,7 +405,7 @@ typedef struct H265RawPPS {
     uint8_t pps_scc_extension_flag;
     uint8_t pps_extension_4bits;
 
-    H265RawPSExtensionData extension_data;
+    H265RawExtensionData extension_data;
 
     // Range extension.
     uint8_t log2_max_transform_skip_block_size_minus2;
@@ -541,10 +533,10 @@ typedef struct  H265RawSliceHeader {
 typedef struct H265RawSlice {
     H265RawSliceHeader header;
 
-    uint8_t *data;
-    size_t   data_size;
-    int      data_bit_start;
+    uint8_t     *data;
     AVBufferRef *data_ref;
+    size_t       data_size;
+    int          data_bit_start;
 } H265RawSlice;
 
 
@@ -596,21 +588,6 @@ typedef struct H265RawSEIPanScanRect {
     uint16_t pan_scan_rect_persistence_flag;
 } H265RawSEIPanScanRect;
 
-typedef struct H265RawSEIUserDataRegistered {
-    uint8_t itu_t_t35_country_code;
-    uint8_t itu_t_t35_country_code_extension_byte;
-    uint8_t     *data;
-    size_t       data_length;
-    AVBufferRef *data_ref;
-} H265RawSEIUserDataRegistered;
-
-typedef struct H265RawSEIUserDataUnregistered {
-    uint8_t uuid_iso_iec_11578[16];
-    uint8_t     *data;
-    size_t       data_length;
-    AVBufferRef *data_ref;
-} H265RawSEIUserDataUnregistered;
-
 typedef struct H265RawSEIRecoveryPoint {
     int16_t recovery_poc_cnt;
     uint8_t exact_match_flag;
@@ -661,55 +638,20 @@ typedef struct H265RawSEITimeCode {
     int32_t  time_offset_value[3];
 } H265RawSEITimeCode;
 
-typedef struct H265RawSEIMasteringDisplayColourVolume {
-    uint16_t display_primaries_x[3];
-    uint16_t display_primaries_y[3];
-    uint16_t white_point_x;
-    uint16_t white_point_y;
-    uint32_t max_display_mastering_luminance;
-    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 H265RawSEIAlternativeTransferCharacteristics {
-    uint8_t preferred_transfer_characteristics;
-} H265RawSEIAlternativeTransferCharacteristics;
-
-typedef struct H265RawSEIPayload {
-    uint32_t payload_type;
-    uint32_t payload_size;
-    union {
-        H265RawSEIBufferingPeriod buffering_period;
-        H265RawSEIPicTiming pic_timing;
-        H265RawSEIPanScanRect pan_scan_rect;
-        H265RawSEIUserDataRegistered user_data_registered;
-        H265RawSEIUserDataUnregistered user_data_unregistered;
-        H265RawSEIRecoveryPoint recovery_point;
-        H265RawSEIDisplayOrientation display_orientation;
-        H265RawSEIActiveParameterSets active_parameter_sets;
-        H265RawSEIDecodedPictureHash decoded_picture_hash;
-        H265RawSEITimeCode time_code;
-        H265RawSEIMasteringDisplayColourVolume mastering_display;
-        H265RawSEIContentLightLevelInfo content_light_level;
-        H265RawSEIAlternativeTransferCharacteristics
-            alternative_transfer_characteristics;
-        struct {
-            uint8_t *data;
-            size_t data_length;
-            AVBufferRef *data_ref;
-        } other;
-    } payload;
-} H265RawSEIPayload;
+typedef struct H265RawSEIAlphaChannelInfo {
+    uint8_t  alpha_channel_cancel_flag;
+    uint8_t  alpha_channel_use_idc;
+    uint8_t  alpha_channel_bit_depth_minus8;
+    uint16_t alpha_transparent_value;
+    uint16_t alpha_opaque_value;
+    uint8_t  alpha_channel_incr_flag;
+    uint8_t  alpha_channel_clip_flag;
+    uint8_t  alpha_channel_clip_type_flag;
+} H265RawSEIAlphaChannelInfo;
 
 typedef struct H265RawSEI {
     H265RawNALUnitHeader nal_unit_header;
-
-    H265RawSEIPayload payload[H265_MAX_SEI_PAYLOADS];
-    uint8_t payload_count;
+    SEIRawMessageList    message_list;
 } H265RawSEI;
 
 typedef struct CodedBitstreamH265Context {