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