summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2010-03-18 13:41:35 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2010-03-18 13:41:35 +0100
commitba34494ce34ce5b4fb5cd3dc1866644d8b23daa2 (patch)
tree7ccfbd6f89b269d97d2286819f1bcca9b354842d
parentd576c1105ecda07bd7d508b0905a0566bb623795 (diff)
basesrc: catch, parse and store QoS event values
Catch, parse and store the QoS values from QoS events for later use.
-rw-r--r--libs/gst/base/gstbasesrc.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index dd71ffdd7e..1c46015999 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -165,6 +165,8 @@
#include <stdlib.h>
#include <string.h>
+#include <gst/gst_private.h>
+
#include "gstbasesrc.h"
#include "gsttypefindhelper.h"
#include <gst/gstmarshal.h>
@@ -237,6 +239,11 @@ struct _GstBaseSrcPrivate
/* pending tags to be pushed in the data stream */
GList *pending_tags;
+
+ /* QoS *//* with LOCK */
+ gboolean qos_enabled;
+ gdouble proportion;
+ GstClockTime earliest_time;
};
static GstElementClass *parent_class = NULL;
@@ -1659,6 +1666,21 @@ gst_base_src_seekable (GstBaseSrc * src)
return FALSE;
}
+static void
+gst_base_src_update_qos (GstBaseSrc * src,
+ gdouble proportion, GstClockTimeDiff diff, GstClockTime timestamp)
+{
+ GST_CAT_DEBUG_OBJECT (GST_CAT_QOS, src,
+ "qos: proportion: %lf, diff %" G_GINT64_FORMAT ", timestamp %"
+ GST_TIME_FORMAT, proportion, diff, GST_TIME_ARGS (timestamp));
+
+ GST_OBJECT_LOCK (src);
+ src->priv->proportion = proportion;
+ src->priv->earliest_time = timestamp + diff;
+ GST_OBJECT_UNLOCK (src);
+}
+
+
static gboolean
gst_base_src_default_event (GstBaseSrc * src, GstEvent * event)
{
@@ -1680,6 +1702,17 @@ gst_base_src_default_event (GstBaseSrc * src, GstEvent * event)
case GST_EVENT_FLUSH_STOP:
result = gst_base_src_set_flushing (src, FALSE, TRUE, TRUE, NULL);
break;
+ case GST_EVENT_QOS:
+ {
+ gdouble proportion;
+ GstClockTimeDiff diff;
+ GstClockTime timestamp;
+
+ gst_event_parse_qos (event, &proportion, &diff, &timestamp);
+ gst_base_src_update_qos (src, proportion, diff, timestamp);
+ result = TRUE;
+ break;
+ }
default:
result = TRUE;
break;