- switch( p_adec->i_codec )
- {
- case ADPCM_IMA_QT:
- p_adec->i_samplesperblock = 64;
- break;
- case ADPCM_IMA_WAV:
- p_adec->i_samplesperblock =
- 2 * ( p_adec->i_block - 4 * p_adec->p_wf->nChannels )/
- p_adec->p_wf->nChannels;
- break;
- case ADPCM_MS:
- p_adec->i_samplesperblock =
- 2 * ( p_adec->i_block - 7 * p_adec->p_wf->nChannels ) /
- p_adec->p_wf->nChannels + 2;
- break;
- case ADPCM_DK4:
- p_adec->i_samplesperblock =
- 2 * ( p_adec->i_block - 4 * p_adec->p_wf->nChannels ) /
- p_adec->p_wf->nChannels + 1;
- break;
- case ADPCM_DK3:
- p_adec->p_wf->nChannels = 2;
- p_adec->i_samplesperblock = ( 4 * ( p_adec->i_block - 16 ) + 2 )/ 3;
- break;
- default:
- msg_Err( p_adec->p_fifo, "unknown adpcm variant" );
- return( -1 );
- }
-
- msg_Dbg( p_adec->p_fifo,
- "format: samplerate:%dHz channels:%d bits/sample:%d blockalign:%d samplesperblock %d",
- p_adec->p_wf->nSamplesPerSec,
- p_adec->p_wf->nChannels,
- p_adec->p_wf->wBitsPerSample,
- p_adec->p_wf->nBlockAlign,
- p_adec->i_samplesperblock );
-
- //p_adec->output_format.i_format = VLC_FOURCC('s','1','6','l');
- /* FIXME good way ? */
- p_adec->output_format.i_format = AOUT_FMT_S16_NE;
- p_adec->output_format.i_rate = p_adec->p_wf->nSamplesPerSec;
-
-
- p_adec->output_format.i_physical_channels =
- p_adec->output_format.i_original_channels =
- pi_channels_maps[p_adec->p_wf->nChannels];
- p_adec->p_aout = NULL;
- p_adec->p_aout_input = NULL;
-
- /* **** Create a new audio output **** */
- aout_DateInit( &p_adec->date, p_adec->output_format.i_rate );
- p_adec->p_aout_input = aout_DecNew( p_adec->p_fifo,
- &p_adec->p_aout,
- &p_adec->output_format );
- if( !p_adec->p_aout_input )
- {
- msg_Err( p_adec->p_fifo, "cannot create aout" );
- return( -1 );
- }
-
- /* Init the BitStream */
-// InitBitstream( &p_adec->bit_stream, p_adec->p_fifo,
-// NULL, NULL );
-
- return( 0 );
+ switch( p_sys->codec )
+ {
+ case ADPCM_IMA_QT:
+ p_sys->i_samplesperblock = 64;
+ break;
+ case ADPCM_IMA_WAV:
+ p_sys->i_samplesperblock =
+ 2 * ( p_sys->i_block - 4 * p_dec->fmt_in.audio.i_channels ) /
+ p_dec->fmt_in.audio.i_channels;
+ break;
+ case ADPCM_MS:
+ p_sys->i_samplesperblock =
+ 2 * (p_sys->i_block - 7 * p_dec->fmt_in.audio.i_channels) /
+ p_dec->fmt_in.audio.i_channels + 2;
+ break;
+ case ADPCM_DK4:
+ p_sys->i_samplesperblock =
+ 2 * (p_sys->i_block - 4 * p_dec->fmt_in.audio.i_channels) /
+ p_dec->fmt_in.audio.i_channels + 1;
+ break;
+ case ADPCM_DK3:
+ p_dec->fmt_in.audio.i_channels = 2;
+ p_sys->i_samplesperblock = ( 4 * ( p_sys->i_block - 16 ) + 2 )/ 3;
+ break;
+ case ADPCM_EA:
+ p_sys->i_samplesperblock =
+ 2 * (p_sys->i_block - p_dec->fmt_in.audio.i_channels) /
+ p_dec->fmt_in.audio.i_channels;
+ }
+
+ msg_Dbg( p_dec, "format: samplerate:%d Hz channels:%d bits/sample:%d "
+ "blockalign:%d samplesperblock:%d",
+ p_dec->fmt_in.audio.i_rate, p_dec->fmt_in.audio.i_channels,
+ p_dec->fmt_in.audio.i_bitspersample, p_sys->i_block,
+ p_sys->i_samplesperblock );
+
+ p_dec->fmt_out.i_codec = AOUT_FMT_S16_NE;
+ p_dec->fmt_out.audio.i_rate = p_dec->fmt_in.audio.i_rate;
+ p_dec->fmt_out.audio.i_channels = p_dec->fmt_in.audio.i_channels;
+ p_dec->fmt_out.audio.i_physical_channels =
+ p_dec->fmt_out.audio.i_original_channels =
+ pi_channels_maps[p_dec->fmt_in.audio.i_channels];
+
+ aout_DateInit( &p_sys->end_date, p_dec->fmt_out.audio.i_rate );
+ aout_DateSet( &p_sys->end_date, 0 );
+
+ p_dec->pf_decode_audio = DecodeBlock;
+
+ return VLC_SUCCESS;