multiqueue: make sure percent increases
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 23 Oct 2009 01:24:24 +0000 (21:24 -0400)
committerWim Taymans <wim@metal.(none)>
Tue, 27 Oct 2009 13:40:17 +0000 (14:40 +0100)
Keep track of the last posted percent message and make sure the next percent
messages are strictly increasing.

plugins/elements/gstmultiqueue.c
plugins/elements/gstmultiqueue.h

index 832a13d..70a99f9 100644 (file)
@@ -731,7 +731,6 @@ update_buffering (GstMultiQueue * mq, GstSingleQueue * sq)
       tmp = (size.bytes * 100) / sq->max_size.bytes;
       percent = MAX (percent, tmp);
     }
-    percent = MIN (percent, 100);
   }
 
   if (mq->buffering) {
@@ -739,9 +738,19 @@ update_buffering (GstMultiQueue * mq, GstSingleQueue * sq)
     if (percent >= mq->high_percent) {
       mq->buffering = FALSE;
     }
+    /* make sure it increases */
+    percent = MAX (mq->percent, percent);
+
+    if (percent == mq->percent)
+      /* don't post if nothing changed */
+      post = FALSE;
+    else
+      /* else keep last value we posted */
+      mq->percent = percent;
   } else {
     if (percent < mq->low_percent) {
       mq->buffering = TRUE;
+      mq->percent = percent;
       post = TRUE;
     }
   }
index ef557ba..ec47601 100644 (file)
@@ -61,6 +61,7 @@ struct _GstMultiQueue {
   gboolean use_buffering;
   gint low_percent, high_percent;
   gboolean buffering;
+  gint percent;
 
   guint32  counter;    /* incoming object counter, protected with STREAM_LOCK */
   guint32  highid;     /* contains highest id of last outputted object */