Go to the documentation of this file.
75 s->dts_sync_point = INT_MIN;
76 s->dts_ref_dts_delta = INT_MIN;
77 s->pts_dts_delta = INT_MIN;
100 if (
s->cur_offset + off >=
s->cur_frame_offset[
i] &&
101 (
s->frame_offset <
s->cur_frame_offset[
i] ||
102 (!
s->frame_offset && !
s->next_frame_offset)) &&
104 s->cur_frame_end[
i]){
107 s->dts =
s->cur_frame_dts[
i];
108 s->pts =
s->cur_frame_pts[
i];
109 s->pos =
s->cur_frame_pos[
i];
110 s->offset =
s->next_frame_offset -
s->cur_frame_offset[
i];
113 s->cur_frame_offset[
i] = INT64_MAX;
114 if (
s->cur_offset + off < s->cur_frame_end[
i])
121 uint8_t **poutbuf,
int *poutbuf_size,
122 const uint8_t *buf,
int buf_size,
133 avctx->
codec_id ==
s->parser->codec_ids[1] ||
134 avctx->
codec_id ==
s->parser->codec_ids[2] ||
135 avctx->
codec_id ==
s->parser->codec_ids[3] ||
136 avctx->
codec_id ==
s->parser->codec_ids[4] ||
137 avctx->
codec_id ==
s->parser->codec_ids[5] ||
138 avctx->
codec_id ==
s->parser->codec_ids[6]);
143 s->next_frame_offset =
150 memset(dummy_buf, 0,
sizeof(dummy_buf));
152 }
else if (
s->cur_offset + buf_size !=
s->cur_frame_end[
s->cur_frame_start_index]) {
155 s->cur_frame_start_index =
i;
156 s->cur_frame_offset[
i] =
s->cur_offset;
157 s->cur_frame_end[
i] =
s->cur_offset + buf_size;
158 s->cur_frame_pts[
i] =
pts;
159 s->cur_frame_dts[
i] = dts;
160 s->cur_frame_pos[
i] =
pos;
163 if (
s->fetch_timestamp) {
164 s->fetch_timestamp = 0;
165 s->last_pts =
s->pts;
166 s->last_dts =
s->dts;
167 s->last_pos =
s->pos;
172 poutbuf_size, buf, buf_size);
174 #define FILL(name) if(s->name > 0 && avctx->name <= 0) avctx->name = s->name
188 s->frame_offset =
s->next_frame_offset;
191 s->next_frame_offset =
s->cur_offset +
index;
192 s->fetch_timestamp = 1;
214 const uint8_t **buf,
int *buf_size)
217 ff_dlog(
NULL,
"overread %d, state:%"PRIX32
" next:%d index:%d o_index:%d\n",
220 (*buf)[0], (*buf)[1], (*buf)[2], (*buf)[3]);
227 if (next > *buf_size)
239 *buf_size + pc->
index +
250 pc->
index += *buf_size;
284 for (; next < 0; next++) {
291 ff_dlog(
NULL,
"overread %d, state:%"PRIX32
" next:%d index:%d o_index:%d\n",
294 (*buf)[0], (*buf)[1], (*buf)[2], (*buf)[3]);
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
av_cold void ff_parse_close(AVCodecParserContext *s)
const AVCodecParser * av_parser_iterate(void **opaque)
Iterate over all registered codec parsers.
int overread_index
the index into ParseContext.buffer of the overread bytes
void(* close)(AVCodecParserContext *s)
uint32_t state
contains the last few bytes in MSB order
void ff_fetch_timestamp(AVCodecParserContext *s, int off, int remove, int fuzzy)
Fetch timestamps for a specific byte within the current access unit.
int(* init)(AVCodecParserContext *s)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const FFCodecParser * ffcodecparser(const AVCodecParser *parser)
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
This struct describes the properties of a single codec described by an AVCodecID.
int overread
the number of bytes which where irreversibly read from the next frame
#define av_assert0(cond)
assert() equivalent, that is always enabled.
enum AVCodecID codec_ids[7]
@ AV_PICTURE_TYPE_I
Intra.
AVCodecID
Identify the syntax and semantics of the bitstream.
#define i(width, name, range_min, range_max)
#define AV_NOPTS_VALUE
Undefined timestamp value.
int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
Combine the (truncated) bitstream to a complete frame.
int(* parse)(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
#define AV_CODEC_PROP_ENHANCEMENT
Video codec contains enhancement information meant to be applied to other existing frames,...
#define AV_INPUT_BUFFER_PADDING_SIZE
main external API structure.
#define PARSER_FLAG_FETCHED_OFFSET
Set if the parser has a valid file offset.
uint64_t state64
contains the last 8 bytes in MSB order
enum AVMediaType codec_type
int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int64_t pts, int64_t dts, int64_t pos)
Parse a packet.
av_cold AVCodecParserContext * av_parser_init(enum AVCodecID codec_id)
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
av_cold void av_parser_close(AVCodecParserContext *s)