summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2018-03-04 10:53:10 +0200
committerSebastian Dröge <sebastian@centricular.com>2018-03-05 09:39:57 +0200
commit89eac59e928b24363f405f11751720cabd0b4a75 (patch)
treeeba1beab60b4d44319739cb6df15eb975c262348
parenta1bf0f0e6a8118eab309707f52a64e1ce2c2be95 (diff)
queuearray: Implement pop_tail_struct() for completeness
All other variants of {peek,pop}_{head,tail}_{,struct} were already implemented. https://bugzilla.gnome.org/show_bug.cgi?id=794035
-rw-r--r--docs/libs/gstreamer-libs-sections.txt1
-rw-r--r--libs/gst/base/gstqueuearray.c35
-rw-r--r--libs/gst/base/gstqueuearray.h2
-rw-r--r--win32/common/libgstbase.def1
4 files changed, 39 insertions, 0 deletions
diff --git a/docs/libs/gstreamer-libs-sections.txt b/docs/libs/gstreamer-libs-sections.txt
index 36a42d41c..66f77af1a 100644
--- a/docs/libs/gstreamer-libs-sections.txt
+++ b/docs/libs/gstreamer-libs-sections.txt
@@ -938,6 +938,7 @@ gst_queue_array_push_tail_struct
gst_queue_array_peek_head_struct
gst_queue_array_pop_head_struct
gst_queue_array_peek_tail_struct
+gst_queue_array_pop_tail_struct
gst_queue_array_drop_struct
</SECTION>
diff --git a/libs/gst/base/gstqueuearray.c b/libs/gst/base/gstqueuearray.c
index ebec179a3..c52ee3988 100644
--- a/libs/gst/base/gstqueuearray.c
+++ b/libs/gst/base/gstqueuearray.c
@@ -402,6 +402,41 @@ gst_queue_array_pop_tail (GstQueueArray * array)
}
/**
+ * gst_queue_array_pop_tail_struct: (skip)
+ * @array: a #GstQueueArray object
+ *
+ * Returns the tail of the queue @array and removes
+ * it from the queue.
+ *
+ * Returns: The tail of the queue
+ *
+ * Since: 1.14
+ */
+gpointer
+gst_queue_array_pop_tail_struct (GstQueueArray * array)
+{
+ gpointer ret;
+ guint len, idx;
+
+ g_return_val_if_fail (array != NULL, NULL);
+
+ len = array->length;
+
+ /* empty array */
+ if (len == 0)
+ return NULL;
+
+ idx = (array->head + (len - 1)) % array->size;
+
+ ret = array->array + (array->elt_size * idx);
+
+ array->tail = idx;
+ array->length--;
+
+ return ret;
+}
+
+/**
* gst_queue_array_is_empty: (skip)
* @array: a #GstQueueArray object
*
diff --git a/libs/gst/base/gstqueuearray.h b/libs/gst/base/gstqueuearray.h
index 575232093..bbb465f9f 100644
--- a/libs/gst/base/gstqueuearray.h
+++ b/libs/gst/base/gstqueuearray.h
@@ -84,6 +84,8 @@ gboolean gst_queue_array_drop_struct (GstQueueArray * array,
guint idx,
gpointer p_struct);
GST_EXPORT
+gpointer gst_queue_array_pop_tail_struct (GstQueueArray * array);
+GST_EXPORT
gpointer gst_queue_array_peek_tail_struct (GstQueueArray * array);
G_END_DECLS
diff --git a/win32/common/libgstbase.def b/win32/common/libgstbase.def
index c6788f26d..528ed9821 100644
--- a/win32/common/libgstbase.def
+++ b/win32/common/libgstbase.def
@@ -321,6 +321,7 @@ EXPORTS
gst_queue_array_pop_head
gst_queue_array_pop_head_struct
gst_queue_array_pop_tail
+ gst_queue_array_pop_tail_struct
gst_queue_array_push_tail
gst_queue_array_push_tail_struct
gst_type_find_helper