OggTheora

From XiphWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Ogg Theora

Default field type: BIG ENDIAN unsigned integer

Field names in full caps refer to fields described in the Theora I specification. Lowercase refers to theora_info struct members from libtheora.

This is the Theora header for theora-alpha3:

(VMAJ=3, VMIN=2, VREV=0)

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | packtype      | Identifier char[6]: 'theora'                  | 0-3
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                               | VMAJ          | 4-7
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | VMIN          | VREV          | FMBW: width >> 4              | 8-11
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | FMBH: height >> 4             | PICW: frame_width             | 12-15
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               | PICH: frame_height                            | 16-19
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | PICX: offset_x| PICY: offset_y| FRN: fps_numerator            | 20-23
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | FRD: fps_denominator          | 24-27
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | PARN: aspect_numerator        | 28-31
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               | PARD: aspect_denominator                      | 32-35
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | CS: colorspace| NOMBR: target_bitrate                         | 36-39
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | QUAL      | KFGSHIFT| PF| resv|                                 40-43
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Granulepos

* What is the number of the first *real* keyframe/frame in a theora stream ? Is it 0 or 1 ?

The first frame of the stream (if it hasn't been trimmed) is a keyframe. It is displayed between time = 0 and time = 1 * frame_rate. The granulepos for that frame is based on the count of frames after it's been shown, which is 1, not zero. The only Ogg pages in a theora stream with a 0 granulepos should be the headers.