[FFmpeg-devel] [PATCH] Only using st->parser->pos when doing repacking in the parser.
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Sun Apr 24 23:50:15 CEST 2011
On Sun, Apr 24, 2011 at 11:28:42PM +0200, Michael Niedermayer wrote:
> On Sun, Apr 24, 2011 at 06:17:14PM +0200, Reimar Döffinger wrote:
> > ---
> > libavformat/utils.c | 6 +++++-
> > 1 files changed, 5 insertions(+), 1 deletions(-)
> >
> > diff --git a/libavformat/utils.c b/libavformat/utils.c
> > index e7ce911..d2b8fc2 100644
> > --- a/libavformat/utils.c
> > +++ b/libavformat/utils.c
> > @@ -1069,7 +1069,11 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
> > pkt->stream_index = st->index;
> > pkt->pts = st->parser->pts;
> > pkt->dts = st->parser->dts;
> > - pkt->pos = st->parser->pos;
> > + // When not repacking, using parser pos can at best break
> > + // things since parsers are not designed to handle the
> > + // case where current packet pos + size < next packet pos
> > + if (st->needs_parsing == AVSTREAM_PARSE_FULL)
> > + pkt->pos = st->parser->pos;
>
> i think this should also check for AVSTREAM_PARSE_TIMESTAMPS
Hm, I think it might make most sense to check for
st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES
However the whole AVSTREAM_PARSE_* system doesn't make
much sense to me, the difference between
AVSTREAM_PARSE_FULL and AVSTREAM_PARSE_TIMESTAMPS
isn't exactly clear to me.
AVSTREAM_PARSE_TIMESTAMPS actually seems to do _more_,
but that makes the AVSTREAM_PARSE_FULL rather badly chosen...
More information about the ffmpeg-devel
mailing list