[FFmpeg-devel] [PATCH v1] lavf/mov: Fix timestamp rescale on sidx atom

mypopy at gmail.com mypopy at gmail.com
Thu Aug 15 11:02:23 EEST 2019


On Thu, Aug 15, 2019 at 12:49 PM Jun Li <junli1026 at gmail.com> wrote:
>
> On Thu, Jun 20, 2019 at 2:02 AM Jun Li <junli1026 at gmail.com> wrote:
>
> >
> >
> > On Tue, May 21, 2019 at 1:05 AM Jun Li <junli1026 at gmail.com> wrote:
> >
> >>
> >>
> >> On Thu, May 16, 2019 at 1:00 AM Jun Li <junli1026 at gmail.com> wrote:
> >>
> >>>
> >>>
> >>> On Sun, May 12, 2019 at 7:44 PM Jun Li <junli1026 at gmail.com> wrote:
> >>>
> >>>>
> >>>>
> >>>> On Fri, May 10, 2019 at 7:25 PM Jun Li <junli1026 at gmail.com> wrote:
> >>>>
> >>>>>
> >>>>> On Thu, May 9, 2019 at 2:08 AM Jun Li <junli1026 at gmail.com> wrote:
> >>>>>
> >>>>>> Fix #5090
> >>>>>> Fix the timestamp rescale issue, from sidx timebase to
> >>>>>> stream's timebase.
> >>>>>> ---
> >>>>>>  libavformat/mov.c | 2 +-
> >>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>>>>
> >>>>>> diff --git a/libavformat/mov.c b/libavformat/mov.c
> >>>>>> index 78f692872b..d058855e6c 100644
> >>>>>> --- a/libavformat/mov.c
> >>>>>> +++ b/libavformat/mov.c
> >>>>>> @@ -5017,7 +5017,7 @@ static int mov_read_sidx(MOVContext *c,
> >>>>>> AVIOContext *pb, MOVAtom atom)
> >>>>>>              return AVERROR_PATCHWELCOME;
> >>>>>>          }
> >>>>>>          avio_rb32(pb); // sap_flags
> >>>>>> -        timestamp = av_rescale_q(pts, st->time_base, timescale);
> >>>>>> +        timestamp = av_rescale_q(pts, timescale, st->time_base);
> >>>>>>
> >>>>>>          index = update_frag_index(c, offset);
> >>>>>>          frag_stream_info = get_frag_stream_info(&c->frag_index,
> >>>>>> index, track_id);
> >>>>>> --
> >>>>>> 2.17.1
> >>>>>>
> >>>>>
> >>>>> Ping
> >>>>>
> >>>>
> >>>> This change is for fix the issue of calculating sidx_pts.
> >>>> Sidx box has "earliest_presentation_time", used as pts of  the referent
> >>>> track, sidx also has timescale field.
> >>>> So the operation should convert from sidx's timescale to track's
> >>>> timescale, this patch is for addressing this, as well as fixing #5090.
> >>>>
> >>>> Of course this is based on my understanding, so please correct me if I
> >>>> am wrong. Thanks !
> >>>>
> >>>>
> >>> Ping.
> >>> I believe this is a bug and triggered whenever sidx box's timescale is
> >>> different from track's timescale.
> >>> Created this kind of content and verified that ffplay couldn't play
> >>> while VLC plays well.
> >>> Then I checked VLC's implementation:
> >>>
> >>> https://github.com/videolan/vlc/blob/5609c1b41d6fbca6323103619c6139caf7bc9e6e/modules/demux/mp4/mp4.c#L4735
> >>>
> >>> Hope someone could help to have a review ? Thanks ! :)
> >>>
> >>> Best Regards,
> >>> -Jun
> >>>
> >>>
> >>>> Best Regards,
> >>>> Jun
> >>>>
> >>>
> >> Ping x 3
> >>
> >
> > Ping x 4.
> > I believe this is an obvious bug and happened whenever sidx box's
> > timescale is different from track's timescale.
> > I created this kind of content and verified that ffplay couldn't play
> > while VLC plays well.
> > This is  VLC's implementation:
> >
> > https://github.com/videolan/vlc/blob/5609c1b41d6fbca6323103619c6139caf7bc9e6e/modules/demux/mp4/mp4.c#L4735
> >
>
> Ping x 5
Tested and verified with ffplay/ffprobe, now the sample video DTS is
monotonically increasing without wrap around.


More information about the ffmpeg-devel mailing list