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