diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2003-04-18 16:32:25 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2003-04-18 16:32:25 +0000 |
commit | ed56a305350ae72daf3f8c47db48449f5f4c9f7a (patch) | |
tree | c5677be81f215b602b4fca4b5116329e8ee06747 | |
parent | 4df49daf44f591092186e933dd834947adbc7666 (diff) |
Colins patch to emit a signal if the queue is full (for buffering)
Original commit message from CVS:
Colins patch to emit a signal if the queue is full (for buffering)
-rw-r--r-- | gst/gstqueue.c | 13 | ||||
-rw-r--r-- | plugins/elements/gstqueue.c | 13 |
2 files changed, 24 insertions, 2 deletions
diff --git a/gst/gstqueue.c b/gst/gstqueue.c index 937d80e54b..a221ff4ad3 100644 --- a/gst/gstqueue.c +++ b/gst/gstqueue.c @@ -111,7 +111,7 @@ queue_leaky_get_type(void) { } static GstElementClass *parent_class = NULL; -/* static guint gst_queue_signals[LAST_SIGNAL] = { 0 }; */ +static guint gst_queue_signals[LAST_SIGNAL] = { 0 }; GType gst_queue_get_type(void) @@ -147,6 +147,12 @@ gst_queue_class_init (GstQueueClass *klass) parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + gst_queue_signals[HIGH_WATERMARK] = + g_signal_new ("high_watermark", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GstQueueClass, high_watermark), NULL, NULL, + g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, + G_TYPE_INT); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LEAKY, g_param_spec_enum ("leaky", "Leaky", "Where the queue leaks, if at all.", GST_TYPE_QUEUE_LEAKY, GST_QUEUE_NO_LEAK, G_PARAM_READWRITE)); @@ -350,6 +356,11 @@ restart: GST_DEBUG_ELEMENT (GST_CAT_DATAFLOW, queue, "adding buffer %p of size %d",buf,GST_BUFFER_SIZE(buf)); if (queue->level_buffers == queue->size_buffers) { + g_mutex_unlock (queue->qlock); + g_signal_emit (G_OBJECT (queue), gst_queue_signals[HIGH_WATERMARK], 0, + queue->level_buffers); + g_mutex_lock (queue->qlock); + /* if this is a leaky queue... */ if (queue->leaky) { /* FIXME don't want to leak events! */ diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 937d80e54b..a221ff4ad3 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -111,7 +111,7 @@ queue_leaky_get_type(void) { } static GstElementClass *parent_class = NULL; -/* static guint gst_queue_signals[LAST_SIGNAL] = { 0 }; */ +static guint gst_queue_signals[LAST_SIGNAL] = { 0 }; GType gst_queue_get_type(void) @@ -147,6 +147,12 @@ gst_queue_class_init (GstQueueClass *klass) parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + gst_queue_signals[HIGH_WATERMARK] = + g_signal_new ("high_watermark", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GstQueueClass, high_watermark), NULL, NULL, + g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, + G_TYPE_INT); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LEAKY, g_param_spec_enum ("leaky", "Leaky", "Where the queue leaks, if at all.", GST_TYPE_QUEUE_LEAKY, GST_QUEUE_NO_LEAK, G_PARAM_READWRITE)); @@ -350,6 +356,11 @@ restart: GST_DEBUG_ELEMENT (GST_CAT_DATAFLOW, queue, "adding buffer %p of size %d",buf,GST_BUFFER_SIZE(buf)); if (queue->level_buffers == queue->size_buffers) { + g_mutex_unlock (queue->qlock); + g_signal_emit (G_OBJECT (queue), gst_queue_signals[HIGH_WATERMARK], 0, + queue->level_buffers); + g_mutex_lock (queue->qlock); + /* if this is a leaky queue... */ if (queue->leaky) { /* FIXME don't want to leak events! */ |