+ /* Build a WAV header for the output data */
+ memset( &p_sys->waveheader, 0, sizeof(WAVEHEADER) );
+ SetWLE( &p_sys->waveheader.Format, 1 ); /*WAVE_FORMAT_PCM*/
+ SetWLE( &p_sys->waveheader.BitsPerSample, 16);
+ p_sys->waveheader.MainChunkID = VLC_FOURCC('R', 'I', 'F', 'F');
+ p_sys->waveheader.Length = 0; /* we just don't know */
+ p_sys->waveheader.ChunkTypeID = VLC_FOURCC('W', 'A', 'V', 'E');
+ p_sys->waveheader.SubChunkID = VLC_FOURCC('f', 'm', 't', ' ');
+ SetDWLE( &p_sys->waveheader.SubChunkLength, 16);
+ SetWLE( &p_sys->waveheader.Modus, 2);
+ SetDWLE( &p_sys->waveheader.SampleFreq, 44100);
+ SetWLE( &p_sys->waveheader.BytesPerSample,
+ 2 /*Modus*/ * 16 /*BitsPerSample*/ / 8 );
+ SetDWLE( &p_sys->waveheader.BytesPerSec,
+ 2*16/8 /*BytesPerSample*/ * 44100 /*SampleFreq*/ );
+ p_sys->waveheader.DataChunkID = VLC_FOURCC('d', 'a', 't', 'a');
+ p_sys->waveheader.DataLength = 0; /* we just don't know */
+
+ p_sys->i_first_sector = var_InheritInteger( p_access,
+ "cdda-first-sector" );
+ p_sys->i_last_sector = var_InheritInteger( p_access,
+ "cdda-last-sector" );
+ /* Tracknumber in MRL */
+ if( p_sys->i_first_sector < 0 || p_sys->i_last_sector < 0 )
+ {
+ const int i_titles = ioctl_GetTracksMap( VLC_OBJECT(p_access),
+ p_sys->vcddev, &p_sys->p_sectors );
+ if( p_sys->i_track >= i_titles )
+ {
+ msg_Err( p_access, "invalid track number" );
+ goto error;
+ }
+ p_sys->i_first_sector = p_sys->p_sectors[p_sys->i_track];
+ p_sys->i_last_sector = p_sys->p_sectors[p_sys->i_track+1];
+ }