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 762613 - playbin regression: On failure of vtdec_hw, playbin errors out and doesn't fall back to avdec_h264
playbin regression: On failure of vtdec_hw, playbin errors out and doesn't fa...
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other Mac OS
: Normal blocker
: 1.7.90
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2016-02-24 13:50 UTC by Heinrich Fink
Modified: 2016-02-25 09:40 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
debug log of failing playbin (404.10 KB, application/x-xz)
2016-02-24 13:50 UTC, Heinrich Fink
  Details
vtdec: Negotiate the decoder in set_format() already (1.09 KB, patch)
2016-02-24 15:10 UTC, Sebastian Dröge (slomo)
committed Details | Review

Description Heinrich Fink 2016-02-24 13:50:38 UTC
Created attachment 322243 [details]
debug log of failing playbin

I have noticed a regression when playing back h264 content on OSX on a machine that doesn't support hardware decoding. When playing back an h264 movie, the pipeline errors out with

ERROR: from element /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstVtdecHw:vtdechw0: GStreamer encountered a general resource error.
Additional debug info:
vtdec.c(540): gst_vtdec_create_session (): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstVtdecHw:vtdechw0:
VTDecompressionSessionCreate returned -12913
ERROR: pipeline doesn't want to preroll.

launch line: gst-launch-1.0 playbin uri=file:///PATH/TOclaudia_h264.mov
file: https://www.dropbox.com/s/gwgzsx8t5bvrnyi/claudia_h264.mov?dl=1

A debug log is attached.

The expected behaviour is that playbin would just fall back to using avdec_h264 if vtdec_hw doesn't work. I am able to narrow this down to changes made some time between Nov 16th and Nov 17th (in our build from Nov 16th the fallback still works, but any later build until today fails). I'll post the exact GIT SHAs between the working build and the first one that fails in a minute.
Comment 1 Heinrich Fink 2016-02-24 13:59:01 UTC
the last-known working build was based on the following GIT SHAs: 

gstreamer 42d45a0f4031478d1043f8b096f4cedba4fd562f
gst-plugins-base 09c881ee146511d1a8d64fdf2b0f3b2b97af32de
gst-plugins-good 8ef6ecc244285161ce5d12dfd1e6fda2c55c329c
gst-plugins-ugly cc2c53bdde6be3d8d400ec9772c78979b8691aa9
gst-plugins-bad 1491d02c4e78bc1321778fe67ceac7ea46b6befa
gst-libav 28168ed305f504920b9f270fe342047a544abe0f

the first build where the fallback was broken was based on the following GIT SHAs:

gstreamer 61a8c946acb077959dfec78fc6393a5bea17a260
gst-plugins-base 5f79ccb420d6b270d108892f1c7e3dedbd64b57a
gst-plugins-good 0d4e3847f0c9106ed345f0316e4954f82332e250
gst-plugins-ugly cc2c53bdde6be3d8d400ec9772c78979b8691aa9
gst-plugins-bad 3d5a1ccbf4e5b036164a02c6bd6b0b0ddab19880
gst-libav 28168ed305f504920b9f270fe342047a544abe0f

Some commit between the above versions must have broken the falling back.
Comment 2 Sebastian Dröge (slomo) 2016-02-24 15:10:18 UTC
Created attachment 322248 [details] [review]
vtdec: Negotiate the decoder in set_format() already

Don't wait until later, we want to know here if the codec can be opened or not
for the requested format. This was removed (accidentially?) by
  119e09eac315f79ac2cf45b4441ad1d932130614

Without this decodebin has no way to switch to a different decoder if this one
does not work.
Comment 3 Heinrich Fink 2016-02-24 15:24:30 UTC
Your patch restores the fallback for me
Comment 4 Sebastian Dröge (slomo) 2016-02-24 15:38:28 UTC
Matthew, Alessandro? Any reasons not to do this? :)
Comment 5 Sebastian Dröge (slomo) 2016-02-25 09:40:04 UTC
Attachment 322248 [details] pushed as 924795c - vtdec: Negotiate the decoder in set_format() already