diff options
-rw-r--r-- | gst/playback/gstplaybin2.c | 17 | ||||
-rw-r--r-- | gst/playback/gsturidecodebin.c | 37 |
2 files changed, 34 insertions, 20 deletions
diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 400e99ad0..9d32c6ef9 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -332,6 +332,7 @@ struct _GstSourceGroup gulong pad_removed_id; gulong no_more_pads_id; gulong notify_source_id; + gulong source_setup_id; gulong drained_id; gulong autoplug_factories_id; gulong autoplug_select_id; @@ -5254,9 +5255,17 @@ notify_source_cb (GstElement * uridecodebin, GParamSpec * pspec, GST_OBJECT_UNLOCK (playbin); g_object_notify (G_OBJECT (playbin), "source"); +} + +static void +source_setup_cb (GstElement * uridecodebin, GstElement * source, + GstSourceGroup * group) +{ + GstPlayBin *playbin; + + playbin = group->playbin; - g_signal_emit (playbin, gst_play_bin_signals[SIGNAL_SOURCE_SETUP], - 0, playbin->source); + g_signal_emit (playbin, gst_play_bin_signals[SIGNAL_SOURCE_SETUP], 0, source); } /* must be called with the group lock */ @@ -5394,6 +5403,8 @@ activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target) G_CALLBACK (no_more_pads_cb), group); group->notify_source_id = g_signal_connect (uridecodebin, "notify::source", G_CALLBACK (notify_source_cb), group); + group->source_setup_id = g_signal_connect (uridecodebin, "source-setup", + G_CALLBACK (source_setup_cb), group); /* we have 1 pending no-more-pads */ group->pending = 1; @@ -5573,6 +5584,7 @@ error_cleanup: REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id); REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id); REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id); + REMOVE_SIGNAL (group->uridecodebin, group->source_setup_id); REMOVE_SIGNAL (group->uridecodebin, group->drained_id); REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id); REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id); @@ -5661,6 +5673,7 @@ deactivate_group (GstPlayBin * playbin, GstSourceGroup * group) REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id); REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id); REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id); + REMOVE_SIGNAL (group->uridecodebin, group->source_setup_id); REMOVE_SIGNAL (group->uridecodebin, group->drained_id); REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id); REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id); diff --git a/gst/playback/gsturidecodebin.c b/gst/playback/gsturidecodebin.c index dc6984d98..e66f8f7b6 100644 --- a/gst/playback/gsturidecodebin.c +++ b/gst/playback/gsturidecodebin.c @@ -1350,21 +1350,6 @@ gen_source_element (GstURIDecodeBin * decoder) GST_LOG_OBJECT (decoder, "found source type %s", G_OBJECT_TYPE_NAME (source)); - decoder->is_stream = IS_STREAM_URI (decoder->uri); - - query = gst_query_new_scheduling (); - if (gst_element_query (source, query)) { - gst_query_parse_scheduling (query, &flags, NULL, NULL, NULL); - if ((flags & GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED)) - decoder->is_stream = TRUE; - } - gst_query_unref (query); - - GST_LOG_OBJECT (decoder, "source is stream: %d", decoder->is_stream); - - decoder->need_queue = IS_QUEUE_URI (decoder->uri); - GST_LOG_OBJECT (decoder, "source needs queue: %d", decoder->need_queue); - source_class = G_OBJECT_GET_CLASS (source); pspec = g_object_class_find_property (source_class, "connection-speed"); @@ -1411,6 +1396,25 @@ gen_source_element (GstURIDecodeBin * decoder) "setting subtitle-encoding=%s to source element", decoder->encoding); g_object_set (source, "subtitle-encoding", decoder->encoding, NULL); } + + g_signal_emit (decoder, gst_uri_decode_bin_signals[SIGNAL_SOURCE_SETUP], + 0, source); + + decoder->is_stream = IS_STREAM_URI (decoder->uri); + + query = gst_query_new_scheduling (); + if (gst_element_query (source, query)) { + gst_query_parse_scheduling (query, &flags, NULL, NULL, NULL); + if ((flags & GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED)) + decoder->is_stream = TRUE; + } + gst_query_unref (query); + + GST_LOG_OBJECT (decoder, "source is stream: %d", decoder->is_stream); + + decoder->need_queue = IS_QUEUE_URI (decoder->uri); + GST_LOG_OBJECT (decoder, "source needs queue: %d", decoder->need_queue); + return source; /* ERRORS */ @@ -2262,9 +2266,6 @@ setup_source (GstURIDecodeBin * decoder) /* notify of the new source used */ g_object_notify (G_OBJECT (decoder), "source"); - g_signal_emit (decoder, gst_uri_decode_bin_signals[SIGNAL_SOURCE_SETUP], - 0, decoder->source); - if (is_live_source (decoder->source)) decoder->is_stream = FALSE; |