From 113b9dc5352374a1cf21f1daed1ef18ed6d2ee3b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sat, 31 Mar 2012 17:10:35 +0200 Subject: [PATCH] buffer: add peek_memory method Add a peerk_memory method that simply fetches the memory at an offset without refcounting or merging. --- gst/gstbuffer.c | 27 +++++++++++++++++++++++++++ gst/gstbuffer.h | 1 + win32/common/libgstreamer.def | 1 + 3 files changed, 29 insertions(+) diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index 65e781e391..43a02c673c 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -772,6 +772,33 @@ _get_mapped (GstBuffer * buffer, guint idx, GstMapInfo * info, return mem; } +/** + * gst_buffer_peek_memory: + * @buffer: a #GstBuffer. + * @idx: an index + * + * Get the memory block at @idx in @buffer. The memory block stays valid until + * the memory block in @buffer is removed, replaced or merged, typically with + * any call that modifies the memory in @buffer. + * + * Since this call does not influence the refcount of the memory, + * gst_memory_is_exclusive() can be used to check if @buffer is the sole owner + * of the returned memory. + * + * Returns: (transfer none): the #GstMemory at @idx. + */ +GstMemory * +gst_buffer_peek_memory (GstBuffer * buffer, guint idx) +{ + guint len; + + g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL); + len = GST_BUFFER_MEM_LEN (buffer); + g_return_val_if_fail (idx < len, NULL); + + return GST_BUFFER_MEM_PTR (buffer, idx); +} + /** * gst_buffer_get_memory_range: * @buffer: a #GstBuffer. diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h index ea18e80c7a..cc8200a3ea 100644 --- a/gst/gstbuffer.h +++ b/gst/gstbuffer.h @@ -269,6 +269,7 @@ GstBuffer * gst_buffer_new_wrapped (gpointer data, gsize size); guint gst_buffer_n_memory (GstBuffer *buffer); void gst_buffer_insert_memory (GstBuffer *buffer, gint idx, GstMemory *mem); void gst_buffer_replace_memory_range (GstBuffer *buffer, guint idx, gint length, GstMemory *mem); +GstMemory * gst_buffer_peek_memory (GstBuffer *buffer, guint idx); GstMemory * gst_buffer_get_memory_range (GstBuffer *buffer, guint idx, gint length); void gst_buffer_remove_memory_range (GstBuffer *buffer, guint idx, gint length); diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 5e7a2bffc3..eabffe0a26 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -120,6 +120,7 @@ EXPORTS gst_buffer_new_allocate gst_buffer_new_wrapped gst_buffer_new_wrapped_full + gst_buffer_peek_memory gst_buffer_pool_acquire_buffer gst_buffer_pool_acquire_flags_get_type gst_buffer_pool_config_add_option