[MPlayer-dev-eng] Re: [MPlayer-users] Re: lavc-Options for *BEST* quality?

Michael Niedermayer michaelni at gmx.at
Wed Feb 5 00:00:09 CET 2003


Hi

On Tuesday 04 February 2003 17:30, D Richard Felker III wrote:
[...]
> > > In any case, even if the savings in overhead are only 2-4 megs, I
> > > think doing vorbis-in-avi would be much better than ogm just for the
> > > sake of having an index.
> >
> > Several people tried to do Vorbis-in-AVI and failed. I'm pretty hopeful
> > that Matroska will come along in the not so far future so that we'll
> > finally have a rather feature-rich container format... And not that old
> > and totally outdated AVI.
>
> I don't want a "feature-rich" container format. I want something that
> handles vbr audio properly, that has an index, that's recoverable
> without the index (perhaps even somewhat seekable), and that supports
> subtitle streams. I don't know too much about Matroska, but MCF has
> all kindsa idiotic nonsense about menus and tags and its own idea of
> how codec plugins should work and other crap that doesn't belong in a
> movie file and that just wastes space and delays implementation so
> that we never get around to having a working standard. *sigh* Also it
> seems both these projects are led by Windows kids who think DShow is
> the coolest thing and probably have no idea about the proper way to
> design a media container.
yes, i have the same feeling, i looked at the MCF spec a few month ago and it 
was a total joke, far worse then AVI, IIRC the format was completely 
intolerant to errors, so if a single bit is changed the demuxer would detect 
a crc failure and drop one or more frames, AFAIK this is done because DShow 
codecs lock up if they get feeded with damaged data, a inserted or deleted 
byte will allso destroy the whole file IIRC

IMHO a new container format wouldnt be bad idea, as it seems all current 
formats do have some dissadvantages, even though it is perhaps not worth it 
for the 0.5 % overhead ...

i guess the primary goals should be:
* low overhead (ppl seem to care alot about 0.5% ... )
* optional index (undamaged files should allways have one)
* simple 
* extendible (optional headers which can be ignored)
* error tolerant
* allways correctly interleaved streams
* streamable (no seeking required for decoding)
* cutable (just chop it up and still be able to decode the fragments)

details:
all packets:
  forward & backward pointer to next / prev packet vlc encoded
  
global header packet
  64bit startcode
  length in time/video & audio stream count/version/...
  time resolution (so we dont waste bits for constant fps movies)
  checksum
  should be repeated a few times perhaps

per stream header packet
  64bit startcode
  stream id
  w/h/fourcc/samplerate
  depth/fps/bitrate/...
  checksum
  should be repeated a few times perhaps

codec specific header packet
  64bit startcode
  codec specific data
  checksum
  should be repeated a few times perhaps

per frame header packet
  64-bit startcode for keyframes
  timestamp vlc
  stream id vlc
  flags vlc
  frame bitstream
  optional checksum (depending upon flags)

timestamps 
  for non keyframes should be encoded as VLC difference from the last keyframe
  for keyframes simply relative to the file start & with the number of
  bits/resolution specified in the header 

optional checksum
16 or 32bit per frame checksums so files can be checked for damage quickly and 
the damaged frame redownloaded

unlimited number of audio / video streams (id stored as vlc too, as its very 
lame to waste 1 byte or even more per frame to encode video stream id #0)

index
  compressed (with bzip2 at least if noone has a better idea)

some optional headers 
  for author, comments, ...
  optionally compressed with bzip2 & allow repeating

user defined packet type which is ignored

for vlc coding some universal vlc code like exp golomb (h264 uses that too) 
might be a good choice

any comments?

[...]

Michael


More information about the MPlayer-dev-eng mailing list