summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-03-19 09:19:23 +0100
committerOlivier Crête <olivier.crete@collabora.com>2015-04-20 17:38:21 -0400
commite3860ddfb5667de8f3f9be27838ea7e4152faf01 (patch)
treea6189885f5096459dfeacd73bd1a6b0a7a52da15
parent34d03c15a14e9ea46ef2f3201f12b90755154296 (diff)
downloadlibnice-e3860ddfb5667de8f3f9be27838ea7e4152faf01.tar.gz
nicesrc: Attach the receive callback in READY->PAUSED and detach in PAUSED->READY
Receiving data before the element is ready to push them does not seem like the best idea. https://bugs.freedesktop.org/show_bug.cgi?id=89673
-rw-r--r--gst/gstnicesrc.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/gst/gstnicesrc.c b/gst/gstnicesrc.c
index 0f1b9d1..d369e09 100644
--- a/gst/gstnicesrc.c
+++ b/gst/gstnicesrc.c
@@ -425,13 +425,8 @@ gst_nice_src_change_state (GstElement * element, GstStateChange transition)
"Trying to start Nice source without a component set");
return GST_STATE_CHANGE_FAILURE;
}
- else
- {
- nice_agent_attach_recv (src->agent, src->stream_id, src->component_id,
- src->mainctx, gst_nice_src_read_callback, (gpointer) src);
- }
break;
- case GST_STATE_CHANGE_READY_TO_NULL:
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
nice_agent_attach_recv (src->agent, src->stream_id, src->component_id,
src->mainctx, NULL, NULL);
GST_OBJECT_LOCK (src);
@@ -442,7 +437,7 @@ gst_nice_src_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_READY_TO_PAUSED:
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
- case GST_STATE_CHANGE_PAUSED_TO_READY:
+ case GST_STATE_CHANGE_READY_TO_NULL:
default:
break;
}
@@ -450,6 +445,20 @@ gst_nice_src_change_state (GstElement * element, GstStateChange transition)
ret = GST_ELEMENT_CLASS (gst_nice_src_parent_class)->change_state (element,
transition);
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ nice_agent_attach_recv (src->agent, src->stream_id, src->component_id,
+ src->mainctx, gst_nice_src_read_callback, (gpointer) src);
+ break;
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ default:
+ break;
+ }
+
return ret;
}