forked from len0rd/rockbox
		
	Change-Id: Id7f4717d51ed02d67cb9f9cb3c0ada4a81843f97 Reviewed-on: http://gerrit.rockbox.org/137 Reviewed-by: Nils Wallménius <nils@rockbox.org> Tested-by: Nils Wallménius <nils@rockbox.org>
		
			
				
	
	
		
			133 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /********************************************************************
 | |
|  *                                                                  *
 | |
|  * 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    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 */
 | |
| } 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[CHANNELS];   /* up to 256 channels in a Vorbis stream */
 | |
|   
 | |
|   int   floorsubmap[16];   /* [mux] submap to floors */
 | |
|   int   residuesubmap[16]; /* [mux] submap to residue */
 | |
| 
 | |
| #if 0
 | |
|   int   psy[2]; /* by blocktype; impulse/padding for short,
 | |
|                    transition/normal for long */
 | |
| #endif
 | |
| 
 | |
|   int   coupling_steps;
 | |
|   unsigned char coupling_mag[256];
 | |
|   unsigned char coupling_ang[256];
 | |
| } vorbis_info_mapping0;
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |