[MPlayer-dev-eng] dwStart (stream delay in AVI files)
Michael Niedermayer
michaelni at gmx.at
Wed Feb 1 13:42:05 CET 2006
Hi
On Tue, Jan 31, 2006 at 12:51:49AM -0800, Corey Hickey wrote:
> Michael Niedermayer wrote:
> >>>>I _think_ mplayer doesn't properly use the dwStart field in the stream
> >>>>header of AVI files. To reproduce, create a file with 10-second audio delay:
> >>>>
> >>>>mencoder file.avi -ovc copy -oac copy -audio-delay 10 -o delay10.avi
> >>>>
> >>>>MEncoder writes the audio delay in the dwStart field of the audio
> >>>>stream. You can check it with a hex editor or with 'mplayer -v delay10.avi'.
> >>>
> >>>
> >>>MEncoder supports -delay now anyway, you should use that... -audio-delay is
> >>>a hack..
> >>
> >>Are you sure? That seems to be the intended purpose of dwStart,
> >>especially considering that Microsoft's player appears to use it that
> >>way and -audio-delay is the documented way to adjust A-V sync with
> >>mencoder.
> >>
> >>Up to this moment I was thinking of using dwStart to compensate for
> >>video decoding delay (with B-frames), but then I realized it could be
> >>detrimental to remuxing to other containers.
> >
> >
> > which? avi supports dwStart, nut can start at any timestamp too, mpeg-ps/ts
> > is fine too, basically a container which requires that the first packet of
> > every stream has the absolutly identical pts is quite limited
>
> Right, but the approach I was considering was to use dwStart to make a
> video player play the audio stream with a slight delay, thus matching it
> up to the slightly-delayed video frames. Remuxing to a container that
> uses pts would result in the video frames being played back without
> delay and the dwStart-induced audio delay would be erroneous.
>
> Here are simplified playback timing tables of what I'm thinking will
> happen from using dwStart like that. The numbers
>
> original decoding dwStart- remuxed
> file delay adjusted with PTS
> -----------------------------------------
> A1 V1 A1 V1
> A2 V2 A2 V1 A1 V1 A1 V2
> A3 V3 A3 V2 A2 V2 A2 V3
> A4 V4 A4 V3 A3 V3 A3 V4
> V4 A4 V4 A4
wrong!
{A|V}<id><PTS><DTS>
original: (lets say its raw)
A000 A111 A222 A333
V000 V111 V222 V333
decoding delay: (this cannot be stored without either skiping a frame or
dwStart in AVI due to the -1 DTS)
A000 A111 A222 A333
V00-1 V110 V221 V332
decoding delay + skip frame: (stored in AVI)
A000 A111 A222 A333
V110 V221 V332
ignoring decoding delay: (stored in AVI, 1 frame delay wrong)
A000 A111 A222 A333
V010 V121 V232 V343
dwStart style:
A011 A122 A233 A344
V010 V121 V232 V343
all of these remuxed: they stay the same, why in hell should anything change?
you find the pts from the dts by using a AVParser and the dts are known from
avi
[...]
--
Michael
More information about the MPlayer-dev-eng
mailing list