diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2018-03-04 10:53:10 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2018-03-05 09:39:57 +0200 |
commit | 89eac59e928b24363f405f11751720cabd0b4a75 (patch) | |
tree | eba1beab60b4d44319739cb6df15eb975c262348 | |
parent | a1bf0f0e6a8118eab309707f52a64e1ce2c2be95 (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.txt | 1 | ||||
-rw-r--r-- | libs/gst/base/gstqueuearray.c | 35 | ||||
-rw-r--r-- | libs/gst/base/gstqueuearray.h | 2 | ||||
-rw-r--r-- | win32/common/libgstbase.def | 1 |
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 |