[MPlayer-dev-eng] [PATCH] -oac copy with ac3 sound and lavf ts demuxer issues (Was: Re: [MEncoder-users] Video/Audio asynchronous)

Matthias Hopf mat at mshopf.de
Sat Feb 24 15:58:17 CET 2007

On Feb 20, 07 17:25:50 +0100, Michael Niedermayer wrote:
> > - Why is nBlockAlign, wBitsPerSample not set correctly?
> should be fixed, please test

nBlockAlign at least is, thanks a lot!
wBitsPerSample is not, as codec->bits_per_sample is already 0.

> > - Why is dwRate/dwScale/dwStart/dwLength/dwSuggestedBufferSize wrong?
> >   What are the right values?
> >   I assume codec->frame_size and/or codec->sample_rate are wrong.
> >   lavf gets it right for constant bit rate, but an unknown ac3 stream is
> >   inherrently variable, so a VBR approach is the right thing (TM) to do.
> > 
> > Can anyone with a deeper understanding how demuxing in mplayer actually
> > works comment on my findings?
> without checking i would say mplayer is wrong and the rate/scale from lavf
> is correct, sadly you dont say which values the wrong and correct variables
> actually had so its hard to say for sure ...

With current SVN, audio is detected, but not really played, and supposed
file duration is way off (too long).

I rechecked, and first stumbled over another issue: lavf thinks this
video is 1920x1080 at 59.96fps(!), while mpegts detects 29.976. I called
the lavf calls with -ofps 30000/1001 in order to ignore this for now.

I analyzed the two avi streams, and found the following values in the
headers to differ:

                                   lavf           mpegts
dwTotalFrames                      $19            $27
dwLength                           $19            $27
   - aud AVI Stream Header
dwScale                            $4             $1
dwRate                             $7d            $bb80
dwStart                            $1             $642
dwLength                           $11            $60aa
dwSuggestedBufferSize              $600           $5dc0
dwSampleSize                       0              1
   - aud AVI Stream Format
nChannels                          6              2
wBitsPerSample                     0              $10

Some variables of lavf:
codec->frame_size                  $600
codec->sample_rate                 $bb80

which sounds perfectly sensible to me (1536 samples for 384kbit/s AC3
packets, 48000 Hz).

> note dwSampleSize MUST be 0 for VBR streams

I think I understand *that* part of avi...

         - If the dwSampleSize is 0, then it's VBR stream, so its bitrate
         isn't constant. It means that 1 chunk stores 1 sample, and
         dwRate/dwScale gives the chunks/sec value.

So how can I check the chunk size? One AC3 frame is 1152 in this
case (384kbit/s), but where is this stored?



Matthias Hopf <mhopf at suse.de>      __        __   __
Maxfeldstr. 5 / 90409 Nuernberg   (_   | |  (_   |__          mat at mshopf.de
Phone +49-911-74053-715           __)  |_|  __)  |__  R & D   www.mshopf.de

More information about the MPlayer-dev-eng mailing list