From f0937071891a69b1b9c2131974a5fd2e93539965 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Wed, 5 May 2010 10:21:55 +0200 Subject: [PATCH] queue2: Add use-ring-buffer and ring-buffer-max-size properties --- plugins/elements/gstqueue2.c | 42 ++++++++++++++++++++++++++++++++++++++++++ plugins/elements/gstqueue2.h | 3 +++ 2 files changed, 45 insertions(+) diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c index 5eb5f10..eedcbff 100644 --- a/plugins/elements/gstqueue2.c +++ b/plugins/elements/gstqueue2.c @@ -102,6 +102,8 @@ enum #define DEFAULT_LOW_PERCENT 10 #define DEFAULT_HIGH_PERCENT 99 #define DEFAULT_TEMP_REMOVE TRUE +#define DEFAULT_USE_RING_BUFFER FALSE +#define DEFAULT_RING_BUFFER_MAX_SIZE (16 * 1024 * 1024) /* 16 MB */ /* other defines */ #define DEFAULT_BUFFER_SIZE 4096 @@ -123,6 +125,8 @@ enum PROP_TEMP_TEMPLATE, PROP_TEMP_LOCATION, PROP_TEMP_REMOVE, + PROP_USE_RING_BUFFER, + PROP_RING_BUFFER_MAX_SIZE, PROP_LAST }; @@ -349,6 +353,32 @@ gst_queue2_class_init (GstQueue2Class * klass) "Remove the temp-location after use", DEFAULT_TEMP_REMOVE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstQueue2:use-ring-buffer + * + * When use-ring-buffer is set, buffer data into a ring buffer containing ranges + * of source data. Default FALSE. + * + * Since: 0.10.30 + */ + g_object_class_install_property (gobject_class, PROP_USE_RING_BUFFER, + g_param_spec_boolean ("use-ring-buffer", "Use a ring buffer", + "Use a ring buffer of size ring-buffer-max-size kB", + DEFAULT_USE_RING_BUFFER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstQueue2:ring-buffer-max-size + * + * The maximum size of the ring buffer in kilobytes. If set to 0 kB then the size + * is unlimited. Default 16 megabytes. + * + * Since: 0.10.30 + */ + g_object_class_install_property (gobject_class, PROP_RING_BUFFER_MAX_SIZE, + g_param_spec_uint ("ring-buffer-max-size", "Max. ring buffer size (kB)", + "Max. amount of data in the ring buffer (bytes, 0=unlimited)", + 0, G_MAXUINT, DEFAULT_RING_BUFFER_MAX_SIZE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /* set several parent class virtual functions */ gobject_class->finalize = gst_queue2_finalize; @@ -2413,6 +2443,12 @@ gst_queue2_set_property (GObject * object, case PROP_TEMP_REMOVE: queue->temp_remove = g_value_get_boolean (value); break; + case PROP_USE_RING_BUFFER: + queue->use_ring_buffer = g_value_get_boolean (value); + break; + case PROP_RING_BUFFER_MAX_SIZE: + queue->ring_buffer_max_size = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2469,6 +2505,12 @@ gst_queue2_get_property (GObject * object, case PROP_TEMP_REMOVE: g_value_set_boolean (value, queue->temp_remove); break; + case PROP_USE_RING_BUFFER: + g_value_set_boolean (value, queue->use_ring_buffer); + break; + case PROP_RING_BUFFER_MAX_SIZE: + g_value_set_uint (value, queue->ring_buffer_max_size); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/plugins/elements/gstqueue2.h b/plugins/elements/gstqueue2.h index 92fd4b2..8c8ca3a 100644 --- a/plugins/elements/gstqueue2.h +++ b/plugins/elements/gstqueue2.h @@ -132,6 +132,9 @@ struct _GstQueue2 * because we can't save it on the file */ gboolean segment_event_received; GstEvent *starting_segment; + + gboolean use_ring_buffer; + guint ring_buffer_max_size; }; struct _GstQueue2Class -- 2.7.4