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