28 #define UNCHECKED_BITSTREAM_READER 1
69 int buf_size,
void *logctx)
75 int next_avc = p->
is_avc ? 0 : buf_size;
84 for (i = 0; i < buf_size; i++) {
89 nalsize = (nalsize << 8) | buf[i++];
90 if (nalsize <= 0 || nalsize > buf_size - i) {
91 av_log(logctx,
AV_LOG_ERROR,
"AVC-parser: nal size %d remaining %d\n", nalsize, buf_size - i);
94 next_avc = i + nalsize;
102 }
else if (state <= 2) {
109 }
else if (state <= 5) {
110 int nalu_type = buf[i] & 0x1F;
152 return i - (state & 5) - 5 * (state > 7);
161 int list_count, ref_count[2];
176 for (list = 0; list < list_count; list++) {
179 for (index = 0; ; index++) {
182 if (reordering_of_pic_nums_idc < 3)
184 else if (reordering_of_pic_nums_idc > 3) {
186 "illegal reordering_of_pic_nums_idc %d\n",
187 reordering_of_pic_nums_idc);
192 if (index >= ref_count[list]) {
194 "reference count %d overflow\n", index);
213 "illegal memory management control operation %d\n",
247 int buf_index, next_avc;
249 unsigned int slice_type;
250 int state = -1, got_reset = 0;
251 int q264 = buf_size >=4 && !memcmp(
"Q264", buf, 4);
267 next_avc = p->
is_avc ? 0 : buf_size;
270 int src_length, consumed, nalsize = 0;
272 if (buf_index >= next_avc) {
276 next_avc = buf_index + nalsize;
279 if (buf_index >= buf_size)
281 if (buf_index >= next_avc)
284 src_length = next_avc - buf_index;
286 state = buf[buf_index];
287 switch (state & 0x1f) {
298 if (src_length > 1000)
307 buf_index += consumed;
346 "pps_id %u out of range\n", pps_id);
351 "non-existing PPS %u referenced\n", pps_id);
366 "non-existing SPS %u referenced\n", p->
ps.
pps->
sps_id);
446 field_poc[0] = field_poc[1] = INT_MAX;
520 if (field_poc[0] < field_poc[1])
522 else if (field_poc[0] > field_poc[1])
556 av_log(avctx,
AV_LOG_ERROR,
"missing picture in access unit with size %d\n", buf_size);
564 const uint8_t **poutbuf,
int *poutbuf_size,
601 if (p->sei.picture_timing.cpb_removal_delay >= 0) {
602 s->dts_sync_point = p->sei.buffering_period.present;
603 s->dts_ref_dts_delta = p->sei.picture_timing.cpb_removal_delay;
604 s->pts_dts_delta = p->sei.picture_timing.dpb_output_delay;
606 s->dts_sync_point = INT_MIN;
607 s->dts_ref_dts_delta = INT_MIN;
608 s->pts_dts_delta = INT_MIN;
615 if (
s->dts_sync_point >= 0) {
616 int64_t den = avctx->time_base.den * (int64_t)avctx->pkt_timebase.num;
618 int64_t num = avctx->time_base.num * (int64_t)avctx->pkt_timebase.den;
621 p->reference_dts =
s->dts -
av_rescale(
s->dts_ref_dts_delta, num, den);
624 s->dts = p->reference_dts +
av_rescale(
s->dts_ref_dts_delta, num, den);
630 if (
s->dts_sync_point > 0)
631 p->reference_dts =
s->dts;
636 *poutbuf_size = buf_size;
651 if ((state & 0xFFFFFF00) != 0x100)
653 nalu_type = state & 0x1F;
667 while (ptr - 4 > buf && ptr[-5] == 0)
669 return ptr - 4 -
buf;
int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int bit_length)
Decode PPS.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
int recovery_frame_cnt
recovery_frame_cnt
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Memory handling functions.
AVBufferRef * sps_list[MAX_SPS_COUNT]
int last_picture_structure
int frame_packing_arrangement_cancel_flag
is previous arrangement canceled, -1 if never received
int width
Dimensions of the decoded video intended for presentation.
enum AVFieldOrder field_order
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
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 coded_width
Dimensions of the coded video.
Convenience header that includes libavutil's core.
static int find_start_code(const uint8_t *buf, int buf_size, int buf_index, int next_avc)
3: top field, bottom field, in that order
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
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.
int size_bits
Size, in bits, of just the data, excluding the stop bit and any trailing padding. ...
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
unsigned int crop_top
frame_cropping_rect_top_offset
enum AVPictureStructure picture_structure
Indicate whether a picture is coded as a frame, top field or bottom field.
unsigned int crop_left
frame_cropping_rect_left_offset
int frame_num_offset
for POC type 2
static av_cold int end(AVCodecContext *avctx)
unsigned int crop_right
frame_cropping_rect_right_offset
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int ff_h2645_extract_rbsp(const uint8_t *src, int length, H2645NAL *nal, int small_padding)
Extract the raw (unescaped) bitstream.
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 PICT_BOTTOM_FIELD
int redundant_pic_cnt_present
redundant_pic_cnt_present_flag
bitstream reader API header.
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
H.264 common definitions.
H.264 parameter set handling.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
int poc_type
pic_order_cnt_type
int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
Combine the (truncated) bitstream to a complete frame.
int ff_h264_get_profile(const SPS *sps)
Compute profile from profile_idc and constraint_set?_flags.
int weighted_pred
weighted_pred_flag
#define AV_PIX_FMT_YUV444P10
const uint8_t ff_h264_golomb_to_pict_type[5]
MMCOOpcode
Memory management control operation opcode.
int delta_pic_order_always_zero_flag
static char * split(char *message, char delim)
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
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)
#define AV_PIX_FMT_YUV422P9
int prev_poc_msb
poc_msb of the last reference pic for POC type 0
Context for storing H.264 DSP functions.
int ref_frame_count
num_ref_frames
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int(* startcode_find_candidate)(const uint8_t *buf, int size)
Search buf from the start for up to size bytes.
static int get_nalsize(int nal_length_size, const uint8_t *buf, int buf_size, int *buf_index, void *logctx)
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
int ref_idc
H.264 only, nal_ref_idc.
#define AV_PIX_FMT_YUV444P9
AVCodecParser ff_h264_parser
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
int pic_order_present
pic_order_present_flag
static void h264_close(AVCodecParserContext *s)
Libavcodec external API header.
AVBufferRef * pps_list[MAX_PPS_COUNT]
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
SEI_PicStructType pic_struct
main external API structure.
uint8_t * data
The data buffer.
uint32_t state
contains the last few bytes in MSB order
static unsigned int get_bits1(GetBitContext *s)
#define AV_PIX_FMT_YUV420P10
int prev_frame_num
frame_num of the last pic for POC type 1/2
static int h264_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
5: top field, bottom field, top field repeated, in that order
Rational number (pair of numerator and denominator).
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define AV_PIX_FMT_YUV420P9
H264SEIPictureTiming picture_timing
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
H264SEIRecoveryPoint recovery_point
int output_picture_number
Picture number incremented in presentation or output order.
#define AV_PIX_FMT_YUV422P10
int pic_struct_present_flag
int prev_poc_lsb
poc_lsb of the last reference pic for POC type 0
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal api header.
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
H264SEIFramePacking frame_packing
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
#define PARSER_FLAG_COMPLETE_FRAMES
void ff_h264_ps_uninit(H264ParamSets *ps)
Uninit H264 param sets structure.
static av_cold int init(AVCodecParserContext *s)
int bit_depth_luma
bit_depth_luma_minus8 + 8
static int h264_find_frame_end(H264ParseContext *p, const uint8_t *buf, int buf_size, void *logctx)
4: bottom field, top field, in that order
int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int ignore_truncation)
Decode SPS.
int format
The format of the coded data, corresponds to enum AVPixelFormat for video and for enum AVSampleFormat...
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)
int mb_width
pic_width_in_mbs_minus1 + 1
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
int repeat_pict
This field is used for proper frame duration computation in lavf.
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
int prev_frame_num_offset
for POC type 2
static int h264_parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb, void *logctx)
6: bottom field, top field, bottom field repeated, in that order
#define AV_NOPTS_VALUE
Undefined timestamp value.