Go to the documentation of this file.
35 #define AVERROR_PS_NOT_FOUND FFERRTAG(0xF8,'?','P','S')
38 1, 1, 1, 2, 2, 3, 3, 2, 3
43 h->recovery_point.recovery_frame_cnt = -1;
45 h->picture_timing.dpb_output_delay = 0;
46 h->picture_timing.cpb_removal_delay = -1;
48 h->picture_timing.present = 0;
49 h->buffering_period.present = 0;
50 h->frame_packing.present = 0;
51 h->display_orientation.present = 0;
72 if (
sps->nal_hrd_parameters_present_flag ||
73 sps->vcl_hrd_parameters_present_flag) {
77 if (
sps->pic_struct_present_flag) {
78 unsigned int i, num_clock_ts;
88 for (
i = 0;
i < num_clock_ts;
i++) {
91 unsigned int full_timestamp_flag;
92 unsigned int counting_type, cnt_dropped_flag;
96 full_timestamp_flag =
get_bits(gb, 1);
99 if (cnt_dropped_flag && counting_type > 1 && counting_type < 7)
102 if (full_timestamp_flag) {
108 tc->seconds =
tc->minutes =
tc->hours =
tc->full = 0;
119 if (
sps->time_offset_length > 0)
121 sps->time_offset_length);
126 h->ct_type,
h->pic_struct);
147 h->active_format_description =
get_bits(gb, 4);
159 int user_data_type_code;
165 user_data_type_code =
get_bits(gb, 8);
166 if (user_data_type_code == 0x3) {
176 if (cc_count &&
size >= cc_count * 3) {
177 int old_size =
h->buf_ref ?
h->buf_ref->size : 0;
178 const uint64_t new_size = (old_size + cc_count
182 if (new_size > INT_MAX)
191 for (
i = 0;
i < cc_count;
i++) {
192 h->buf_ref->data[old_size++] =
get_bits(gb, 8);
193 h->buf_ref->data[old_size++] =
get_bits(gb, 8);
194 h->buf_ref->data[old_size++] =
get_bits(gb, 8);
210 void *logctx,
int size)
212 uint32_t country_code;
213 uint32_t user_identifier;
220 if (country_code == 0xFF) {
230 switch (user_identifier) {
231 case MKBETAG(
'D',
'T',
'G',
'1'):
233 case MKBETAG(
'G',
'A',
'9',
'4'):
245 void *logctx,
int size)
250 if (size < 16 || size >= INT_MAX - 16)
257 for (
i = 0;
i <
size + 16;
i++)
261 e = sscanf(
user_data + 16,
"x264 - core %d", &build);
262 if (e == 1 && build > 0)
263 h->x264_build = build;
264 if (e == 1 && build == 1 && !strncmp(
user_data+16,
"x264 - core 0000", 16))
276 av_log(logctx,
AV_LOG_ERROR,
"recovery_frame_cnt %u is out of range\n", recovery_frame_cnt);
280 h->recovery_frame_cnt = recovery_frame_cnt;
297 if (sps_id > 31 || !ps->
sps_list[sps_id]) {
299 "non-existing SPS %d referenced in buffering period\n", sps_id);
305 if (
sps->nal_hrd_parameters_present_flag) {
306 for (sched_sel_idx = 0; sched_sel_idx <
sps->cpb_cnt; sched_sel_idx++) {
307 h->initial_cpb_removal_delay[sched_sel_idx] =
313 if (
sps->vcl_hrd_parameters_present_flag) {
314 for (sched_sel_idx = 0; sched_sel_idx <
sps->cpb_cnt; sched_sel_idx++) {
315 h->initial_cpb_removal_delay[sched_sel_idx] =
331 h->present = !
h->arrangement_cancel_flag;
336 h->content_interpretation_type =
get_bits(gb, 6);
340 h->current_frame_is_frame0_flag =
get_bits1(gb);
344 if (!
h->quincunx_sampling_flag &&
h->arrangement_type != 5)
363 h->anticlockwise_rotation =
get_bits(gb, 16);
373 h->green_metadata_type =
get_bits(gb, 8);
375 if (
h->green_metadata_type == 0) {
378 if (
h->period_type == 2)
380 else if (
h->period_type == 3)
383 h->percent_non_zero_macroblocks =
get_bits(gb, 8);
384 h->percent_intra_coded_macroblocks =
get_bits(gb, 8);
385 h->percent_six_tap_filtering =
get_bits(gb, 8);
386 h->percent_alpha_point_deblocking_instance =
get_bits(gb, 8);
388 }
else if (
h->green_metadata_type == 1) {
400 h->preferred_transfer_characteristics =
get_bits(gb, 8);
481 if (
h->arrangement_cancel_flag == 0) {
482 switch (
h->arrangement_type) {
484 if (
h->content_interpretation_type == 2)
485 return "checkerboard_rl";
487 return "checkerboard_lr";
489 if (
h->content_interpretation_type == 2)
490 return "col_interleaved_rl";
492 return "col_interleaved_lr";
494 if (
h->content_interpretation_type == 2)
495 return "row_interleaved_rl";
497 return "row_interleaved_lr";
499 if (
h->content_interpretation_type == 2)
504 if (
h->content_interpretation_type == 2)
509 if (
h->content_interpretation_type == 2)
517 }
else if (
h->arrangement_cancel_flag == 1) {
@ H264_SEI_TYPE_BUFFERING_PERIOD
buffering period (H.264, D.1.1)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AVERROR_PS_NOT_FOUND
@ H264_SEI_TYPE_GREEN_METADATA
GreenMPEG information.
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
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
int av_buffer_realloc(AVBufferRef **pbuf, int size)
Reallocate a given buffer.
uint8_t * data
The data buffer.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
@ H264_SEI_TYPE_RECOVERY_POINT
recovery point (frame # to decoder sync)
static int get_bits_count(const GetBitContext *s)
@ H264_SEI_FPA_TYPE_CHECKERBOARD
@ H264_SEI_TYPE_USER_DATA_REGISTERED
registered user data as specified by Rec. ITU-T T.35
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static const uint8_t sei_num_clock_ts_table[9]
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
static int decode_recovery_point(H264SEIRecoveryPoint *h, GetBitContext *gb, void *logctx)
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_picture_timing(H264SEIPictureTiming *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
@ H264_SEI_FPA_TYPE_SIDE_BY_SIDE
@ H264_SEI_FPA_TYPE_INTERLEAVE_TEMPORAL
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ H264_SEI_FPA_TYPE_TOP_BOTTOM
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
AVBufferRef * sps_list[MAX_SPS_COUNT]
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
static int decode_registered_user_data_closed_caption(H264SEIA53Caption *h, GetBitContext *gb, void *logctx, int size)
static unsigned int get_bits1(GetBitContext *s)
const char * ff_h264_sei_stereo_mode(const H264SEIFramePacking *h)
Get stereo_mode string from the h264 frame_packing_arrangement.
#define MKBETAG(a, b, c, d)
static int decode_unregistered_user_data(H264SEIUnregistered *h, GetBitContext *gb, void *logctx, int size)
static int decode_registered_user_data(H264SEIContext *h, GetBitContext *gb, void *logctx, int size)
#define MAX_LOG2_MAX_FRAME_NUM
@ H264_SEI_FPA_TYPE_INTERLEAVE_COLUMN
@ H264_SEI_TYPE_USER_DATA_UNREGISTERED
unregistered user data
@ H264_SEI_TYPE_FRAME_PACKING
frame packing arrangement
static void skip_bits1(GetBitContext *s)
static int decode_green_metadata(H264SEIGreenMetaData *h, GetBitContext *gb)
static int decode_alternative_transfer(H264SEIAlternativeTransfer *h, GetBitContext *gb)
@ H264_SEI_PIC_STRUCT_FRAME_TRIPLING
8: frame tripling
#define i(width, name, range_min, range_max)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
@ H264_SEI_FPA_TYPE_INTERLEAVE_ROW
@ H264_SEI_TYPE_DISPLAY_ORIENTATION
display orientation
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
static const uint8_t * align_get_bits(GetBitContext *s)
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
static int decode_frame_packing_arrangement(H264SEIFramePacking *h, GetBitContext *gb)
@ H264_SEI_TYPE_PIC_TIMING
picture timing
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_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
static int decode_registered_user_data_afd(H264SEIAFD *h, GetBitContext *gb, int size)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int decode_display_orientation(H264SEIDisplayOrientation *h, GetBitContext *gb)
const char const char AVS_ApplyFunc void * user_data
@ H264_SEI_TYPE_ALTERNATIVE_TRANSFER
alternative transfer