libs: add more GstBuffer compat glue for GStreamer 0.10.

Add gst_buffer_new_allocate() and gst_buffer_fill() implementations.
Fix gst_buffer_new_wrapped_full() implementation to handle the destroy
notify function.
This commit is contained in:
Gwenole Beauchesne 2013-11-27 16:25:59 +01:00
parent f82deaf10c
commit e9e988fc71

View 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)