Go to the documentation of this file.
39 for (cIdx = 0; cIdx < 3; cIdx++) {
42 for (
i = 0;
i < 16;
i++)
44 }
else if (hash_type == 1) {
47 }
else if (hash_type == 2) {
63 for (
i = 0;
i < 3;
i++) {
91 s->max_content_light_level =
get_bits(gb, 16);
92 s->max_pic_average_light_level =
get_bits(gb, 16);
111 s->content_interpretation_type =
get_bits(gb, 6);
115 s->current_frame_is_frame0_flag =
get_bits1(gb);
119 if (!
s->quincunx_subsampling &&
s->arrangement_type != 5)
136 s->anticlockwise_rotation =
get_bits(gb, 16);
144 void *logctx,
int size)
149 if (!ps->
sps_list[
s->active_seq_parameter_set_id])
153 if (
sps->vui.frame_field_info_present_flag) {
156 if (pic_struct == 2 || pic_struct == 10 || pic_struct == 12) {
159 }
else if (pic_struct == 1 || pic_struct == 9 || pic_struct == 11) {
162 }
else if (pic_struct == 7) {
165 }
else if (pic_struct == 8) {
199 if (size < 16 || size >= INT_MAX - 1)
215 s->buf_ref[
s->nb_buf_ref++] = buf_ref;
249 void *logctx,
int size)
251 int country_code, provider_code;
258 if (country_code == 0xFF) {
266 if (country_code != 0xB5) {
268 "Unsupported User Data Registered ITU-T T35 SEI message (country_code = %d)\n",
275 switch (provider_code) {
278 const uint16_t smpte2094_40_provider_oriented_code = 0x0001;
279 const uint8_t smpte2094_40_application_identifier = 0x04;
280 uint16_t provider_oriented_code;
281 uint8_t application_identifier;
287 provider_oriented_code =
get_bits(gb, 16);
288 application_identifier =
get_bits(gb, 8);
289 if (provider_oriented_code == smpte2094_40_provider_oriented_code &&
290 application_identifier == smpte2094_40_application_identifier) {
296 uint32_t user_identifier;
303 switch (user_identifier) {
304 case MKBETAG(
'G',
'A',
'9',
'4'):
308 "Unsupported User Data Registered ITU-T T35 SEI message (atsc user_identifier = 0x%04x)\n",
316 "Unsupported User Data Registered ITU-T T35 SEI message (provider_code = %d)\n",
328 int num_sps_ids_minus1;
330 unsigned active_seq_parameter_set_id;
337 if (num_sps_ids_minus1 < 0 || num_sps_ids_minus1 > 15) {
344 av_log(logctx,
AV_LOG_ERROR,
"active_parameter_set_id %d invalid\n", active_seq_parameter_set_id);
347 s->active_seq_parameter_set_id = active_seq_parameter_set_id;
349 for (
i = 1;
i <= num_sps_ids_minus1;
i++)
361 s->preferred_transfer_characteristics =
get_bits(gb, 8);
372 for (
int i = 0;
i <
s->num_clock_ts;
i++) {
375 if (
s->clock_timestamp_flag[
i]) {
376 s->units_field_based_flag[
i] =
get_bits(gb, 1);
384 if (
s->full_timestamp_flag[
i]) {
390 if (
s->seconds_flag[
i]) {
393 if (
s->minutes_flag[
i]) {
396 if (
s->hours_flag[
i]) {
404 if (
s->time_offset_length[
i] > 0) {
420 memset(
h, 0,
sizeof(*
h));
422 h->separate_colour_description_present_flag =
get_bits1(gb);
423 if (
h->separate_colour_description_present_flag) {
425 h->bit_depth_chroma =
get_bits(gb, 3) + 8;
428 h->transfer_characteristics =
get_bits(gb, 8);
433 for (
int c = 0;
c < 3;
c++)
435 for (
int c = 0;
c < 3;
c++) {
436 if (
h->comp_model_present_flag[
c]) {
437 h->num_intensity_intervals[
c] =
get_bits(gb, 8) + 1;
439 if (
h->num_model_values[
c] > 6)
441 for (
int i = 0;
i <
h->num_intensity_intervals[
c];
i++) {
442 h->intensity_interval_lower_bound[
c][
i] =
get_bits(gb, 8);
443 h->intensity_interval_upper_bound[
c][
i] =
get_bits(gb, 8);
444 for (
int j = 0; j <
h->num_model_values[
c]; j++)
508 int payload_type = 0;
509 int payload_size = 0;
513 while (
byte == 0xFF) {
517 payload_type +=
byte;
520 while (
byte == 0xFF) {
524 payload_size +=
byte;
557 for (
int i = 0;
i <
s->unregistered.nb_buf_ref;
i++)
559 s->unregistered.nb_buf_ref = 0;
static int decode_nal_sei_frame_packing_arrangement(HEVCSEIFramePacking *s, GetBitContext *gb)
static int decode_registered_user_data_closed_caption(HEVCSEIA53Caption *s, GetBitContext *gb, int size)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static int decode_nal_sei_user_data_registered_itu_t_t35(HEVCSEI *s, GetBitContext *gb, void *logctx, int size)
static int get_bits_left(GetBitContext *gb)
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 all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static int decode_nal_sei_user_data_unregistered(HEVCSEIUnregistered *s, GetBitContext *gb, int size)
static int get_se_golomb_long(GetBitContext *gb)
uint8_t * data
The data buffer.
@ SEI_TYPE_FILM_GRAIN_CHARACTERISTICS
@ SEI_TYPE_DISPLAY_ORIENTATION
@ AV_PICTURE_STRUCTURE_UNKNOWN
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int get_bits_count(const GetBitContext *s)
#define AV_LOG_VERBOSE
Detailed information.
@ SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
@ SEI_TYPE_ACTIVE_PARAMETER_SETS
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
static int decode_nal_sei_active_parameter_sets(HEVCSEI *s, GetBitContext *gb, void *logctx)
static int decode_nal_sei_pic_timing(HEVCSEI *s, GetBitContext *gb, const HEVCParamSets *ps, void *logctx, int size)
int ff_hevc_decode_nal_sei(GetBitContext *gb, void *logctx, HEVCSEI *s, const HEVCParamSets *ps, int type)
static int decode_registered_user_data_dynamic_hdr_plus(HEVCSEIDynamicHDRPlus *s, GetBitContext *gb, int size)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int decode_nal_sei_message(GetBitContext *gb, void *logctx, HEVCSEI *s, const HEVCParamSets *ps, int nal_unit_type)
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
@ SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
static int decode_nal_sei_prefix(GetBitContext *gb, void *logctx, HEVCSEI *s, const HEVCParamSets *ps, int type, int size)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static int decode_nal_sei_mastering_display_info(HEVCSEIMasteringDisplay *s, GetBitContext *gb, int size)
@ HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING
@ AV_PICTURE_STRUCTURE_BOTTOM_FIELD
int ff_parse_a53_cc(AVBufferRef **pbuf, const uint8_t *data, int size)
Parse a data array for ATSC A53 Part 4 Closed Captions and store them in an AVBufferRef.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
@ AV_PICTURE_STRUCTURE_TOP_FIELD
static unsigned int get_bits1(GetBitContext *s)
@ SEI_TYPE_FRAME_PACKING_ARRANGEMENT
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
@ SEI_TYPE_USER_DATA_UNREGISTERED
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
static int decode_nal_sei_timecode(HEVCSEITimeCode *s, GetBitContext *gb)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_WB16 unsigned int_TMPL byte
#define MKBETAG(a, b, c, d)
@ HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING
static int decode_film_grain_characteristics(HEVCSEIFilmGrainCharacteristics *h, GetBitContext *gb)
static void skip_bits1(GetBitContext *s)
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
static int decode_nal_sei_display_orientation(HEVCSEIDisplayOrientation *s, GetBitContext *gb)
size_t size
Size of data in bytes.
static int more_rbsp_data(GetBitContext *gb)
#define i(width, name, range_min, range_max)
static int decode_nal_sei_suffix(GetBitContext *gb, void *logctx, HEVCSEI *s, int type, int size)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
@ SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME
static int decode_nal_sei_alternative_transfer(HEVCSEIAlternativeTransfer *s, GetBitContext *gb, int size)
This struct represents dynamic metadata for color volume transform - application 4 of SMPTE 2094-40:2...
static int decode_nal_sei_content_light_info(HEVCSEIContentLight *s, GetBitContext *gb, int size)
void ff_hevc_reset_sei(HEVCSEI *s)
Reset SEI values that are stored on the Context.
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
@ SEI_TYPE_DECODED_PICTURE_HASH
int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(AVDynamicHDRPlus *s, const uint8_t *data, int size)
Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRPlus).
AVBufferRef * sps_list[HEVC_MAX_SPS_COUNT]
A reference to a data buffer.
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
static int decode_nal_sei_decoded_picture_hash(HEVCSEIPictureHash *s, GetBitContext *gb)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
@ SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO