cannam@86: /******************************************************************** cannam@86: * * cannam@86: * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * cannam@86: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * cannam@86: * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * cannam@86: * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * cannam@86: * * cannam@86: * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * cannam@86: * by the Xiph.Org Foundation http://www.xiph.org/ * cannam@86: * * cannam@86: ******************************************************************** cannam@86: cannam@86: function: libvorbis backend and mapping structures; needed for cannam@86: static mode headers cannam@86: last mod: $Id: backends.h 16962 2010-03-11 07:30:34Z xiphmont $ cannam@86: cannam@86: ********************************************************************/ cannam@86: cannam@86: /* this is exposed up here because we need it for static modes. cannam@86: Lookups for each backend aren't exposed because there's no reason cannam@86: to do so */ cannam@86: cannam@86: #ifndef _vorbis_backend_h_ cannam@86: #define _vorbis_backend_h_ cannam@86: cannam@86: #include "codec_internal.h" cannam@86: cannam@86: /* this would all be simpler/shorter with templates, but.... */ cannam@86: /* Floor backend generic *****************************************/ cannam@86: typedef struct{ cannam@86: void (*pack) (vorbis_info_floor *,oggpack_buffer *); cannam@86: vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *); cannam@86: vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_floor *); cannam@86: void (*free_info) (vorbis_info_floor *); cannam@86: void (*free_look) (vorbis_look_floor *); cannam@86: void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *); cannam@86: int (*inverse2) (struct vorbis_block *,vorbis_look_floor *, cannam@86: void *buffer,float *); cannam@86: } vorbis_func_floor; cannam@86: cannam@86: typedef struct{ cannam@86: int order; cannam@86: long rate; cannam@86: long barkmap; cannam@86: cannam@86: int ampbits; cannam@86: int ampdB; cannam@86: cannam@86: int numbooks; /* <= 16 */ cannam@86: int books[16]; cannam@86: cannam@86: float lessthan; /* encode-only config setting hacks for libvorbis */ cannam@86: float greaterthan; /* encode-only config setting hacks for libvorbis */ cannam@86: cannam@86: } vorbis_info_floor0; cannam@86: cannam@86: cannam@86: #define VIF_POSIT 63 cannam@86: #define VIF_CLASS 16 cannam@86: #define VIF_PARTS 31 cannam@86: typedef struct{ cannam@86: int partitions; /* 0 to 31 */ cannam@86: int partitionclass[VIF_PARTS]; /* 0 to 15 */ cannam@86: cannam@86: int class_dim[VIF_CLASS]; /* 1 to 8 */ cannam@86: int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<