FFmpeg
cbs_sei.h
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef AVCODEC_CBS_SEI_H
20 #define AVCODEC_CBS_SEI_H
21 
22 #include <stddef.h>
23 #include <stdint.h>
24 
25 #include "cbs.h"
26 #include "sei.h"
27 
28 
29 typedef struct SEIRawFillerPayload {
30  uint32_t payload_size;
32 
33 typedef struct SEIRawUserDataRegistered {
36  uint8_t *data;
37  uint8_t *data_ref; ///< RefStruct reference
38  size_t data_length;
40 
42  uint8_t uuid_iso_iec_11578[16];
43  uint8_t *data;
44  uint8_t *data_ref; ///< RefStruct reference
45  size_t data_length;
47 
67 
68 typedef struct SEIRawDecodedPictureHash {
71  uint8_t dph_sei_picture_md5[3][16];
72  uint16_t dph_sei_picture_crc[3];
74 
77 
79  uint16_t display_primaries_x[3];
80  uint16_t display_primaries_y[3];
81  uint16_t white_point_x;
82  uint16_t white_point_y;
86 
91 
95 
98  uint16_t ambient_light_x;
99  uint16_t ambient_light_y;
101 
104  uint8_t fg_model_id;
119  int16_t fg_comp_model_value[3][256][6];
122 
123 typedef struct SEIRawDisplayOrientation {
129 
141 
142 typedef struct SEIRawMessage {
143  uint32_t payload_type;
144  uint32_t payload_size;
145  void *payload;
146  void *payload_ref; ///< RefStruct reference
147  uint8_t *extension_data; ///< RefStruct reference
149 } SEIRawMessage;
150 
151 typedef struct SEIRawMessageList {
156 
157 
158 typedef struct SEIMessageState {
159  // The type of the payload being written.
160  uint32_t payload_type;
161  // When reading, contains the size of the payload to allow finding the
162  // end of variable-length fields (such as user_data_payload_byte[]).
163  // (When writing, the size will be derived from the total number of
164  // bytes actually written.)
165  uint32_t payload_size;
166  // When writing, indicates that payload extension data is present so
167  // all extended fields must be written. May be updated by the writer
168  // to indicate that extended fields have been written, so the extension
169  // end bits must be written too.
172 
173 struct GetBitContext;
174 struct PutBitContext;
175 
177  struct GetBitContext *rw,
178  void *current,
180 
182  struct PutBitContext *rw,
183  void *current,
185 
186 typedef struct SEIMessageTypeDescriptor {
187  // Payload type for the message. (-1 in this field ends a list.)
188  int type;
189  // Valid in a prefix SEI NAL unit (always for H.264).
190  uint8_t prefix;
191  // Valid in a suffix SEI NAL unit (never for H.264).
192  uint8_t suffix;
193  // Size of the decomposed structure.
194  size_t size;
195  // Read bitstream into SEI message.
197  // Write bitstream from SEI message.
200 
201 // End-of-list sentinel element.
202 #define SEI_MESSAGE_TYPE_END { .type = -1 }
203 
204 
205 /**
206  * Find the type descriptor for the given payload type.
207  *
208  * Returns NULL if the payload type is not known.
209  */
211  int payload_type);
212 
213 /**
214  * Allocate a new payload for the given SEI message.
215  */
218 
219 /**
220  * Allocate a new empty SEI message in a message list.
221  *
222  * The new message is in place nb_messages - 1.
223  */
225 
226 /**
227  * Free all SEI messages in a message list.
228  */
230 
231 /**
232  * Add an SEI message to an access unit.
233  *
234  * Will add to an existing SEI NAL unit, or create a new one for the
235  * message if there is no suitable existing one.
236  *
237  * If set, payload_ref must be a RefStruct reference backing payload_data.
238  * This function creates a new reference to payload_ref in this case.
239  * If payload_ref is NULL, the new message will not be reference counted.
240  */
243  int prefix,
244  uint32_t payload_type,
245  void *payload_data,
246  void *payload_ref);
247 
248 /**
249  * Iterate over messages with the given payload type in an access unit.
250  *
251  * Set message to NULL in the first call. Returns 0 while more messages
252  * are available, AVERROR(ENOENT) when all messages have been found.
253  */
256  uint32_t payload_type,
258 
259 /**
260  * Delete all messages with the given payload type from an access unit.
261  */
264  uint32_t payload_type);
265 
266 #endif /* AVCODEC_CBS_SEI_H */
SEIRawFramePackingArrangement::fp_frame0_grid_position_y
uint8_t fp_frame0_grid_position_y
Definition: cbs_sei.h:61
SEIRawFilmGrainCharacteristics::fg_num_intensity_intervals_minus1
uint8_t fg_num_intensity_intervals_minus1[3]
Definition: cbs_sei.h:115
cbs.h
SEIRawMasteringDisplayColourVolume::display_primaries_x
uint16_t display_primaries_x[3]
Definition: cbs_sei.h:79
SEIRawFramePackingArrangement::fp_arrangement_type
uint8_t fp_arrangement_type
Definition: cbs_sei.h:51
SEIRawFramePackingArrangement::fp_upsampled_aspect_ratio_flag
uint8_t fp_upsampled_aspect_ratio_flag
Definition: cbs_sei.h:65
SEIRawFrameFieldInformation::ffi_bottom_field_flag
uint8_t ffi_bottom_field_flag
Definition: cbs_sei.h:132
SEIRawUserDataRegistered
Definition: cbs_sei.h:33
SEIMessageTypeDescriptor::size
size_t size
Definition: cbs_sei.h:194
ff_cbs_sei_find_message
int ff_cbs_sei_find_message(CodedBitstreamContext *ctx, CodedBitstreamFragment *au, uint32_t payload_type, SEIRawMessage **message)
Iterate over messages with the given payload type in an access unit.
Definition: cbs_sei.c:314
SEIRawDecodedPictureHash::dph_sei_hash_type
uint8_t dph_sei_hash_type
Definition: cbs_sei.h:69
SEIRawAmbientViewingEnvironment
Definition: cbs_sei.h:96
message
Definition: api-threadmessage-test.c:47
SEIRawMessage::extension_bit_length
size_t extension_bit_length
Definition: cbs_sei.h:148
SEIRawFramePackingArrangement::fp_content_interpretation_type
uint8_t fp_content_interpretation_type
Definition: cbs_sei.h:53
SEIRawFrameFieldInformation
Definition: cbs_sei.h:130
SEIRawFramePackingArrangement::fp_frame0_self_contained_flag
uint8_t fp_frame0_self_contained_flag
Definition: cbs_sei.h:58
SEIRawDecodedPictureHash::dph_sei_picture_md5
uint8_t dph_sei_picture_md5[3][16]
Definition: cbs_sei.h:71
SEIRawMessage
Definition: cbs_sei.h:142
SEIRawAmbientViewingEnvironment::ambient_light_x
uint16_t ambient_light_x
Definition: cbs_sei.h:98
SEIRawFramePackingArrangement::fp_current_frame_is_frame0_flag
uint8_t fp_current_frame_is_frame0_flag
Definition: cbs_sei.h:57
SEIRawFramePackingArrangement::fp_arrangement_id
uint32_t fp_arrangement_id
Definition: cbs_sei.h:49
CodedBitstreamContext
Context structure for coded bitstream operations.
Definition: cbs.h:226
SEIRawFrameFieldInformation::ffi_top_field_first_flag
uint8_t ffi_top_field_first_flag
Definition: cbs_sei.h:136
SEIRawDecodedPictureHash::dph_sei_picture_crc
uint16_t dph_sei_picture_crc[3]
Definition: cbs_sei.h:72
SEIRawAlternativeTransferCharacteristics
Definition: cbs_sei.h:92
SEIMessageState::payload_type
uint32_t payload_type
Definition: cbs_sei.h:160
SEIRawFilmGrainCharacteristics::fg_comp_model_present_flag
uint8_t fg_comp_model_present_flag[3]
Definition: cbs_sei.h:114
SEIRawFramePackingArrangement::fp_frame1_self_contained_flag
uint8_t fp_frame1_self_contained_flag
Definition: cbs_sei.h:59
SEIMessageTypeDescriptor::suffix
uint8_t suffix
Definition: cbs_sei.h:192
SEIMessageReadFunction
int(* SEIMessageReadFunction)(CodedBitstreamContext *ctx, struct GetBitContext *rw, void *current, SEIMessageState *sei)
Definition: cbs_sei.h:176
SEIRawUserDataRegistered::data_ref
uint8_t * data_ref
RefStruct reference.
Definition: cbs_sei.h:37
SEIRawDecodedPictureHash::dph_sei_single_component_flag
uint8_t dph_sei_single_component_flag
Definition: cbs_sei.h:70
SEIRawFilmGrainCharacteristics::fg_blending_mode_id
uint8_t fg_blending_mode_id
Definition: cbs_sei.h:112
SEIRawFilmGrainCharacteristics::fg_matrix_coeffs
uint8_t fg_matrix_coeffs
Definition: cbs_sei.h:111
SEIRawMessage::payload_size
uint32_t payload_size
Definition: cbs_sei.h:144
SEIRawContentLightLevelInfo
Definition: cbs_sei.h:87
SEIRawFramePackingArrangement::fp_quincunx_sampling_flag
uint8_t fp_quincunx_sampling_flag
Definition: cbs_sei.h:52
SEIRawUserDataUnregistered::data
uint8_t * data
Definition: cbs_sei.h:43
SEIRawFramePackingArrangement::fp_frame0_flipped_flag
uint8_t fp_frame0_flipped_flag
Definition: cbs_sei.h:55
GetBitContext
Definition: get_bits.h:109
SEIRawMasteringDisplayColourVolume::max_display_mastering_luminance
uint32_t max_display_mastering_luminance
Definition: cbs_sei.h:83
SEIRawMessage::extension_data
uint8_t * extension_data
RefStruct reference.
Definition: cbs_sei.h:147
SEIRawFilmGrainCharacteristics::fg_characteristics_cancel_flag
uint8_t fg_characteristics_cancel_flag
Definition: cbs_sei.h:103
SEIRawUserDataUnregistered
Definition: cbs_sei.h:41
ff_cbs_sei_list_add
int ff_cbs_sei_list_add(SEIRawMessageList *list)
Allocate a new empty SEI message in a message list.
Definition: cbs_sei.c:66
SEIRawFilmGrainCharacteristics::fg_num_model_values_minus1
uint8_t fg_num_model_values_minus1[3]
Definition: cbs_sei.h:116
ff_cbs_sei_add_message
int ff_cbs_sei_add_message(CodedBitstreamContext *ctx, CodedBitstreamFragment *au, int prefix, uint32_t payload_type, void *payload_data, void *payload_ref)
Add an SEI message to an access unit.
Definition: cbs_sei.c:267
SEIRawUserDataRegistered::itu_t_t35_country_code
uint8_t itu_t_t35_country_code
Definition: cbs_sei.h:34
SEIRawFilmGrainCharacteristics::fg_bit_depth_luma_minus8
uint8_t fg_bit_depth_luma_minus8
Definition: cbs_sei.h:106
SEIMessageWriteFunction
int(* SEIMessageWriteFunction)(CodedBitstreamContext *ctx, struct PutBitContext *rw, void *current, SEIMessageState *sei)
Definition: cbs_sei.h:181
CodedBitstreamFragment
Coded bitstream fragment structure, combining one or more units.
Definition: cbs.h:129
SEIRawMessageList::nb_messages
int nb_messages
Definition: cbs_sei.h:153
SEIRawFillerPayload
Definition: cbs_sei.h:29
SEIRawMasteringDisplayColourVolume::white_point_y
uint16_t white_point_y
Definition: cbs_sei.h:82
SEIMessageState::payload_size
uint32_t payload_size
Definition: cbs_sei.h:165
SEIRawMessageList::nb_messages_allocated
int nb_messages_allocated
Definition: cbs_sei.h:154
SEIRawMessageList
Definition: cbs_sei.h:151
SEIRawUserDataUnregistered::data_length
size_t data_length
Definition: cbs_sei.h:45
ctx
AVFormatContext * ctx
Definition: movenc.c:49
SEIRawDisplayOrientation::display_orientation_persistence_flag
uint8_t display_orientation_persistence_flag
Definition: cbs_sei.h:125
SEIRawFramePackingArrangement::fp_frame1_grid_position_y
uint8_t fp_frame1_grid_position_y
Definition: cbs_sei.h:63
SEIRawFrameFieldInformation::ffi_display_elemental_periods_minus1
uint8_t ffi_display_elemental_periods_minus1
Definition: cbs_sei.h:137
SEIRawFrameFieldInformation::ffi_display_fields_from_frame_flag
uint8_t ffi_display_fields_from_frame_flag
Definition: cbs_sei.h:135
SEIRawFilmGrainCharacteristics::fg_log2_scale_factor
uint8_t fg_log2_scale_factor
Definition: cbs_sei.h:113
PutBitContext
Definition: put_bits.h:50
SEIRawMessage::payload_type
uint32_t payload_type
Definition: cbs_sei.h:143
SEIRawFilmGrainCharacteristics::fg_transfer_characteristics
uint8_t fg_transfer_characteristics
Definition: cbs_sei.h:110
SEIRawFilmGrainCharacteristics::fg_model_id
uint8_t fg_model_id
Definition: cbs_sei.h:104
SEIRawMasteringDisplayColourVolume::min_display_mastering_luminance
uint32_t min_display_mastering_luminance
Definition: cbs_sei.h:84
SEIRawFramePackingArrangement::fp_spatial_flipping_flag
uint8_t fp_spatial_flipping_flag
Definition: cbs_sei.h:54
SEIMessageTypeDescriptor
Definition: cbs_sei.h:186
SEIRawFilmGrainCharacteristics::fg_bit_depth_chroma_minus8
uint8_t fg_bit_depth_chroma_minus8
Definition: cbs_sei.h:107
SEIRawMasteringDisplayColourVolume
Definition: cbs_sei.h:78
sei.h
SEIRawFilmGrainCharacteristics::fg_intensity_interval_lower_bound
uint8_t fg_intensity_interval_lower_bound[3][256]
Definition: cbs_sei.h:117
SEIRawFrameFieldInformation::ffi_pairing_indicated_flag
uint8_t ffi_pairing_indicated_flag
Definition: cbs_sei.h:133
list
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining list
Definition: filter_design.txt:25
sei
static int FUNC() sei(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEI *current)
Definition: cbs_h264_syntax_template.c:858
SEIRawFilmGrainCharacteristics::fg_separate_colour_description_present_flag
uint8_t fg_separate_colour_description_present_flag
Definition: cbs_sei.h:105
SEIRawMessage::payload_ref
void * payload_ref
RefStruct reference.
Definition: cbs_sei.h:146
SEIRawFilmGrainCharacteristics::fg_comp_model_value
int16_t fg_comp_model_value[3][256][6]
Definition: cbs_sei.h:119
SEIRawFramePackingArrangement::fp_field_views_flag
uint8_t fp_field_views_flag
Definition: cbs_sei.h:56
ff_cbs_sei_alloc_message_payload
int ff_cbs_sei_alloc_message_payload(SEIRawMessage *message, const SEIMessageTypeDescriptor *desc)
Allocate a new payload for the given SEI message.
Definition: cbs_sei.c:40
SEIRawFillerPayload::payload_size
uint32_t payload_size
Definition: cbs_sei.h:30
SEIRawFrameFieldInformation::ffi_source_scan_type
uint8_t ffi_source_scan_type
Definition: cbs_sei.h:138
SEIRawFrameFieldInformation::ffi_field_pic_flag
uint8_t ffi_field_pic_flag
Definition: cbs_sei.h:131
SEIRawUserDataRegistered::data
uint8_t * data
Definition: cbs_sei.h:36
SEIMessageTypeDescriptor::type
int type
Definition: cbs_sei.h:188
SEIMessageTypeDescriptor::write
SEIMessageWriteFunction write
Definition: cbs_sei.h:198
SEIRawUserDataRegistered::data_length
size_t data_length
Definition: cbs_sei.h:38
SEIRawAmbientViewingEnvironment::ambient_light_y
uint16_t ambient_light_y
Definition: cbs_sei.h:99
SEIRawFramePackingArrangement::fp_frame1_grid_position_x
uint8_t fp_frame1_grid_position_x
Definition: cbs_sei.h:62
SEIRawUserDataRegistered::itu_t_t35_country_code_extension_byte
uint8_t itu_t_t35_country_code_extension_byte
Definition: cbs_sei.h:35
SEIRawMasteringDisplayColourVolume::white_point_x
uint16_t white_point_x
Definition: cbs_sei.h:81
SEIRawMessageList::messages
SEIRawMessage * messages
Definition: cbs_sei.h:152
SEIMessageTypeDescriptor::read
SEIMessageReadFunction read
Definition: cbs_sei.h:196
SEIRawFilmGrainCharacteristics::fg_characteristics_persistence_flag
uint8_t fg_characteristics_persistence_flag
Definition: cbs_sei.h:120
SEIRawMasteringDisplayColourVolume::display_primaries_y
uint16_t display_primaries_y[3]
Definition: cbs_sei.h:80
SEIRawFrameFieldInformation::ffi_duplicate_flag
uint8_t ffi_duplicate_flag
Definition: cbs_sei.h:139
SEIRawContentLightLevelInfo::max_content_light_level
uint16_t max_content_light_level
Definition: cbs_sei.h:88
SEIRawAlternativeTransferCharacteristics::preferred_transfer_characteristics
uint8_t preferred_transfer_characteristics
Definition: cbs_sei.h:93
SEIRawMessage::payload
void * payload
Definition: cbs_sei.h:145
SEIRawFrameFieldInformation::ffi_paired_with_next_field_flag
uint8_t ffi_paired_with_next_field_flag
Definition: cbs_sei.h:134
SEIMessageState
Definition: cbs_sei.h:158
SEIRawDecodedPictureHash::dph_sei_reserved_zero_7bits
uint8_t dph_sei_reserved_zero_7bits
Definition: cbs_sei.h:75
ff_cbs_sei_find_type
const SEIMessageTypeDescriptor * ff_cbs_sei_find_type(CodedBitstreamContext *ctx, int payload_type)
Find the type descriptor for the given payload type.
Definition: cbs_h2645.c:2353
SEIRawDecodedPictureHash::dph_sei_picture_checksum
uint32_t dph_sei_picture_checksum[3]
Definition: cbs_sei.h:73
SEIRawDisplayOrientation
Definition: cbs_sei.h:123
SEIRawDecodedPictureHash
Definition: cbs_sei.h:68
SEIRawAmbientViewingEnvironment::ambient_illuminance
uint32_t ambient_illuminance
Definition: cbs_sei.h:97
SEIRawUserDataUnregistered::data_ref
uint8_t * data_ref
RefStruct reference.
Definition: cbs_sei.h:44
SEIRawFramePackingArrangement
Definition: cbs_sei.h:48
desc
const char * desc
Definition: libsvtav1.c:78
SEIRawDisplayOrientation::display_orientation_transform_type
uint8_t display_orientation_transform_type
Definition: cbs_sei.h:126
ff_cbs_sei_delete_message_type
void ff_cbs_sei_delete_message_type(CodedBitstreamContext *ctx, CodedBitstreamFragment *au, uint32_t payload_type)
Delete all messages with the given payload type from an access unit.
Definition: cbs_sei.c:367
SEIRawContentLightLevelInfo::max_pic_average_light_level
uint16_t max_pic_average_light_level
Definition: cbs_sei.h:89
ff_cbs_sei_free_message_list
void ff_cbs_sei_free_message_list(SEIRawMessageList *list)
Free all SEI messages in a message list.
Definition: cbs_sei.c:91
SEIRawFramePackingArrangement::fp_arrangement_cancel_flag
uint8_t fp_arrangement_cancel_flag
Definition: cbs_sei.h:50
SEIRawFilmGrainCharacteristics::fg_colour_primaries
uint8_t fg_colour_primaries
Definition: cbs_sei.h:109
SEIRawDisplayOrientation::display_orientation_cancel_flag
uint8_t display_orientation_cancel_flag
Definition: cbs_sei.h:124
SEIRawUserDataUnregistered::uuid_iso_iec_11578
uint8_t uuid_iso_iec_11578[16]
Definition: cbs_sei.h:42
SEIMessageState::extension_present
uint8_t extension_present
Definition: cbs_sei.h:170
SEIRawDisplayOrientation::display_orientation_reserved_zero_3bits
uint8_t display_orientation_reserved_zero_3bits
Definition: cbs_sei.h:127
SEIRawFilmGrainCharacteristics::fg_intensity_interval_upper_bound
uint8_t fg_intensity_interval_upper_bound[3][256]
Definition: cbs_sei.h:118
SEIRawFilmGrainCharacteristics
Definition: cbs_sei.h:102
SEIMessageTypeDescriptor::prefix
uint8_t prefix
Definition: cbs_sei.h:190
SEIRawFramePackingArrangement::fp_arrangement_persistence_flag
uint8_t fp_arrangement_persistence_flag
Definition: cbs_sei.h:64
SEIRawFramePackingArrangement::fp_frame0_grid_position_x
uint8_t fp_frame0_grid_position_x
Definition: cbs_sei.h:60
SEIRawFilmGrainCharacteristics::fg_full_range_flag
uint8_t fg_full_range_flag
Definition: cbs_sei.h:108