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
|
---|