Ignore svn change r30877
[mplayer/glamo.git] / tremor / ogg.h
blob9da379583c8fc38f5a71382520e7fbee79e50591
1 /********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7 * *
8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
9 * by the Xiph.Org Foundation http://www.xiph.org/ *
10 * *
11 ********************************************************************
13 function: toplevel libogg include
14 last mod: $Id$
16 ********************************************************************/
17 #ifndef _OGG_H
18 #define _OGG_H
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
24 #include "os_types.h"
26 typedef struct {
27 long endbyte;
28 int endbit;
30 unsigned char *buffer;
31 unsigned char *ptr;
32 long storage;
33 } oggpack_buffer;
35 /* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
37 typedef struct {
38 unsigned char *header;
39 long header_len;
40 unsigned char *body;
41 long body_len;
42 } ogg_page;
44 /* ogg_stream_state contains the current encode/decode state of a logical
45 Ogg bitstream **********************************************************/
47 typedef struct {
48 unsigned char *body_data; /* bytes from packet bodies */
49 long body_storage; /* storage elements allocated */
50 long body_fill; /* elements stored; fill mark */
51 long body_returned; /* elements of fill returned */
54 int *lacing_vals; /* The values that will go to the segment table */
55 ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
56 this way, but it is simple coupled to the
57 lacing fifo */
58 long lacing_storage;
59 long lacing_fill;
60 long lacing_packet;
61 long lacing_returned;
63 unsigned char header[282]; /* working space for header encode */
64 int header_fill;
66 int e_o_s; /* set when we have buffered the last packet in the
67 logical bitstream */
68 int b_o_s; /* set after we've written the initial page
69 of a logical bitstream */
70 long serialno;
71 long pageno;
72 ogg_int64_t packetno; /* sequence number for decode; the framing
73 knows where there's a hole in the data,
74 but we need coupling so that the codec
75 (which is in a seperate abstraction
76 layer) also knows about the gap */
77 ogg_int64_t granulepos;
79 } ogg_stream_state;
81 /* ogg_packet is used to encapsulate the data and metadata belonging
82 to a single raw Ogg/Vorbis packet *************************************/
84 typedef struct {
85 unsigned char *packet;
86 long bytes;
87 long b_o_s;
88 long e_o_s;
90 ogg_int64_t granulepos;
92 ogg_int64_t packetno; /* sequence number for decode; the framing
93 knows where there's a hole in the data,
94 but we need coupling so that the codec
95 (which is in a seperate abstraction
96 layer) also knows about the gap */
97 } ogg_packet;
99 typedef struct {
100 unsigned char *data;
101 int storage;
102 int fill;
103 int returned;
105 int unsynced;
106 int headerbytes;
107 int bodybytes;
108 } ogg_sync_state;
110 /* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
112 extern void oggpack_writeinit(oggpack_buffer *b);
113 extern void oggpack_writetrunc(oggpack_buffer *b,long bits);
114 extern void oggpack_writealign(oggpack_buffer *b);
115 extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits);
116 extern void oggpack_reset(oggpack_buffer *b);
117 extern void oggpack_writeclear(oggpack_buffer *b);
118 extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
119 extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
120 extern long oggpack_look(oggpack_buffer *b,int bits);
121 extern long oggpack_look1(oggpack_buffer *b);
122 extern void oggpack_adv(oggpack_buffer *b,int bits);
123 extern void oggpack_adv1(oggpack_buffer *b);
124 extern long oggpack_read(oggpack_buffer *b,int bits);
125 extern long oggpack_read1(oggpack_buffer *b);
126 extern long oggpack_bytes(oggpack_buffer *b);
127 extern long oggpack_bits(oggpack_buffer *b);
128 extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
130 extern void oggpackB_writeinit(oggpack_buffer *b);
131 extern void oggpackB_writetrunc(oggpack_buffer *b,long bits);
132 extern void oggpackB_writealign(oggpack_buffer *b);
133 extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits);
134 extern void oggpackB_reset(oggpack_buffer *b);
135 extern void oggpackB_writeclear(oggpack_buffer *b);
136 extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
137 extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits);
138 extern long oggpackB_look(oggpack_buffer *b,int bits);
139 extern long oggpackB_look1(oggpack_buffer *b);
140 extern void oggpackB_adv(oggpack_buffer *b,int bits);
141 extern void oggpackB_adv1(oggpack_buffer *b);
142 extern long oggpackB_read(oggpack_buffer *b,int bits);
143 extern long oggpackB_read1(oggpack_buffer *b);
144 extern long oggpackB_bytes(oggpack_buffer *b);
145 extern long oggpackB_bits(oggpack_buffer *b);
146 extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
148 /* Ogg BITSTREAM PRIMITIVES: encoding **************************/
150 extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
151 extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
152 extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
154 /* Ogg BITSTREAM PRIMITIVES: decoding **************************/
156 extern int ogg_sync_init(ogg_sync_state *oy);
157 extern int ogg_sync_clear(ogg_sync_state *oy);
158 extern int ogg_sync_reset(ogg_sync_state *oy);
159 extern int ogg_sync_destroy(ogg_sync_state *oy);
161 extern char *ogg_sync_buffer(ogg_sync_state *oy, long size);
162 extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
163 extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
164 extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
165 extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
166 extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
167 extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
169 /* Ogg BITSTREAM PRIMITIVES: general ***************************/
171 extern int ogg_stream_init(ogg_stream_state *os,int serialno);
172 extern int ogg_stream_clear(ogg_stream_state *os);
173 extern int ogg_stream_reset(ogg_stream_state *os);
174 extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
175 extern int ogg_stream_destroy(ogg_stream_state *os);
176 extern int ogg_stream_eos(ogg_stream_state *os);
178 extern void ogg_page_checksum_set(ogg_page *og);
180 extern int ogg_page_version(ogg_page *og);
181 extern int ogg_page_continued(ogg_page *og);
182 extern int ogg_page_bos(ogg_page *og);
183 extern int ogg_page_eos(ogg_page *og);
184 extern ogg_int64_t ogg_page_granulepos(ogg_page *og);
185 extern int ogg_page_serialno(ogg_page *og);
186 extern long ogg_page_pageno(ogg_page *og);
187 extern int ogg_page_packets(ogg_page *og);
189 extern void ogg_packet_clear(ogg_packet *op);
192 #ifdef __cplusplus
194 #endif
196 #endif /* _OGG_H */