[FFmpeg-devel] [PATCH] more mov edl fixes
Baptiste Coudurier
baptiste.coudurier
Mon Mar 16 18:15:32 CET 2009
Hi Reimar,
On 3/16/2009 6:49 AM, Reimar D?ffinger wrote:
> Hello,
> attached patch fixes sync of
> http://samples.mplayerhq.hu/mov/weirdedl.mp4 (subtitles are supposed to
> be exactly in sync, the audio is supposed to be delayed by exactly 3
> seconds compared to how it plays now).
> Two issues:
> 1) it uses an "fillup" edl entry with time == -1 (implemented by the
> second chunk of the patch).
> 2) edl time values are relative to container, not track rate,
> implemented in an ugly way by the first chunk.
>
>
> Index: libavformat/mov.c
> ===================================================================
> --- libavformat/mov.c (revision 18004)
> +++ libavformat/mov.c (working copy)
> @@ -1246,7 +1246,7 @@
> /* adjust first dts according to edit list */
> if (sc->time_offset) {
> assert(sc->time_offset % sc->time_rate == 0);
> - current_dts = - (sc->time_offset / sc->time_rate);
> + current_dts = - ((int64_t)sc->time_offset * sc->time_scale / mov->time_scale / sc->time_rate);
> }
>
> /* only use old uncompressed audio chunk demuxing when stts specifies it */
> @@ -1741,12 +1741,12 @@
>
> for(i=0; i<edit_count; i++){
> int time;
> - get_be32(pb); /* Track duration */
> + int duration = get_be32(pb); /* Track duration */
> time = get_be32(pb); /* Media time */
> get_be32(pb); /* Media rate */
> - if (i == 0 && time != -1) {
> - sc->time_offset = time;
> - sc->time_rate = av_gcd(sc->time_rate, time);
> + if (i == 0) {
> + sc->time_offset = time != -1 ? time : -duration;
> + sc->time_rate = av_gcd(sc->time_rate, FFABS(sc->time_offset));
> }
> }
I think you can rescale here, using av_rescale. Values are available.
--
Baptiste COUDURIER GnuPG Key Id: 0x5C1ABAAA
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
checking for life_signs in -lkenny... no
FFmpeg maintainer http://www.ffmpeg.org
More information about the ffmpeg-devel
mailing list