Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ogg.h

Go to the documentation of this file.
00001 /********************************************************************
00002  *                                                                  *
00003  * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
00004  *                                                                  *
00005  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
00006  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
00007  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
00008  *                                                                  *
00009  * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
00010  * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
00011  *                                                                  *
00012  ********************************************************************
00013 
00014  function: subsumed libogg includes
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   /* memory management */
00058   ogg_reference *head;
00059   ogg_reference *tail;
00060 
00061   /* render the byte/bit counter API constant time */
00062   long              count; /* doesn't count the tail */
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   /* decode memory management pool */
00076   ogg_buffer_state *bufferpool;
00077 
00078   /* stream buffers */
00079   ogg_reference    *fifo_head;
00080   ogg_reference    *fifo_tail;
00081   long              fifo_fill;
00082 
00083   /* stream sync management */
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;    /* set when we have buffered the last
00097                               packet in the logical bitstream */
00098   int            b_o_s;    /* set after we've written the initial page
00099                               of a logical bitstream */
00100   long           serialno;
00101   long           pageno;
00102   ogg_int64_t    packetno; /* sequence number for decode; the framing
00103                               knows where there's a hole in the data,
00104                               but we need coupling so that the codec
00105                               (which is in a seperate abstraction
00106                               layer) also knows about the gap */
00107   ogg_int64_t    granulepos;
00108 
00109   int            lacing_fill;
00110   ogg_uint32_t   body_fill;
00111 
00112   /* decode-side state data */
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;     /* sequence number for decode; the framing
00128                                   knows where there's a hole in the data,
00129                                   but we need coupling so that the codec
00130                                   (which is in a seperate abstraction
00131                                   layer) also knows about the gap */
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 /* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
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 /* Ogg BITSTREAM PRIMITIVES: decoding **************************/
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 /* Ogg BITSTREAM PRIMITIVES: general ***************************/
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 /* Ogg BITSTREAM PRIMITIVES: return codes ***************************/
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  /* _OGG_H */

Generated on Sat Nov 5 16:15:44 2005 for OPIE by  doxygen 1.4.2