36 #define AVERROR_PS_NOT_FOUND FFERRTAG(0xF8,'?','P','S')
39 1, 1, 1, 2, 2, 3, 3, 2, 3
44 h->recovery_point.recovery_frame_cnt = -1;
46 h->picture_timing.dpb_output_delay = 0;
47 h->picture_timing.cpb_removal_delay = -1;
49 h->picture_timing.present = 0;
50 h->buffering_period.present = 0;
51 h->frame_packing.present = 0;
52 h->display_orientation.present = 0;
56 for (
int i = 0;
i <
h->unregistered.nb_buf_ref;
i++)
58 h->unregistered.nb_buf_ref = 0;
69 if (
sps->nal_hrd_parameters_present_flag ||
70 sps->vcl_hrd_parameters_present_flag) {
74 if (
sps->pic_struct_present_flag) {
75 unsigned int i, num_clock_ts;
85 for (
i = 0;
i < num_clock_ts;
i++) {
88 unsigned int full_timestamp_flag;
89 unsigned int counting_type, cnt_dropped_flag;
93 full_timestamp_flag =
get_bits(&gb, 1);
96 if (cnt_dropped_flag && counting_type > 1 && counting_type < 7)
99 if (full_timestamp_flag) {
105 tc->seconds =
tc->minutes =
tc->hours =
tc->full = 0;
116 if (
sps->time_offset_length > 0)
118 sps->time_offset_length);
123 h->ct_type,
h->pic_struct);
134 int size = (size_bits + 7) / 8;
140 if (
size >
sizeof(
h->payload)) {
146 h->payload_size_bits = size_bits;
166 h->active_format_description =
get_bits(gb, 4);
184 void *logctx,
int size)
186 int country_code, provider_code;
193 if (country_code == 0xFF) {
201 if (country_code != 0xB5) {
203 "Unsupported User Data Registered ITU-T T35 SEI message (country_code = %d)\n",
211 switch (provider_code) {
213 uint32_t user_identifier;
220 switch (user_identifier) {
221 case MKBETAG(
'D',
'T',
'G',
'1'):
223 case MKBETAG(
'G',
'A',
'9',
'4'):
228 "Unsupported User Data Registered ITU-T T35 SEI message (atsc user_identifier = 0x%04x)\n",
236 "Unsupported User Data Registered ITU-T T35 SEI message (provider_code = %d)\n",
245 void *logctx,
int size)
251 if (size < 16 || size >= INT_MAX - 1)
269 h->buf_ref[
h->nb_buf_ref++] = buf_ref;
271 e = sscanf(
user_data + 16,
"x264 - core %d", &build);
272 if (e == 1 && build > 0)
273 h->x264_build = build;
274 if (e == 1 && build == 1 && !strncmp(
user_data+16,
"x264 - core 0000", 16))
285 av_log(logctx,
AV_LOG_ERROR,
"recovery_frame_cnt %u is out of range\n", recovery_frame_cnt);
289 h->recovery_frame_cnt = recovery_frame_cnt;
306 if (sps_id > 31 || !ps->
sps_list[sps_id]) {
308 "non-existing SPS %d referenced in buffering period\n", sps_id);
314 if (
sps->nal_hrd_parameters_present_flag) {
315 for (sched_sel_idx = 0; sched_sel_idx <
sps->cpb_cnt; sched_sel_idx++) {
316 h->initial_cpb_removal_delay[sched_sel_idx] =
322 if (
sps->vcl_hrd_parameters_present_flag) {
323 for (sched_sel_idx = 0; sched_sel_idx <
sps->cpb_cnt; sched_sel_idx++) {
324 h->initial_cpb_removal_delay[sched_sel_idx] =
340 h->present = !
h->arrangement_cancel_flag;
345 h->content_interpretation_type =
get_bits(gb, 6);
349 h->current_frame_is_frame0_flag =
get_bits1(gb);
353 if (!
h->quincunx_sampling_flag &&
h->arrangement_type != 5)
372 h->anticlockwise_rotation =
get_bits(gb, 16);
382 h->green_metadata_type =
get_bits(gb, 8);
384 if (
h->green_metadata_type == 0) {
387 if (
h->period_type == 2)
389 else if (
h->period_type == 3)
392 h->percent_non_zero_macroblocks =
get_bits(gb, 8);
393 h->percent_intra_coded_macroblocks =
get_bits(gb, 8);
394 h->percent_six_tap_filtering =
get_bits(gb, 8);
395 h->percent_alpha_point_deblocking_instance =
get_bits(gb, 8);
397 }
else if (
h->green_metadata_type == 1) {
409 h->preferred_transfer_characteristics =
get_bits(gb, 8);
495 if (
h->arrangement_cancel_flag == 0) {
496 switch (
h->arrangement_type) {
498 if (
h->content_interpretation_type == 2)
499 return "checkerboard_rl";
501 return "checkerboard_lr";
503 if (
h->content_interpretation_type == 2)
504 return "col_interleaved_rl";
506 return "col_interleaved_lr";
508 if (
h->content_interpretation_type == 2)
509 return "row_interleaved_rl";
511 return "row_interleaved_lr";
513 if (
h->content_interpretation_type == 2)
518 if (
h->content_interpretation_type == 2)
523 if (
h->content_interpretation_type == 2)
531 }
else if (
h->arrangement_cancel_flag == 1) {
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.
Libavcodec external API header.
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
static int FUNC() user_data(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawUserData *current)
#define MKBETAG(a, b, c, d)
bitstream reader API header.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_bits_count(const GetBitContext *s)
static void skip_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
AVBufferRef * av_buffer_alloc(buffer_size_t size)
Allocate an AVBuffer of the given size using av_malloc().
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate, or free an array.
H.264 parameter set handling.
#define MAX_LOG2_MAX_FRAME_NUM
#define AVERROR_PS_NOT_FOUND
const char * ff_h264_sei_stereo_mode(const H264SEIFramePacking *h)
Get stereo_mode string from the h264 frame_packing_arrangement.
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
static int decode_unregistered_user_data(H264SEIUnregistered *h, GetBitContext *gb, void *logctx, int size)
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
static int decode_frame_packing_arrangement(H264SEIFramePacking *h, GetBitContext *gb)
static int decode_picture_timing(H264SEIPictureTiming *h, GetBitContext *gb, void *logctx)
static int decode_registered_user_data(H264SEIContext *h, GetBitContext *gb, void *logctx, int size)
static int decode_green_metadata(H264SEIGreenMetaData *h, GetBitContext *gb)
static int decode_registered_user_data_afd(H264SEIAFD *h, GetBitContext *gb, int size)
static int decode_recovery_point(H264SEIRecoveryPoint *h, GetBitContext *gb, void *logctx)
static int decode_registered_user_data_closed_caption(H264SEIA53Caption *h, GetBitContext *gb, void *logctx, int size)
static const uint8_t sei_num_clock_ts_table[9]
static int decode_alternative_transfer(H264SEIAlternativeTransfer *h, GetBitContext *gb)
static int decode_display_orientation(H264SEIDisplayOrientation *h, GetBitContext *gb)
int ff_h264_sei_process_picture_timing(H264SEIPictureTiming *h, const SPS *sps, void *logctx)
Parse the contents of a picture timing message given an active SPS.
static int decode_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
@ H264_SEI_FPA_TYPE_INTERLEAVE_ROW
@ H264_SEI_FPA_TYPE_INTERLEAVE_TEMPORAL
@ H264_SEI_FPA_TYPE_TOP_BOTTOM
@ H264_SEI_FPA_TYPE_CHECKERBOARD
@ H264_SEI_FPA_TYPE_INTERLEAVE_COLUMN
@ H264_SEI_FPA_TYPE_SIDE_BY_SIDE
@ H264_SEI_PIC_STRUCT_FRAME_TRIPLING
8: frame tripling
common internal API header
@ SEI_TYPE_RECOVERY_POINT
@ SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
@ SEI_TYPE_DISPLAY_ORIENTATION
@ SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS
@ SEI_TYPE_FRAME_PACKING_ARRANGEMENT
@ SEI_TYPE_GREEN_METADATA
@ SEI_TYPE_USER_DATA_UNREGISTERED
@ SEI_TYPE_BUFFERING_PERIOD
A reference to a data buffer.
int size
Size of data in bytes.
uint8_t * data
The data buffer.
AVBufferRef * sps_list[MAX_SPS_COUNT]