[MPlayer-dev-eng] [PATCH] configure & MEMALIGN_HACK

Reimar Döffinger Reimar.Doeffinger at stud.uni-karlsruhe.de
Fri Jan 7 17:47:04 CET 2005


Hi,
On Fri, Jan 07, 2005 at 05:06:18PM +0100, Michael Niedermayer wrote:
> On Friday 07 January 2005 15:26, Reimar Döffinger wrote:
> [...]
> > > > > No how did that happen? Here should be the complete patch...
> > > >
> > > > Any comments? I intend to apply tomorrow.
> > >
> > > Seems to work. I got some
> > > mencoder in free(): error: modified (chunk-) pointer
> > > right now, so more of the same is needed.
> >
> > Try the attached patch.
> > Btw. All those if (var) before av_free(var) aren't needed anymore as
> > av_free does this check as well. I'll leave them there for now anyway...
> 
> IMHO remove the unneeded if() and also look at av_freep() it could be used to 
> further simplify the code

How about the attached version then? I decided to use av_freep
everywhere.

> anyway, IMHO defining MEMALIGN_HACK by default is a bad idea, it will cause 
> many more problems, like breaking malloc debuggers
> it also wont solve unaligned *alloc() outside libav* issues, and solving these 
> similarely will probably lead to more issues with things like strdup()+free() 

But since it was applied there weren't any more problems with SSE2 on
MinGW, or not?
Sure isn't the perfect solution, but still.
Btw. And why will it break malloc debuggers?

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 -d -r1.16 ad_ffmpeg.c
--- libmpcodecs/ad_ffmpeg.c	21 Sep 2004 20:34:46 -0000	1.16
+++ libmpcodecs/ad_ffmpeg.c	7 Jan 2005 16:26:55 -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);
@@ -120,9 +120,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_freep(&lavc_context->extradata);
+    av_freep(&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 -d -r1.139 vd_ffmpeg.c
--- libmpcodecs/vd_ffmpeg.c	17 Dec 2004 07:34:23 -0000	1.139
+++ libmpcodecs/vd_ffmpeg.c	7 Jan 2005 16:26:59 -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);
     }
     
@@ -395,22 +395,14 @@
     if (avcodec_close(avctx) < 0)
     	    mp_msg(MSGT_DECVIDEO,MSGL_ERR, MSGTR_CantCloseCodec);
 
-    if (avctx->extradata_size)
-	free(avctx->extradata);
-    avctx->extradata=NULL;
+    av_freep(&avctx->extradata);
 #if LIBAVCODEC_BUILD >= 4689
-    if (avctx->palctrl)
-	    free(avctx->palctrl);
-    avctx->palctrl=NULL;
+    av_freep(&avctx->palctrl);
 #endif
-    if(avctx->slice_offset!=NULL) 
-        free(avctx->slice_offset);
-    avctx->slice_offset=NULL;
+    av_freep(&avctx->slice_offset);
 
-    if (avctx)
-	free(avctx);
-    if (ctx->pic)
-	free(ctx->pic);
+    av_freep(&avctx);
+    av_freep(&ctx->pic);
     if (ctx)
 	free(ctx);
 }
@@ -601,7 +593,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];
@@ -677,8 +669,8 @@
   }
 
 	// Palette support: free palette buffer allocated in get_buffer
-	if ( mpi && (mpi->bpp == 8) && (mpi->planes[1] != NULL))
-		free(mpi->planes[1]);
+	if ( mpi && (mpi->bpp == 8))
+		av_freep(&mpi->planes[1]);
 
 #if LIBAVCODEC_BUILD >= 4644
     if(pic->type!=FF_BUFFER_TYPE_USER){
@@ -751,7 +743,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]);
         
Index: libmpcodecs/ve_lavc.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/ve_lavc.c,v
retrieving revision 1.106
diff -u -d -r1.106 ve_lavc.c
--- libmpcodecs/ve_lavc.c	1 Dec 2004 20:32:05 -0000	1.106
+++ libmpcodecs/ve_lavc.c	7 Jan 2005 16:27:02 -0000
@@ -437,7 +437,7 @@
 	char *tmp;
 
 	lavc_venc_context->intra_matrix =
-	    malloc(sizeof(*lavc_venc_context->intra_matrix)*64);
+	    av_malloc(sizeof(*lavc_venc_context->intra_matrix)*64);
 
 	i = 0;
 	while ((tmp = strsep(&lavc_param_intra_matrix, ",")) && (i < 64))
@@ -448,10 +448,7 @@
 	}
 	
 	if (i != 64)
-	{
-	    free(lavc_venc_context->intra_matrix);
-	    lavc_venc_context->intra_matrix = NULL;
-	}
+	    av_freep(&lavc_venc_context->intra_matrix);
 	else
 	    mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified intra matrix\n");
     }
@@ -460,7 +457,7 @@
 	char *tmp;
 
 	lavc_venc_context->inter_matrix =
-	    malloc(sizeof(*lavc_venc_context->inter_matrix)*64);
+	    av_malloc(sizeof(*lavc_venc_context->inter_matrix)*64);
 
 	i = 0;
 	while ((tmp = strsep(&lavc_param_inter_matrix, ",")) && (i < 64))
@@ -471,10 +468,7 @@
 	}
 	
 	if (i != 64)
-	{
-	    free(lavc_venc_context->inter_matrix);
-	    lavc_venc_context->inter_matrix = NULL;
-	}
+	    av_freep(&lavc_venc_context->inter_matrix);
 	else
 	    mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified inter matrix\n");
     }
@@ -652,7 +646,7 @@
 	size= ftell(stats_file);
 	fseek(stats_file, 0, SEEK_SET);
 	
-	lavc_venc_context->stats_in= malloc(size + 1);
+	lavc_venc_context->stats_in= av_malloc(size + 1);
 	lavc_venc_context->stats_in[size]=0;
 
 	if(fread(lavc_venc_context->stats_in, size, 1, stats_file)<1){
@@ -728,8 +722,7 @@
     }
     
     /* free second pass buffer, its not needed anymore */
-    if(lavc_venc_context->stats_in) free(lavc_venc_context->stats_in);
-    lavc_venc_context->stats_in= NULL;
+    av_freep(&lavc_venc_context->stats_in);
     if(lavc_venc_context->bits_per_sample)
         mux_v->bih->biBitCount= lavc_venc_context->bits_per_sample;
     if(lavc_venc_context->extradata_size){
@@ -907,12 +900,8 @@
 #endif
 
 #if LIBAVCODEC_BUILD >= 4675
-    if (lavc_venc_context->intra_matrix)
-	free(lavc_venc_context->intra_matrix);
-    lavc_venc_context->intra_matrix = NULL;
-    if (lavc_venc_context->inter_matrix)
-	free(lavc_venc_context->inter_matrix);
-    lavc_venc_context->inter_matrix = NULL;
+    av_freep(&lavc_venc_context->intra_matrix);
+    av_freep(&lavc_venc_context->inter_matrix);
 #endif
 
     avcodec_close(lavc_venc_context);
@@ -920,11 +909,9 @@
     if(stats_file) fclose(stats_file);
     
     /* free rc_override */
-    if(lavc_venc_context->rc_override) free(lavc_venc_context->rc_override);
-    lavc_venc_context->rc_override= NULL;
+    av_freep(&lavc_venc_context->rc_override);
 
-    if(vf->priv->context) free(vf->priv->context);
-    vf->priv->context= NULL;
+    av_freep(&vf->priv->context);
 }
 
 //===========================================================================//


More information about the MPlayer-dev-eng mailing list