[NUT-devel] [nut]: r571 - docs/nut.txt
michael
subversion at mplayerhq.hu
Sat Feb 2 22:11:19 CET 2008
Author: michael
Date: Sat Feb 2 22:11:18 2008
New Revision: 571
Log:
The match_time_delta patch.
Modified:
docs/nut.txt
Modified: docs/nut.txt
==============================================================================
--- docs/nut.txt (original)
+++ docs/nut.txt Sat Feb 2 22:11:18 2008
@@ -1,5 +1,5 @@
==================================
-NUT Open Container Format 20061104
+NUT Open Container Format 20080202
==================================
@@ -53,15 +53,20 @@ SHOULD It is recommended to be done tha
keyframe
A keyframe is a frame from which you can start decoding, a more
exact definition is below
- The nth frame is a keyframe if and only if frames n, n+1, ... in
- presentation order (that are all frames with a pts >= frame[n].pts) can
- be decoded successfully without reference to frames prior n in storage
- order (that are all frames with a dts < frame[n].dts).
- If no such frames exist (for example due to using overlapped transforms
- like the MDCT in an audio codec), then the definition shall be extended
- by dropping n out of the set of frames which must be decodable, if this
- is still insufficient then n+1 shall be dropped, and so on until there is
- a keyframe.
+
+ A frame in a stream is a keyframe if and only if all of the following are true
+ * Decoding can successfully begin using any standard compliant decoder without
+ requireing access to prior frames.
+ * Begining decoding instead at a subsequent frame would cause fewer frames
+ to be decoded successfully.
+
+ successfull decoding here means that the specific frame is virtually
+ identical to what one would get if decoding would have begun from the very
+ first frame
+ Note, "virtually identical" here is used instead of "identical" to allow
+ codecs which converge toward the same output when started from different
+ points but dont neccessarily ever reach exactly identical output.
+
Every frame which is marked as a keyframe MUST be a keyframe according to
the definition above, a muxer MUST mark every frame it knows is a keyframe
as such, a muxer SHOULD NOT analyze future frames to determine the
@@ -314,6 +319,9 @@ frame:
if(frame_flags&FLAG_SIZE_MSB){
data_size_msb v
}
+ if(frame_flags&FLAG_MATCH_TIME){
+ match_time_delta s
+ }
if(frame_flags&FLAG_RESERVED)
frame_res v
for(i=0; i<frame_res; i++)
@@ -606,6 +614,8 @@ flags[frame_code], frame_flags (v)
otherwise data_size_msb is 0.
6 FLAG_CHECKSUM If set, the frame header contains a checksum.
7 FLAG_RESERVED If set, reserved_count is coded in the frame header.
+ 11 FLAG_MATCH_TIME If set, match_time_delta is coded in the frame
+ header, otherwise its 0.
12 FLAG_CODED If set, coded_flags are stored in the frame header.
13 FLAG_INVALID If set, frame_code is invalid.
@@ -664,6 +674,13 @@ coded_pts (v)
delta = last_pts - mask / 2
pts = ( (pts_lsb - delta) & mask ) + delta
+match_time_delta
+ If FLAG_MATCH_TIME is not set, then this is 0
+ This is the time difference in stream timebase units from the pts at which
+ the output from the decoder has converged independant of the availability
+ of previous frames (that is the frames are virtually identical no matter
+ if decoding started from the very first frame or from this keyframe).
+
lsb_pts
Least significant bits of the pts in time_base precision.
Example: IBBP display order
@@ -738,7 +755,8 @@ back_ptr_div16 (v)
back_ptr must point to a position up to 15 bytes before a syncpoint
startcode, relative to position of current syncpoint. The syncpoint
pointed to MUST be the closest syncpoint such that at least one keyframe
- with a pts lower or equal to the current syncpoint's global_key_pts for
+ with a pts+match_time_delta lower or equal to the current syncpoint's
+ global_key_pts for
all streams lies between it and the current syncpoint.
A stream where EOR is set is to be ignored for back_ptr.
@@ -769,7 +787,8 @@ has_keyframe
the last syncpoint.
keyframe_pts
- The pts of the first keyframe for this stream in the region between the
+ The pts+match_time_delta of the first keyframe for this stream in the
+ region between the
2 syncpoints, in the stream's timebase. (EOR frames are also keyframes.)
eor_pts
More information about the NUT-devel
mailing list