[FFmpeg-devel] [PATCH 4/4] lavf/mov: Add support for edit list parsing.

Sasi Inguva isasi at google.com
Sun Aug 28 01:30:24 EEST 2016


On Fri, Aug 26, 2016 at 5:55 PM, Michael Niedermayer <michael at niedermayer.cc
> wrote:

> On Fri, Aug 26, 2016 at 12:49:19PM -0700, Sasi Inguva wrote:
> > I think there is some bug in mp3 decoder which is making skip
> > samples -1431655766 for ~/tickets/5528/fire.mp3 . For now I have removed
> > the assert from the 3rd commit.
> > For the file one.mov , I think the audio has edit list with start time
> > correspending to the second sample - (which should be media time 1024 if
> I
> > guess correctly). This indicates that the first sample be used for
> encoder
> > delay.
> >  Previously without edit  list parsing , we used to offset the start_dts
> by
> > -1024 to make the second sample timestamp start from zero.
> >              sc->time_offset = start_time - empty_duration;
> > -            current_dts = -sc->time_offset;
> >              if (sc->ctts_count>0 && sc->stts_count>0 &&
> >
> > But now edit list parsing handles the rebasing of timestamps to zero,
> > because it will  assign increasing timestamps  starting from zero, to
> > samples present in the edit list.
>
> > Because the first sample is not in the
> > edit list, we mark it as DISCARD, which flag av_decode_audio4 will look
> at
> > and decode-and-discard that frame. So it wouldn't matter what the first
> > sample timestamp should be assigned because it is anyway discarded after
> > decode.
>
> current applications using libavformat have no knowledge of the
> discard flag you can add the DISCARD flag, you can set it on packets but
> applications written or built for libavformat 57 dont have to know
> this flag and can treat the packets like any other packet.
>

Yes. they can treat the packet like any other packet. They don't have to
know about the discard flag.

Adding this feature without a major version bump requires things to
> still work reasonable with the old semantics that apps are build
> around. That should be possible unless iam missing something


As I have pointed out earlier this code will change the timestamps of the
packets. In the case of multiple edit lists, the code will also repeat some
packets, and might make the timestamps non-monotonous. I don't know if the
last behavior is not  an acceptable expectation from av_read_frame.
However as I've pointed out, we are already showing the wrong packets for
videos with multiple edit lists by not parsing the edit lists currently,
which will introduce AVSync issues. So this patch wont make things any
worse for those cases in my view.

I've tested remuxing (-c copy) the MOV files with edit lists to other
containers. I see that ffmpeg actually modifies DTS to be monotonous in
case of non monotonic DTS
http://git.videolan.org/?p=ffmpeg.git;a=blob;f=ffmpeg.c;h=bad311d57561e8ce2e790d733ae0fc81809ce585;hb=HEAD#l729
 , so the remuxing operation never fails at least.


>
> >
> > I am sure when you do ./ffprobe -show_frames -print_format compact
> one.mov
> > , you won't get the first audio sample at all and second audio sample
> will
> > start from zero timestamp. If I can get a link to the file, I can get a
> > deeper look but I am almost sure that this is what is happening.
>
> heres a direct link
> http://trac.ffmpeg.org/raw-attachment/ticket/5528/fire.mp3
>
> [...]
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> It is dangerous to be right in matters on which the established authorities
> are wrong. -- Voltaire
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>


More information about the ffmpeg-devel mailing list