[MPlayer-G2-dev] Recommendations for DEMUXER layer
D Richard Felker III
dalias at aerifal.cx
Mon Dec 29 22:07:19 CET 2003
On Mon, Dec 29, 2003 at 09:04:05PM +0100, Arpi wrote:
> Hi,
>
> > > agree, but you're wrong.
> > > AVI demuxer (we're talking about g1, as g2 avi has no seeking yet)
> > > does seek to frame boundaries, using packet size of nBlockAlign.
> > > although for some codec/encoders, it's set to 1, so it can seek to
> > > any position. most common case is cbr mp3, where it used to be 1.
> >
> > My idea was for the demuxer to always seek only to the beginning of a
> > chunk -- or are encoded audio frames sometimes split across chunks?!
> > :(
>
> its possible.
> also possible (do you want sample files?) tat the whole audio of
> a whole film is stored in a _single_, ~100mb chunk. what a mess!
OK, thanks for making it that blatently clear that my idea sux. :)
> but it's quite usual that 10 sec (or even more) of audio is stored
> together in a single chunk, containing many (100+) frames of mp3 or ac3.
> it's lame to burst-decode it any time you seek in the file...
I was thinking of burst-frame, not necessarily burst-decode. But
that's lame too if there can be so much...
> lets forget about avi chunks, its' an internal problem of the avi
> demuxer. the avi header contains the audio block size, which is the
> elementary size of independent, aligned audio blocks. you want those
> blocks, not the raw chunks. believe me...
OK, fair enough.
> > > anywya the pts is still exact, as pts is calculated by samplerate
> > > (drRate/dwScale) multiplied by block (nBlockAlign size!) number.
> > > so, for AVI files this is not an issue. anywya there may be formats
> > > where it can be.
> >
> > Well, Suppose you want to seek to pts X in a file, and you do so by
> > this method. But, the resulting byte position happens to be 10 bytes
> > after the start of the audio frame. So you lose this whole frame, and
> > begin framing/decoding at the next one, which is maybe 1000 bytes
> > later. This seems bad for perfect a/v sync. IMO it would be better for
> > the demuxer to seek to a point where it knows valid frames begin (if
> > this is always possible) and let the framer pick the exact frame to
> > start using.
>
> go and rtfs g1's avi demuxer
> it does:
> 1. find vidoe frame we want to seek to
> 2. find nearest video keyframe
> 3. find audio block boundary right at or behind the keyframe selected at 2.
> 4. find the chunk containing that audio block
> 5. if position from 4. is bellow pos from 2., then find how many video
> frames you will read from stream before the keyframe, set skip_video_frames
> 6. skip N audio blocks from the audio chunk, to get to the position
> selected at 3.
> 7. calculate teh time difference between start of that audio block and
> the keyframe, put the value to audio_delay to compensate delay.
>
> yes its not easy, this is why i spent so much time on that mess.
I did RTFS it... :( That's why I was hoping we might be able to
simplify the design for G2.
Rich
More information about the MPlayer-G2-dev
mailing list