[MPlayer-dev-eng] Re: MCF ( Multimedia Container Format ) : Invitation to participate

Michael Niedermayer michaelni at gmx.at
Sun Jun 9 13:43:40 CEST 2002


Hi

On Sunday 09 June 2002 11:10, Christian HJ Wiesner wrote:
> Attention ! please use the 'reply all' function of your mail application to
hmm, ok

> make sure a copy is sent to the mailing lists of mplayer and MCF. If this
> discussion is going on we might consider setting up a specific mailing list
> titles 'mplayer-MCF-cooperaion' or similar.
[...]
> Michael Niedermayer ( ein Bayer, wie ich ;-) ?? ):
no, iam from austria, i never was in bayern/germany ...

i did read thorugh the mcf stuff quickly now, here are my comments

everything seems to contain a checksum, thats nice but ...

1. more advanced video codecs can recover most data even if a frame is damaged
a. data partitioning (decode motion vectors & dc even if the texture is lost)
the texture is indeed the least important & biggest part so its most likely 
damaged)
b. slice resync (allows resyncing within a frame after an error)
c. rvlc (allows bidirectional decoding)
the first 2 are completly implemented in ffmpeg/libavcodec
imho droping a frame completly if its damaged is a bad idea

2. detecting errors is nice but correcting them is nicer ... the headers are 
stored only once? it seems so, allthough it would be better to store the main 
header and other important parts at least twice, the checksum could then be 
used to select an undamaged header & even replace the damged one with the 
undamaged copy, this would allso require to add some identifer to each header 
so it could still be found in an badly damaged file (this seems to be done 
for some headers (32-bit id & 32-bit checksum))

it seems that several parts do contain offsets relative to the file start, 
this doesnt seems to be a very good choice (insertion/deletion errors) 
storing file offset differences between the relevant parts should be more 
error tolerant

as i allready mentioned in my last mail, a 64-bit id for each keyframe would 
be nice to allow seeking if the file is damgaged (as the seek entries store 
offsets from the filestart, a single inserted byte will make the them useless)

bidirectional pointers for blocks would make recovering non-keyframes much 
easyer without bloating the file up by much (a byte insertion error in one 
block would make the blocks upto the nextkeyframe difficult to find (if the 
keyframes contain 64-bit ids, otherwise all data afterwards would be 
difficult to find) 
"difficult to find" means that its possible to check by brute force if each 
byte might be the start of a block (by checking timecode order, using 
blocksize and folowing blocks, ...)

it would be possible to use 16bit entries for many things which are stored as 
32bit curently, the idea is to use esc coding if the value doesnt fit in the 
16-bit type, this would save some more overhead
example: 0x12->     00 12
example: 0x123->    01 23
example: 0x1234->   12 34
example: 0x12345->  00 00 00 01 23 45
example: 0x123456-> 00 00 00 12 34 56
example: 0x1234567->00 00 01 23 45 67

[...]

Michael



More information about the MPlayer-dev-eng mailing list