00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _OGG_H
00018 #define _OGG_H
00019
00020 #ifdef __cplusplus
00021 extern "C" {
00022 #endif
00023
00024 #include "os_types.h"
00025
00026 typedef struct ogg_buffer_state{
00027 struct ogg_buffer *unused_buffers;
00028 struct ogg_reference *unused_references;
00029 int outstanding;
00030 int shutdown;
00031 } ogg_buffer_state;
00032
00033 typedef struct ogg_buffer {
00034 unsigned char *data;
00035 long size;
00036 int refcount;
00037
00038 union {
00039 ogg_buffer_state *owner;
00040 struct ogg_buffer *next;
00041 } ptr;
00042 } ogg_buffer;
00043
00044 typedef struct ogg_reference {
00045 ogg_buffer *buffer;
00046 long begin;
00047 long length;
00048
00049 struct ogg_reference *next;
00050 } ogg_reference;
00051
00052 typedef struct oggpack_buffer {
00053 int headbit;
00054 unsigned char *headptr;
00055 long headend;
00056
00057
00058 ogg_reference *head;
00059 ogg_reference *tail;
00060
00061
00062 long count;
00063 } oggpack_buffer;
00064
00065 typedef struct oggbyte_buffer {
00066 ogg_reference *baseref;
00067
00068 ogg_reference *ref;
00069 unsigned char *ptr;
00070 long pos;
00071 long end;
00072 } oggbyte_buffer;
00073
00074 typedef struct ogg_sync_state {
00075
00076 ogg_buffer_state *bufferpool;
00077
00078
00079 ogg_reference *fifo_head;
00080 ogg_reference *fifo_tail;
00081 long fifo_fill;
00082
00083
00084 int unsynced;
00085 int headerbytes;
00086 int bodybytes;
00087
00088 } ogg_sync_state;
00089
00090 typedef struct ogg_stream_state {
00091 ogg_reference *header_head;
00092 ogg_reference *header_tail;
00093 ogg_reference *body_head;
00094 ogg_reference *body_tail;
00095
00096 int e_o_s;
00097
00098 int b_o_s;
00099
00100 long serialno;
00101 long pageno;
00102 ogg_int64_t packetno;
00103
00104
00105
00106
00107 ogg_int64_t granulepos;
00108
00109 int lacing_fill;
00110 ogg_uint32_t body_fill;
00111
00112
00113 int holeflag;
00114 int spanflag;
00115 int clearflag;
00116 int laceptr;
00117 ogg_uint32_t body_fill_next;
00118
00119 } ogg_stream_state;
00120
00121 typedef struct {
00122 ogg_reference *packet;
00123 long bytes;
00124 long b_o_s;
00125 long e_o_s;
00126 ogg_int64_t granulepos;
00127 ogg_int64_t packetno;
00128
00129
00130
00131
00132 } ogg_packet;
00133
00134 typedef struct {
00135 ogg_reference *header;
00136 int header_len;
00137 ogg_reference *body;
00138 long body_len;
00139 } ogg_page;
00140
00141
00142
00143 extern void oggpack_readinit(oggpack_buffer *b,ogg_reference *r);
00144 extern long oggpack_look(oggpack_buffer *b,int bits);
00145 extern void oggpack_adv(oggpack_buffer *b,int bits);
00146 extern long oggpack_read(oggpack_buffer *b,int bits);
00147 extern long oggpack_bytes(oggpack_buffer *b);
00148 extern long oggpack_bits(oggpack_buffer *b);
00149 extern int oggpack_eop(oggpack_buffer *b);
00150
00151
00152
00153 extern ogg_sync_state *ogg_sync_create(void);
00154 extern int ogg_sync_destroy(ogg_sync_state *oy);
00155 extern int ogg_sync_reset(ogg_sync_state *oy);
00156
00157 extern unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long size);
00158 extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
00159 extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
00160 extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
00161 extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
00162 extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
00163 extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
00164
00165
00166
00167 extern ogg_stream_state *ogg_stream_create(int serialno);
00168 extern int ogg_stream_destroy(ogg_stream_state *os);
00169 extern int ogg_stream_reset(ogg_stream_state *os);
00170 extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
00171 extern int ogg_stream_eos(ogg_stream_state *os);
00172
00173 extern int ogg_page_checksum_set(ogg_page *og);
00174
00175 extern int ogg_page_version(ogg_page *og);
00176 extern int ogg_page_continued(ogg_page *og);
00177 extern int ogg_page_bos(ogg_page *og);
00178 extern int ogg_page_eos(ogg_page *og);
00179 extern ogg_int64_t ogg_page_granulepos(ogg_page *og);
00180 extern ogg_uint32_t ogg_page_serialno(ogg_page *og);
00181 extern ogg_uint32_t ogg_page_pageno(ogg_page *og);
00182 extern int ogg_page_packets(ogg_page *og);
00183 extern int ogg_page_getbuffer(ogg_page *og, unsigned char **buffer);
00184
00185 extern int ogg_packet_release(ogg_packet *op);
00186 extern int ogg_page_release(ogg_page *og);
00187
00188 extern void ogg_page_dup(ogg_page *d, ogg_page *s);
00189
00190
00191
00192 #define OGG_SUCCESS 0
00193
00194 #define OGG_HOLE -10
00195 #define OGG_SPAN -11
00196 #define OGG_EVERSION -12
00197 #define OGG_ESERIAL -13
00198 #define OGG_EINVAL -14
00199 #define OGG_EEOS -15
00200
00201
00202 #ifdef __cplusplus
00203 }
00204 #endif
00205
00206 #endif