playbin: only add the template caps when the result is empty
authorMatthew Waters <matthew@centricular.com>
Sun, 29 Nov 2015 23:28:55 +0000 (10:28 +1100)
committerMatthew Waters <matthew@centricular.com>
Fri, 18 Dec 2015 10:55:00 +0000 (21:55 +1100)
Unconditionally adding the template caps when proxying the caps query will play
havoc with decoders that attempt to choose an output format based on some caps
features.  Creating a sink that does not include those caps features and a
decoder/parser/etc that preferentially chooses some specific caps feature when
available, will always return the decoder/parser/etc template caps and choose a
feature that downstream will be unable to support.

Fix by limiting the addition of the template caps to when the result is actually
empty.

https://bugzilla.gnome.org/show_bug.cgi?id=758212

gst/playback/gstplaybin2.c

index 4a056a0..acdcf6c 100644 (file)
@@ -4987,7 +4987,7 @@ done:
    * if a parser asks us but a decoder is required after it
    * because no sink can handle the format directly.
    */
-  {
+  if (gst_caps_is_empty (result)) {
     GstPad *target = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
 
     if (target) {