libs: add more GstBuffer compat glue for GStreamer 0.10.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 27 Nov 2013 15:25:59 +0000 (16:25 +0100)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 27 Nov 2013 16:23:56 +0000 (17:23 +0100)
Add gst_buffer_new_allocate() and gst_buffer_fill() implementations.
Fix gst_buffer_new_wrapped_full() implementation to handle the destroy
notify function.

gst-libs/gst/vaapi/gstcompat.h

index f139739..efb5c56 100644 (file)
@@ -107,6 +107,9 @@ typedef struct {
 #undef  gst_buffer_new_wrapped_full
 #define gst_buffer_new_wrapped_full(flags, data, maxsize, ofs, size, ud, udd) \
     gst_compat_buffer_new_wrapped_full(flags, data, maxsize, ofs, size, ud, udd)
+#undef  gst_buffer_new_allocate
+#define gst_buffer_new_allocate(allocator, size, params) \
+    gst_compat_buffer_new_allocate((allocator), (size), (params))
 #undef  gst_buffer_get_size
 #define gst_buffer_get_size(buffer)     gst_compat_buffer_get_size(buffer)
 #undef  gst_buffer_map
@@ -116,6 +119,9 @@ typedef struct {
 #undef  gst_buffer_extract
 #define gst_buffer_extract(buffer, offset, dest, size) \
     gst_compat_buffer_extract(buffer, offset, dest, size)
+#undef  gst_buffer_fill
+#define gst_buffer_fill(buffer, offset, src, size) \
+    gst_compat_buffer_fill((buffer), (offset), (src), (size))
 #undef  gst_buffer_copy_into
 #define gst_buffer_copy_into(dest, src, flags, offset, size) \
     gst_compat_buffer_copy_into(dest, src, flags, offset, size)
@@ -128,8 +134,6 @@ gst_compat_buffer_new_wrapped_full(GstMemoryFlags flags, gpointer data,
     GstBuffer *buffer;
 
     /* XXX: unsupported */
-    g_return_val_if_fail(user_data == NULL, NULL);
-    g_return_val_if_fail(notify == NULL, NULL);
     g_return_val_if_fail(maxsize >= size, NULL);
 
     buffer = gst_buffer_new();
@@ -138,9 +142,23 @@ gst_compat_buffer_new_wrapped_full(GstMemoryFlags flags, gpointer data,
 
     GST_BUFFER_DATA(buffer) = data + offset;
     GST_BUFFER_SIZE(buffer) = size;
+
+    if (notify)
+        gst_mini_object_weak_ref(GST_MINI_OBJECT_CAST(buffer),
+            (GstMiniObjectWeakNotify)notify, user_data);
     return buffer;
 }
 
+static inline GstBuffer *
+gst_compat_buffer_new_allocate(gpointer allocator, gsize size, gpointer params)
+{
+    /* XXX: unsupported */
+    g_return_val_if_fail(allocator == NULL, NULL);
+    g_return_val_if_fail(params == NULL, NULL);
+
+    return gst_buffer_new_and_alloc(size);
+}
+
 static inline gsize
 gst_compat_buffer_get_size(GstBuffer *buffer)
 {
@@ -175,6 +193,20 @@ gst_compat_buffer_extract(GstBuffer *buffer, gsize offset, gpointer dest,
     return esize;
 }
 
+static inline gsize
+gst_compat_buffer_fill(GstBuffer *buffer, gsize offset, gconstpointer src,
+    gsize size)
+{
+    gsize fsize;
+
+    if (!buffer || !src || offset >= GST_BUFFER_SIZE(buffer))
+        return 0;
+
+    fsize = MIN(size, GST_BUFFER_SIZE(buffer) - offset);
+    memcpy(GST_BUFFER_DATA(buffer) + offset, src, fsize);
+    return fsize;
+}
+
 static inline void
 gst_compat_buffer_copy_into(GstBuffer *dest, GstBuffer *src,
     GstBufferCopyFlags flags, gsize offset, gsize size)