diff options
author | James Stembridge <jstembridge@users.sourceforge.net> | 2004-06-06 16:13:30 +0000 |
---|---|---|
committer | James Stembridge <jstembridge@users.sourceforge.net> | 2004-06-06 16:13:30 +0000 |
commit | 365c2680a12a28a984aef91b75c5cdd42d829ab2 (patch) | |
tree | 5b3595685407392103487b97f9bdde5c36ec9754 | |
parent | ea7208e94b7491283bafd09d31887faffaa44e4a (diff) | |
download | xine-lib-365c2680a12a28a984aef91b75c5cdd42d829ab2.tar.gz xine-lib-365c2680a12a28a984aef91b75c5cdd42d829ab2.tar.bz2 |
Don't assume buffer contains waveformatex header when BUF_FLAG_STDHEADER is set, it's optional
CVS patchset: 6649
CVS date: 2004/06/06 16:13:30
-rw-r--r-- | src/libffmpeg/audio_decoder.c | 24 | ||||
-rw-r--r-- | src/libw32dll/qt_decoder.c | 5 |
2 files changed, 17 insertions, 12 deletions
diff --git a/src/libffmpeg/audio_decoder.c b/src/libffmpeg/audio_decoder.c index e3bad5e1f..01af6e137 100644 --- a/src/libffmpeg/audio_decoder.c +++ b/src/libffmpeg/audio_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: audio_decoder.c,v 1.9 2004/06/05 16:37:37 tmattern Exp $ + * $Id: audio_decoder.c,v 1.10 2004/06/06 16:13:30 jstembridge Exp $ * * xine audio decoder plugin using ffmpeg * @@ -130,7 +130,7 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) if (buf->decoder_flags & BUF_FLAG_FRAME_END) { int i, codec_type; - xine_waveformatex *audio_header = (xine_waveformatex *)this->buf; + xine_waveformatex *audio_header; codec_type = buf->type & 0xFFFF0000; this->codec = NULL; @@ -157,15 +157,19 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) this->audio_sample_rate = buf->decoder_info[1]; this->audio_channels = buf->decoder_info[3]; - this->context->block_align = audio_header->nBlockAlign; - this->context->bit_rate = audio_header->nAvgBytesPerSec * 8; + if(this->size) { + audio_header = (xine_waveformatex *)this->buf; + + this->context->block_align = audio_header->nBlockAlign; + this->context->bit_rate = audio_header->nAvgBytesPerSec * 8; - if(audio_header->cbSize > 0) { - this->context->extradata = xine_xmalloc(audio_header->cbSize); - this->context->extradata_size = audio_header->cbSize; - memcpy( this->context->extradata, - (uint8_t *)audio_header + sizeof(xine_waveformatex), - audio_header->cbSize ); + if(audio_header->cbSize > 0) { + this->context->extradata = xine_xmalloc(audio_header->cbSize); + this->context->extradata_size = audio_header->cbSize; + memcpy( this->context->extradata, + (uint8_t *)audio_header + sizeof(xine_waveformatex), + audio_header->cbSize ); + } } } else { short *ptr; diff --git a/src/libw32dll/qt_decoder.c b/src/libw32dll/qt_decoder.c index e58d4e233..b61bce0fc 100644 --- a/src/libw32dll/qt_decoder.c +++ b/src/libw32dll/qt_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: qt_decoder.c,v 1.36 2004/05/24 19:43:47 tmattern Exp $ + * $Id: qt_decoder.c,v 1.37 2004/06/06 16:13:30 jstembridge Exp $ * * quicktime video/audio decoder plugin, using win32 dlls * most of this code comes directly from MPlayer @@ -445,7 +445,8 @@ static void qta_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { if (buf->decoder_flags & BUF_FLAG_STDHEADER) { - memcpy (&this->wave, buf->content, sizeof (xine_waveformatex)); + if (buf->size >= sizeof(xine_waveformatex)) + memcpy (&this->wave, buf->content, sizeof (xine_waveformatex)); this->wave.nChannels = buf->decoder_info[3]; this->wave.wBitsPerSample = buf->decoder_info[2]; |