1 /******************************************************************** 2 * * 3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 7 * * 8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * 9 * by the Xiph.Org Foundation https://xiph.org/ * 10 * * 11 ******************************************************************** 12 13 function: libvorbis backend and mapping structures; needed for 14 static mode headers 15 16 ********************************************************************/ 17 18 /* this is exposed up here because we need it for static modes. 19 Lookups for each backend aren't exposed because there's no reason 20 to do so */ 21 22 #ifndef _vorbis_backend_h_ 23 #define _vorbis_backend_h_ 24 25 #include "codec_internal.h" 26 27 /* this would all be simpler/shorter with templates, but.... */ 28 /* Floor backend generic *****************************************/ 29 typedef struct{ 30 void (*pack) (vorbis_info_floor *,oggpack_buffer *); 31 vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *); 32 vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_floor *); 33 void (*free_info) (vorbis_info_floor *); 34 void (*free_look) (vorbis_look_floor *); 35 void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *); 36 int (*inverse2) (struct vorbis_block *,vorbis_look_floor *, 37 void *buffer,float *); 38 } vorbis_func_floor; 39 40 typedef struct{ 41 int order; 42 long rate; 43 long barkmap; 44 45 int ampbits; 46 int ampdB; 47 48 int numbooks; /* <= 16 */ 49 int books[16]; 50 51 float lessthan; /* encode-only config setting hacks for libvorbis */ 52 float greaterthan; /* encode-only config setting hacks for libvorbis */ 53 54 } vorbis_info_floor0; 55 56 57 #define VIF_POSIT 63 58 #define VIF_CLASS 16 59 #define VIF_PARTS 31 60 typedef struct{ 61 int partitions; /* 0 to 31 */ 62 int partitionclass[VIF_PARTS]; /* 0 to 15 */ 63 64 int class_dim[VIF_CLASS]; /* 1 to 8 */ 65 int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<<n poss) */ 66 int class_book[VIF_CLASS]; /* subs ^ dim entries */ 67 int class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */ 68 69 70 int mult; /* 1 2 3 or 4 */ 71 int postlist[VIF_POSIT+2]; /* first two implicit */ 72 73 74 /* encode side analysis parameters */ 75 float maxover; 76 float maxunder; 77 float maxerr; 78 79 float twofitweight; 80 float twofitatten; 81 82 int n; 83 84 } vorbis_info_floor1; 85 86 /* Residue backend generic *****************************************/ 87 typedef struct{ 88 void (*pack) (vorbis_info_residue *,oggpack_buffer *); 89 vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *); 90 vorbis_look_residue *(*look) (vorbis_dsp_state *, 91 vorbis_info_residue *); 92 void (*free_info) (vorbis_info_residue *); 93 void (*free_look) (vorbis_look_residue *); 94 long **(*class) (struct vorbis_block *,vorbis_look_residue *, 95 int **,int *,int); 96 int (*forward) (oggpack_buffer *,struct vorbis_block *, 97 vorbis_look_residue *, 98 int **,int *,int,long **,int); 99 int (*inverse) (struct vorbis_block *,vorbis_look_residue *, 100 float **,int *,int); 101 } vorbis_func_residue; 102 103 typedef struct vorbis_info_residue0{ 104 /* block-partitioned VQ coded straight residue */ 105 long begin; 106 long end; 107 108 /* first stage (lossless partitioning) */ 109 int grouping; /* group n vectors per partition */ 110 int partitions; /* possible codebooks for a partition */ 111 int partvals; /* partitions ^ groupbook dim */ 112 int groupbook; /* huffbook for partitioning */ 113 int secondstages[64]; /* expanded out to pointers in lookup */ 114 int booklist[512]; /* list of second stage books */ 115 116 const int classmetric1[64]; 117 const int classmetric2[64]; 118 } vorbis_info_residue0; 119 120 /* Mapping backend generic *****************************************/ 121 typedef struct{ 122 void (*pack) (vorbis_info *,vorbis_info_mapping *, 123 oggpack_buffer *); 124 vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *); 125 void (*free_info) (vorbis_info_mapping *); 126 int (*forward) (struct vorbis_block *vb); 127 int (*inverse) (struct vorbis_block *vb,vorbis_info_mapping *); 128 } vorbis_func_mapping; 129 130 typedef struct vorbis_info_mapping0{ 131 int submaps; /* <= 16 */ 132 int chmuxlist[256]; /* up to 256 channels in a Vorbis stream */ 133 134 int floorsubmap[16]; /* [mux] submap to floors */ 135 int residuesubmap[16]; /* [mux] submap to residue */ 136 137 int coupling_steps; 138 int coupling_mag[256]; 139 int coupling_ang[256]; 140 141 } vorbis_info_mapping0; 142 143 #endif 144