|
1 /******************************************************************** |
|
2 * * |
|
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * |
|
4 * * |
|
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * |
|
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * |
|
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * |
|
8 * * |
|
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * |
|
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * |
|
11 * * |
|
12 ******************************************************************** |
|
13 |
|
14 function: subsumed libogg includes |
|
15 |
|
16 ********************************************************************/ |
|
17 #ifndef _OGG_H |
|
18 #define _OGG_H |
|
19 |
|
20 #ifdef __cplusplus |
|
21 extern "C" { |
|
22 #endif |
|
23 |
|
24 #include "os_types.h" |
|
25 |
|
26 typedef struct ogg_buffer_state{ |
|
27 struct ogg_buffer *unused_buffers; |
|
28 struct ogg_reference *unused_references; |
|
29 int outstanding; |
|
30 int shutdown; |
|
31 } ogg_buffer_state; |
|
32 |
|
33 typedef struct ogg_buffer { |
|
34 unsigned char *data; |
|
35 long size; |
|
36 int refcount; |
|
37 |
|
38 union { |
|
39 ogg_buffer_state *owner; |
|
40 struct ogg_buffer *next; |
|
41 } ptr; |
|
42 } ogg_buffer; |
|
43 |
|
44 typedef struct ogg_reference { |
|
45 ogg_buffer *buffer; |
|
46 long begin; |
|
47 long length; |
|
48 |
|
49 struct ogg_reference *next; |
|
50 } ogg_reference; |
|
51 |
|
52 typedef struct oggpack_buffer { |
|
53 int headbit; |
|
54 unsigned char *headptr; |
|
55 long headend; |
|
56 |
|
57 /* memory management */ |
|
58 ogg_reference *head; |
|
59 ogg_reference *tail; |
|
60 |
|
61 /* render the byte/bit counter API constant time */ |
|
62 long count; /* doesn't count the tail */ |
|
63 } oggpack_buffer; |
|
64 |
|
65 typedef struct oggbyte_buffer { |
|
66 ogg_reference *baseref; |
|
67 |
|
68 ogg_reference *ref; |
|
69 unsigned char *ptr; |
|
70 long pos; |
|
71 long end; |
|
72 } oggbyte_buffer; |
|
73 |
|
74 typedef struct ogg_sync_state { |
|
75 /* decode memory management pool */ |
|
76 ogg_buffer_state *bufferpool; |
|
77 |
|
78 /* stream buffers */ |
|
79 ogg_reference *fifo_head; |
|
80 ogg_reference *fifo_tail; |
|
81 long fifo_fill; |
|
82 |
|
83 /* stream sync management */ |
|
84 int unsynced; |
|
85 int headerbytes; |
|
86 int bodybytes; |
|
87 |
|
88 } ogg_sync_state; |
|
89 |
|
90 typedef struct ogg_stream_state { |
|
91 ogg_reference *header_head; |
|
92 ogg_reference *header_tail; |
|
93 ogg_reference *body_head; |
|
94 ogg_reference *body_tail; |
|
95 |
|
96 int e_o_s; /* set when we have buffered the last |
|
97 packet in the logical bitstream */ |
|
98 int b_o_s; /* set after we've written the initial page |
|
99 of a logical bitstream */ |
|
100 long serialno; |
|
101 long pageno; |
|
102 ogg_int64_t packetno; /* sequence number for decode; the framing |
|
103 knows where there's a hole in the data, |
|
104 but we need coupling so that the codec |
|
105 (which is in a seperate abstraction |
|
106 layer) also knows about the gap */ |
|
107 ogg_int64_t granulepos; |
|
108 |
|
109 int lacing_fill; |
|
110 ogg_uint32_t body_fill; |
|
111 |
|
112 /* decode-side state data */ |
|
113 int holeflag; |
|
114 int spanflag; |
|
115 int clearflag; |
|
116 int laceptr; |
|
117 ogg_uint32_t body_fill_next; |
|
118 |
|
119 } ogg_stream_state; |
|
120 |
|
121 typedef struct { |
|
122 ogg_reference *packet; |
|
123 long bytes; |
|
124 long b_o_s; |
|
125 long e_o_s; |
|
126 ogg_int64_t granulepos; |
|
127 ogg_int64_t packetno; /* sequence number for decode; the framing |
|
128 knows where there's a hole in the data, |
|
129 but we need coupling so that the codec |
|
130 (which is in a seperate abstraction |
|
131 layer) also knows about the gap */ |
|
132 } ogg_packet; |
|
133 |
|
134 typedef struct { |
|
135 ogg_reference *header; |
|
136 int header_len; |
|
137 ogg_reference *body; |
|
138 long body_len; |
|
139 } ogg_page; |
|
140 |
|
141 /* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ |
|
142 |
|
143 extern void oggpack_readinit(oggpack_buffer *b,ogg_reference *r); |
|
144 extern long oggpack_look(oggpack_buffer *b,int bits); |
|
145 extern void oggpack_adv(oggpack_buffer *b,int bits); |
|
146 extern long oggpack_read(oggpack_buffer *b,int bits); |
|
147 extern long oggpack_bytes(oggpack_buffer *b); |
|
148 extern long oggpack_bits(oggpack_buffer *b); |
|
149 extern int oggpack_eop(oggpack_buffer *b); |
|
150 |
|
151 /* Ogg BITSTREAM PRIMITIVES: decoding **************************/ |
|
152 |
|
153 extern ogg_sync_state *ogg_sync_create(void); |
|
154 extern int ogg_sync_destroy(ogg_sync_state *oy); |
|
155 extern int ogg_sync_reset(ogg_sync_state *oy); |
|
156 |
|
157 extern unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long size); |
|
158 extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); |
|
159 extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); |
|
160 extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); |
|
161 extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); |
|
162 extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); |
|
163 extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); |
|
164 |
|
165 /* Ogg BITSTREAM PRIMITIVES: general ***************************/ |
|
166 |
|
167 extern ogg_stream_state *ogg_stream_create(int serialno); |
|
168 extern int ogg_stream_destroy(ogg_stream_state *os); |
|
169 extern int ogg_stream_reset(ogg_stream_state *os); |
|
170 extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); |
|
171 extern int ogg_stream_eos(ogg_stream_state *os); |
|
172 |
|
173 extern int ogg_page_checksum_set(ogg_page *og); |
|
174 |
|
175 extern int ogg_page_version(ogg_page *og); |
|
176 extern int ogg_page_continued(ogg_page *og); |
|
177 extern int ogg_page_bos(ogg_page *og); |
|
178 extern int ogg_page_eos(ogg_page *og); |
|
179 extern ogg_int64_t ogg_page_granulepos(ogg_page *og); |
|
180 extern ogg_uint32_t ogg_page_serialno(ogg_page *og); |
|
181 extern ogg_uint32_t ogg_page_pageno(ogg_page *og); |
|
182 extern int ogg_page_packets(ogg_page *og); |
|
183 extern int ogg_page_getbuffer(ogg_page *og, unsigned char **buffer); |
|
184 |
|
185 extern int ogg_packet_release(ogg_packet *op); |
|
186 extern int ogg_page_release(ogg_page *og); |
|
187 |
|
188 extern void ogg_page_dup(ogg_page *d, ogg_page *s); |
|
189 |
|
190 /* Ogg BITSTREAM PRIMITIVES: return codes ***************************/ |
|
191 |
|
192 #define OGG_SUCCESS 0 |
|
193 |
|
194 #define OGG_HOLE -10 |
|
195 #define OGG_SPAN -11 |
|
196 #define OGG_EVERSION -12 |
|
197 #define OGG_ESERIAL -13 |
|
198 #define OGG_EINVAL -14 |
|
199 #define OGG_EEOS -15 |
|
200 |
|
201 |
|
202 #ifdef __cplusplus |
|
203 } |
|
204 #endif |
|
205 |
|
206 #endif /* _OGG_H */ |