Go to the documentation of this file.
28 #define UNCHECKED_BITSTREAM_READER 1
72 int buf_index,
int next_avc)
78 return FFMIN(buf_index, buf_size);
82 int buf_size,
void *logctx)
88 int next_avc =
p->is_avc ? 0 : buf_size;
94 if (
p->is_avc && !
p->nal_length_size)
97 for (
i = 0;
i < buf_size;
i++) {
101 for (j = 0; j <
p->nal_length_size; j++)
102 nalsize = (nalsize << 8) | buf[
i++];
103 if (!nalsize || nalsize > buf_size -
i) {
105 "remaining %d\n", nalsize, buf_size -
i);
108 next_avc =
i + nalsize;
113 i +=
p->h264dsp.startcode_find_candidate(buf +
i, next_avc -
i);
116 }
else if (
state <= 2) {
123 }
else if (
state <= 5) {
124 int nalu_type = buf[
i] & 0x1F;
138 unsigned int mb, last_mb =
p->parse_last_mb;
140 p->parse_history[
p->parse_history_count++] = buf[
i];
145 p->parse_last_mb =
mb;
148 i -=
p->parse_history_count - 1;
149 p->parse_history_count = 0;
154 p->parse_history_count = 0;
176 int slice_type_nos =
s->pict_type & 3;
178 int list_count, ref_count[2];
181 if (
p->ps.pps->redundant_pic_cnt_present)
188 slice_type_nos,
p->picture_structure, logctx) < 0)
199 if (reordering_of_pic_nums_idc < 3)
201 else if (reordering_of_pic_nums_idc > 3) {
203 "illegal reordering_of_pic_nums_idc %d\n",
204 reordering_of_pic_nums_idc);
211 "reference count %d overflow\n",
index);
222 &pwt,
p->picture_structure, logctx);
230 "illegal memory management control operation %d\n",
260 const uint8_t *
const buf,
int buf_size)
265 int buf_index, next_avc;
267 unsigned int slice_type;
268 int state = -1, got_reset = 0;
269 int q264 = buf_size >=4 && !memcmp(
"Q264", buf, 4);
279 p->sei.common.frame_packing.arrangement_cancel_flag = -1;
280 p->sei.common.unregistered.x264_build = -1;
290 next_avc =
p->is_avc ? 0 : buf_size;
293 int src_length, consumed, nalsize = 0;
295 if (buf_index >= next_avc) {
296 nalsize =
get_nalsize(
p->nal_length_size, buf, buf_size, &buf_index, avctx);
299 next_avc = buf_index + nalsize;
302 if (buf_index >= buf_size)
304 if (buf_index >= next_avc)
307 src_length = next_avc - buf_index;
309 state = buf[buf_index];
310 switch (
state & 0x1f) {
321 if (src_length > 1000)
330 buf_index += consumed;
353 p->poc.prev_frame_num = 0;
354 p->poc.prev_frame_num_offset = 0;
355 p->poc.prev_poc_msb =
356 p->poc.prev_poc_lsb = 0;
362 if (
p->sei.recovery_point.recovery_frame_cnt >= 0) {
369 "pps_id %u out of range\n", pps_id);
372 if (!
p->ps.pps_list[pps_id]) {
374 "non-existing PPS %u referenced\n", pps_id);
379 p->ps.sps =
p->ps.pps->sps;
383 if (
p->ps.sps->ref_frame_count <= 1 &&
p->ps.pps->ref_count[0] <= 1 &&
s->pict_type ==
AV_PICTURE_TYPE_I)
388 s->coded_width = 16 *
sps->mb_width;
389 s->coded_height = 16 *
sps->mb_height;
390 s->width =
s->coded_width - (
sps->crop_right +
sps->crop_left);
391 s->height =
s->coded_height - (
sps->crop_top +
sps->crop_bottom);
392 if (
s->width <= 0 ||
s->height <= 0) {
393 s->width =
s->coded_width;
394 s->height =
s->coded_height;
397 switch (
sps->bit_depth_luma) {
420 if (
sps->frame_mbs_only_flag) {
432 if (
sps->poc_type == 0) {
435 if (
p->ps.pps->pic_order_present == 1 &&
440 if (
sps->poc_type == 1 &&
441 !
sps->delta_pic_order_always_zero_flag) {
444 if (
p->ps.pps->pic_order_present == 1 &&
451 field_poc[0] = field_poc[1] = INT_MAX;
453 &
p->poc,
p->picture_structure, nal.
ref_idc);
468 p->poc.prev_frame_num = got_reset ? 0 :
p->poc.frame_num;
469 p->poc.prev_frame_num_offset = got_reset ? 0 :
p->poc.frame_num_offset;
472 p->poc.prev_poc_msb =
p->poc.poc_msb;
473 p->poc.prev_poc_lsb =
p->poc.poc_lsb;
475 p->poc.prev_poc_msb = 0;
476 p->poc.prev_poc_lsb =
481 if (
p->sei.picture_timing.present) {
486 p->sei.picture_timing.present = 0;
490 if (
sps->pic_struct_present_flag &&
p->sei.picture_timing.present) {
491 switch (
p->sei.picture_timing.pic_struct) {
512 s->repeat_pict =
p->picture_structure ==
PICT_FRAME ? 1 : 0;
516 s->repeat_pict =
p->picture_structure ==
PICT_FRAME ? 1 : 0;
521 if (
sps->pic_struct_present_flag &&
p->sei.picture_timing.present) {
522 switch (
p->sei.picture_timing.pic_struct) {
536 if (field_poc[0] < field_poc[1])
538 else if (field_poc[0] > field_poc[1])
548 if (
p->poc.frame_num ==
p->last_frame_num &&
551 p->last_picture_structure !=
s->picture_structure) {
559 p->last_picture_structure =
s->picture_structure;
560 p->last_frame_num =
p->poc.frame_num;
562 if (
sps->timing_info_present_flag) {
564 if (
p->sei.common.unregistered.x264_build < 44
U)
567 sps->num_units_in_tick * 2, den, 1 << 30);
579 av_log(avctx,
AV_LOG_ERROR,
"missing picture in access unit with size %d\n", buf_size);
587 const uint8_t **poutbuf,
int *poutbuf_size,
588 const uint8_t *buf,
int buf_size)
599 &
p->ps, &
p->is_avc, &
p->nal_length_size,
625 if (
p->sei.picture_timing.cpb_removal_delay >= 0) {
626 s->dts_sync_point =
p->sei.buffering_period.present;
627 s->dts_ref_dts_delta =
p->sei.picture_timing.cpb_removal_delay;
628 s->pts_dts_delta =
p->sei.picture_timing.dpb_output_delay;
630 s->dts_sync_point = INT_MIN;
631 s->dts_ref_dts_delta = INT_MIN;
632 s->pts_dts_delta = INT_MIN;
639 if (
s->dts_sync_point >= 0) {
654 if (
s->dts_sync_point > 0)
655 p->reference_dts =
s->dts;
660 *poutbuf_size = buf_size;
680 p->last_frame_num = INT_MAX;
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
void ff_h264_ps_uninit(H264ParamSets *ps)
Uninit H264 param sets structure.
static av_cold void h264_close(AVCodecParserContext *s)
@ AV_PICTURE_STRUCTURE_UNKNOWN
unknown
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
@ H264_SEI_PIC_STRUCT_TOP_BOTTOM
3: top field, bottom field, in that order
int ref_idc
H.264 only, nal_ref_idc.
static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb, void *logctx)
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
#define AV_PIX_FMT_YUV420P10
#define PICT_BOTTOM_FIELD
int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, const int *ref_count, int slice_type_nos, H264PredWeightTable *pwt, int picture_structure, void *logctx)
MMCOOpcode
Memory management control operation opcode.
uint32_t state
contains the last few bytes in MSB order
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
int size_bits
Size, in bits, of just the data, excluding the stop bit and any trailing padding.
int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int bit_length)
Decode PPS.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
@ AV_FIELD_TT
Top coded_first, top displayed first.
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
#define AV_PIX_FMT_YUV422P9
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.
const uint8_t ff_h264_golomb_to_pict_type[5]
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
static int parse_nal_units(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t *const buf, int buf_size)
Parse NAL units of found picture and decode some basic information.
static int h264_parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
#define AV_PIX_FMT_YUV444P10
@ AV_PICTURE_STRUCTURE_FRAME
coded as frame
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
int ff_h264_decode_extradata(const uint8_t *data, int size, H264ParamSets *ps, int *is_avc, int *nal_length_size, int err_recognition, void *logctx)
#define AV_PIX_FMT_YUV420P9
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
@ AV_PICTURE_STRUCTURE_BOTTOM_FIELD
coded as bottom field
Rational number (pair of numerator and denominator).
@ AV_PICTURE_STRUCTURE_TOP_FIELD
coded as top field
@ AV_PICTURE_TYPE_I
Intra.
static unsigned int get_bits1(GetBitContext *s)
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
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
#define AV_PIX_FMT_YUV422P10
int level
Encoding level descriptor.
static int h264_find_frame_end(H264ParseContext *p, const uint8_t *buf, int buf_size, void *logctx)
@ H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM
6: bottom field, top field, bottom field repeated, in that order
Context for storing H.264 DSP functions.
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
#define AV_NOPTS_VALUE
Undefined timestamp value.
@ H264_SEI_PIC_STRUCT_BOTTOM_TOP
4: bottom field, top field, in that order
const AVCodecParser ff_h264_parser
int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
Combine the (truncated) bitstream to a complete frame.
@ H264_SEI_PIC_STRUCT_FRAME
0: frame
@ H264_SEI_PIC_STRUCT_FRAME_TRIPLING
8: frame tripling
int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int ignore_truncation)
Decode SPS.
#define PARSER_FLAG_COMPLETE_FRAMES
#define i(width, name, range_min, range_max)
@ H264_SEI_PIC_STRUCT_FRAME_DOUBLING
7: frame doubling
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
int ff_h2645_extract_rbsp(const uint8_t *src, int length, H2645RBSP *rbsp, H2645NAL *nal, int small_padding)
Extract the raw (unescaped) bitstream.
@ AV_FIELD_BB
Bottom coded first, bottom displayed first.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional AV_INPUT_BUFFER_PADDING_SIZE at the end w...
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int ff_h264_parse_ref_count(int *plist_count, int ref_count[2], GetBitContext *gb, const PPS *pps, int slice_type_nos, int picture_structure, void *logctx)
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int last_picture_structure
#define AV_PIX_FMT_YUV444P9
int rbsp_buffer_alloc_size
av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
int ff_h264_init_poc(int pic_field_poc[2], int *pic_poc, const SPS *sps, H264POCContext *pc, int picture_structure, int nal_ref_idc)
int ff_h264_get_profile(const SPS *sps)
Compute profile from profile_idc and constraint_set?_flags.
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
main external API structure.
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
static int find_start_code(const uint8_t *buf, int buf_size, int buf_index, int next_avc)
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
void av_refstruct_replace(void *dstp, const void *src)
Ensure *dstp refers to the same object as src.
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PICTURE_TYPE_P
Predicted.
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
static av_cold int init(AVCodecParserContext *s)
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
@ H264_SEI_PIC_STRUCT_BOTTOM_FIELD
2: bottom field
static int get_nalsize(int nal_length_size, const uint8_t *buf, int buf_size, int *buf_index, void *logctx)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
@ H264_SEI_PIC_STRUCT_TOP_FIELD
1: top field
@ H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP
5: top field, bottom field, top field repeated, in that order