70 ret = ffparser->
init(
s);
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]);
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define PARSER_FLAG_FETCHED_OFFSET
Set if the parser has a valid file offset.
#define i(width, name, range_min, range_max)
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
AVCodecID
Identify the syntax and semantics of the bitstream.
#define AV_CODEC_PROP_ENHANCEMENT
Video codec contains enhancement information meant to be applied to other existing frames,...
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
av_cold AVCodecParserContext * av_parser_init(enum AVCodecID codec_id)
av_cold void av_parser_close(AVCodecParserContext *s)
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.
const AVCodecParser * av_parser_iterate(void **opaque)
Iterate over all registered codec parsers.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
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.
@ AV_PICTURE_TYPE_I
Intra.
#define AV_NOPTS_VALUE
Undefined timestamp value.
Macro definitions for various function/variable attributes.
Memory handling functions.
av_cold void ff_parse_close(AVCodecParserContext *s)
int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
Combine the (truncated) bitstream to a complete frame.
void ff_fetch_timestamp(AVCodecParserContext *s, int off, int remove, int fuzzy)
Fetch timestamps for a specific byte within the current access unit.
static const FFCodecParser * ffcodecparser(const AVCodecParser *parser)
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
enum AVMediaType codec_type
This struct describes the properties of a single codec described by an AVCodecID.
enum AVCodecID codec_ids[7]
int(* init)(AVCodecParserContext *s)
void(* close)(AVCodecParserContext *s)
int(* parse)(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
int overread_index
the index into ParseContext.buffer of the overread bytes
uint32_t state
contains the last few bytes in MSB order
uint64_t state64
contains the last 8 bytes in MSB order
int overread
the number of bytes which where irreversibly read from the next frame