After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 761545 - playbin: caps negotiation with sink is broken
playbin: caps negotiation with sink is broken
Status: RESOLVED NOTABUG
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2016-02-04 11:17 UTC by Arnaud Vrac
Modified: 2016-02-04 20:33 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
playbin log when failing (14.86 KB, text/x-log)
2016-02-04 11:17 UTC, Arnaud Vrac
Details
playbin log with 81c52aaa1 and 844aa3e6 reverted (19.23 KB, text/x-log)
2016-02-04 11:17 UTC, Arnaud Vrac
Details

Description Arnaud Vrac 2016-02-04 11:17:05 UTC
Created attachment 320420 [details]
playbin log when failing

I think patch 1.7.1-31-g844aa3e introduced a regression WRT caps negotation in playbin.

I have an audio sink who can accept MPEG-4 AAC audio, but not all profiles (for example AAC-ELD is not supported). So I have the following caps template: "audio/mpeg, mpegversion = (int) { 2, 4 }, framed = (boolean) true"

and a custom accept_caps function which checks the stream-format and codec_data fields, possibly rejecting some unsupported combinations.

Since the commit above, a software decoder is not plugged anymore as fallback.
Comment 1 Arnaud Vrac 2016-02-04 11:17:51 UTC
Created attachment 320421 [details]
playbin log with 81c52aaa1 and 844aa3e6 reverted
Comment 2 Sebastian Dröge (slomo) 2016-02-04 20:33:34 UTC
If these two changes breaks your sink, it means that your sink reports too wide caps in the CAPS query but only accepts a subset of that in ACCEPT_CAPS. That's not allowed and also before did not lead to consistent results (e.g. put your sink into a bin with an identity element before the sink, and use that as a playbin sink. You would get exactly the same behaviour you have now).

Please reopen if you disagree