00001
00002
00003
00004
00005
00006
00007
00021
00022
00023 #include "../SYSTEM/sys_hardware.h"
00024 #include "../SYSTEM/sys_assert.h"
00025 #include "../codec/codec.h"
00026 #include "../coder/coder.h"
00027 #include "decoder.h"
00028
00029
00030 static void _xDAIS_init( void );
00031 static void _wavConfig(void);
00032 static void _mp3Config(void);
00033 static void _wmaConfig(void);
00034 static void _oggConfig(void);
00035
00036
00037 #pragma DATA_SECTION(_decPipeBuf, "decoder_global")
00038
00039
00040 #define _DEC_PIPE_BUF_LEN ((576+2)*4)
00041 static int * _decPipeBuf;
00042
00043
00044 #pragma DATA_SECTION(Decoder, "idata_resident")
00049 st_DECODER Decoder;
00050
00051 #pragma DATA_SECTION(Decode, "decoder_global")
00052 #pragma DATA_SECTION(Decode_memRec, "decoder_global")
00053 #pragma DATA_SECTION(Decode_params, "decoder_global")
00054 #pragma DATA_SECTION(SpecAn, "decoder_global")
00055 #pragma DATA_SECTION(SpecAn_memRec, "decoder_global")
00056 #pragma DATA_SECTION(SpecAn_params, "decoder_global")
00057
00058 IDECODE_Obj * Decode;
00059 IALG_MemRec * Decode_memRec;
00060 IDECODE_Params * Decode_params;
00061
00062 ISPECAN_Obj * SpecAn;
00063 IALG_MemRec * SpecAn_memRec;
00064 ISPECAN_Params * SpecAn_params;
00065
00066 #pragma DATA_SECTION(Bitbuf_params, "decoder_global")
00067 BITBUF_Params Bitbuf_params;
00068
00069 extern Uns mp3BitstreamData[];
00070 extern Uns wavBitstreamData[];
00071
00072 #ifdef WMA_SUPPORT
00073 extern void WMA_task(void);
00074 extern Uns wmaBitstreamData[];
00075 extern IDECODE_Obj WMA_TI_obj0;
00076 extern IDECODE_Params WMA_TI_obj0_params;
00077 extern IALG_MemRec WMA_TI_obj0_memRec[];
00078 extern SramPP_Obj SRAMPP;
00079 #endif
00080
00081 #ifdef WAV_SUPPORT
00082 extern unsigned long wvReadPtr;
00083 extern unsigned long wvEndOfReadPtr;
00084 extern unsigned short wvSilence;
00085 #endif
00086
00087 extern Uns mp3BitstreamData[];
00088
00089
00090 #pragma CODE_SECTION(DECODER_config, ".decoder_code")
00097 BOOL DECODER_config( DEC_TYPE eType )
00098 {
00099 Decoder.type = eType;
00100
00101 Coder.subcoder = DECODER__nullsubcoder;
00102 Coder.cache = DECODER_cache;
00103 Coder.cacheInit = DECODER_cacheInit;
00104 Coder.mediaInit = NULL;
00105
00106 _decPipeBuf = (int*)malloc(_DEC_PIPE_BUF_LEN);
00107 if(NULL == _decPipeBuf) SYS_die(SYS_DECODER_CONFIG);
00108
00109 switch(eType)
00110 {
00111 #ifdef WAV_SUPPORT
00112 case DECWAV: _wavConfig(); break;
00113 #endif // WAV_SUPPORT
00114 case DECMP3: _mp3Config(); break;
00115 #ifdef WMA_SUPPORT
00116 case DECWMA: _wmaConfig(); break;
00117 #endif // WMA_SUPPORT
00118 #ifdef OGG_SUPPORT
00119 case DECOGG: _oggConfig(); break;
00120 #endif //OGG_SUPPORT
00121 }
00122
00123
00124 PIPE_reset(&Decoder.pipe);
00125
00126
00127 Decoder.flag = 0;
00128
00129 return TRUE;
00130 }
00131
00132
00133 #pragma CODE_SECTION(DECODER_releaseObj, ".decoder_code")
00137 void DECODER_releaseObj(void)
00138 {
00139
00140 if(_decPipeBuf) free(_decPipeBuf);
00141 _decPipeBuf = NULL;
00142
00143 #ifdef WMA_SUPPORT
00144 if(AF_WMA == Audio.format) sramPP_delete(&SRAMPP);
00145 #endif
00146 }
00147
00148
00149 #pragma CODE_SECTION(_xDAIS_init, ".decoder_code")
00150 static void _xDAIS_init( void )
00151 {
00152 Decoder.decode = Decode;
00153 Decoder.decrypt = &Decrypt;
00154 Decoder.specan = SpecAn;
00155
00156
00157
00158
00159 if (Decoder.decrypt)
00160 {
00161 #if 0
00162 Bitbuf_params.numberOfBitstreams = 3;
00163 BITBUF_init(&Decoder.bitbuf, &Bitbuf_params);
00164 Decoder.inputBitstrm = &Decoder.bitbuf.bitstream[2];
00165 Decoder.decryptBitstrm = &Decoder.bitbuf.bitstream[1];
00166 Decoder.decodeBitstrm = &Decoder.bitbuf.bitstream[0];
00167 #endif
00168 }
00169 else
00170 {
00171 BITBUF_init(&Decoder.bitbuf, &Bitbuf_params);
00172 Decoder.inputBitstrm = &Decoder.bitbuf.bitstream[1];
00173 Decoder.decryptBitstrm = 0;
00174 Decoder.decodeBitstrm = &Decoder.bitbuf.bitstream[0];
00175 }
00176
00177 SCRYPT_algInit(&Decrypt, Decrypt_memRec, NULL, &Decrypt_params);
00178 DECODE_algInit(Decode, Decode_memRec, NULL, Decode_params);
00179 SPECAN_algInit(SpecAn, SpecAn_memRec, NULL, SpecAn_params);
00180 DECODE_reset(Decoder.decode);
00181 }
00182
00183 #ifdef WAV_SUPPORT
00184 #pragma CODE_SECTION(_wavConfig, ".wav_code")
00185
00186 static void _wavConfig(void)
00187 {
00188 Coder.coder = DECODER__wav;
00189 Coder.media = DECODER__wavmedia;
00190 Coder.init = DECODER__wavfirst;
00191
00192 if( PIPE_init(&Decoder.pipe, WAV_PIPE_FRAMELEN, 4,
00193 _decPipeBuf, _DEC_PIPE_BUF_LEN) == 0 )
00194 SYS_die(SYS_DECODER_CONFIG_WAV);
00195
00196 Decoder.data = &wavBitstreamData[0];
00197 Decoder.buffer_size = WAV_INPUT_BUFFER_SIZE;
00198 Bitbuf_params.numberOfBitstreams= 2;
00199 Bitbuf_params.startOfBuffer = &Decoder.data[0];
00200 Bitbuf_params.endOfBuffer = &Decoder.data[WAV_INPUT_BUFFER_SIZE];
00201
00202 Bitbuf_params.bitstream = 0;
00203 Bitbuf_params.maxFreeSpace = 0;
00204
00205 BITBUF_init(&Decoder.bitbuf, &Bitbuf_params);
00206 Decoder.inputBitstrm = &Decoder.bitbuf.bitstream[1];
00207 Decoder.decryptBitstrm = 0;
00208 Decoder.decodeBitstrm = &Decoder.bitbuf.bitstream[0];
00209
00210 wvReadPtr = 0L;
00211 wvEndOfReadPtr = 0L;
00212 wvSilence = 0;
00213 }
00214 #endif
00215
00216 #pragma CODE_SECTION(_mp3Config, ".mp3_code")
00217
00218 static void _mp3Config(void)
00219 {
00220 Coder.coder = DECODER__mp3;
00221 Coder.media = DECODER__mp3media;
00222 Coder.init = DECODER__mp3first;
00223
00224 Decoder.data = &mp3BitstreamData[0];
00225 Decoder.buffer_size = INPUT_BUFFER_SIZE;
00226 Bitbuf_params.numberOfBitstreams= 2;
00227 Bitbuf_params.startOfBuffer = &Decoder.data[0];
00228 Bitbuf_params.endOfBuffer = &Decoder.data[INPUT_BUFFER_SIZE];
00229
00230 Bitbuf_params.bitstream = 0;
00231 Bitbuf_params.maxFreeSpace = 0;
00232
00233
00234 if( PIPE_init(&Decoder.pipe, MP3_PIPE_FRAMELEN, 2,
00235 _decPipeBuf, _DEC_PIPE_BUF_LEN) == 0 )
00236 SYS_die(SYS_DECODER_CONFIG_MP3);
00237
00238 Decode = &MP3_TI_obj0;
00239 Decode_memRec = MP3_TI_obj0_memRec;
00240 Decode_params = &MP3_TI_obj0_params;
00241 SpecAn = &SPECMP3_TI_obj0;
00242 SpecAn_memRec = SPECMP3_TI_obj0_memRec;
00243 SpecAn_params = &SPECMP3_TI_obj0_params;
00244
00245 _xDAIS_init();
00246
00247 mp3ReadPtr = 0;
00248 mp3EndOfReadPtr = 0;
00249 mp3Silence = 0;
00250 mp3FrameIdx = 0;
00251 }
00252
00253 #ifdef WMA_SUPPORT
00254 #pragma CODE_SECTION(_wmaConfig, ".wma_code")
00255
00256 static void _wmaConfig(void)
00257 {
00258 Coder.coder = DECODER__wma;
00259 Coder.subcoder = DECODER__wmatask;
00260 Coder.media = DECODER__wmamedia;
00261 Coder.init = DECODER__wmafirst;
00262 Coder.subcoderInit = DECODER__wmainit;
00263
00264 Decoder.data = &wmaBitstreamData[0];
00265 Decoder.buffer_size = WMA_INPUT_BUFFER_SIZE;
00266 Bitbuf_params.numberOfBitstreams= 2;
00267 Bitbuf_params.startOfBuffer = &Decoder.data[0];
00268 Bitbuf_params.endOfBuffer = &Decoder.data[WMA_INPUT_BUFFER_SIZE];
00269
00270 Bitbuf_params.bitstream = 0;
00271 Bitbuf_params.maxFreeSpace = 0;
00272
00273 if( PIPE_init(&Decoder.pipe, WMA_PIPE_FRAMELEN, 2,
00274 _decPipeBuf, _DEC_PIPE_BUF_LEN) == 0 )
00275 SYS_die(SYS_DECODER_CONFIG_WMA);
00276
00277 if (sramPP_init(&SRAMPP, 4096) == FALSE )
00278 SYS_die(SYS_DECODER_CONFIG_WMA2);
00279
00280 Decode = &WMA_TI_obj0;
00281 Decode_memRec = WMA_TI_obj0_memRec;
00282 Decode_params = &WMA_TI_obj0_params;
00283 SpecAn = 0;
00284 SpecAn_memRec = 0;
00285 SpecAn_params = 0;
00286
00287 _xDAIS_init();
00288 }
00289 #endif
00290
00291 #ifdef OGG_SUPPORT
00292 #pragma CODE_SECTION(_oggConfig, ".ogg_code")
00293
00294 static void _oggConfig(void)
00295 {
00296 Coder.coder = DECODER__ogg;
00297 Coder.media = DECODER__oggmedia;
00298 Coder.init = DECODER__oggfirst;
00299
00300
00301 if( PIPE_init(&Decoder.pipe, OGG_PIPE_FRAMELEN, 32,
00302 _decPipeBuf, _DEC_PIPE_BUF_LEN) == 0 )
00303 SYS_die(SYS_DECODER_CONFIG_OGG);
00304 }
00305 #endif
00306
00307
00308 #pragma CODE_SECTION(DECODER__nullsubcoder, ".decoder_code")
00309 BOOL DECODER__nullsubcoder( void ){return TRUE;}
00310
00311
00312
00313
00314