diff options
author | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2011-02-10 19:58:38 +0000 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2011-02-10 20:29:50 +0000 |
commit | 3bbcc8456ef905e20d043b35487015a88f262b38 (patch) | |
tree | d9b636561df7b708c899634a0b2606ef7371af6e /transmitters | |
parent | afc31f00f87a35c83b1ba6623bb49e35225beca3 (diff) | |
download | farstream-3bbcc8456ef905e20d043b35487015a88f262b38.tar.gz |
nicestream: Skip Nice errors if the component has never been ready
Diffstat (limited to 'transmitters')
-rw-r--r-- | transmitters/nice/fs-nice-stream-transmitter.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/transmitters/nice/fs-nice-stream-transmitter.c b/transmitters/nice/fs-nice-stream-transmitter.c index 9feca1c8..e5ae531d 100644 --- a/transmitters/nice/fs-nice-stream-transmitter.c +++ b/transmitters/nice/fs-nice-stream-transmitter.c @@ -100,6 +100,8 @@ struct _FsNiceStreamTransmitterPrivate volatile gint associate_on_source; + gboolean *component_has_been_ready; /* only from NiceAgent main thread */ + /* Everything below is protected by the mutex */ gboolean sending; @@ -452,6 +454,8 @@ fs_nice_stream_transmitter_finalize (GObject *object) g_free (self->priv->username); g_free (self->priv->password); + g_free (self->priv->component_has_been_ready); + parent_class->finalize (object); } @@ -1320,6 +1324,9 @@ fs_nice_stream_transmitter_build (FsNiceStreamTransmitter *self, FS_PARTICIPANT_DATA_UNLOCK (participant); + self->priv->component_has_been_ready = g_new0 (gboolean, + self->priv->transmitter->components); + self->priv->stream_id = nice_agent_add_stream ( self->priv->agent->agent, self->priv->transmitter->components); @@ -1477,6 +1484,15 @@ agent_state_changed (NiceAgent *agent, if (stream_id != self->priv->stream_id) return; + /* Ignore failed until we've connected, never time out because + * of the dribbling case, more candidates could come later + */ + if (state == NICE_COMPONENT_STATE_FAILED && + !self->priv->component_has_been_ready[component_id]) + return; + else if (state == NICE_COMPONENT_STATE_READY) + self->priv->component_has_been_ready[component_id] = TRUE; + fs_state = nice_component_state_to_fs_stream_state (state); data = g_slice_new (struct state_changed_signal_data); |