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-2009 * 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/ * 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ******************************************************************** 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: libvorbis backend and mapping structures; needed for 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels static mode headers 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: backends.h 16962 2010-03-11 07:30:34Z xiphmont $ 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/ 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* this is exposed up here because we need it for static modes. 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels Lookups for each backend aren't exposed because there's no reason 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels to do so */ 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifndef _vorbis_backend_h_ 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define _vorbis_backend_h_ 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "codec_internal.h" 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* this would all be simpler/shorter with templates, but.... */ 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Floor backend generic *****************************************/ 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct{ 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*pack) (vorbis_info_floor *,oggpack_buffer *); 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *); 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_floor *); 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*free_info) (vorbis_info_floor *); 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*free_look) (vorbis_look_floor *); 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *); 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int (*inverse2) (struct vorbis_block *,vorbis_look_floor *, 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void *buffer,float *); 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_func_floor; 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct{ 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int order; 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long rate; 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long barkmap; 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int ampbits; 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int ampdB; 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int numbooks; /* <= 16 */ 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int books[16]; 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float lessthan; /* encode-only config setting hacks for libvorbis */ 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float greaterthan; /* encode-only config setting hacks for libvorbis */ 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_info_floor0; 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define VIF_POSIT 63 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define VIF_CLASS 16 608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define VIF_PARTS 31 618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct{ 628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int partitions; /* 0 to 31 */ 638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int partitionclass[VIF_PARTS]; /* 0 to 15 */ 648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int class_dim[VIF_CLASS]; /* 1 to 8 */ 668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<<n poss) */ 678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int class_book[VIF_CLASS]; /* subs ^ dim entries */ 688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */ 698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int mult; /* 1 2 3 or 4 */ 728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int postlist[VIF_POSIT+2]; /* first two implicit */ 738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* encode side analysis parameters */ 768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float maxover; 778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float maxunder; 788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float maxerr; 798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float twofitweight; 818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float twofitatten; 828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int n; 848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_info_floor1; 868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Residue backend generic *****************************************/ 888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct{ 898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*pack) (vorbis_info_residue *,oggpack_buffer *); 908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *); 918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_look_residue *(*look) (vorbis_dsp_state *, 928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info_residue *); 938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*free_info) (vorbis_info_residue *); 948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*free_look) (vorbis_look_residue *); 958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long **(*class) (struct vorbis_block *,vorbis_look_residue *, 968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int **,int *,int); 978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int (*forward) (oggpack_buffer *,struct vorbis_block *, 988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_look_residue *, 998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int **,int *,int,long **,int); 1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int (*inverse) (struct vorbis_block *,vorbis_look_residue *, 1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels float **,int *,int); 1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_func_residue; 1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_info_residue0{ 1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* block-partitioned VQ coded straight residue */ 1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long begin; 1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long end; 1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* first stage (lossless partitioning) */ 1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int grouping; /* group n vectors per partition */ 1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int partitions; /* possible codebooks for a partition */ 1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int partvals; /* partitions ^ groupbook dim */ 1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int groupbook; /* huffbook for partitioning */ 1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int secondstages[64]; /* expanded out to pointers in lookup */ 1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int booklist[512]; /* list of second stage books */ 1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels const int classmetric1[64]; 1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels const int classmetric2[64]; 1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_info_residue0; 1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Mapping backend generic *****************************************/ 1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct{ 1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*pack) (vorbis_info *,vorbis_info_mapping *, 1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels oggpack_buffer *); 1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *); 1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels void (*free_info) (vorbis_info_mapping *); 1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int (*forward) (struct vorbis_block *vb); 1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int (*inverse) (struct vorbis_block *vb,vorbis_info_mapping *); 1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_func_mapping; 1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_info_mapping0{ 1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int submaps; /* <= 16 */ 1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int chmuxlist[256]; /* up to 256 channels in a Vorbis stream */ 1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int floorsubmap[16]; /* [mux] submap to floors */ 1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int residuesubmap[16]; /* [mux] submap to residue */ 1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int coupling_steps; 1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int coupling_mag[256]; 1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int coupling_ang[256]; 1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_info_mapping0; 1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 145