[FFmpeg-devel] [PATCH] Only using st->parser->pos when doing repacking in the parser.

Michael Niedermayer michaelni at gmx.at
Tue Apr 26 18:52:11 CEST 2011


On Mon, Apr 25, 2011 at 11:41:54PM +0200, Reimar Döffinger wrote:
> On 25 Apr 2011, at 22:56, Michael Niedermayer <michaelni at gmx.at> wrote:
> > On Mon, Apr 25, 2011 at 12:34:12AM +0200, Reimar Döffinger wrote:
> >> On Sun, Apr 24, 2011 at 11:50:15PM +0200, Reimar Döffinger wrote:
> >>> 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
> >> 
> >> Doesn't work, causes the pos to be too far ahead for
> >> DNXHD.
> > 
> > why dont you use st->parser->pos / pkt->pos in the
> > av_add_index_entry() call ?
> 
> That will still leave pkt->pos as complete nonsense afterwards

> and for cases where the parser adds a delay (as the dnxhd case) it would put the frame _after_ the keyframe into the index.

are the timestamps correct for this case?
because if they are also delayed by 1 and incorrect the problem might
be elsewhere

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Everything should be made as simple as possible, but not simpler.
-- Albert Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110426/bea4a0a2/attachment.asc>


More information about the ffmpeg-devel mailing list