gst-libs/gst/video/video.h: Fix caps template names to be understandable.
authorBenjamin Otte <otte@gnome.org>
Mon, 12 Jan 2004 02:01:52 +0000 (02:01 +0000)
committerBenjamin Otte <otte@gnome.org>
Mon, 12 Jan 2004 02:01:52 +0000 (02:01 +0000)
Original commit message from CVS:
2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>

* gst-libs/gst/video/video.h:
Fix caps template names to be understandable.
Prefix everything with GST_VIDEO.
* ext/aalib/gstaasink.c:
* ext/divx/gstdivxdec.c:
* ext/divx/gstdivxenc.c:
* ext/gdk_pixbuf/gstgdkpixbuf.c:
* ext/hermes/gstcolorspace.c: (gst_colorspace_base_init):
* ext/jpeg/gstjpegdec.c: (raw_caps_factory):
* ext/jpeg/gstjpegenc.c: (raw_caps_factory):
* ext/libcaca/gstcacasink.c:
* ext/libpng/gstpngenc.c: (raw_caps_factory):
* ext/snapshot/gstsnapshot.c:
* ext/swfdec/gstswfdec.c:
* ext/xvid/gstxviddec.c:
* ext/xvid/gstxvidenc.c:
* gst/chart/gstchart.c:
* gst/deinterlace/gstdeinterlace.c:
* gst/effectv/gsteffectv.c:
* gst/flx/gstflxdec.c: (gst_flxdec_loop):
* gst/goom/gstgoom.c:
* gst/median/gstmedian.c:
* gst/monoscope/gstmonoscope.c: (gst_monoscope_init),
(gst_monoscope_srcconnect), (gst_monoscope_chain):
* gst/overlay/gstoverlay.c:
* gst/smooth/gstsmooth.c:
* gst/smpte/gstsmpte.c:
* gst/synaesthesia/gstsynaesthesia.c:
* gst/videocrop/gstvideocrop.c:
* gst/videodrop/gstvideodrop.c:
* gst/y4m/gsty4mencode.c:
* sys/qcam/gstqcamsrc.c:
* sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
Make them work with new video.h file.
* sys/ximage/ximagesink.c: (gst_ximagesink_chain),
(gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
(gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
Make it work with new buffer allocation system.

ChangeLog
gst-libs/gst/video/video.h
sys/v4l/gstv4lsrc.c
sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c

index 2c81307..3ed667d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
+2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/video/video.h:
+         Fix caps template names to be understandable.
+         Prefix everything with GST_VIDEO.
+       * ext/aalib/gstaasink.c:
+       * ext/divx/gstdivxdec.c:
+       * ext/divx/gstdivxenc.c:
+       * ext/gdk_pixbuf/gstgdkpixbuf.c:
+       * ext/hermes/gstcolorspace.c: (gst_colorspace_base_init):
+       * ext/jpeg/gstjpegdec.c: (raw_caps_factory):
+       * ext/jpeg/gstjpegenc.c: (raw_caps_factory):
+       * ext/libcaca/gstcacasink.c:
+       * ext/libpng/gstpngenc.c: (raw_caps_factory):
+       * ext/snapshot/gstsnapshot.c:
+       * ext/swfdec/gstswfdec.c:
+       * ext/xvid/gstxviddec.c:
+       * ext/xvid/gstxvidenc.c:
+       * gst/chart/gstchart.c:
+       * gst/deinterlace/gstdeinterlace.c:
+       * gst/effectv/gsteffectv.c:
+       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+       * gst/goom/gstgoom.c:
+       * gst/median/gstmedian.c:
+       * gst/monoscope/gstmonoscope.c: (gst_monoscope_init),
+       (gst_monoscope_srcconnect), (gst_monoscope_chain):
+       * gst/overlay/gstoverlay.c:
+       * gst/smooth/gstsmooth.c:
+       * gst/smpte/gstsmpte.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/videocrop/gstvideocrop.c:
+       * gst/videodrop/gstvideodrop.c:
+       * gst/y4m/gsty4mencode.c:
+       * sys/qcam/gstqcamsrc.c:
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
+         Make them work with new video.h file.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
+         Make it work with new buffer allocation system.
+
 2004-01-11  Julien MOUTTE  <julien@moutte.net>
 
        * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the 
index 669a6a5..cb8727a 100644 (file)
 
 #include <gst/gst.h>
 
-#define R_MASK_32 "0xff000000"
-#define G_MASK_32 "0x00ff0000"
-#define B_MASK_32 "0x0000ff00"
-
-#define R_MASK_32_REVERSE "0x000000ff"
-#define G_MASK_32_REVERSE "0x0000ff00"
-#define B_MASK_32_REVERSE "0x00ff0000"
-
-#define R_MASK_24 "0xff0000"
-#define G_MASK_24 "0x00ff00"
-#define B_MASK_24 "0x0000ff"
-
-#define R_MASK_24_REVERSE "0x0000ff"
-#define G_MASK_24_REVERSE "0x00ff00"
-#define B_MASK_24_REVERSE "0xff0000"
-
-#define R_MASK_16 "0xf800"
-#define G_MASK_16 "0x07e0"
-#define B_MASK_16 "0x001f"
-
-#define R_MASK_15 "0x7c00"
-#define G_MASK_15 "0x03e0"
-#define B_MASK_15 "0x001f"
-
-#define R_MASK_32_INT 0xff000000
-#define G_MASK_32_INT 0x00ff0000
-#define B_MASK_32_INT 0x0000ff00
-
-#define R_MASK_32_REVERSE_INT 0x000000ff
-#define G_MASK_32_REVERSE_INT 0x0000ff00
-#define B_MASK_32_REVERSE_INT 0x00ff0000
-
-#define R_MASK_24_INT 0xff0000
-#define G_MASK_24_INT 0x00ff00
-#define B_MASK_24_INT 0x0000ff
-
-#define R_MASK_24_REVERSE_INT 0x0000ff
-#define G_MASK_24_REVERSE_INT 0x00ff00
-#define B_MASK_24_REVERSE_INT 0xff0000
-
-#define R_MASK_16_INT 0xf800
-#define G_MASK_16_INT 0x07e0
-#define B_MASK_16_INT 0x001f
-
-#define R_MASK_15_INT 0x7c00
-#define G_MASK_15_INT 0x03e0
-#define B_MASK_15_INT 0x001f
-
-#define SIZE_RANGE "(int) [ 16, 4096 ]"
-#define FPS_RANGE "(double) [ 0, max ]"
-
-/* properties for pad templates */
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_32 \
-    GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32 "; " \
-    GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_32_REVERSE \
-    GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32_REVERSE "; " \
-    GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_REVERSE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32 \
-           "video/x-raw-rgb, " \
-            "bpp = (int) 32, " \
-            "depth = (int) 24, " \
-            "endianness = (int) BIG_ENDIAN, " \
-            "red_mask = (int) " R_MASK_32 ", " \
-            "green_mask = (int) " G_MASK_32 ", " \
-            "blue_mask = (int) " B_MASK_32 ", " \
-            "width = " SIZE_RANGE ", " \
-            "height = " SIZE_RANGE ", " \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24 \
-           "video/x-raw-rgb, " \
-            "bpp = (int) 24, " \
-            "depth = (int) 24, " \
-            "endianness = (int) BIG_ENDIAN, " \
-            "red_mask = (int) " R_MASK_24 ", " \
-            "green_mask = (int) " G_MASK_24 ", " \
-            "blue_mask = (int) " B_MASK_24 ", " \
-            "width = " SIZE_RANGE ", " \
-            "height = " SIZE_RANGE ", " \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32_REVERSE \
-           "video/x-raw-rgb, " \
-            "bpp = (int) 32, " \
-            "depth = (int) 24, " \
-            "endianness = (int) BIG_ENDIAN, " \
-            "red_mask = (int) " R_MASK_32_REVERSE ", " \
-            "green_mask = (int) " G_MASK_32_REVERSE ", " \
-            "blue_mask = (int) " B_MASK_32_REVERSE ", " \
-            "width = " SIZE_RANGE ", " \
-            "height = " SIZE_RANGE ", " \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_REVERSE \
-           "video/x-raw-rgb, " \
-            "bpp = (int) 24, " \
-            "depth = (int) 24, " \
-            "endianness = (int) BIG_ENDIAN, " \
-            "red_mask = (int) " R_MASK_24_REVERSE ", " \
-            "green_mask = (int) " G_MASK_24_REVERSE ", " \
-            "blue_mask = (int) " B_MASK_24_REVERSE ", " \
-            "width = " SIZE_RANGE ", " \
-            "height = " SIZE_RANGE ", " \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_15_16 \
-           "video/x-raw-rgb, " \
-            "bpp = (int) 16, " \
-            "depth = (int) { 15, 16 }, " \
-            "endianness = (int) BYTE_ORDER, " \
-            "red_mask = (int) { " R_MASK_15 ", " R_MASK_16 " }, " \
-            "green_mask = (int) { " G_MASK_15 ", " G_MASK_16 " }, " \
-            "blue_mask = (int) { " B_MASK_15 ", " B_MASK_16 " }, " \
-            "width = " SIZE_RANGE ", " \
-            "height = " SIZE_RANGE ", " \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_16 \
-           "video/x-raw-rgb, "                         \
-            "bpp = (int) 16, "                         \
-            "depth = (int) 16, "                       \
-            "endianness = (int) BYTE_ORDER, "          \
-            "red_mask = (int) " R_MASK_16 ", "         \
-            "green_mask = (int) " G_MASK_16 ", "       \
-            "blue_mask = (int) " B_MASK_16 ", "                \
-            "width = " SIZE_RANGE ", "                 \
-            "height = " SIZE_RANGE ", "                        \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_15 \
-           "video/x-raw-rgb, "                         \
-            "bpp = (int) 16, "                         \
-            "depth = (int) 15, "                       \
-            "endianness = (int) BYTE_ORDER, "          \
-            "red_mask = (int) " R_MASK_15 ", "         \
-            "green_mask = (int) " G_MASK_15 ", "       \
-            "blue_mask = (int) " B_MASK_15 ", "                \
-            "width = " SIZE_RANGE ", "                 \
-            "height = " SIZE_RANGE ", "                        \
-            "framerate = " FPS_RANGE
-
-#define GST_VIDEO_YUV_PAD_TEMPLATE_CAPS(fourcc) \
-       "video/x-raw-yuv, " \
-       "format = (fourcc) " fourcc ", " \
-       "width = " SIZE_RANGE ", " \
-       "height = " SIZE_RANGE ", " \
-       "framerate = " FPS_RANGE
+#define GST_VIDEO_BYTE1_MASK_32  "0xFF000000"
+#define GST_VIDEO_BYTE2_MASK_32  "0x00FF0000"
+#define GST_VIDEO_BYTE3_MASK_32  "0x0000FF00"
+#define GST_VIDEO_BYTE4_MASK_32  "0x000000FF"
+
+#define GST_VIDEO_BYTE1_MASK_24  "0x00FF0000"
+#define GST_VIDEO_BYTE2_MASK_24  "0x0000FF00"
+#define GST_VIDEO_BYTE3_MASK_24  "0x000000FF"
+
+#define GST_VIDEO_BYTE1_MASK_32_INT  0xFF000000
+#define GST_VIDEO_BYTE2_MASK_32_INT  0x00FF0000
+#define GST_VIDEO_BYTE3_MASK_32_INT  0x0000FF00
+#define GST_VIDEO_BYTE4_MASK_32_INT  0x000000FF
+
+#define GST_VIDEO_BYTE1_MASK_24_INT  0x00FF0000
+#define GST_VIDEO_BYTE2_MASK_24_INT  0x0000FF00
+#define GST_VIDEO_BYTE3_MASK_24_INT  0x000000FF
+
+#define GST_VIDEO_RED_MASK_16 "0xf800"
+#define GST_VIDEO_GREEN_MASK_16 "0x07e0"
+#define GST_VIDEO_BLUE_MASK_16 "0x001f"
+
+#define GST_VIDEO_RED_MASK_15 "0x7c00"
+#define GST_VIDEO_GREEN_MASK_15 "0x03e0"
+#define GST_VIDEO_BLUE_MASK_15 "0x001f"
+
+#define GST_VIDEO_RED_MASK_16_INT 0xf800
+#define GST_VIDEO_GREEN_MASK_16_INT 0x07e0
+#define GST_VIDEO_BLUE_MASK_16_INT 0x001f
+
+#define GST_VIDEO_RED_MASK_15_INT 0x7c00
+#define GST_VIDEO_GREEN_MASK_15_INT 0x03e0
+#define GST_VIDEO_BLUE_MASK_15_INT 0x001f
+
+#define GST_VIDEO_SIZE_RANGE "(int) [ 16, 4096 ]"
+#define GST_VIDEO_FPS_RANGE "(double) [ 0, max ]"
+
+/* consider the next 2 protected */
+#define __GST_VIDEO_CAPS_MAKE_32(R, G, B)                              \
+    "video/x-raw-rgb, "                                                        \
+    "bpp = (int) 32, "                                                 \
+    "depth = (int) 24, "                                               \
+    "endianness = (int) BIG_ENDIAN, "                                  \
+    "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", "           \
+    "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", "         \
+    "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", "          \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                              \
+    "framerate = " GST_VIDEO_FPS_RANGE
+
+#define __GST_VIDEO_CAPS_MAKE_24(R, G, B)                              \
+    "video/x-raw-rgb, "                                                        \
+    "bpp = (int) 24, "                                                 \
+    "depth = (int) 24, "                                               \
+    "endianness = (int) BIG_ENDIAN, "                                  \
+    "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_24 ", "           \
+    "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_24 ", "         \
+    "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_24 ", "          \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                              \
+    "framerate = " GST_VIDEO_FPS_RANGE
+
+
+/* 24 bit */
+
+#define GST_VIDEO_CAPS_RGB \
+    __GST_VIDEO_CAPS_MAKE_24 (1, 2, 3)
+
+#define GST_VIDEO_CAPS_BGR \
+    __GST_VIDEO_CAPS_MAKE_24 (3, 2, 1)
+
+/* 32 bit */
+
+#define GST_VIDEO_CAPS_RGBx \
+    __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3)
+  
+#define GST_VIDEO_CAPS_xRGB \
+    __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4)
+  
+#define GST_VIDEO_CAPS_BGRx \
+    __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1)
+  
+#define GST_VIDEO_CAPS_xBGR \
+    __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2)
+
+/* note: the macro name uses the order on BE systems */
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \
+      GST_VIDEO_CAPS_xRGB
+  #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
+      GST_VIDEO_CAPS_BGRx
+#else
+  #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \
+      GST_VIDEO_CAPS_BGRx
+  #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
+      GST_VIDEO_CAPS_xRGB
+#endif
+      
+/* 15/16 bit */
+  
+#define GST_VIDEO_CAPS_RGB_16                                          \
+           "video/x-raw-rgb, "                                         \
+            "bpp = (int) 16, "                                         \
+            "depth = (int) 16, "                                       \
+            "endianness = (int) BYTE_ORDER, "                          \
+            "red_mask = (int) " GST_VIDEO_RED_MASK_16 ", "             \
+            "green_mask = (int) " GST_VIDEO_GREEN_MASK_16 ", "         \
+            "blue_mask = (int) " GST_VIDEO_BLUE_MASK_16 ", "           \
+            "width = " GST_VIDEO_SIZE_RANGE ", "                       \
+            "height = " GST_VIDEO_SIZE_RANGE ", "                      \
+            "framerate = " GST_VIDEO_FPS_RANGE
+
+#define GST_VIDEO_CAPS_RGB_15                                          \
+           "video/x-raw-rgb, "                                         \
+            "bpp = (int) 16, "                                         \
+            "depth = (int) 15, "                                       \
+            "endianness = (int) BYTE_ORDER, "                          \
+            "red_mask = (int) " GST_VIDEO_RED_MASK_15 ", "             \
+            "green_mask = (int) " GST_VIDEO_GREEN_MASK_15 ", "         \
+            "blue_mask = (int) " GST_VIDEO_BLUE_MASK_15 ", "           \
+            "width = " GST_VIDEO_SIZE_RANGE ", "                       \
+            "height = " GST_VIDEO_SIZE_RANGE ", "                      \
+            "framerate = " GST_VIDEO_FPS_RANGE
+
+#define GST_VIDEO_CAPS_YUV(fourcc)                                     \
+       "video/x-raw-yuv, "                                             \
+       "format = (fourcc) " fourcc ", "                                \
+       "width = " GST_VIDEO_SIZE_RANGE ", "                            \
+       "height = " GST_VIDEO_SIZE_RANGE ", "                           \
+       "framerate = " GST_VIDEO_FPS_RANGE
 
 /* functions */
 gdouble  gst_video_frame_rate (GstPad *pad);
