blob: 2933cdea9a44a2422da3c2684f32a612ba9a79fd (
plain)
1
2
3
4
5
6
7
8
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#ifndef __OGMSTREAMS_H
#define __OGMSTREAMS_H
/*
* Taken from http://tobias.everwicked.com/packfmt.htm
*
* Changes: Prefixed types with ogm_ to avoid namespace polution
* -- tibit
*
First packet (header)
---------------------
pos | content | description
-------+-------------------------+----------------------------------
0x0000 | 0x01 | indicates 'header packet'
-------+-------------------------+----------------------------------
0x0001 | ogm_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 | |
*
*
*/
//// oggDS headers
// Header for the new header format
typedef struct ogm_stream_header_video
{
ogg_int32_t width;
ogg_int32_t height;
} ogm_stream_header_video;
typedef struct ogm_stream_header_audio
{
ogg_int16_t channels;
ogg_int16_t blockalign;
ogg_int32_t avgbytespersec;
} ogm_stream_header_audio;
typedef struct ogm_stream_header
{
char streamtype[8];
char subtype[4];
ogg_int32_t size; // size of the structure
ogg_int64_t time_unit; // in reference time
ogg_int64_t samples_per_unit;
ogg_int32_t default_len; // in media time
ogg_int32_t buffersize;
ogg_int16_t bits_per_sample;
ogg_int16_t padding;
union
{
// Video specific
ogm_stream_header_video video;
// Audio specific
ogm_stream_header_audio audio;
} sh;
} ogm_stream_header;
/// Some defines from OggDS
#define OGM_PACKET_TYPE_HEADER 0x01
#define OGM_PACKET_TYPE_COMMENT 0x03
#define OGM_PACKET_TYPE_BITS 0x07
#define OGM_PACKET_LEN_BITS01 0xc0
#define OGM_PACKET_LEN_BITS2 0x02
#define OGM_PACKET_IS_SYNCPOINT 0x08
#endif /* __OGMSTREAMS_H */
|