137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang/************************************************************************ 22da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Copyright (C) 2002-2009, Xiph.org Foundation 32da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Copyright (C) 2010, Robin Watts for Pinknoise Productions Ltd 437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * All rights reserved. 537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * 637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * Redistribution and use in source and binary forms, with or without 72da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * modification, are permitted provided that the following conditions 82da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * are met: 937fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * 1037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * * Redistributions of source code must retain the above copyright 1137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * notice, this list of conditions and the following disclaimer. 1237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * * Redistributions in binary form must reproduce the above 1337fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * copyright notice, this list of conditions and the following disclaimer 1437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * in the documentation and/or other materials provided with the 1537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * distribution. 162da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * * Neither the names of the Xiph.org Foundation nor Pinknoise 172da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Productions Ltd nor the names of its contributors may be used to 182da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * endorse or promote products derived from this software without 192da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * specific prior written permission. 2037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * 2137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2337fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2737fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2837fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2937fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang ************************************************************************ 337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang function: libvorbis codec headers 357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 3637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang ************************************************************************/ 377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifndef _V_CODECI_H_ 397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define _V_CODECI_H_ 407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define CHUNKSIZE 1024 427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include "codebook.h" 447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include "ivorbiscodec.h" 457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define VI_TRANSFORMB 1 477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define VI_WINDOWB 1 487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define VI_TIMEB 1 497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define VI_FLOORB 2 507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define VI_RESB 3 517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define VI_MAPB 1 527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef void vorbis_info_floor; 547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* vorbis_dsp_state buffers the current vorbis audio 567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang analysis/synthesis state. The DSP state belongs to a specific 577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang logical bitstream ****************************************************/ 587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstruct vorbis_dsp_state{ 597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info *vi; 607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang oggpack_buffer opb; 617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int32_t **work; 637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int32_t **mdctright; 647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int out_begin; 657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int out_end; 667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long lW; 687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long W; 697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int64_t granulepos; 717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int64_t sequence; 727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int64_t sample_count; 737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}; 757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Floor backend generic *****************************************/ 787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern vorbis_info_floor *floor0_info_unpack(vorbis_info *,oggpack_buffer *); 807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void floor0_free_info(vorbis_info_floor *); 817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int floor0_memosize(vorbis_info_floor *); 827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_int32_t *floor0_inverse1(struct vorbis_dsp_state *, 837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info_floor *,ogg_int32_t *); 847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int floor0_inverse2 (struct vorbis_dsp_state *,vorbis_info_floor *, 857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int32_t *buffer,ogg_int32_t *); 867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern vorbis_info_floor *floor1_info_unpack(vorbis_info *,oggpack_buffer *); 887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void floor1_free_info(vorbis_info_floor *); 897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int floor1_memosize(vorbis_info_floor *); 907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_int32_t *floor1_inverse1(struct vorbis_dsp_state *, 917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info_floor *,ogg_int32_t *); 927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int floor1_inverse2 (struct vorbis_dsp_state *,vorbis_info_floor *, 937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int32_t *buffer,ogg_int32_t *); 947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct{ 967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int order; 977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long rate; 987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long barkmap; 997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int ampbits; 1017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int ampdB; 1027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int numbooks; /* <= 16 */ 1047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char books[16]; 1057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_info_floor0; 1077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct{ 1097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char class_dim; /* 1 to 8 */ 1107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char class_subs; /* 0,1,2,3 (bits: 1<<n poss) */ 1117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char class_book; /* subs ^ dim entries */ 1127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char class_subbook[8]; /* [VIF_CLASS][subs] */ 1137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} floor1class; 1147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct{ 1161a7ca64dd19ab9a5af3c4c3c58c815f764877bf7Andreas Huber floor1class *klass; /* [VIF_CLASS] */ 1177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *partitionclass; /* [VIF_PARTS]; 0 to 15 */ 1187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_uint16_t *postlist; /* [VIF_POSIT+2]; first two implicit */ 1197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *forward_index; /* [VIF_POSIT+2]; */ 1207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *hineighbor; /* [VIF_POSIT]; */ 1217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *loneighbor; /* [VIF_POSIT]; */ 1227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int partitions; /* 0 to 31 */ 1247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int posts; 1257913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int mult; /* 1 2 3 or 4 */ 1267913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1277913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_info_floor1; 1287913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1297913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Residue backend generic *****************************************/ 1307913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1317913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct vorbis_info_residue{ 1327913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int type; 1337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char *stagemasks; 1347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char *stagebooks; 1357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1367913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* block-partitioned VQ coded straight residue */ 1377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long begin; 1387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long end; 1397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang /* first stage (lossless partitioning) */ 1417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int grouping; /* group n vectors per partition */ 1427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char partitions; /* possible codebooks for a partition */ 1437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char groupbook; /* huffbook for partitioning */ 1447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char stages; 1457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_info_residue; 1467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void res_clear_info(vorbis_info_residue *info); 1487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int res_unpack(vorbis_info_residue *info, 1497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info *vi,oggpack_buffer *opb); 1507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int res_inverse(vorbis_dsp_state *,vorbis_info_residue *info, 1517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int32_t **in,int *nonzero,int ch); 1527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* mode ************************************************************/ 1547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct { 1557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char blockflag; 1567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char mapping; 1577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_info_mode; 1587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Mapping backend generic *****************************************/ 1607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct coupling_step{ 1617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char mag; 1627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char ang; 1637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} coupling_step; 1647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct submap{ 1667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char floor; 1677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char residue; 1687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} submap; 1697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct vorbis_info_mapping{ 1717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int submaps; 1727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang unsigned char *chmuxlist; 1747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang submap *submaplist; 1757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int coupling_steps; 1777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang coupling_step *coupling; 1787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_info_mapping; 1797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int mapping_info_unpack(vorbis_info_mapping *,vorbis_info *, 1817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang oggpack_buffer *); 1827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void mapping_clear_info(vorbis_info_mapping *); 1837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int mapping_inverse(struct vorbis_dsp_state *,vorbis_info_mapping *); 1847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* codec_setup_info contains all the setup information specific to the 1867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang specific compression/decompression mode in progress (eg, 1877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang psychoacoustic settings, channel setup, options, codebook 1887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang etc). 1897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang*********************************************************************/ 1907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct codec_setup_info { 1927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang /* Vorbis supports only short and long blocks, but allows the 1947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang encoder to choose the sizes */ 1957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long blocksizes[2]; 1977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang /* modes are the primary means of supporting on-the-fly different 1997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang blocksizes, different channel mappings (LR or M/A), 2007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang different residue backends, etc. Each mode consists of a 2017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang blocksize flag and a mapping (along with the mapping setup */ 2027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int modes; 2047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int maps; 2057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int floors; 2067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int residues; 2077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int books; 2087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info_mode *mode_param; 2107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info_mapping *map_param; 2117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *floor_type; 2127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info_floor **floor_param; 2137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang vorbis_info_residue *residue_param; 2147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang codebook *book_param; 2157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2167913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} codec_setup_info; 2177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_dsp_init(vorbis_dsp_state *v, vorbis_info *vi); 2197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_dsp_clear(vorbis_dsp_state *v); 2207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern vorbis_dsp_state *vorbis_dsp_create(vorbis_info *vi); 2217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_dsp_destroy(vorbis_dsp_state *v); 2227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_dsp_headerin(vorbis_info *vi,vorbis_comment *vc, 2237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_packet *op); 2247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2257913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_dsp_restart(vorbis_dsp_state *v); 2267913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_dsp_synthesis(vorbis_dsp_state *vd, 2277913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_packet *op,int decodep); 2287913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_dsp_pcmout(vorbis_dsp_state *v, 2297913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang ogg_int16_t *pcm,int samples); 2307913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_dsp_read(vorbis_dsp_state *v,int samples); 2317913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op); 2327913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 2357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif 236