index 024bf44..78d2aba 100644 (file)
@@ -24,7 +24,6 @@
 #include <string.h>
 #include <sys/time.h>
 #include "v4lsrc_calls.h"
-#include <gst/video/video.h>
 
 /* elementfactory information */
 static GstElementDetails gst_v4lsrc_details = GST_ELEMENT_DETAILS (
@@ -391,18 +390,18 @@ gst_v4lsrc_palette_to_caps (int            palette)
            "bpp = (int) 24, "
            "depth = (int) 24, "
            "endianness = (int) BIG_ENDIAN, "
-           "red_mask = " R_MASK_24 ", "
-           "green_mask = " G_MASK_24 ", "
-           "blue_mask = " B_MASK_24);
+           "red_mask = 0xFF0000, "
+           "green_mask = 0x00FF00, "
+           "blue_mask = 0x0000FF");
         break;
       case VIDEO_PALETTE_RGB32:
        caps = gst_caps_from_string ("video/x-raw-rgb, "
            "bpp = (int) 24, "
            "depth = (int) 32, "
            "endianness = (int) BIG_ENDIAN, "
-           "red_mask = " R_MASK_32 ", "
-           "green_mask = " G_MASK_32 ", "
-           "blue_mask = " B_MASK_32);
+           "red_mask = 0xFF000000, "
+           "green_mask = 0x00FF0000, "
+           "blue_mask = 0x0000FF00");
         break;
       default:
         g_assert_not_reached();
