ogmstreams.h 3.29 KB
Newer Older
1
/** @file ogmstreams.h */
2 3 4
#ifndef __OGGSTREAMS_H
#define __OGGSTREAMS_H

5
/**
6 7 8
 * Taken from http://tobias.everwicked.com/packfmt.htm
 *
 *
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
 *   First packet (header)
 *   ---------------------
 *
 *   pos    | content                 | description
 *   -------|-------------------------|----------------------------------
 *   0x0000 | 0x01                    | indicates 'header packet'
 *   0x0001 | stream_header           | the size is indicated in the
 *     |                    | size member
 *
 *
 *   Second packet (comment)
 *   -----------------------
 *
 *   pos    | content                 | description
 *   -------|-------------------------|----------------------------------
 *   0x0000 | 0x03                    | indicates 'comment packet'
 *   0x0001 | data                    | see vorbis doc on www.xiph.org
 *
 *
 *   Data packets
 *   ------------
 *
 *   pos      | content                 | description
 *   ---------|-------------------------|----------------------------------
 *   0x0000   | Bit0  0                 | indicates data packet
 *       | Bit1  Bit 2 of lenbytes |  
 *       | Bit2  unused            |  
 *       | Bit3  keyframe          |  
 *       | Bit4  unused            |  
 *       | Bit5  unused            |  
 *       | Bit6  Bit 0 of lenbytes |  
 *       | Bit7  Bit 1 of lenbytes |  
 *   0x0001   | LowByte                 | Length of this packet in samples
 *       | ...                     | (frames for video, samples for
 *       | HighByte                | audio, 1ms units for text)
 *   0x0001+  | data                    | packet contents
 *   lenbytes |                    |  
46 47 48
 *
 */

49 50
/** OggDS headers */
/** Header for the new header format */
51
typedef struct stream_header_video {
Mikhail Karpenko's avatar
Mikhail Karpenko committed
52 53
	ogg_int32_t width;
	ogg_int32_t height;
54 55 56
} stream_header_video;

typedef struct stream_header_audio {
Mikhail Karpenko's avatar
Mikhail Karpenko committed
57 58 59
	ogg_int16_t channels;
	ogg_int16_t blockalign;
	ogg_int32_t avgbytespersec;
60 61 62
} stream_header_audio;

typedef struct stream_header {
Mikhail Karpenko's avatar
Mikhail Karpenko committed
63 64
	char streamtype[8];
	char subtype[4];
65

Mikhail Karpenko's avatar
Mikhail Karpenko committed
66
	ogg_int32_t size;               // size of the structure
67

Mikhail Karpenko's avatar
Mikhail Karpenko committed
68 69 70
	ogg_int64_t time_unit;          // in reference time
	ogg_int64_t samples_per_unit;
	ogg_int32_t default_len;        // in media time
71

Mikhail Karpenko's avatar
Mikhail Karpenko committed
72
	ogg_int32_t buffersize;
73
//	ogg_int16_t     bits_per_sample;
Mikhail Karpenko's avatar
Mikhail Karpenko committed
74
	ogg_int32_t bits_per_sample;
75 76 77 78 79 80 81 82 83

	union {
		// Video specific
		stream_header_video video;
		// Audio specific
		stream_header_audio audio;
	} sh;

//	ogg_int16_t     padding;
Mikhail Karpenko's avatar
Mikhail Karpenko committed
84
	ogg_int32_t padding;
85 86 87 88

} stream_header;

typedef struct old_stream_header {
Mikhail Karpenko's avatar
Mikhail Karpenko committed
89 90
	char streamtype[8];
	char subtype[4];
91

Mikhail Karpenko's avatar
Mikhail Karpenko committed
92
	ogg_int32_t size;               // size of the structure
93

Mikhail Karpenko's avatar
Mikhail Karpenko committed
94 95 96
	ogg_int64_t time_unit;          // in reference time
	ogg_int64_t samples_per_unit;
	ogg_int32_t default_len;        // in media time
97

Mikhail Karpenko's avatar
Mikhail Karpenko committed
98 99
	ogg_int32_t buffersize;
	ogg_int16_t bits_per_sample;
100

Mikhail Karpenko's avatar
Mikhail Karpenko committed
101
	ogg_int16_t padding;
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

	union {
		// Video specific
		stream_header_video video;
		// Audio specific
		stream_header_audio audio;
	} sh;

} old_stream_header;

/// Some defines from OggDS
#define PACKET_TYPE_HEADER       0x01
#define PACKET_TYPE_COMMENT      0x03
#define PACKET_TYPE_BITS         0x07
#define PACKET_LEN_BITS01        0xc0
#define PACKET_LEN_BITS2         0x02
#define PACKET_IS_SYNCPOINT      0x08

120
#endif /* __OGGSTREAMS_H */