[MPlayer-dev-eng] dwStart (stream delay in AVI files)
Corey Hickey
bugfood-ml at fatooh.org
Wed Feb 1 22:44:55 CET 2006
Michael Niedermayer wrote:
> 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
I guess I was assuming that the remuxing program wouldn't know about the
decoding delay and would assign video PTS starting at 0 rather than at 1.
dwStart style, remuxed (incorrect; how I thought it was):
A011 A122 A233 A344
V00-1 V110 V221 V332
...or maybe I'm way off-base again and don't even understand how I'm
wrong. I don't know -- I'm still fumbling through all this, without
knowing anything beforehand.
-Corey
More information about the MPlayer-dev-eng
mailing list