[telepathy-stream-engine/master] Add method to stop the audio sources
Olivier Crête
olivier.crete at collabora.co.uk
Mon Jul 13 12:31:20 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