static void single_queue_overrun_cb (GstDataQueue * dq, GstSingleQueue * sq);
static void single_queue_underrun_cb (GstDataQueue * dq, GstSingleQueue * sq);
+static void update_buffering (GstMultiQueue * mq, GstSingleQueue * sq);
+
static void gst_single_queue_flush_queue (GstSingleQueue * sq, gboolean full);
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink_%u",
while (tmp) { \
GstSingleQueue *q = (GstSingleQueue*)tmp->data; \
q->max_size.format = mq->max_size.format; \
+ update_buffering (mq, q); \
tmp = g_list_next(tmp); \
}; \
} G_STMT_END
GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+ mq->max_size.visible = new_size;
+
tmp = mq->queues;
while (tmp) {
GstDataQueueSize size;
} else if (new_size > size.visible) {
q->max_size.visible = new_size;
}
+ update_buffering (mq, q);
tmp = g_list_next (tmp);
- };
-
- mq->max_size.visible = new_size;
+ }
GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
message = gst_message_new_buffering (GST_OBJECT_CAST (mq), 100);
gst_element_post_message (GST_ELEMENT_CAST (mq), message);
- };
+ }
+
+ if (mq->use_buffering) {
+ GList *tmp;
+
+ GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+
+ mq->buffering = TRUE;
+ tmp = mq->queues;
+ while (tmp) {
+ GstSingleQueue *q = (GstSingleQueue *) tmp->data;
+ update_buffering (mq, q);
+ tmp = g_list_next (tmp);
+ }
+
+ GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
+ }
break;
case PROP_LOW_PERCENT:
mq->low_percent = g_value_get_int (value);