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;
155 return i - (state & 5);
164 int list_count, ref_count[2];
179 for (list = 0; list < list_count; list++) {
182 for (index = 0; ; index++) {
185 if (reordering_of_pic_nums_idc < 3)
187 else if (reordering_of_pic_nums_idc > 3) {
189 "illegal reordering_of_pic_nums_idc %d\n",
190 reordering_of_pic_nums_idc);
195 if (index >= ref_count[list]) {
197 "reference count %d overflow\n", index);
216 "illegal memory management control operation %d\n",
246 const uint8_t *
const buf,
int buf_size)
251 int buf_index, next_avc;
253 unsigned int slice_type;
254 int state = -1, got_reset = 0;
255 int q264 = buf_size >=4 && !memcmp(
"Q264", buf, 4);
275 next_avc = p->
is_avc ? 0 : buf_size;
278 int src_length, consumed, nalsize = 0;
280 if (buf_index >= next_avc) {
284 next_avc = buf_index + nalsize;
287 if (buf_index >= buf_size)
289 if (buf_index >= next_avc)
292 src_length = next_avc - buf_index;
294 state = buf[buf_index];
295 switch (state & 0x1f) {
306 if (src_length > 1000)
315 buf_index += consumed;
354 "pps_id %u out of range\n", pps_id);
359 "non-existing PPS %u referenced\n", pps_id);
442 field_poc[0] = field_poc[1] = INT_MAX;
527 if (field_poc[0] < field_poc[1])
529 else if (field_poc[0] > field_poc[1])
563 av_log(avctx,
AV_LOG_ERROR,
"missing picture in access unit with size %d\n", buf_size);
571 const uint8_t **poutbuf,
int *poutbuf_size,
572 const uint8_t *buf,
int buf_size)
643 *poutbuf_size = buf_size;
648 const uint8_t *buf,
int buf_size)
653 const uint8_t *ptr = buf, *end = buf + buf_size;
658 if ((state & 0xFFFFFF00) != 0x100)
660 nalu_type = state & 0x1F;
674 while (ptr - 4 > buf && ptr[-5] == 0)
676 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.
int last_picture_structure
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)
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...
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
int dts_ref_dts_delta
Offset of the current timestamp against last timestamp sync point in units of AVCodecContext.time_base.
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...
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.
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.
4: bottom field, top field, in that order
unsigned int crop_left
frame_cropping_rect_left_offset
int frame_num_offset
for POC type 2
unsigned int crop_right
frame_cropping_rect_right_offset
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
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.
int(* startcode_find_candidate)(const uint8_t *buf, int size)
Search buf from the start for up to size bytes.
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
H.264 common definitions.
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
static int get_bits_left(GetBitContext *gb)
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 present
Buffering period SEI flag.
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
H264_SEI_PicStructType pic_struct
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.
static int get_nalsize(int nal_length_size, const uint8_t *buf, int buf_size, int *buf_index, void *logctx)
int cpb_removal_delay
cpb_removal_delay in picture timing SEI message, see H.264 C.1.2
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)
int pts_dts_delta
Presentation delay of current frame in units of AVCodecContext.time_base.
5: top field, bottom field, top field repeated, in that order
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.
main external API structure.
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
uint8_t * data
The data buffer.
uint32_t state
contains the last few bytes in MSB order
int rbsp_buffer_alloc_size
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)
Rational number (pair of numerator and denominator).
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
H264SEIBufferingPeriod buffering_period
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
#define AV_PIX_FMT_YUV420P9
H264SEIPictureTiming picture_timing
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
H264SEIRecoveryPoint recovery_point
3: top field, bottom field, in that order
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 dpb_output_delay
dpb_output_delay in picture timing SEI message, see H.264 C.2.2
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)
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)
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
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
int ff_h2645_extract_rbsp(const uint8_t *src, int length, H2645RBSP *rbsp, H2645NAL *nal, int small_padding)
Extract the raw (unescaped) bitstream.
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
int arrangement_cancel_flag
is previous arrangement canceled, -1 if never received
int dts_sync_point
Synchronization point for start of timestamp generation.
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.