From 8c864712e6a502b34e227b7cdd8303481c6abda4 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 17 Jul 2012 12:57:59 +0200 Subject: [PATCH] buffer: make _foreach_meta more powerful Make _foreach_meta return FALSE when the foreach function returned FALSE. --- gst/gstbuffer.c | 16 ++++++++++------ gst/gstbuffer.h | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index e8250fe..b5f9cc1 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -1873,21 +1873,23 @@ gst_buffer_iterate_meta (GstBuffer * buffer, gpointer * state) * @func can modify the passed meta pointer or its contents. The return value * of @func define if this function returns or if the remaining metadata items * in the buffer should be skipped. + * + * Returns: %FALSE when @func returned %FALSE for one of the metadata. */ -void +gboolean gst_buffer_foreach_meta (GstBuffer * buffer, GstBufferForeachMetaFunc func, gpointer user_data) { GstMetaItem *walk, *prev, *next; + gboolean res = TRUE; - g_return_if_fail (buffer != NULL); - g_return_if_fail (func != NULL); + g_return_val_if_fail (buffer != NULL, FALSE); + g_return_val_if_fail (func != NULL, FALSE); /* find the metadata and delete */ prev = GST_BUFFER_META (buffer); for (walk = prev; walk; walk = next) { GstMeta *m, *new; - gboolean res; m = new = &walk->meta; next = walk->next; @@ -1900,8 +1902,9 @@ gst_buffer_foreach_meta (GstBuffer * buffer, GstBufferForeachMetaFunc func, GST_CAT_DEBUG (GST_CAT_BUFFER, "remove metadata %p (%s)", m, g_type_name (info->type)); - g_return_if_fail (gst_buffer_is_writable (buffer)); - g_return_if_fail (!GST_META_FLAG_IS_SET (m, GST_META_FLAG_LOCKED)); + g_return_val_if_fail (gst_buffer_is_writable (buffer), FALSE); + g_return_val_if_fail (!GST_META_FLAG_IS_SET (m, GST_META_FLAG_LOCKED), + FALSE); /* remove from list */ if (GST_BUFFER_META (buffer) == walk) @@ -1919,4 +1922,5 @@ gst_buffer_foreach_meta (GstBuffer * buffer, GstBufferForeachMetaFunc func, if (!res) break; } + return res; } diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h index 6a45c03..772e0a1 100644 --- a/gst/gstbuffer.h +++ b/gst/gstbuffer.h @@ -507,7 +507,7 @@ gboolean gst_buffer_remove_meta (GstBuffer *buffer, GstMeta *met GstMeta * gst_buffer_iterate_meta (GstBuffer *buffer, gpointer *state); -void gst_buffer_foreach_meta (GstBuffer *buffer, +gboolean gst_buffer_foreach_meta (GstBuffer *buffer, GstBufferForeachMetaFunc func, gpointer user_data); -- 2.7.4