From 32c30b88ff2bf94aed04dbfc540502b2b987b073 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 26 Feb 2011 23:20:42 +0100 Subject: [PATCH] decodebin2: Improve detection of raw caps in expose-all-streams=false mode Previously we only checked against the raw caps but we should also check against the return value of autoplug-continue. Additionally fix a thread-safety issue with accessing the raw caps. --- gst/playback/gstdecodebin2.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index 9e9d5e2..caa3c42 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -1463,7 +1463,6 @@ analyze_new_pad (GstDecodeBin * dbin, GstElement * src, GstPad * pad, * if it doesn't match the output caps */ if (!dbin->expose_allstreams) { guint i; - GstCaps *rawcaps = gst_static_caps_get (&default_raw_caps); const GList *tmps; gboolean dontuse = FALSE; @@ -1492,13 +1491,21 @@ analyze_new_pad (GstDecodeBin * dbin, GstElement * src, GstPad * pad, if (st->direction != GST_PAD_SRC) continue; tcaps = gst_static_pad_template_get_caps (st); - if (!gst_caps_can_intersect (tcaps, dbin->caps)) + + apcontinue = TRUE; + + /* Emit autoplug-continue to see if the caps are considered to be raw caps */ + g_signal_emit (G_OBJECT (dbin), + gst_decode_bin_signals[SIGNAL_AUTOPLUG_CONTINUE], 0, dpad, tcaps, + &apcontinue); + + /* If autoplug-continue returns TRUE and the caps are not final, don't use them */ + if (apcontinue && !are_final_caps (dbin, tcaps)) dontuse = TRUE; gst_caps_unref (tcaps); } } } - gst_caps_unref (rawcaps); if (dontuse) { gst_object_unref (dpad); -- 2.7.4