index ac6f701..61a6a39 100644 (file)
@@ -49,6 +49,8 @@ GST_STATIC_PAD_TEMPLATE (
     "height = (int) [ 0, MAX ]")
 );
 
+static void gst_ximagesink_buffer_free (GstBuffer *buffer);
+
 static GstVideoSinkClass *parent_class = NULL;
 
 /* ============================================================= */
@@ -739,7 +741,8 @@ gst_ximagesink_chain (GstPad *pad, GstData *data)
   
   /* If this buffer has been allocated using our buffer management we simply
      put the ximage which is in the PRIVATE pointer */
-  if (GST_BUFFER_PRIVATE (buf))
+  /* FIXME: need to check for correct xvimagesink here? */
+  if (GST_BUFFER_FREE_DATA_FUNC (buf) == gst_ximagesink_buffer_free)
     {
       gst_ximagesink_ximage_put (ximagesink, GST_BUFFER_PRIVATE (buf));
     }
@@ -773,19 +776,16 @@ gst_ximagesink_chain (GstPad *pad, GstData *data)
 /* Buffer management */
 
 static void
-gst_ximagesink_buffer_free (GstData *data)
+gst_ximagesink_buffer_free (GstBuffer *buffer)
 {
   GstXImageSink *ximagesink;
   GstXImage *ximage;
-  GstBuffer *buffer;
   
-  ximage = GST_BUFFER_PRIVATE (data);
+  ximage = GST_BUFFER_PRIVATE (buffer);
   
   g_assert (GST_IS_XIMAGESINK (ximage->ximagesink));
   ximagesink = ximage->ximagesink;
   
-  buffer = GST_BUFFER (data);
-  
   /* If our geometry changed we can't reuse that image. */
   if ( (ximage->width != GST_VIDEOSINK_WIDTH (ximagesink)) ||
        (ximage->height != GST_VIDEOSINK_HEIGHT (ximagesink)) )
@@ -796,10 +796,6 @@ gst_ximagesink_buffer_free (GstData *data)
       ximagesink->image_pool = g_slist_prepend (ximagesink->image_pool, ximage);
       g_mutex_unlock (ximagesink->pool_lock);
     }
