[MPlayer-DOCS] CVS: main/DOCS/tech mpcf.txt,1.47,1.48
Michael Niedermayer CVS
syncmail at mplayerhq.hu
Tue Apr 20 19:58:26 CEST 2004
CVS change done by Michael Niedermayer CVS
Update of /cvsroot/mplayer/main/DOCS/tech
In directory mail:/var2/tmp/cvs-serv9283/tech
Modified Files:
mpcf.txt
Log Message:
removing backward pointers
removing frames with type 1
forward pointers point to the next packet (=size of the packet) instead of pointing over several type 0 frames
removing forward pointers from type 2 frames (they are after the above changes equal to the data_size and would thus be redundant)
simplify frame_code flags 7->5 bit
remove zero_bit definition (was unused)
Index: mpcf.txt
===================================================================
RCS file: /cvsroot/mplayer/main/DOCS/tech/mpcf.txt,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- mpcf.txt 14 Apr 2004 23:11:45 -0000 1.47
+++ mpcf.txt 20 Apr 2004 17:58:24 -0000 1.48
@@ -70,7 +70,6 @@
Bitstream syntax:
packet header
forward ptr v
- backward ptr v
align_byte
while(not byte aligned)
@@ -89,6 +88,7 @@
packet header
version v
stream_count v
+ max_type0_size v
for(i=0; i<256; ){
tmp_flag v
tmp_stream v
@@ -154,20 +154,17 @@
frame_type2_startcode f(64)
}
frame_code f(8)
- if(flags[frame_code]&1){
- packet header
- }
if(stream_id_plus1[frame_code]==0){
stream_id v
}
- if(flags[frame_code]&16){
- if(flags[frame_code]&4){
+ if(flags[frame_code]&4){
+ if(flags[frame_code]&1){
timestamp v
}else{
lsb_timestamp v
}
}
- if(flags[frame_code]&2){
+ if(flags[frame_code]&8){
data_size_msb v
}
data
@@ -206,26 +203,9 @@
forward_ptr
-backward_ptr
- pointer to the next / previous packet
- pointers are relative and backward pointer is implicitelly negative
+ size of the packet (exactly the distance from the first byte of the
+ startcode of the current packet to the first byte of the following packet
Note: a frame with 0 bytes means that its skiped
- Note: the forward pointer is equal to the size of this packet including
- the header
- the backward pointer is equal to the size of the previous packet
- Example:
- 0
- size1 (size of frame1 including header)
- frame1
-
- size1
- size2
- frame2
-
- size2
- size3
- frame3
-
*_startcode
all startcodes start with 'N'
@@ -242,8 +222,14 @@
0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48)
version
- 1 for now
-
+ 2 for now
+
+max_type0_size
+ max cummulative sum of type0 frames between type not 0 frames, this can
+ be used by the deocoder to detect damaged type 0 headers if the damage
+ results in a too long chain
+ SHOULD be set to <=16384 to ensure reasonable error recovery
+
stream_id
Note: streams with a lower relative class MUST have a lower relative id
so a stream with class 0 MUST allways have a id which is lower then any
@@ -319,8 +305,7 @@
different from the first byte of any startcode
flags[frame_code]
- the bits of the flags from MSB to LSB are KKTTTDP
- P is 1 for type 1 and 2 packets, 0 for type 0 packets
+ the bits of the flags from MSB to LSB are KDTTT
TTT is the timestamp_code, 000,001,010 use the last timestamp + the
first, second and third last unique timestamp difference, so if
the timestamp differences, are +3,+1,+2,+2,+1 then last diff is
@@ -335,24 +320,21 @@
initial_timestamp_predictor values from the stream header if a
packet of type not 0 in encountered
if D is 1 then data_size_msb is coded, otherwise its 0
- KK is the keyframe_type
- 00-> no keyframe,
- 01-> keyframe,
- flags=1 can be used to mark illegal frame_code bytes
- frame_code=78 must have flags=1
+ K is the keyframe_type
+ 0-> no keyframe,
+ 1-> keyframe,
+ flags=7 can be used to mark illegal frame_code bytes
+ frame_code=78 must have flags=7
frame_type
- 0 is indicated by (flags[frame_code]&1)==0
- 1 is indicated by (flags[frame_code]&1)==1 && !startcode
- 2 is indicated by (flags[frame_code]&1)==1 && startcode
+ if the first byte of a frame is 'N' then the frame_type is 2 otherwise
+ its 0
there SHOULD not be more then 0.5 seconds or 16kbyte of type 0 frames
wihout a intervening frame of different frame_type
- * type 2 frames MUST be decodeable independantly of any other frames
- this means they MUST be keyframes and they MUST use a full timestamp
- * type 1 frames MUST not depend(1) upon any other frames, this means,
+ * type 2 frames MUST not depend(1) upon any other frames, this means,
they MUST use a full timestamp
* type 0 frames MUST not depend(1) upon frames prior to the last type
- 1/2 frames
+ 2 frame
depend(1) means dependancy on the container level (NUT) not dependancy
on the codec level
@@ -414,11 +396,6 @@
the number of samples per second in one time_base unit
samplerate = time_base*samplerate_mul
-zero_bit
- MUST be 0, its there to distinguish non keyframes from other packets,
- Note: all packets have a 64-bit startcode except non-keyframes to reduce
- their size, and all startcodes start with a 1 bit
-
checksum
adler32 checksum
More information about the MPlayer-DOCS
mailing list