mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 20:05:38 +00:00
playbin: Improve autoplugging of decoder/sink combinations by trying to activate the sink
And if that fails don't bother autoplugging that sink. Also gives us more accurate sink caps.
This commit is contained in:
parent
ff8839d97b
commit
44352deadb
1 changed files with 18 additions and 1 deletions
|
@ -4202,7 +4202,7 @@ autoplug_select_cb (GstElement * decodebin, GstPad * pad,
|
|||
* type it outputs, check that the decoder is compatible with this sink */
|
||||
if ((isaudiodec && group->audio_sink) || (isvideodec
|
||||
&& group->video_sink)) {
|
||||
gboolean compatible = TRUE;
|
||||
gboolean compatible = FALSE;
|
||||
GstPad *sinkpad;
|
||||
GstCaps *caps;
|
||||
GstElement *sink;
|
||||
|
@ -4215,6 +4215,23 @@ autoplug_select_cb (GstElement * decodebin, GstPad * pad,
|
|||
(isaudiodec) ? gst_static_caps_get (&raw_audio_caps) :
|
||||
gst_static_caps_get (&raw_video_caps);
|
||||
|
||||
if (!activate_sink (playbin, sink)) {
|
||||
/* If we can't activate the sink, either continue with the next possible
|
||||
* sink or if we have a fixed sink, try the decoder. We will fail later
|
||||
* anyway */
|
||||
gst_object_unref (sinkpad);
|
||||
if ((isaudiodec && group->audio_sink != playbin->audio_sink) ||
|
||||
(isvideodec && group->video_sink != playbin->video_sink)) {
|
||||
gst_element_set_state (*sinkp, GST_STATE_NULL);
|
||||
gst_object_unref (*sinkp);
|
||||
*sinkp = NULL;
|
||||
continue;
|
||||
} else {
|
||||
g_mutex_unlock (&playbin->elements_lock);
|
||||
GST_SOURCE_GROUP_UNLOCK (group);
|
||||
return GST_AUTOPLUG_SELECT_TRY;
|
||||
}
|
||||
}
|
||||
caps = gst_pad_query_caps (sinkpad, NULL);
|
||||
|
||||
/* If the sink supports raw audio/video, we first check
|
||||
|
|
Loading…
Reference in a new issue