| /******************************************************************** |
| * * |
| * THIS FILE IS PART OF THE OggVorbis SOFTWARE 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 SOURCE CODE IS (C) COPYRIGHT 1994-2009 * |
| * by the Xiph.Org Foundation http://www.xiph.org/ * |
| * * |
| ******************************************************************** |
| |
| function: libvorbis backend and mapping structures; needed for |
| static mode headers |
| last mod: $Id: backends.h 16962 2010-03-11 07:30:34Z xiphmont $ |
| |
| ********************************************************************/ |
| |
| /* 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.... */ |
| /* Floor backend generic *****************************************/ |
| typedef struct{ |
| void (*pack) (vorbis_info_floor *,oggpack_buffer *); |
| vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *); |
| vorbis_look_floor *(*look) (vorbis_dsp_state *,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,float *); |
| } vorbis_func_floor; |
| |
| typedef struct{ |
| int order; |
| long rate; |
| long barkmap; |
| |
| int ampbits; |
| int ampdB; |
| |
| int numbooks; /* <= 16 */ |
| int books[16]; |
| |
| float lessthan; /* encode-only config setting hacks for libvorbis */ |
| float greaterthan; /* encode-only config setting hacks for libvorbis */ |
| |
| } 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 */ |
| |
| |
| /* encode side analysis parameters */ |
| float maxover; |
| float maxunder; |
| float maxerr; |
| |
| float twofitweight; |
| float twofitatten; |
| |
| int n; |
| |
| } vorbis_info_floor1; |
| |
| /* Residue backend generic *****************************************/ |
| typedef struct{ |
| void (*pack) (vorbis_info_residue *,oggpack_buffer *); |
| vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *); |
| vorbis_look_residue *(*look) (vorbis_dsp_state *, |
| vorbis_info_residue *); |
| void (*free_info) (vorbis_info_residue *); |
| void (*free_look) (vorbis_look_residue *); |
| long **(*class) (struct vorbis_block *,vorbis_look_residue *, |
| int **,int *,int); |
| int (*forward) (oggpack_buffer *,struct vorbis_block *, |
| vorbis_look_residue *, |
| int **,int *,int,long **,int); |
| int (*inverse) (struct vorbis_block *,vorbis_look_residue *, |
| float **,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 partvals; /* partitions ^ groupbook dim */ |
| int groupbook; /* huffbook for partitioning */ |
| int secondstages[64]; /* expanded out to pointers in lookup */ |
| int booklist[512]; /* list of second stage books */ |
| |
| const int classmetric1[64]; |
| const int classmetric2[64]; |
| } vorbis_info_residue0; |
| |
| /* Mapping backend generic *****************************************/ |
| typedef struct{ |
| void (*pack) (vorbis_info *,vorbis_info_mapping *, |
| oggpack_buffer *); |
| vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *); |
| void (*free_info) (vorbis_info_mapping *); |
| int (*forward) (struct vorbis_block *vb); |
| int (*inverse) (struct vorbis_block *vb,vorbis_info_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 coupling_steps; |
| int coupling_mag[256]; |
| int coupling_ang[256]; |
| |
| } vorbis_info_mapping0; |
| |
| #endif |