+ if ( AOUT_FMT_NON_LINEAR( &p_aout->output.output ) )
+ {
+ p_aout->output.i_nb_samples = A52_FRAME_NB;
+ p_aout->output.output.i_bytes_per_frame = AOUT_SPDIF_SIZE;
+ p_aout->output.output.i_frame_length = A52_FRAME_NB;
+ aout_VolumeNoneInit( p_aout );
+ }
+ else
+ {
+ p_aout->output.i_nb_samples = FRAME_SIZE;
+ aout_VolumeSoftInit( p_aout );
+ }
+
+ p_aout->output.p_sys->b_add_wav_header =
+ config_GetInt( p_this, "audiofile-wav" );
+
+ if( p_aout->output.p_sys->b_add_wav_header )
+ {
+ /* Write wave header */
+ WAVEHEADER *wh = &p_aout->output.p_sys->waveh;
+
+ memset( wh, 0, sizeof(wh) );
+
+ switch( p_aout->output.output.i_format )
+ {
+ case VLC_FOURCC('f','l','3','2'):
+ wh->Format = WAVE_FORMAT_IEEE_FLOAT;
+ wh->BitsPerSample = sizeof(float) * 8;
+ break;
+ case VLC_FOURCC('u','8',' ',' '):
+ wh->Format = WAVE_FORMAT_PCM;
+ wh->BitsPerSample = 8;
+ break;
+ case VLC_FOURCC('s','1','6','l'):
+ default:
+ wh->Format = WAVE_FORMAT_PCM;
+ wh->BitsPerSample = 16;
+ break;
+ }
+
+ wh->MainChunkID = VLC_FOURCC('R', 'I', 'F', 'F');
+ wh->Length = 0; /* temp, to be filled in as we go */
+ wh->ChunkTypeID = VLC_FOURCC('W', 'A', 'V', 'E');
+ wh->SubChunkID = VLC_FOURCC('f', 'm', 't', ' ');
+ wh->SubChunkLength = 16;
+
+ wh->Modus = aout_FormatNbChannels( &p_aout->output.output );
+ wh->SampleFreq = p_aout->output.output.i_rate;
+ wh->BytesPerSample = wh->Modus * ( wh->BitsPerSample / 8 );
+ wh->BytesPerSec = wh->BytesPerSample * wh->SampleFreq;
+
+ wh->DataChunkID = VLC_FOURCC('d', 'a', 't', 'a');
+ wh->DataLength = 0; /* temp, to be filled in as we go */
+
+ if( fwrite( wh, sizeof(WAVEHEADER), 1,
+ p_aout->output.p_sys->p_file ) != 1 )
+ {
+ msg_Err( p_aout, "write error (%s)", strerror(errno) );
+ }
+ }
+