[NUT-devel] [RFC] internet draft for NUT
Ivo
ivop at euronet.nl
Tue Sep 25 12:04:04 CEST 2007
Hi,
Here are some things I noticed:
On Tuesday 25 September 2007 10:54, Luca Barbato wrote:
[..]
> 1.1. Terminology
>
> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
> "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
> document are to be interpreted as described in [RFC2119].
>
> This document refers to the following definitions
definitions:
[..]
> frame Minimal unit of information that can be decoded completely, it
> is usually holds a full frame video frame, a group of audio
> samples or a subtitle line.
it [-is] usually holds
Also, I know what a frame is, but the description is a bit confusing. It
says it's a minimal unit that can be decoded completely, but below it says
you can only start decoding at a keyframe. So you can only decode a given
frame/unit completely if it's either a keyframe or you have decoded
previous (in dts sense) frames which the current frame depends on.
> Keyframe A keyframe is a frame from which you can start decoding.
> 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. 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 keyframe status of the current frame but instead
> just set the frame as non-keyframe.
IMHO the last comma should be replaced by 'and' (i.e. so it says: A, B and
C) or the sentence could be split up in three sentences.
> 1.2. Syntax Convetions
>
> Since NUT heavily uses variable length fields, the simplest way to
> describe it is using a pseudocode approach instead of graphical
> bitfield descriptions.
>
> The syntax uses datatypes, tagnames and C-like constructs.
>
> 1.2.1. Datatypes
>
> f(n) n fixed bits in bigendian order
big-endian
> u(n) Unsigned value encoded in n bits MSB-first
>
> v Unsigned variable length value.
>
> value=0
> do{
> more_data u(1)
> data u(7)
> value= 128*value + data
> }while(more_data)
I'd prefer spaces between do and { and } and while, but I suppose that's a
matter of personal taste. Same for value = instead of value=.
> Figure 1: Variable Length Unsigned Value
>
> Values can be encoded using the following logic: the data is in
> network order, every byte has the most significant bit used as
> flag and the following 7 used to store the value. The first N bit
bits
> are to be taken, where N is number of bits representing the value
> modulo 7, and stored in the first byte. If there are more bits,
> the flag bit is set to 1 and the subsequent 7bit are stored in the
7 bits
> following byte, if there are remaining bits set the flag to 1 and
> the same procedure is repeated. The ending byte has the flag bit
> set to 0.
I find this description a bit confusing, e.g. it's not clear when you talk
about the input value and when about the output bytes.
[..]
> Strings and binary data can be encoded basically writing the byte
> count as a Variable Length Unsigned Value and the the string. The
and then the
> strings MUST be encoded in utf-8
>
> t Variable length binary data (or utf-8 string).
wrong description
> tmp v
> id= tmp % time_base_count
> value= (tmp / time_base_count) * time_base[id]
>
> Figure 4: Variable Length Timestamp
--Ivo
More information about the NUT-devel
mailing list