[MPlayer-dev-eng] [PATCH] configure & MEMALIGN_HACK
Reimar Döffinger
Reimar.Doeffinger at stud.uni-karlsruhe.de
Wed Jan 5 18:51:16 CET 2005
Hi,
On Tue, Jan 04, 2005 at 09:10:37PM +0100, Björn Sandell wrote:
> A while a go there was a commit to configure:
>
> $ cvs diff -ur1.942 -r1.943 configure
> Index: configure
> ===================================================================
> RCS file: /cvsroot/mplayer/main/configure,v
> retrieving revision 1.942
> retrieving revision 1.943
> diff -u -r1.942 -r1.943
> --- configure 25 Nov 2004 21:47:58 -0000 1.942
> +++ configure 15 Dec 2004 14:37:27 -0000 1.943
> @@ -6844,6 +6844,7 @@
> $_def_memalign
> #ifndef HAVE_MEMALIGN
> # define memalign(a,b) malloc(b)
> +#define MEMALIGN_HACK 1
> #endif
>
> with the log message
>
> "enable memalign hack for libavcodec when memalign is not present, hopefully the mencoder segfaults on mingw are gone now"
>
> Unfortunately this does evil thing on OpenBSD (and possibly other BSDs
> as well):
>
> mplayer in free(): error: modified (chunk-) pointer
Please try the attached patch. It allocates and frees everything that
might be used by libavcodec with the av_ function.
Thanks to elupus on IRC for the hint.
I'm not an expert on this but I think this is the correct way. Do you
agree?
Greetings,
Reimar Döffinger
-------------- next part --------------
Index: libmpcodecs/ad_ffmpeg.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/ad_ffmpeg.c,v
retrieving revision 1.16
diff -u -r1.16 ad_ffmpeg.c
--- libmpcodecs/ad_ffmpeg.c 21 Sep 2004 20:34:46 -0000 1.16
+++ libmpcodecs/ad_ffmpeg.c 5 Jan 2005 17:32:35 -0000
@@ -72,7 +72,7 @@
/* alloc extra data */
if (sh_audio->wf && sh_audio->wf->cbSize > 0) {
- lavc_context->extradata = malloc(sh_audio->wf->cbSize);
+ lavc_context->extradata = av_malloc(sh_audio->wf->cbSize);
lavc_context->extradata_size = sh_audio->wf->cbSize;
memcpy(lavc_context->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX),
lavc_context->extradata_size);
@@ -121,8 +121,8 @@
if (avcodec_close(lavc_context) < 0)
mp_msg(MSGT_DECVIDEO, MSGL_ERR, MSGTR_CantCloseCodec);
if (lavc_context->extradata)
- free(lavc_context->extradata);
- free(lavc_context);
+ av_free(lavc_context->extradata);
+ av_free(lavc_context);
}
static int control(sh_audio_t *sh,int cmd,void* arg, ...)
Index: libmpcodecs/vd_ffmpeg.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/vd_ffmpeg.c,v
retrieving revision 1.139
diff -u -r1.139 vd_ffmpeg.c
--- libmpcodecs/vd_ffmpeg.c 17 Dec 2004 07:34:23 -0000 1.139
+++ libmpcodecs/vd_ffmpeg.c 5 Jan 2005 17:33:08 -0000
@@ -281,7 +281,7 @@
{
avctx->flags |= CODEC_FLAG_EXTERN_HUFF;
avctx->extradata_size = sh->bih->biSize-sizeof(BITMAPINFOHEADER);
- avctx->extradata = malloc(avctx->extradata_size);
+ avctx->extradata = av_malloc(avctx->extradata_size);
memcpy(avctx->extradata, sh->bih+sizeof(BITMAPINFOHEADER),
avctx->extradata_size);
@@ -303,7 +303,7 @@
|| sh->format == mmioFOURCC('R', 'V', '4', '0')
){
avctx->extradata_size= 8;
- avctx->extradata = malloc(avctx->extradata_size);
+ avctx->extradata = av_malloc(avctx->extradata_size);
if(sh->bih->biSize!=sizeof(*sh->bih)+8){
/* only 1 packet per frame & sub_id from fourcc */
((uint32_t*)avctx->extradata)[0] = 0;
@@ -338,7 +338,7 @@
))
{
avctx->extradata_size = sh->bih->biSize-sizeof(BITMAPINFOHEADER);
- avctx->extradata = malloc(avctx->extradata_size);
+ avctx->extradata = av_malloc(avctx->extradata_size);
memcpy(avctx->extradata, sh->bih+1, avctx->extradata_size);
}
/* Pass palette to codec */
@@ -359,7 +359,7 @@
if (sh->ImageDesc &&
sh->format == mmioFOURCC('S','V','Q','3')){
avctx->extradata_size = (*(int*)sh->ImageDesc) - sizeof(int);
- avctx->extradata = malloc(avctx->extradata_size);
+ avctx->extradata = av_malloc(avctx->extradata_size);
memcpy(avctx->extradata, ((int*)sh->ImageDesc)+1, avctx->extradata_size);
}
@@ -396,21 +396,21 @@
mp_msg(MSGT_DECVIDEO,MSGL_ERR, MSGTR_CantCloseCodec);
if (avctx->extradata_size)
- free(avctx->extradata);
+ av_free(avctx->extradata);
avctx->extradata=NULL;
#if LIBAVCODEC_BUILD >= 4689
if (avctx->palctrl)
- free(avctx->palctrl);
+ av_free(avctx->palctrl);
avctx->palctrl=NULL;
#endif
if(avctx->slice_offset!=NULL)
- free(avctx->slice_offset);
+ av_free(avctx->slice_offset);
avctx->slice_offset=NULL;
if (avctx)
- free(avctx);
+ av_free(avctx);
if (ctx->pic)
- free(ctx->pic);
+ av_free(ctx->pic);
if (ctx)
free(ctx);
}
@@ -601,7 +601,7 @@
#if LIBAVCODEC_BUILD >= 4689
// Palette support: libavcodec copies palette to *data[1]
if (mpi->bpp == 8)
- mpi->planes[1] = malloc(AVPALETTE_SIZE);
+ mpi->planes[1] = av_malloc(AVPALETTE_SIZE);
#endif
pic->data[0]= mpi->planes[0];
@@ -678,7 +678,7 @@
// Palette support: free palette buffer allocated in get_buffer
if ( mpi && (mpi->bpp == 8) && (mpi->planes[1] != NULL))
- free(mpi->planes[1]);
+ av_free(mpi->planes[1]);
#if LIBAVCODEC_BUILD >= 4644
if(pic->type!=FF_BUFFER_TYPE_USER){
@@ -751,7 +751,7 @@
dp_hdr_t *hdr= (dp_hdr_t*)data;
if(avctx->slice_offset==NULL)
- avctx->slice_offset= malloc(sizeof(int)*1000);
+ avctx->slice_offset= av_malloc(sizeof(int)*1000);
// for(i=0; i<25; i++) printf("%02X ", ((uint8_t*)data)[i]);
More information about the MPlayer-dev-eng
mailing list