Commit ab728fe9 authored by Gildas Bazin's avatar Gildas Bazin

* modules/codec/dts.c: fixes a buffer overflow with s/pdif.
* modules/access/cdda.c, modules/audio_output/file.c: endianness fixes for WAV header.
parent 7db8bcc2
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* cdda.c : CD digital audio input module for vlc * cdda.c : CD digital audio input module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2003 VideoLAN * Copyright (C) 2000, 2003 VideoLAN
* $Id: cdda.c,v 1.13 2004/02/05 22:56:12 gbazin Exp $ * $Id: cdda.c,v 1.14 2004/02/06 18:15:44 gbazin Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Gildas Bazin <gbazin@netcourrier.com> * Gildas Bazin <gbazin@netcourrier.com>
...@@ -236,19 +236,19 @@ static int AccessOpen( vlc_object_t *p_this ) ...@@ -236,19 +236,19 @@ static int AccessOpen( vlc_object_t *p_this )
/* Build a WAV header for the output data */ /* Build a WAV header for the output data */
memset( &p_sys->waveheader, 0, sizeof(WAVEHEADER) ); memset( &p_sys->waveheader, 0, sizeof(WAVEHEADER) );
p_sys->waveheader.Format = 1 /*WAVE_FORMAT_PCM*/; SetWLE( &p_sys->waveheader.Format, 1 ); /*WAVE_FORMAT_PCM*/
p_sys->waveheader.BitsPerSample = 16; SetWLE( &p_sys->waveheader.BitsPerSample, 16);
p_sys->waveheader.MainChunkID = VLC_FOURCC('R', 'I', 'F', 'F'); p_sys->waveheader.MainChunkID = VLC_FOURCC('R', 'I', 'F', 'F');
p_sys->waveheader.Length = 0; /* we just don't know */ p_sys->waveheader.Length = 0; /* we just don't know */
p_sys->waveheader.ChunkTypeID = VLC_FOURCC('W', 'A', 'V', 'E'); p_sys->waveheader.ChunkTypeID = VLC_FOURCC('W', 'A', 'V', 'E');
p_sys->waveheader.SubChunkID = VLC_FOURCC('f', 'm', 't', ' '); p_sys->waveheader.SubChunkID = VLC_FOURCC('f', 'm', 't', ' ');
p_sys->waveheader.SubChunkLength = 16; SetDWLE( &p_sys->waveheader.SubChunkLength, 16);
p_sys->waveheader.Modus = 2; SetWLE( &p_sys->waveheader.Modus, 2);
p_sys->waveheader.SampleFreq = 44100; SetDWLE( &p_sys->waveheader.SampleFreq, 44100);
p_sys->waveheader.BytesPerSample = SetWLE( &p_sys->waveheader.BytesPerSample,
p_sys->waveheader.Modus * p_sys->waveheader.BitsPerSample / 8; 2 /*Modus*/ * 16 /*BitsPerSample*/ / 8 );
p_sys->waveheader.BytesPerSec = SetDWLE( &p_sys->waveheader.BytesPerSec,
p_sys->waveheader.BytesPerSample * p_sys->waveheader.SampleFreq; 16 /*BytesPerSample*/ * 44100 /*SampleFreq*/ );
p_sys->waveheader.DataChunkID = VLC_FOURCC('d', 'a', 't', 'a'); p_sys->waveheader.DataChunkID = VLC_FOURCC('d', 'a', 't', 'a');
p_sys->waveheader.DataLength = 0; /* we just don't know */ p_sys->waveheader.DataLength = 0; /* we just don't know */
p_sys->i_header_pos = 0; p_sys->i_header_pos = 0;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* file.c : audio output which writes the samples to a file * file.c : audio output which writes the samples to a file
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: file.c,v 1.28 2004/02/03 23:31:46 gbazin Exp $ * $Id: file.c,v 1.29 2004/02/06 18:15:44 gbazin Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Gildas Bazin <gbazin@netcourrier.com> * Gildas Bazin <gbazin@netcourrier.com>
...@@ -272,6 +272,15 @@ static int Open( vlc_object_t * p_this ) ...@@ -272,6 +272,15 @@ static int Open( vlc_object_t * p_this )
wh->DataChunkID = VLC_FOURCC('d', 'a', 't', 'a'); wh->DataChunkID = VLC_FOURCC('d', 'a', 't', 'a');
wh->DataLength = 0; /* temp, to be filled in as we go */ wh->DataLength = 0; /* temp, to be filled in as we go */
/* Header -> little endian format */
SetWLE( &wh->Format, wh->Format );
SetWLE( &wh->BitsPerSample, wh->BitsPerSample );
SetDWLE( &wh->SubChunkLength, wh->SubChunkLength );
SetWLE( &wh->Modus, wh->Modus );
SetDWLE( &wh->SampleFreq, wh->SampleFreq );
SetWLE( &wh->BytesPerSample, wh->BytesPerSample );
SetDWLE( &wh->BytesPerSec, wh->BytesPerSec );
if( fwrite( wh, sizeof(WAVEHEADER), 1, if( fwrite( wh, sizeof(WAVEHEADER), 1,
p_aout->output.p_sys->p_file ) != 1 ) p_aout->output.p_sys->p_file ) != 1 )
{ {
...@@ -302,6 +311,13 @@ static void Close( vlc_object_t * p_this ) ...@@ -302,6 +311,13 @@ static void Close( vlc_object_t * p_this )
{ {
msg_Err( p_aout, "seek error (%s)", strerror(errno) ); msg_Err( p_aout, "seek error (%s)", strerror(errno) );
} }
/* Header -> little endian format */
SetDWLE( &p_aout->output.p_sys->waveh.Length,
p_aout->output.p_sys->waveh.Length );
SetDWLE( &p_aout->output.p_sys->waveh.DataLength,
p_aout->output.p_sys->waveh.DataLength );
if( fwrite( &p_aout->output.p_sys->waveh, sizeof(WAVEHEADER), 1, if( fwrite( &p_aout->output.p_sys->waveh, sizeof(WAVEHEADER), 1,
p_aout->output.p_sys->p_file ) != 1 ) p_aout->output.p_sys->p_file ) != 1 )
{ {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* dts.c: parse DTS audio sync info and packetize the stream * dts.c: parse DTS audio sync info and packetize the stream
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: dts.c,v 1.15 2004/02/04 23:55:03 gbazin Exp $ * $Id: dts.c,v 1.16 2004/02/06 18:15:44 gbazin Exp $
* *
* Authors: Jon Lech Johansen <jon-vl@nanocrew.net> * Authors: Jon Lech Johansen <jon-vl@nanocrew.net>
* Gildas Bazin <gbazin@netcourrier.com> * Gildas Bazin <gbazin@netcourrier.com>
...@@ -367,8 +367,9 @@ static aout_buffer_t *GetAoutBuffer( decoder_t *p_dec ) ...@@ -367,8 +367,9 @@ static aout_buffer_t *GetAoutBuffer( decoder_t *p_dec )
decoder_sys_t *p_sys = p_dec->p_sys; decoder_sys_t *p_sys = p_dec->p_sys;
aout_buffer_t *p_buf; aout_buffer_t *p_buf;
/* Hack for DTS S/PDIF filter which needs to send 3 frames at a time */ /* Hack for DTS S/PDIF filter which needs to send 3 frames at a time
p_buf = p_dec->pf_aout_buffer_new( p_dec, p_sys->i_frame_length * 3 ); * (plus a few header bytes) */
p_buf = p_dec->pf_aout_buffer_new( p_dec, p_sys->i_frame_length * 4 );
if( p_buf == NULL ) return NULL; if( p_buf == NULL ) return NULL;
p_buf->i_nb_samples = p_sys->i_frame_length; p_buf->i_nb_samples = p_sys->i_frame_length;
p_buf->i_nb_bytes = p_sys->i_frame_size; p_buf->i_nb_bytes = p_sys->i_frame_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment