summaryrefslogtreecommitdiff
path: root/clutter-gst/clutter-gst-player.c
diff options
context:
space:
mode:
authorAndre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>2012-09-13 12:41:26 -0300
committerLionel Landwerlin <llandwerlin@gmail.com>2013-03-18 16:24:19 +0000
commit4b3284ce58cb7cea9a5ab252546eedb4c8bca4e5 (patch)
tree7e0cf7c5eb139cf0e3f7499ecb27fdbac6f478b3 /clutter-gst/clutter-gst-player.c
parent8d8f0a7512903923e2eb715d9598a636d51ca8b1 (diff)
downloadclutter-gst-4b3284ce58cb7cea9a5ab252546eedb4c8bca4e5.tar.gz
ClutterGstPlayer: Handle buffering for live media.
Diffstat (limited to 'clutter-gst/clutter-gst-player.c')
-rw-r--r--clutter-gst/clutter-gst-player.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/clutter-gst/clutter-gst-player.c b/clutter-gst/clutter-gst-player.c
index 22358d5..0b5dc81 100644
--- a/clutter-gst/clutter-gst-player.c
+++ b/clutter-gst/clutter-gst-player.c
@@ -1003,31 +1003,36 @@ bus_message_buffering_cb (GstBus *bus,
switch (mode)
{
+ case GST_BUFFERING_LIVE:
case GST_BUFFERING_STREAM:
gst_message_parse_buffering (message, &buffer_percent);
priv->buffer_fill = CLAMP ((gdouble) buffer_percent / 100.0, 0.0, 1.0);
CLUTTER_GST_NOTE (BUFFERING, "buffer-fill: %.02f", priv->buffer_fill);
- /* The playbin documentation says that we need to pause the pipeline
- * when there's not enough data yet. We try to limit the calls to
- * gst_element_set_state() */
- gst_element_get_state (priv->pipeline, &current_state, NULL, 0);
-
- if (priv->buffer_fill < 1.0)
+ /* no state management needed for live pipelines */
+ if (!priv->is_live)
{
- if (current_state != GST_STATE_PAUSED)
+ /* The playbin documentation says that we need to pause the pipeline
+ * when there's not enough data yet. We try to limit the calls to
+ * gst_element_set_state() */
+ gst_element_get_state (priv->pipeline, &current_state, NULL, 0);
+
+ if (priv->buffer_fill < 1.0)
{
- CLUTTER_GST_NOTE (BUFFERING, "pausing the pipeline");
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
+ if (current_state != GST_STATE_PAUSED)
+ {
+ CLUTTER_GST_NOTE (BUFFERING, "pausing the pipeline");
+ gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
+ }
}
- }
- else
- {
- if (current_state != priv->target_state)
+ else
{
- CLUTTER_GST_NOTE (BUFFERING, "restoring the pipeline");
- gst_element_set_state (priv->pipeline, priv->target_state);
+ if (current_state != priv->target_state)
+ {
+ CLUTTER_GST_NOTE (BUFFERING, "restoring the pipeline");
+ gst_element_set_state (priv->pipeline, priv->target_state);
+ }
}
}
@@ -1060,7 +1065,6 @@ bus_message_buffering_cb (GstBus *bus,
break;
case GST_BUFFERING_TIMESHIFT:
- case GST_BUFFERING_LIVE:
default:
g_warning ("Buffering mode %d not handled", mode);
break;