-    
-  GST_BUFFER_DATA (buffer) = NULL;
-
-  gst_buffer_default_free (buffer);
 }
 
 static GstBuffer *
@@ -856,7 +852,7 @@ gst_ximagesink_buffer_alloc (GstPad *pad, guint64 offset, guint size)
       GST_BUFFER_PRIVATE (buffer) = ximage;
       
       GST_BUFFER_DATA (buffer) = ximage->ximage->data;
-      GST_DATA_FREE_FUNC (buffer) = gst_ximagesink_buffer_free;
+      GST_BUFFER_FREE_DATA_FUNC (buffer) = gst_ximagesink_buffer_free;
       GST_BUFFER_SIZE (buffer) = ximage->size;
       return buffer;
     }
index 894aa45..99e9f77 100644 (file)
@@ -55,6 +55,8 @@ GST_STATIC_PAD_TEMPLATE (
   )
 );
 
+static void gst_xvimagesink_buffer_free (GstBuffer *buffer);
+
 static GstVideoSinkClass *parent_class = NULL;
 
 /* ============================================================= */
@@ -899,7 +901,8 @@ gst_xvimagesink_chain (GstPad *pad, GstData *data)
   
   /* If this buffer has been allocated using our buffer management we simply
      put the ximage which is in the PRIVATE pointer */
