Mercurial > mplayer.hg
changeset 14919:1d4861b2ac4a
returning to the old index at the end system, alternatives are too complex with questionable advantages
author | michael |
---|---|
date | Fri, 04 Mar 2005 23:12:41 +0000 |
parents | 354e7a03ee54 |
children | 824bb857aa7e |
files | DOCS/tech/mpcf.txt |
diffstat | 1 files changed, 14 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/tech/mpcf.txt Fri Mar 04 15:29:10 2005 +0000 +++ b/DOCS/tech/mpcf.txt Fri Mar 04 23:12:41 2005 +0000 @@ -119,7 +119,7 @@ version v stream_count v max_distance v - index_distance v + max_index_distance v global_time_base_nom v global_time_base_denom v for(i=0; i<256; ){ @@ -160,8 +160,6 @@ 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 @@ -205,7 +203,6 @@ 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 @@ -242,7 +239,7 @@ file: file_id_string - while(!eof){ + while(!eof && next_code != index_startcode){ main_header for(i=0; i<stream_count; i++){ if(next_packet==video_stream_header) @@ -253,15 +250,14 @@ while(next_code != main_startcode){ if(next_code == info_startcode) info_packet - else if(next_code == index_startcode){ - index - }else{ + else{ if(next_code == frame_startcode) sync_point frame } } } + index @@ -309,30 +305,12 @@ good reason to set it higher otherwise reasonable error recovery will be impossible -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 - furthermore a index packet contains all indexed keyframes since the - last index packet - (indexed keyframes == keyframes which are referenced from any index - packet) - -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) +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 stream_id[FIXME] Stream identifier @@ -507,6 +485,9 @@ 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 @@ -599,6 +580,7 @@ placed before any video/audio/... frames 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