]> git.tdb.fi Git - ext/vorbisfile.git/blob - lib/backends.h
Add headers to the library component so dependencies work correctly
[ext/vorbisfile.git] / lib / backends.h
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 /* this would all be simpler/shorter with templates, but.... */
26 /* Floor backend generic *****************************************/
27 typedef struct{
28   void                   (*pack)  (vorbis_info_floor *,oggpack_buffer *);
29   vorbis_info_floor     *(*unpack)(vorbis_info *,oggpack_buffer *);
30   vorbis_look_floor     *(*look)  (vorbis_dsp_state *,vorbis_info_floor *);
31   void (*free_info) (vorbis_info_floor *);
32   void (*free_look) (vorbis_look_floor *);
33   void *(*inverse1)  (struct vorbis_block *,vorbis_look_floor *);
34   int   (*inverse2)  (struct vorbis_block *,vorbis_look_floor *,
35                      void *buffer,float *);
36 } vorbis_func_floor;
37
38 typedef struct{
39   int   order;
40   long  rate;
41   long  barkmap;
42
43   int   ampbits;
44   int   ampdB;
45
46   int   numbooks; /* <= 16 */
47   int   books[16];
48
49   float lessthan;     /* encode-only config setting hacks for libvorbis */
50   float greaterthan;  /* encode-only config setting hacks for libvorbis */
51
52 } vorbis_info_floor0;
53
54
55 #define VIF_POSIT 63
56 #define VIF_CLASS 16
57 #define VIF_PARTS 31
58 typedef struct{
59   int   partitions;                /* 0 to 31 */
60   int   partitionclass[VIF_PARTS]; /* 0 to 15 */
61
62   int   class_dim[VIF_CLASS];        /* 1 to 8 */
63   int   class_subs[VIF_CLASS];       /* 0,1,2,3 (bits: 1<<n poss) */
64   int   class_book[VIF_CLASS];       /* subs ^ dim entries */
65   int   class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */
66
67
68   int   mult;                      /* 1 2 3 or 4 */
69   int   postlist[VIF_POSIT+2];    /* first two implicit */
70
71
72   /* encode side analysis parameters */
73   float maxover;
74   float maxunder;
75   float maxerr;
76
77   float twofitweight;
78   float twofitatten;
79
80   int   n;
81
82 } vorbis_info_floor1;
83
84 /* Residue backend generic *****************************************/
85 typedef struct{
86   void                 (*pack)  (vorbis_info_residue *,oggpack_buffer *);
87   vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *);
88   vorbis_look_residue *(*look)  (vorbis_dsp_state *,
89                                  vorbis_info_residue *);
90   void (*free_info)    (vorbis_info_residue *);
91   void (*free_look)    (vorbis_look_residue *);
92   long **(*class)      (struct vorbis_block *,vorbis_look_residue *,
93                         int **,int *,int);
94   int  (*forward)      (oggpack_buffer *,struct vorbis_block *,
95                         vorbis_look_residue *,
96                         int **,int *,int,long **,int);
97   int  (*inverse)      (struct vorbis_block *,vorbis_look_residue *,
98                         float **,int *,int);
99 } vorbis_func_residue;
100
101 typedef struct vorbis_info_residue0{
102 /* block-partitioned VQ coded straight residue */
103   long  begin;
104   long  end;
105
106   /* first stage (lossless partitioning) */
107   int    grouping;         /* group n vectors per partition */
108   int    partitions;       /* possible codebooks for a partition */
109   int    partvals;         /* partitions ^ groupbook dim */
110   int    groupbook;        /* huffbook for partitioning */
111   int    secondstages[64]; /* expanded out to pointers in lookup */
112   int    booklist[512];    /* list of second stage books */
113
114   const int classmetric1[64];
115   const int classmetric2[64];
116 } vorbis_info_residue0;
117
118 /* Mapping backend generic *****************************************/
119 typedef struct{
120   void                 (*pack)  (vorbis_info *,vorbis_info_mapping *,
121                                  oggpack_buffer *);
122   vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *);
123   void (*free_info)    (vorbis_info_mapping *);
124   int  (*forward)      (struct vorbis_block *vb);
125   int  (*inverse)      (struct vorbis_block *vb,vorbis_info_mapping *);
126 } vorbis_func_mapping;
127
128 typedef struct vorbis_info_mapping0{
129   int   submaps;  /* <= 16 */
130   int   chmuxlist[256];   /* up to 256 channels in a Vorbis stream */
131
132   int   floorsubmap[16];   /* [mux] submap to floors */
133   int   residuesubmap[16]; /* [mux] submap to residue */
134
135   int   coupling_steps;
136   int   coupling_mag[256];
137   int   coupling_ang[256];
138
139 } vorbis_info_mapping0;
140
141 #endif