70 #if FF_API_CONVERGENCE_DURATION
72 s->convergence_duration = 0;
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,
123 int64_t
pts, int64_t dts, int64_t
pos)
132 avctx->
codec_id ==
s->parser->codec_ids[1] ||
133 avctx->
codec_id ==
s->parser->codec_ids[2] ||
134 avctx->
codec_id ==
s->parser->codec_ids[3] ||
135 avctx->
codec_id ==
s->parser->codec_ids[4]);
138 s->next_frame_offset =
145 memset(dummy_buf, 0,
sizeof(dummy_buf));
147 }
else if (
s->cur_offset + buf_size !=
s->cur_frame_end[
s->cur_frame_start_index]) {
150 s->cur_frame_start_index =
i;
151 s->cur_frame_offset[
i] =
s->cur_offset;
152 s->cur_frame_end[
i] =
s->cur_offset + buf_size;
153 s->cur_frame_pts[
i] =
pts;
154 s->cur_frame_dts[
i] = dts;
155 s->cur_frame_pos[
i] =
pos;
158 if (
s->fetch_timestamp) {
159 s->fetch_timestamp = 0;
160 s->last_pts =
s->pts;
161 s->last_dts =
s->dts;
162 s->last_pos =
s->pos;
166 index =
s->parser->parser_parse(
s, avctx, (
const uint8_t **) poutbuf,
167 poutbuf_size, buf, buf_size);
169 #define FILL(name) if(s->name > 0 && avctx->name <= 0) avctx->name = s->name
177 s->frame_offset =
s->next_frame_offset;
180 s->next_frame_offset =
s->cur_offset +
index;
181 s->fetch_timestamp = 1;
192 #if FF_API_PARSER_CHANGE
194 uint8_t **poutbuf,
int *poutbuf_size,
195 const uint8_t *buf,
int buf_size,
int keyframe)
197 if (
s &&
s->parser->split) {
200 int i =
s->parser->split(avctx, buf, buf_size);
208 *poutbuf_size = buf_size;
213 *poutbuf_size =
size;
231 if (
s->parser->parser_close)
232 s->parser->parser_close(
s);
239 const uint8_t **buf,
int *buf_size)
242 ff_dlog(
NULL,
"overread %d, state:%"PRIX32
" next:%d index:%d o_index:%d\n",
245 (*buf)[0], (*buf)[1], (*buf)[2], (*buf)[3]);
252 if (next > *buf_size)
264 *buf_size + pc->
index +
274 pc->
index += *buf_size;
307 for (; next < 0; next++) {
314 ff_dlog(
NULL,
"overread %d, state:%"PRIX32
" next:%d index:%d o_index:%d\n",
317 (*buf)[0], (*buf)[1], (*buf)[2], (*buf)[3]);
333 const uint8_t *ptr = buf, *end = buf + buf_size;
338 return ptr - 4 - buf;
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 AV_CODEC_FLAG2_LOCAL_HEADER
Place global headers at every keyframe instead of in extradata.
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
AVCodecParserContext * av_parser_init(int codec_id)
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.
int av_parser_change(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
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.
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
common internal API header
#define FF_DISABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Memory handling functions.
int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
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.
void ff_parse_close(AVCodecParserContext *s)
main external API structure.
int flags2
AV_CODEC_FLAG2_*.
enum AVMediaType codec_type
int flags
AV_CODEC_FLAG_*.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int(* parser_init)(AVCodecParserContext *s)
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