18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/******************************************************************** 28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/ * 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ******************************************************************** 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: libvorbis codec headers 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $ 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/ 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifndef _vorbis_codec_h_ 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define _vorbis_codec_h_ 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef __cplusplus 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern "C" 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels{ 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif /* __cplusplus */ 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <ogg/ogg.h> 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_info{ 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int version; 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int channels; 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long rate; 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* The below bitrate declarations are *hints*. 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels Combinations of the three values carry the following implications: 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels all three set to the same value: 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels implies a fixed rate bitstream 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels only nominal set: 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels implies a VBR stream that averages the nominal bitrate. No hard 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels upper/lower limit 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels upper and or lower set: 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels implies a VBR bitstream that obeys the bitrate limits. nominal 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels may also be set to give a nominal rate. 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels none set: 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels the coder does not care to speculate. 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */ 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long bitrate_upper; 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long bitrate_nominal; 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long bitrate_lower; 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long bitrate_window; 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *codec_setup; 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_info; 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* vorbis_dsp_state buffers the current vorbis audio 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels analysis/synthesis state. The DSP state belongs to a specific 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels logical bitstream ****************************************************/ 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_dsp_state{ 608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int analysisp; 618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info *vi; 628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float **pcm; 648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float **pcmret; 658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int pcm_storage; 668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int pcm_current; 678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int pcm_returned; 688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int preextrapolate; 708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int eofflag; 718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long lW; 738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long W; 748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long nW; 758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long centerW; 768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t granulepos; 788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t sequence; 798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t glue_bits; 818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t time_bits; 828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t floor_bits; 838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t res_bits; 848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *backend_state; 868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_dsp_state; 878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_block{ 898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* necessary stream state for linking to the framing abstraction */ 908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float **pcm; /* this is a pointer into local storage */ 918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels oggpack_buffer opb; 928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long lW; 948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long W; 958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long nW; 968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int pcmend; 978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int mode; 988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int eofflag; 1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t granulepos; 1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t sequence; 1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_dsp_state *vd; /* For read-only access of configuration */ 1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* local storage to avoid remallocing; it's up to the mapping to 1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels structure it */ 1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *localstore; 1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long localtop; 1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long localalloc; 1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long totaluse; 1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels struct alloc_chain *reap; 1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* bitmetrics for the frame */ 1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long glue_bits; 1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long time_bits; 1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long floor_bits; 1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long res_bits; 1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *internal; 1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_block; 1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* vorbis_block is a single block of data to be processed as part of 1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsthe analysis/synthesis stream; it belongs to a specific logical 1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsbitstream, but is independent from other vorbis_blocks belonging to 1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsthat logical bitstream. *************************************************/ 1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsstruct alloc_chain{ 1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *ptr; 1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels struct alloc_chain *next; 1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels}; 1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* vorbis_info contains all the setup information specific to the 1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels specific compression/decompression mode in progress (eg, 1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels psychoacoustic settings, channel setup, options, codebook 1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels etc). vorbis_info and substructures are in backends.h. 1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*********************************************************************/ 1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* the comments are not part of vorbis_info so that vorbis_info can be 1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels static storage */ 1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_comment{ 1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* unlimited user comment fields. libvorbis writes 'libvorbis' 1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels whatever vendor is set to in encode */ 1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels char **user_comments; 1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int *comment_lengths; 1458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int comments; 1468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels char *vendor; 1478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_comment; 1498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* libvorbis encodes in two abstraction layers; first we perform DSP 1528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels and produce a packet (see docs/analysis.txt). The packet is then 1538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels coded into a framed OggSquish bitstream by the second layer (see 1548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels docs/framing.txt). Decode is the reverse process; we sync/frame 1558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels the bitstream and extract individual packets, then decode the 1568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels packet back into PCM audio. 1578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels The extra framing/packetizing is used in streaming formats, such as 1598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels files. Over the net (such as with UDP), the framing and 1608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels packetization aren't necessary as they're provided by the transport 1618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels and the streaming layer is not used */ 1628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis PRIMITIVES: general ***************************************/ 1648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_info_init(vorbis_info *vi); 1668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_info_clear(vorbis_info *vi); 1678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_info_blocksize(vorbis_info *vi,int zo); 1688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_comment_init(vorbis_comment *vc); 1698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_comment_add(vorbis_comment *vc, const char *comment); 1708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_comment_add_tag(vorbis_comment *vc, 1718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels const char *tag, const char *contents); 1728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count); 1738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_comment_query_count(vorbis_comment *vc, const char *tag); 1748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_comment_clear(vorbis_comment *vc); 1758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb); 1778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_block_clear(vorbis_block *vb); 1788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_dsp_clear(vorbis_dsp_state *v); 1798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern double vorbis_granule_time(vorbis_dsp_state *v, 1808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t granulepos); 1818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern const char *vorbis_version_string(void); 1838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/ 1858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi); 1878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op); 1888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_analysis_headerout(vorbis_dsp_state *v, 1898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_comment *vc, 1908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_packet *op, 1918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_packet *op_comm, 1928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_packet *op_code); 1938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals); 1948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals); 1958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb); 1968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_analysis(vorbis_block *vb,ogg_packet *op); 1978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_bitrate_addblock(vorbis_block *vb); 1998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, 2008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_packet *op); 2018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis PRIMITIVES: synthesis layer *******************************/ 2038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_idheader(ogg_packet *op); 2048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc, 2058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_packet *op); 2068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi); 2088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_restart(vorbis_dsp_state *v); 2098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op); 2108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op); 2118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb); 2128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm); 2138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm); 2148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples); 2158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op); 2168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_halfrate(vorbis_info *v,int flag); 2188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_synthesis_halfrate_p(vorbis_info *v); 2198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis ERRORS and return codes ***********************************/ 2218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_FALSE -1 2238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EOF -2 2248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_HOLE -3 2258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EREAD -128 2278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EFAULT -129 2288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EIMPL -130 2298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EINVAL -131 2308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ENOTVORBIS -132 2318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EBADHEADER -133 2328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EVERSION -134 2338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ENOTAUDIO -135 2348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EBADPACKET -136 2358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EBADLINK -137 2368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ENOSEEK -138 2378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef __cplusplus 2398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} 2408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif /* __cplusplus */ 2418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 2438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 244