From 86827e34dbf2aec4151c1735958644029a5d1e32 Mon Sep 17 00:00:00 2001 From: James Courtier-Dutton Date: Mon, 1 Sep 2003 13:19:28 +0000 Subject: Add warning and check, so that xine does not try to play .WAV files with badly contructed headers. CVS patchset: 5325 CVS date: 2003/09/01 13:19:28 --- src/demuxers/demux_wav.c | 14 +++++++++++--- src/liblpcm/xine_decoder.c | 6 +++--- 2 files changed, 14 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/demuxers/demux_wav.c b/src/demuxers/demux_wav.c index d318c5998..f8370412f 100644 --- a/src/demuxers/demux_wav.c +++ b/src/demuxers/demux_wav.c @@ -22,7 +22,7 @@ * MS WAV File Demuxer by Mike Melanson (melanson@pcisys.net) * based on WAV specs that are available far and wide * - * $Id: demux_wav.c,v 1.46 2003/08/25 21:51:39 f1rmb Exp $ + * $Id: demux_wav.c,v 1.47 2003/09/01 13:19:28 jcdutton Exp $ */ #ifdef HAVE_CONFIG_H @@ -357,6 +357,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str input_plugin_t *input) { demux_wav_t *this; + uint32_t align; this = xine_xmalloc (sizeof (demux_wav_t)); this->stream = stream; @@ -409,8 +410,15 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str /* special block alignment hack so that the demuxer doesn't send * packets with individual PCM samples */ if ((this->wave->nAvgBytesPerSec / this->wave->nBlockAlign) == - this->wave->nSamplesPerSec) - this->wave->nBlockAlign = PCM_BLOCK_ALIGN; + this->wave->nSamplesPerSec) { + align = PCM_BLOCK_ALIGN / this->wave->nBlockAlign; + align = align * this->wave->nBlockAlign; + this->wave->nBlockAlign = align; + } else { + printf("demux_wav: WAV header inconsistent, cannot play WAV file.\n"); + free (this); + return NULL; + } return &this->demux_plugin; } diff --git a/src/liblpcm/xine_decoder.c b/src/liblpcm/xine_decoder.c index e562933ca..a363f9e24 100644 --- a/src/liblpcm/xine_decoder.c +++ b/src/liblpcm/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.43 2003/08/25 21:51:42 f1rmb Exp $ + * $Id: xine_decoder.c,v 1.44 2003/09/01 13:19:29 jcdutton Exp $ * * 31-8-2001 Added LPCM rate sensing. * (c) 2001 James Courtier-Dutton James@superbug.demon.co.uk @@ -140,11 +140,11 @@ static void lpcm_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { return; audio_buffer = this->stream->audio_out->get_buffer (this->stream->audio_out); - + /* Swap LPCM samples into native byte order, if necessary */ buf->type &= 0xffff0000; stream_be = ( buf->type == BUF_AUDIO_LPCM_BE ); - + if( this->bits_per_sample == 16 ){ if (stream_be != this->cpu_be) swab (sample_buffer, audio_buffer->mem, buf->size); -- cgit v1.2.3