changeset 14906:f2fcd2622a61

partial indexes comments (with alternative suggestions and advantages) welcome
author michael
date Thu, 03 Mar 2005 17:16:49 +0000
parents 9c42e93022b3
children 11fc3e2ccecf
files DOCS/tech/mpcf.txt
diffstat 1 files changed, 28 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/DOCS/tech/mpcf.txt	Thu Mar 03 14:09:12 2005 +0000
+++ b/DOCS/tech/mpcf.txt	Thu Mar 03 17:16:49 2005 +0000
@@ -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