[telepathy-stream-engine/refs/tags/telepathy-stream-engine_0.5.10] Add method to stop the audio sources

Olivier Crête olivier.crete at collabora.co.uk
Mon Oct 26 09:28:19 PDT 2009


---
 src/audiostream.c |   48 +++++++++++++++++++++++++++++++++++++++++++++++-
 src/audiostream.h |    5 +++++
 2 files changed, 52 insertions(+), 1 deletions(-)

diff --git a/src/audiostream.c b/src/audiostream.c
index ad635f2..596d478 100644
--- a/src/audiostream.c
+++ b/src/audiostream.c
@@ -68,6 +68,9 @@ struct _TpStreamEngineAudioStreamPrivate
   /* Everything below this line is protected by the mutex */
   guint error_idle_id;
   GList *sinkbins;
+
+  gboolean sending;
+  gboolean playing;
 };
 
 
@@ -509,12 +512,21 @@ request_resource (TfStream *stream,
   if (!(dir & TP_MEDIA_STREAM_DIRECTION_SEND))
     return TRUE;
 
+  if (!self->priv->playing)
+    {
+      self->priv->sending = TRUE;
+      return TRUE;
+    }
+
   ret = gst_element_set_state (self->priv->srcbin, GST_STATE_PLAYING);
 
   if (ret == GST_STATE_CHANGE_FAILURE)
     return FALSE;
   else
-    return TRUE;
+    {
+      self->priv->sending = TRUE;
+      return TRUE;
+    }
 }
 
 static void
@@ -526,5 +538,39 @@ free_resource (TfStream *stream,
   if (!(dir & TP_MEDIA_STREAM_DIRECTION_SEND))
     return;
 
+  self->priv->sending = FALSE;
+
+  if (!self->priv->playing)
+    return;
+
   gst_element_set_state (self->priv->srcbin, GST_STATE_READY);
+
+}
+
+gboolean
+tp_stream_engine_audio_stream_set_playing (TpStreamEngineAudioStream *self,
+    gboolean playing)
+{
+  GstStateChangeReturn ret;
+
+  if (playing)
+    {
+      if (self->priv->sending)
+        ret = gst_element_set_state (self->priv->srcbin, GST_STATE_PLAYING);
+      else
+        ret = gst_element_set_state (self->priv->srcbin, GST_STATE_READY);
+
+      if (ret == GST_STATE_CHANGE_FAILURE)
+        tf_stream_error (self->priv->stream, 0,
+            "Error re-starting the audio srouce");
+    }
+  else
+    {
+      ret = gst_element_set_state (self->priv->srcbin, GST_STATE_NULL);
+      g_assert (ret != GST_STATE_CHANGE_FAILURE);
+    }
+
+  self->priv->playing = playing;
+
+  return (ret != GST_STATE_CHANGE_FAILURE);
 }
diff --git a/src/audiostream.h b/src/audiostream.h
index eea0934..035fb84 100644
--- a/src/audiostream.h
+++ b/src/audiostream.h
@@ -51,6 +51,11 @@ tp_stream_engine_audio_stream_new (TfStream *stream,
     GstBin *bin,
     GError **error);
 
+gboolean tp_stream_engine_audio_stream_set_playing (
+    TpStreamEngineAudioStream *self,
+    gboolean playing);
+
+
 G_END_DECLS
 
 #endif /* __TP_STREAM_ENGINE_AUDIO_STREAM_H__ */
-- 
1.5.6.5




More information about the telepathy-commits mailing list