[MPlayer-cvslog] CVS: main/DOCS/tech mpcf.txt,1.67,1.68
Michael Niedermayer CVS
syncmail at mplayerhq.hu
Thu Mar 3 18:16:53 CET 2005
CVS change done by Michael Niedermayer CVS
Update of /cvsroot/mplayer/main/DOCS/tech
In directory mail:/var2/tmp/cvs-serv23240
Modified Files:
mpcf.txt
Log Message:
partial indexes
comments (with alternative suggestions and advantages) welcome
Index: mpcf.txt
===================================================================
RCS file: /cvsroot/mplayer/main/DOCS/tech/mpcf.txt,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- mpcf.txt 1 Mar 2005 00:16:44 -0000 1.67
+++ mpcf.txt 3 Mar 2005 17:16:49 -0000 1.68
@@ -119,7 +119,7 @@
version v
stream_count v
max_distance v
- max_index_distance v
+ index_distance v
global_time_base_nom v
global_time_base_denom v
for(i=0; i<256; ){
@@ -160,6 +160,8 @@
time_base_denom v
msb_timestamp_shift v
decode_delay v
+ index_modulo v
+ index_increment v
fixed_fps u(1)
reserved u(6)
codec_specific_data vb
@@ -203,6 +205,7 @@
index_startcode f(64)
packet header
stream_id v
+ index_id v
index_length v
for(i=0; i<index_length; i++){
index_timestamp v
@@ -239,7 +242,7 @@
file:
file_id_string
- while(!eof && next_code != index_startcode){
+ while(!eof){
main_header
for(i=0; i<stream_count; i++){
if(next_packet==video_stream_header)
@@ -250,14 +253,15 @@
while(next_code != main_startcode){
if(next_code == info_startcode)
info_packet
- else{
+ else if(next_code == index_startcode){
+ index
+ }else{
if(next_code == frame_startcode)
sync_point
frame
}
}
}
- index
@@ -305,12 +309,26 @@
good reason to set it higher otherwise reasonable error recovery will
be impossible
-max_index_distance
- max distance of keyframes which are represented in the index, the
- distance between consecutive entries A and B may only be larger if
- there are no keyframes within this stream between A and B
- SHOULD be set to <=32768 or at least <=65536 unless there is a very
- good reason to set it higher
+index_distance
+ distance at which indexes are approximately stored, or 0 if there are
+ no indexes in the file
+ in every [x*index_distance, (x+1)*index_distance) interval, there
+ must be an index packet for every stream, and these packets must be
+ located prior to all frames within the interval
+ reasoning: this ensures good error recovery as there are many and
+ evenly distributed indexes, and also allows very quick finding of the
+ index packets
+
+index_modulo
+index_id
+ each index packet contains every index_moduloth's keyframe of a stream,
+ so the i'th keyframe of a stream will be at least in packets with
+ (i % index_modulo) == index_id
+
+index_increment
+ the index_id increment value, this MUST be a relative prime to
+ index_modulo
+ index_increment / index_modulo SHOULD be approximately 2/(sqrt(5)+1)
stream_id[FIXME]
Stream identifier
@@ -485,9 +503,6 @@
index_position
position in bytes of the first byte of a keyframe, relative to the
last keyframe stored in this index
- there MUST be no keyframe with the same stream_id as this index between
- 2 consecutive index entries if they are more then max_index_distance
- appart
id
the id of the type/name pair, so its more compact
@@ -580,8 +595,6 @@
placed before any video/audio/... frames
Index
-every sync-point must be exacty once in the index
-Note: in case of realtime streaming there is no end, so no index there either
Info packets
the info_packet can be repeated, it can also contain different names & values
More information about the MPlayer-cvslog
mailing list