From 4db7fc58d2df96341b20ce682a89f951573bb620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 19 Apr 2011 20:52:05 +0200 Subject: [PATCH] bufferlist: Implement gst_buffer_list_foreach() --- gst/gstbufferlist.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/gst/gstbufferlist.c b/gst/gstbufferlist.c index 615ace5307..0af57d313e 100644 --- a/gst/gstbufferlist.c +++ b/gst/gstbufferlist.c @@ -194,6 +194,35 @@ void gst_buffer_list_foreach (GstBufferList * list, GstBufferListFunc func, gpointer user_data) { + guint i, len; + + g_return_if_fail (GST_IS_BUFFER_LIST (list)); + g_return_if_fail (func != NULL); + + len = list->array->len; + for (i = 0; i < len;) { + GstBuffer *buf, *buf_ret; + gboolean ret; + + buf = buf_ret = g_array_index (list->array, GstBuffer *, i); + ret = func (&buf_ret, i, user_data); + + /* Check if the function changed the buffer */ + if (buf != buf_ret) { + if (buf_ret == NULL) { + g_array_remove_index (list->array, i); + } else { + g_array_index (list->array, GstBuffer *, i) = buf_ret; + } + } + + if (!ret) + break; + + /* If the buffer was not removed by func go to the next buffer */ + if (buf_ret != NULL) + i++; + } } /**