Index: libmpcodecs/ad_ffmpeg.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpcodecs/ad_ffmpeg.c,v retrieving revision 1.20 diff -u -r1.20 ad_ffmpeg.c --- libmpcodecs/ad_ffmpeg.c 1 Aug 2005 20:16:56 -0000 1.20 +++ libmpcodecs/ad_ffmpeg.c 17 Dec 2005 17:05:43 -0000 @@ -73,7 +73,7 @@ /* alloc extra data */ if (sh_audio->wf && sh_audio->wf->cbSize > 0) { - lavc_context->extradata = av_malloc(sh_audio->wf->cbSize); + lavc_context->extradata = av_mallocz(sh_audio->wf->cbSize + FF_INPUT_BUFFER_PADDING_SIZE); lavc_context->extradata_size = sh_audio->wf->cbSize; memcpy(lavc_context->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX), lavc_context->extradata_size); Index: libmpcodecs/vd_ffmpeg.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpcodecs/vd_ffmpeg.c,v retrieving revision 1.154 diff -u -r1.154 vd_ffmpeg.c --- libmpcodecs/vd_ffmpeg.c 2 Dec 2005 22:00:50 -0000 1.154 +++ libmpcodecs/vd_ffmpeg.c 17 Dec 2005 17:05:44 -0000 @@ -321,7 +321,7 @@ { avctx->flags |= CODEC_FLAG_EXTERN_HUFF; avctx->extradata_size = sh->bih->biSize-sizeof(BITMAPINFOHEADER); - avctx->extradata = av_malloc(avctx->extradata_size); + avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); memcpy(avctx->extradata, sh->bih+sizeof(BITMAPINFOHEADER), avctx->extradata_size); @@ -343,7 +343,7 @@ || sh->format == mmioFOURCC('R', 'V', '4', '0') ){ avctx->extradata_size= 8; - avctx->extradata = av_malloc(avctx->extradata_size); + avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); if(sh->bih->biSize!=sizeof(*sh->bih)+8){ /* only 1 packet per frame & sub_id from fourcc */ ((uint32_t*)avctx->extradata)[0] = 0; @@ -381,7 +381,7 @@ )) { avctx->extradata_size = sh->bih->biSize-sizeof(BITMAPINFOHEADER); - avctx->extradata = av_malloc(avctx->extradata_size); + avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); memcpy(avctx->extradata, sh->bih+1, avctx->extradata_size); } /* Pass palette to codec */ @@ -402,7 +402,7 @@ if (sh->ImageDesc && sh->format == mmioFOURCC('S','V','Q','3')){ avctx->extradata_size = (*(int*)sh->ImageDesc) - sizeof(int); - avctx->extradata = av_malloc(avctx->extradata_size); + avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); memcpy(avctx->extradata, ((int*)sh->ImageDesc)+1, avctx->extradata_size); } Index: libmpdemux/demux_asf.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpdemux/demux_asf.c,v retrieving revision 1.36 diff -u -r1.36 demux_asf.c --- libmpdemux/demux_asf.c 18 Nov 2005 14:39:18 -0000 1.36 +++ libmpdemux/demux_asf.c 17 Dec 2005 17:05:44 -0000 @@ -62,6 +62,11 @@ *src = dst; } +#ifdef USE_LIBAVCODEC +#include "avcodec.h" +#else +#define FF_INPUT_BUFFER_PADDING_SIZE 8 +#endif static int demux_asf_read_packet(demuxer_t *demux,unsigned char *data,int len,int id,int seq,unsigned long time,unsigned short dur,int offs,int keyframe){ demux_stream_t *ds=NULL; @@ -106,8 +111,9 @@ // append data to it! demux_packet_t* dp=ds->asf_packet; if(dp->len!=offs && offs!=-1) mp_msg(MSGT_DEMUX,MSGL_V,"warning! fragment.len=%d BUT next fragment offset=%d \n",dp->len,offs); - dp->buffer=realloc(dp->buffer,dp->len+len); + dp->buffer=realloc(dp->buffer,dp->len+len+FF_INPUT_BUFFER_PADDING_SIZE); memcpy(dp->buffer+dp->len,data,len); + memset(dp->buffer+dp->len+len, 0, FF_INPUT_BUFFER_PADDING_SIZE); mp_dbg(MSGT_DEMUX,MSGL_DBG4,"data appended! %d+%d\n",dp->len,len); dp->len+=len; // we are ready now. Index: libmpdemux/demux_real.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpdemux/demux_real.c,v retrieving revision 1.76 diff -u -r1.76 demux_real.c --- libmpdemux/demux_real.c 11 Dec 2005 17:21:02 -0000 1.76 +++ libmpdemux/demux_real.c 17 Dec 2005 17:05:45 -0000 @@ -32,6 +32,12 @@ #include "stheader.h" #include "bswap.h" +#ifdef USE_LIBAVCODEC +#include "avcodec.h" +#else +#define FF_INPUT_BUFFER_PADDING_SIZE 8 +#endif + //#define mp_dbg(mod,lev, args... ) mp_msg_c((mod<<8)|lev, ## args ) #define MKTAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) @@ -921,7 +927,8 @@ // increase buffer size, this should not happen! mp_msg(MSGT_DEMUX,MSGL_WARN, "chunktab buffer too small!!!!!\n"); dp->len=dp_hdr->chunktab+8*(4+dp_hdr->chunks); - dp->buffer=realloc(dp->buffer,dp->len); + dp->buffer=realloc(dp->buffer,dp->len+FF_INPUT_BUFFER_PADDING_SIZE); + memset(dp->buffer + dp->len, 0, FF_INPUT_BUFFER_PADDING_SIZE); // re-calc pointers: dp_hdr=(dp_hdr_t*)dp->buffer; dp_data=dp->buffer+sizeof(dp_hdr_t); Index: libmpdemux/demux_viv.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpdemux/demux_viv.c,v retrieving revision 1.28 diff -u -r1.28 demux_viv.c --- libmpdemux/demux_viv.c 5 Aug 2005 19:57:47 -0000 1.28 +++ libmpdemux/demux_viv.c 17 Dec 2005 17:05:45 -0000 @@ -15,6 +15,12 @@ #include "stheader.h" #include "bswap.h" +#ifdef USE_LIBAVCODEC +#include "avcodec.h" +#else +#define FF_INPUT_BUFFER_PADDING_SIZE 8 +#endif + /* parameters ! */ int vivo_param_version = -1; char *vivo_param_acodec = NULL; @@ -379,7 +385,8 @@ } else { // append data to it! demux_packet_t* dp=ds->asf_packet; - dp->buffer=realloc(dp->buffer,dp->len+len); + dp->buffer=realloc(dp->buffer,dp->len+len+FF_INPUT_BUFFER_PADDING_SIZE); + memset(dp->buffer+dp->len+len, 0, FF_INPUT_BUFFER_PADDING_SIZE); //memcpy(dp->buffer+dp->len,data,len); stream_read(demux->stream,dp->buffer+dp->len,len); mp_dbg(MSGT_DEMUX,MSGL_DBG4,"data appended! %d+%d\n",dp->len,len); Index: libmpdemux/video.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpdemux/video.c,v retrieving revision 1.55 diff -u -r1.55 video.c --- libmpdemux/video.c 18 Nov 2005 14:39:21 -0000 1.55 +++ libmpdemux/video.c 17 Dec 2005 17:05:46 -0000 @@ -22,6 +22,12 @@ /* sub_cc (closed captions)*/ #include "sub_cc.h" +#ifdef USE_LIBAVCODEC +#include "avcodec.h" +#else +#define FF_INPUT_BUFFER_PADDING_SIZE 8 +#endif + /* biCompression constant */ #define BI_RGB 0L @@ -132,10 +138,13 @@ } } mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); - if(!videobuffer) videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE); - if(!videobuffer){ - mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); - return 0; + if(!videobuffer) { + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + else { + mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); + return 0; + } } mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for Video Object Layer Start code... ");fflush(stdout); while(1){ @@ -222,10 +231,13 @@ } } mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); - if(!videobuffer) videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE); - if(!videobuffer){ - mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); - return 0; + if(!videobuffer) { + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + else { + mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); + return 0; + } } pos = videobuf_len+4; if(!read_video_packet(d_video)){ @@ -280,10 +292,13 @@ // sh_video=d_video->sh;sh_video->ds=d_video; // mpeg2_init(); // ========= Read & process sequence header & extension ============ - if(!videobuffer) videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE); - if(!videobuffer){ - mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); - return 0; + if(!videobuffer) { + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + else { + mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); + return 0; + } } if(!read_video_packet(d_video)){