misc/libtremor/tremor/ogg.h
changeset 9371 f3840de881bd
parent 9370 328264029b6e
child 9372 915436ff64ab
equal deleted inserted replaced
9370:328264029b6e 9371:f3840de881bd
     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 */