-  if (GST_BUFFER_PRIVATE (buf))
+  /* FIXME: need to check for correct xvimagesink here? */
+  if (GST_BUFFER_FREE_DATA_FUNC (buf) == gst_xvimagesink_buffer_free)
     {
       gst_xvimagesink_xvimage_put (xvimagesink, GST_BUFFER_PRIVATE (buf));
     }
@@ -933,19 +936,16 @@ gst_xvimagesink_chain (GstPad *pad, GstData *data)
 /* Buffer management */
 
 static void
-gst_xvimagesink_buffer_free (GstData *data)
+gst_xvimagesink_buffer_free (GstBuffer *buffer)
 {
   GstXvImageSink *xvimagesink;
   GstXvImage *xvimage;
-  GstBuffer *buffer;
   
-  xvimage = GST_BUFFER_PRIVATE (data);
+  xvimage = GST_BUFFER_PRIVATE (buffer);
   
   g_assert (GST_IS_XVIMAGESINK (xvimage->xvimagesink));
   xvimagesink = xvimage->xvimagesink;
   
-  buffer = GST_BUFFER (data);
-  
   /* If our geometry changed we can't reuse that image. */
   if ( (xvimage->width != GST_VIDEOSINK_WIDTH (xvimagesink)) ||
        (xvimage->height != GST_VIDEOSINK_HEIGHT (xvimagesink)) )
@@ -957,10 +957,6 @@ gst_xvimagesink_buffer_free (GstData *data)
                                                  xvimage);
       g_mutex_unlock (xvimagesink->pool_lock);
     }
-    
-  GST_BUFFER_DATA (buffer) = NULL;
-
-  gst_buffer_default_free (buffer);
 }
 
 static GstBuffer *
@@ -1017,7 +1013,7 @@ gst_xvimagesink_buffer_alloc (GstPad *pad, guint64 offset, guint size)
       GST_BUFFER_PRIVATE (buffer) = xvimage;
       
       GST_BUFFER_DATA (buffer) = xvimage->xvimage->data;
-      GST_DATA_FREE_FUNC (buffer) = gst_xvimagesink_buffer_free;
+      GST_BUFFER_FREE_DATA_FUNC (buffer) = gst_xvimagesink_buffer_free;
       GST_BUFFER_SIZE (buffer) = xvimage->size;
       return buffer;
     }