--- /dev/null
+790e3ab8dee122320ad8b3ae15f6a1cd2780222d5ae97979f614f16ba73b4b853960e7945ef9053ad9eddf9e29e69d0c52f0875d07c5c6c7cee41d764bf4ea5f goom-2k4-0-src.tar.gz
--- /dev/null
+diff -Naur goom-origin/src/convolve_fx.c goom/src/convolve_fx.c
+--- goom-origin/src/convolve_fx.c 2005-02-07 14:46:42.000000000 +0100
++++ goom/src/convolve_fx.c 2009-03-23 11:16:13.000000000 +0100
+@@ -107,7 +107,9 @@
+ }
+
+ static void convolve_free(VisualFX *_this) {
+- free (_this->fx_data);
++ ConvData *data = _this->fx_data;
++ free (data->params.params);
++ free (data);
+ }
+
+ static void create_output_with_brightness(VisualFX *_this, Pixel *src, Pixel *dest,
+diff -Naur goom-origin/src/filters.c goom/src/filters.c
+--- goom-origin/src/filters.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/filters.c 2009-03-23 10:46:34.000000000 +0100
+@@ -731,6 +731,12 @@
+
+ static void zoomFilterVisualFXWrapper_free (struct _VISUAL_FX *_this)
+ {
++ ZoomFilterFXWrapperData *data = (ZoomFilterFXWrapperData*)_this->fx_data;
++ if (data->brutS) free (data->freebrutS);
++ if (data->brutD) free (data->freebrutD);
++ if (data->brutT) free (data->freebrutT);
++ free (data->firedec);
++ free (data->params.params);
+ free(_this->fx_data);
+ }
+
+diff -Naur goom-origin/src/flying_stars_fx.c goom/src/flying_stars_fx.c
+--- goom-origin/src/flying_stars_fx.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/flying_stars_fx.c 2009-03-23 11:18:57.000000000 +0100
+@@ -129,7 +129,10 @@
+ }
+
+ static void fs_free(VisualFX *_this) {
+- free (_this->fx_data);
++ FSData *data = (FSData*)_this->fx_data;
++ free (data->stars);
++ free (data->params.params);
++ free (data);
+ }
+
+
+diff -Naur goom-origin/src/gfontlib.c goom/src/gfontlib.c
+--- goom-origin/src/gfontlib.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/gfontlib.c 2009-03-23 09:06:27.000000000 +0100
+@@ -126,6 +126,8 @@
+ small_font_width [32] = font_width [32]/2;
+ font_chars [32] = 0;
+ small_font_chars [32] = 0;
++ free( gfont );
++ free( font_pos );
+ }
+
+ void goom_draw_text (Pixel * buf,int resolx,int resoly,
+diff -Naur goom-origin/src/goom_core.c goom/src/goom_core.c
+--- goom-origin/src/goom_core.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/goom_core.c 2009-03-23 11:21:11.000000000 +0100
+@@ -765,6 +765,15 @@
+ goomInfo->star_fx.free(&goomInfo->star_fx);
+ goomInfo->tentacles_fx.free(&goomInfo->tentacles_fx);
+ goomInfo->zoomFilter_fx.free(&goomInfo->zoomFilter_fx);
++
++ // Release info visual
++ free (goomInfo->params);
++ free (goomInfo->sound.params.params);
++
++ // Release PluginInfo
++ free (goomInfo->visuals);
++ gsl_free (goomInfo->scanner);
++ gsl_free (goomInfo->main_scanner);
+
+ free(goomInfo);
+ }
+diff -Naur goom-origin/src/goomsl.c goom/src/goomsl.c
+--- goom-origin/src/goomsl.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/goomsl.c 2009-03-23 11:07:25.000000000 +0100
+@@ -90,6 +90,7 @@
+
+ void iflow_free(InstructionFlow *_this)
+ { /* {{{ */
++ free(_this->instr);
+ goom_hash_free(_this->labels);
+ free(_this); /*TODO: finir cette fonction */
+ } /* }}} */
+@@ -1422,8 +1423,12 @@
+ void gsl_free(GoomSL *gss)
+ { /* {{{ */
+ iflow_free(gss->iflow);
+- free(gss->vars);
+- free(gss->functions);
++ goom_hash_free(gss->vars);
++ goom_hash_free(gss->functions);
++ goom_hash_free(gss->structIDS);
++ free(gss->gsl_struct);
++ goom_heap_delete(gss->data_heap);
++ free(gss->ptrArray);
+ free(gss);
+ } /* }}} */
+
+diff -Naur goom-origin/src/lines.c goom/src/lines.c
+--- goom-origin/src/lines.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/lines.c 2009-03-23 10:28:26.000000000 +0100
+@@ -199,6 +199,7 @@
+ goom_lines_free (GMLine ** l)
+ {
+ free ((*l)->points);
++ free ((*l)->points2);
+ free (*l);
+ l = NULL;
+ }
+diff -Naur goom-origin/src/tentacle3d.c goom/src/tentacle3d.c
+--- goom-origin/src/tentacle3d.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/tentacle3d.c 2009-03-23 11:13:38.000000000 +0100
+@@ -90,7 +90,9 @@
+ }
+
+ static void tentacle_fx_free(VisualFX *_this) {
+- tentacle_free((TentacleFXData*)_this->fx_data);
++ TentacleFXData *data = (TentacleFXData*)_this->fx_data;
++ free(data->params.params);
++ tentacle_free(data);
+ free(_this->fx_data);
+ }
+
+@@ -106,6 +108,13 @@
+
+ static void tentacle_free (TentacleFXData *data) {
+ /* TODO : un vrai FREE GRID!! */
++ int tmp;
++ for (tmp=0;tmp<nbgrid;tmp++){
++ grid3d *g = data->grille[tmp];
++ free (g->surf.vertex);
++ free (g->surf.svertex);
++ free (g);
++ }
+ free (data->vals);
+ }
+
--- /dev/null
+diff -ruN goom.orig/src/xmmx.c goom/src/xmmx.c
+--- goom.orig/src/xmmx.c 2006-10-01 22:10:15.000000000 +0200
++++ goom/src/xmmx.c 2006-10-01 23:45:59.000000000 +0200
+@@ -69,8 +69,8 @@
+ */
+
+ asm volatile
+- ("#1 \n\t movq %[brutS], %%mm0"
+- "#1 \n\t movq %[brutD], %%mm1"
++ ("#1 \n\t movq (%[brutS]), %%mm0"
++ "#1 \n\t movq (%[brutD]), %%mm1"
+ "#1 \n\t psubd %%mm0, %%mm1" /* mm1 = D - S */
+ "#1 \n\t movq %%mm1, %%mm2" /* mm2 = D - S */
+ "#1 \n\t pslld $16, %%mm1"
--- /dev/null
+diff -Naur goom-orig/configure.in goom/configure.in
+--- goom-2k4-0-src/configure.in.orig 2005-02-07 14:46:41.000000000 +0100
++++ goom-2k4-0-src/configure.in 2011-08-08 23:18:39.204832964 +0200
+@@ -1,6 +1,5 @@
+ AC_INIT(README)\r
+ \r
+-AM_DISABLE_STATIC\r
+ AM_INIT_AUTOMAKE(SDL_Goom, 2k4)\r
+ \r
+ ACLOCAL="$ACLOCAL -I m4"\r
+@@ -76,24 +75,7 @@
+ AM_CONDITIONAL(MACTARGET,test "x$MACTARGET" = "xyes")\r
+ \r
+ \r
+-AC_CHECK_HEADER(pthread.h,,AC_MSG_ERROR([*** POSIX thread support not installed - please install first ***]))\r
+-\r
+-PTHREAD_LIBS=error\r
+-AC_CHECK_LIB(pthread, pthread_attr_init, PTHREAD_LIBS="-lpthread")\r
+-\r
+-if test "x$PTHREAD_LIBS" = xerror; then\r
+- AC_CHECK_LIB(pthreads, pthread_attr_init, PTHREAD_LIBS="-lpthreads")\r
+-fi\r
+-\r
+-if test "x$PTHREAD_LIBS" = xerror; then\r
+- AC_CHECK_LIB(c_r, pthread_attr_init, PTHREAD_LIBS="-lc_r")\r
+-fi\r
+-\r
+-if test "x$PTHREAD_LIBS" = xerror; then\r
+- AC_CHECK_FUNC(pthread_attr_init, PTHREAD_LIBS="")\r
+-fi\r
+-\r
+-AC_SUBST(PTHREAD_LIBS)\r
++dnl AC_SUBST(PTHREAD_LIBS)\r
+ \r
+ dnl rm -f mmx_zoom.s\r
+ dnl echo -n checking for nasm...\r
+diff -Naur goom-orig/src/filters.c goom/src/filters.c
+--- goom-orig/src/filters.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/filters.c 2005-08-26 16:31:17.000000000 +0200
+@@ -201,8 +201,8 @@
+ /* Noise */
+ if (data->noisify)
+ {
+- vx += (((float)random()) / ((float)RAND_MAX) - 0.5f) / 50.0f;
+- vy += (((float)random()) / ((float)RAND_MAX) - 0.5f) / 50.0f;
++ vx += (((float)rand()) / ((float)RAND_MAX) - 0.5f) / 50.0f;
++ vy += (((float)rand()) / ((float)RAND_MAX) - 0.5f) / 50.0f;
+ }
+
+ /* Hypercos */
+diff -Naur goom-orig/src/goom_core.c goom/src/goom_core.c
+--- goom-orig/src/goom_core.c 2005-02-07 14:46:41.000000000 +0100
++++ goom/src/goom_core.c 2005-08-26 16:33:01.000000000 +0200
+@@ -40,11 +40,11 @@
+ static void init_buffers(PluginInfo *goomInfo, int buffsize)
+ {
+ goomInfo->pixel = (guint32 *) malloc (buffsize * sizeof (guint32) + 128);
+- bzero (goomInfo->pixel, buffsize * sizeof (guint32) + 128);
++ memset (goomInfo->pixel, 0, buffsize * sizeof (guint32) + 128);
+ goomInfo->back = (guint32 *) malloc (buffsize * sizeof (guint32) + 128);
+- bzero (goomInfo->back, buffsize * sizeof (guint32) + 128);
++ memset (goomInfo->back, 0, buffsize * sizeof (guint32) + 128);
+ goomInfo->conv = (Pixel *) malloc (buffsize * sizeof (guint32) + 128);
+- bzero (goomInfo->conv, buffsize * sizeof (guint32) + 128);
++ memset (goomInfo->conv, 0, buffsize * sizeof (guint32) + 128);
+
+ goomInfo->outputBuf = goomInfo->conv;
+
--- /dev/null
+--- goom/src/Makefile.am 2005-02-07 14:46:41.000000000 +0100
++++ goom.new/src/Makefile.am 2009-08-19 09:21:57.000000000 +0200
+@@ -16,7 +16,7 @@
+ goom2_libdir = $(libdir)
+
+ goom2_library_includedir=$(includedir)/goom
+-goom2_library_include_HEADERS = goom.h goom_plugin_info.h goom_typedefs.h goom_graphic.h goom_config_param.h goom_visual_fx.h goom_filters.h goom_tools.h goomsl.h goomsl_hash.h goomsl_heap.h goom_tools.h goom_config.h
++goom2_library_include_HEADERS = goom.h goom_plugin_info.h goom_typedefs.h goom_graphic.h goom_config_param.h goom_visual_fx.h goom_filters.h goom_tools.h goomsl.h goomsl_hash.h goomsl_heap.h goom_config.h
+ libgoom2_la_LDFLAGS = -export-dynamic -export-symbols-regex "goom.*"
+ libgoom2_la_SOURCES = \
+ goomsl_yacc.y goomsl_lex.l goomsl.c goomsl_hash.c goomsl_heap.c \
+--- goom/Makefile.am.orig 2010-10-31 21:43:45.514184001 +0100
++++ goom/Makefile.am 2010-10-31 21:44:01.382194251 +0100
+@@ -1,3 +1,4 @@
++ACLOCAL_AMFLAGS = -I m4
+ SUBDIRS = src xmms-goom sdl-goom @MACFOLDER@
+
+ #.pc file
--- /dev/null
+--- goom/src/plugin_info.c 2005-02-07 14:46:41.000000000 +0100
++++ goom.new/src/plugin_info.c 2011-01-23 15:37:37.524184437 +0100
+@@ -31,6 +31,7 @@
+ /* p->methods.create_output_with_brightness = create_output_with_brightness;*/
+
+ #ifdef CPU_X86
++#if 0
+ if (cpuFlavour & CPU_OPTION_XMMX) {
+ #ifdef VERBOSE
+ printf ("Extented MMX detected. Using the fastest methods !\n");
+@@ -38,7 +39,8 @@
+ p->methods.draw_line = draw_line_mmx;
+ p->methods.zoom_filter = zoom_filter_xmmx;
+ }
+- else if (cpuFlavour & CPU_OPTION_MMX) {
++#endif
++ if (cpuFlavour & CPU_OPTION_MMX) {
+ #ifdef VERBOSE
+ printf ("MMX detected. Using fast methods !\n");
+ #endif
--- /dev/null
+--- goom/configure.in.orig 2010-11-01 00:05:11.000000000 +0100
++++ goom/configure.in 2010-11-01 00:05:16.000000000 +0100
+@@ -43,8 +43,6 @@
+ dnl HOST\r
+ case "$host" in\r
+ *-apple-darwin*)\r
+- MACTARGET="yes"\r
+- MACFOLDER="mac"\r
+ AC_SUBST(MACFOLDER)\r
+ CCAS='$(CC)'\r
+ AC_SUBST(CCAS)\r
--- /dev/null
+--- goom/xmms-goom/Makefile.am 2005-02-07 22:46:42.000000000 +0900
++++ goom.new/xmms-goom/Makefile.am 2011-04-16 02:03:15.420291009 +0900
+@@ -2,7 +2,7 @@
+
+ if HAVE_XMMS
+ xmms_lib_LTLIBRARIES = libxmmsgoom2.la
+-xmms_libdir = $(XMMS_VISUALIZATION_PLUGIN_DIR)
++xmms_libdir = $(libdir)
+ libxmmsgoom2_la_LIBADD = $(top_builddir)/src/libgoom2.la $(XMMS_LIBS)
+ libxmmsgoom2_la_SOURCES = xmms_goom.c
+ INCLUDES=-DDATADIR=\"@XMMS_DATA_DIR@\" @XMMS_CFLAGS@ -Wall -I../src/
--- /dev/null
+# goom
+
+GOOM_VERSION := 2k4-0
+GOOM_URL := $(CONTRIB_VIDEOLAN)/goom-$(GOOM_VERSION)-src.tar.gz
+
+PKGS += goom
+
+$(TARBALLS)/goom-$(GOOM_VERSION)-src.tar.gz:
+ $(call download,$(GOOM_URL))
+
+.sum-goom: goom-$(GOOM_VERSION)-src.tar.gz
+
+goom: goom-$(GOOM_VERSION)-src.tar.gz .sum-goom
+ $(UNPACK)
+ mv goom2k4-0 goom-2k4-0-src
+ $(APPLY) $(SRC)/goom/goom2k4-0-memleaks.patch
+ $(APPLY) $(SRC)/goom/goom2k4-autotools.patch
+ $(APPLY) $(SRC)/goom/goom2k4-noxmmx.patch
+ $(APPLY) $(SRC)/goom/goom2k4-xmmslibdir.patch
+ $(APPLY) $(SRC)/goom/goom2k4-0-mmx.patch
+ifdef HAVE_WIN32
+ $(APPLY) $(SRC)/goom/goom2k4-0-win32.patch
+endif
+ifdef HAVE_MACOSX
+ $(APPLY) $(SRC)/goom/goom2k4-osx.patch
+endif
+ $(MOVE)
+
+.goom: goom
+ $(RECONF)
+ cd $< && $(HOSTVARS) ./configure $(HOSTCONF) --disable-glibtest --disable-gtktest
+ cd $< && $(MAKE) install
+ touch $@