16
16
***************************************************************************/
17
17
#ifndef ADMAUDIOCODEC
18
18
#define ADMAUDIOCODEC
19
#define SCRATCH_PAD_SIZE (80000*2)
20
extern uint8_t scratchPad[];
20
21
#define ADMAC_BUFFER (48000*4)
28
ADM_Audiocodec( uint32_t fourcc );
29
virtual ~ADM_Audiocodec() ;
30
virtual void purge( void ) {};
31
virtual uint8_t beginDecompress( void )=0;
32
virtual uint8_t endDecompress( void )=0;
33
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut)=0;
34
virtual uint8_t isCompressed( void )=0;
35
virtual uint8_t isDecompressable( void )=0;
26
WAVHeader *_wavHeader;
28
ADM_Audiocodec(uint32_t fourcc);
29
virtual ~ADM_Audiocodec();
30
virtual void purge(void) {}
31
virtual uint8_t beginDecompress(void)=0;
32
virtual uint8_t endDecompress(void)=0;
33
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut)=0;
34
virtual uint8_t isCompressed(void)=0;
35
virtual uint8_t isDecompressable(void)=0;
40
ADM_Audiocodec *getAudioCodec(uint32_t fourcc,WAVHeader *info=NULL,uint32_t extra=0,uint8_t *extraData=NULL);
42
class ADM_AudiocodecWav : public ADM_Audiocodec
46
ADM_AudiocodecWav( uint32_t fourcc );;
47
virtual ~ADM_AudiocodecWav();
48
virtual void purge( void );
49
virtual uint8_t beginDecompress( void );
50
virtual uint8_t endDecompress( void ) ;
51
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
52
virtual uint8_t isCompressed( void ) ;
53
virtual uint8_t isDecompressable(void );
38
ADM_Audiocodec *getAudioCodec(uint32_t fourcc, WAVHeader *info, uint32_t extra=0, uint8_t *extraData=NULL);
40
class ADM_AudiocodecWav : public ADM_Audiocodec
43
ADM_AudiocodecWav(uint32_t fourcc);
44
virtual ~ADM_AudiocodecWav();
45
virtual uint8_t beginDecompress(void);
46
virtual uint8_t endDecompress(void);
47
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t * nbOut);
48
virtual uint8_t isCompressed(void);
49
virtual uint8_t isDecompressable(void);
57
52
class ADM_AudiocodecWavSwapped : public ADM_Audiocodec
63
ADM_AudiocodecWavSwapped( uint32_t fourcc );;
64
virtual ~ADM_AudiocodecWavSwapped();
65
virtual void purge( void );
66
virtual uint8_t beginDecompress( void );
67
virtual uint8_t endDecompress( void ) ;
68
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
69
virtual uint8_t isCompressed( void ) ;
70
virtual uint8_t isDecompressable(void );
74
class ADM_AudiocodecUnknown : public ADM_Audiocodec
78
ADM_AudiocodecUnknown( uint32_t fourcc ) : ADM_Audiocodec(fourcc){};;
79
~ADM_AudiocodecUnknown();
80
virtual void purge( void ) {};
81
uint8_t beginDecompress( void ) { return 0;};
82
uint8_t endDecompress( void ){ return 0;};
83
uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
84
uint8_t isCompressed( void ){ return 1;};
85
uint8_t isDecompressable(void ){ return 0;};
55
ADM_AudiocodecWavSwapped(uint32_t fourcc);
56
virtual ~ADM_AudiocodecWavSwapped();
57
virtual uint8_t beginDecompress(void);
58
virtual uint8_t endDecompress(void);
59
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
60
virtual uint8_t isCompressed(void);
61
virtual uint8_t isDecompressable(void);
65
class ADM_AudiocodecUnknown : public ADM_Audiocodec
68
ADM_AudiocodecUnknown(uint32_t fourcc) : ADM_Audiocodec(fourcc) {}
69
~ADM_AudiocodecUnknown() {}
70
uint8_t beginDecompress(void) {return 0;}
71
uint8_t endDecompress(void) {return 0;}
72
uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut) {return 1;}
73
uint8_t isCompressed(void) {return 1;}
74
uint8_t isDecompressable(void) {return 0;}
89
class ADM_AudiocodecAC3 : public ADM_Audiocodec
93
ADM_AudiocodecAC3( uint32_t fourcc );
94
virtual ~ADM_AudiocodecAC3();
95
virtual void purge( void ) {};
96
virtual uint8_t beginDecompress( void );
97
virtual uint8_t endDecompress( void );
98
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
99
virtual uint8_t isCompressed( void ){ return 1;};
100
virtual uint8_t isDecompressable(void ){ return 1;};
105
class ADM_Audiocodec8Bits : public ADM_Audiocodec
110
ADM_Audiocodec8Bits( uint32_t fourcc );
111
virtual ~ADM_Audiocodec8Bits() ;
112
virtual void purge( void ) {};
113
virtual uint8_t beginDecompress( void ) {return 1;};
114
virtual uint8_t endDecompress( void ) {return 1;}
115
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
116
virtual uint8_t isCompressed( void ){ return 1;};
117
virtual uint8_t isDecompressable(void ){ return 1;};
78
#define ADM_AC3_BUFFER (50000*2)
79
class ADM_AudiocodecAC3 : public ADM_Audiocodec
87
ADM_AudiocodecAC3(uint32_t fourcc, WAVHeader *info);
88
virtual ~ADM_AudiocodecAC3();
89
virtual uint8_t beginDecompress(void);
90
virtual uint8_t endDecompress(void);
91
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
92
virtual uint8_t isCompressed(void) {return 1;}
93
virtual uint8_t isDecompressable(void) {return 1;}
99
class ADM_AudiocodecDCA : public ADM_Audiocodec
105
ADM_AudiocodecDCA(uint32_t fourcc, WAVHeader *info);
106
virtual ~ADM_AudiocodecDCA();
107
virtual uint8_t beginDecompress(void);
108
virtual uint8_t endDecompress(void);
109
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
110
virtual uint8_t isCompressed(void) {return 1;}
111
virtual uint8_t isDecompressable(void) {return 1;}
116
class ADM_Audiocodec8Bits : public ADM_Audiocodec
122
ADM_Audiocodec8Bits(uint32_t fourcc);
123
virtual ~ADM_Audiocodec8Bits();
124
virtual uint8_t beginDecompress(void) {return 1;}
125
virtual uint8_t endDecompress(void) {return 1;}
126
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
127
virtual uint8_t isCompressed(void) {return 1;}
128
virtual uint8_t isDecompressable(void) {return 1;}
123
132
#define ADM_MP3_BUFFER (48*1024)
124
class ADM_AudiocodecMP3 : public ADM_Audiocodec
129
uint8_t _buffer[ADM_MP3_BUFFER];
134
ADM_AudiocodecMP3( uint32_t fourcc );
135
virtual ~ADM_AudiocodecMP3() ;
136
virtual void purge( void ) {};
137
virtual uint8_t beginDecompress( void ) ;
138
virtual uint8_t endDecompress( void );
139
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
140
virtual uint8_t isCompressed( void ){ return 1;};
141
virtual uint8_t isDecompressable(void ){ return 1;};
133
class ADM_AudiocodecMP3 : public ADM_Audiocodec
138
uint8_t _buffer[ADM_MP3_BUFFER];
144
ADM_AudiocodecMP3(uint32_t fourcc);
145
virtual ~ADM_AudiocodecMP3() ;
146
virtual uint8_t beginDecompress(void);
147
virtual uint8_t endDecompress(void);
148
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
149
virtual uint8_t isCompressed(void) {return 1;}
150
virtual uint8_t isDecompressable(void) {return 1;}
146
154
#ifdef USE_VORBIS
147
class ADM_vorbis : public ADM_Audiocodec
152
ADM_vorbis( uint32_t fourcc ,WAVHeader *info,
153
uint32_t l,uint8_t *d);
154
virtual ~ADM_vorbis() ;
155
virtual void purge( void ) {};
156
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn,
157
uint8_t * outptr, uint32_t * nbOut);
158
virtual uint8_t isCompressed( void ){ return 1;};
159
virtual uint8_t isDecompressable(void ){ return 1;};
160
virtual uint8_t beginDecompress( void ) { return 1;};
161
virtual uint8_t endDecompress( void );
155
class ADM_vorbis : public ADM_Audiocodec
161
ADM_vorbis(uint32_t fourcc, WAVHeader *info, uint32_t l, uint8_t *d);
162
virtual ~ADM_vorbis();
163
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
164
virtual uint8_t isCompressed(void) {return 1;}
165
virtual uint8_t isDecompressable(void) {return 1;}
166
virtual uint8_t beginDecompress(void) {return 1;}
167
virtual uint8_t endDecompress(void);
170
172
#define FAAD_BUFFER 2048
171
class ADM_faad : public ADM_Audiocodec
176
uint8_t _buffer[FAAD_BUFFER];
179
ADM_faad( uint32_t fourcc ,WAVHeader *info,
180
uint32_t l,uint8_t *d);
181
virtual ~ADM_faad() ;
182
virtual void purge( void );
183
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn,
184
uint8_t * outptr, uint32_t * nbOut);
185
virtual uint8_t isCompressed( void ){ return 1;};
186
virtual uint8_t isDecompressable(void ){ return 1;};
187
virtual uint8_t beginDecompress( void ) ;
188
virtual uint8_t endDecompress( void ) ;
173
class ADM_faad : public ADM_Audiocodec
178
uint8_t _buffer[FAAD_BUFFER];
182
ADM_faad(uint32_t fourcc, WAVHeader *info, uint32_t l, uint8_t *d);
184
virtual void purge(void);
185
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
186
virtual uint8_t isCompressed(void) {return 1;}
187
virtual uint8_t isDecompressable(void) {return 1;}
188
virtual uint8_t beginDecompress(void);
189
virtual uint8_t endDecompress(void);
197
193
#define ADMWA_BUF (4*1024*16) // 64 kB internal
198
class ADM_AudiocodecWMA : public ADM_Audiocodec
202
uint8_t _buffer[ ADMWA_BUF];
203
uint32_t _tail,_head;
204
uint32_t _blockalign;
206
ADM_AudiocodecWMA( uint32_t fourcc ,WAVHeader *info,uint32_t l,uint8_t *d);
207
virtual ~ADM_AudiocodecWMA() ;
208
virtual void purge( void ) {};
209
virtual uint8_t beginDecompress( void ) ;
210
virtual uint8_t endDecompress( void );
211
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
212
virtual uint8_t isCompressed( void ){ return 1;};
213
virtual uint8_t isDecompressable(void ){ return 1;};
216
//****************************************************
217
#define ADM_AMR_BUFFER (16*1024) // 16 kB internal
218
class ADM_AudiocodecAMR : public ADM_Audiocodec
222
uint8_t _buffer[ ADM_AMR_BUFFER];
223
uint32_t _head,_tail;
225
ADM_AudiocodecAMR( uint32_t fourcc ,WAVHeader *info);
226
virtual ~ADM_AudiocodecAMR() ;
227
virtual void purge( void ) {};
228
virtual uint8_t beginDecompress( void ) ;
229
virtual uint8_t endDecompress( void );
230
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr, uint32_t * nbOut);
231
virtual uint8_t isCompressed( void ){ return 1;};
232
virtual uint8_t isDecompressable(void ){ return 1;};
235
//****************************************************
236
class ADM_AudiocodecUlaw : public ADM_Audiocodec
241
ADM_AudiocodecUlaw( uint32_t fourcc ,WAVHeader *info);
242
virtual ~ADM_AudiocodecUlaw() ;
243
virtual void purge( void ) {};
244
virtual uint8_t beginDecompress( void ) {return 1;};
245
virtual uint8_t endDecompress( void ) {return 1;};
246
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr,
248
virtual uint8_t isCompressed( void ){ return 1;};
249
virtual uint8_t isDecompressable(void ){ return 1;};
253
//****************************************************
194
class ADM_AudiocodecWMA : public ADM_Audiocodec
198
uint8_t _buffer[ ADMWA_BUF];
199
uint32_t _tail,_head;
200
uint32_t _blockalign;
203
ADM_AudiocodecWMA(uint32_t fourcc, WAVHeader *info, uint32_t l, uint8_t *d);
204
virtual ~ADM_AudiocodecWMA() ;
205
virtual uint8_t beginDecompress(void);
206
virtual uint8_t endDecompress(void);
207
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
208
virtual uint8_t isCompressed(void) {return 1;}
209
virtual uint8_t isDecompressable(void) {return 1;}
212
#define ADM_AMR_BUFFER (16*1024) // 16 kB internal
213
class ADM_AudiocodecAMR : public ADM_Audiocodec
217
uint8_t _buffer[ ADM_AMR_BUFFER];
218
uint32_t _head,_tail;
221
ADM_AudiocodecAMR(uint32_t fourcc, WAVHeader *info);
222
virtual ~ADM_AudiocodecAMR() ;
223
virtual uint8_t beginDecompress(void) ;
224
virtual uint8_t endDecompress(void);
225
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
226
virtual uint8_t isCompressed(void) {return 1;}
227
virtual uint8_t isDecompressable(void) {return 1;}
230
class ADM_AudiocodecUlaw : public ADM_Audiocodec
233
ADM_AudiocodecUlaw(uint32_t fourcc, WAVHeader *info);
234
virtual ~ADM_AudiocodecUlaw() ;
235
virtual uint8_t beginDecompress(void) {return 1;}
236
virtual uint8_t endDecompress(void) {return 1;}
237
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
238
virtual uint8_t isCompressed(void) {return 1;}
239
virtual uint8_t isDecompressable(void) {return 1;}
254
242
#define IMA_BUFFER 4096*8
255
class ADM_AudiocodecImaAdpcm : public ADM_Audiocodec
258
uint32_t _inStock,_me,_channels;
259
int ss_div,ss_mul; // ???
261
uint8_t _buffer[ IMA_BUFFER];
262
uint32_t _head,_tail;
265
ADM_AudiocodecImaAdpcm( uint32_t fourcc ,WAVHeader *info);
266
virtual ~ADM_AudiocodecImaAdpcm() ;
267
virtual void purge( void ) {};
268
virtual uint8_t beginDecompress( void ) {_head=_tail=0;return 1;};
269
virtual uint8_t endDecompress( void ) {_head=_tail=0;return 1;};
270
virtual uint8_t run( uint8_t * ptr, uint32_t nbIn, uint8_t * outptr,
272
virtual uint8_t isCompressed( void ){ return 1;};
273
virtual uint8_t isDecompressable(void ){ return 1;};
243
class ADM_AudiocodecImaAdpcm : public ADM_Audiocodec
246
uint32_t _inStock,_me,_channels;
247
int ss_div,ss_mul; // ???
249
uint8_t _buffer[ IMA_BUFFER];
250
uint32_t _head,_tail;
253
ADM_AudiocodecImaAdpcm(uint32_t fourcc, WAVHeader *info);
254
virtual ~ADM_AudiocodecImaAdpcm();
255
virtual uint8_t beginDecompress(void) {_head=_tail=0;return 1;}
256
virtual uint8_t endDecompress(void) {_head=_tail=0;return 1;}
257
virtual uint8_t run(uint8_t *inptr, uint32_t nbIn, float *outptr, uint32_t *nbOut);
258
virtual uint8_t isCompressed(void) {return 1;}
259
virtual uint8_t isDecompressable(void) {return 1;}