| /******************************************************************** |
| * * |
| * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * |
| * * |
| * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * |
| * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * |
| * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * |
| * * |
| * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * |
| * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * |
| * * |
| ******************************************************************** |
| |
| function: backend and mapping structures |
| |
| ********************************************************************/ |
| |
| /* this is exposed up here because we need it for static modes. |
| Lookups for each backend aren't exposed because there's no reason |
| to do so */ |
| |
| #ifndef _vorbis_backend_h_ |
| #define _vorbis_backend_h_ |
| |
| #include "codec_internal.h" |
| |
| /* this would all be simpler/shorter with templates, but.... */ |
| /* Transform backend generic *************************************/ |
| |
| /* only mdct right now. Flesh it out more if we ever transcend mdct |
| in the transform domain */ |
| |
| /* Floor backend generic *****************************************/ |
| typedef struct{ |
| vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *); |
| vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_mode *, |
| vorbis_info_floor *); |
| void (*free_info) (vorbis_info_floor *); |
| void (*free_look) (vorbis_look_floor *); |
| void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *); |
| int (*inverse2) (struct vorbis_block *,vorbis_look_floor *, |
| void *buffer,ogg_int32_t *); |
| } vorbis_func_floor; |
| |
| typedef struct{ |
| int order; |
| long rate; |
| long barkmap; |
| |
| int ampbits; |
| int ampdB; |
| |
| int numbooks; /* <= 16 */ |
| int books[16]; |
| |
| } vorbis_info_floor0; |
| |
| #define VIF_POSIT 63 |
| #define VIF_CLASS 16 |
| #define VIF_PARTS 31 |
| typedef struct{ |
| int partitions; /* 0 to 31 */ |
| int partitionclass[VIF_PARTS]; /* 0 to 15 */ |
| |
| int class_dim[VIF_CLASS]; /* 1 to 8 */ |
| int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<<n poss) */ |
| int class_book[VIF_CLASS]; /* subs ^ dim entries */ |
| int class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */ |
| |
| |
| int mult; /* 1 2 3 or 4 */ |
| int postlist[VIF_POSIT+2]; /* first two implicit */ |
| |
| } vorbis_info_floor1; |
| |
| /* Residue backend generic *****************************************/ |
| typedef struct{ |
| vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *); |
| vorbis_look_residue *(*look) (vorbis_dsp_state *,vorbis_info_mode *, |
| vorbis_info_residue *); |
| void (*free_info) (vorbis_info_residue *); |
| void (*free_look) (vorbis_look_residue *); |
| int (*inverse) (struct vorbis_block *,vorbis_look_residue *, |
| ogg_int32_t **,int *,int); |
| } vorbis_func_residue; |
| |
| typedef struct vorbis_info_residue0{ |
| /* block-partitioned VQ coded straight residue */ |
| long begin; |
| long end; |
| |
| /* first stage (lossless partitioning) */ |
| int grouping; /* group n vectors per partition */ |
| int partitions; /* possible codebooks for a partition */ |
| int groupbook; /* huffbook for partitioning */ |
| int secondstages[64]; /* expanded out to pointers in lookup */ |
| int booklist[256]; /* list of second stage books */ |
| } vorbis_info_residue0; |
| |
| /* Mapping backend generic *****************************************/ |
| typedef struct{ |
| vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *); |
| vorbis_look_mapping *(*look) (vorbis_dsp_state *,vorbis_info_mode *, |
| vorbis_info_mapping *); |
| void (*free_info) (vorbis_info_mapping *); |
| void (*free_look) (vorbis_look_mapping *); |
| int (*inverse) (struct vorbis_block *vb,vorbis_look_mapping *); |
| } vorbis_func_mapping; |
| |
| typedef struct vorbis_info_mapping0{ |
| int submaps; /* <= 16 */ |
| int chmuxlist[256]; /* up to 256 channels in a Vorbis stream */ |
| |
| int floorsubmap[16]; /* [mux] submap to floors */ |
| int residuesubmap[16]; /* [mux] submap to residue */ |
| |
| int psy[2]; /* by blocktype; impulse/padding for short, |
| transition/normal for long */ |
| |
| int coupling_steps; |
| int coupling_mag[256]; |
| int coupling_ang[256]; |
| } vorbis_info_mapping0; |
| |
| #endif |
| |
| |
| |
| |
| |