GNOME Bugzilla – Bug 658846
Playbin2 pipeline stuck while prerolling if decoder is missing
Last modified: 2011-09-19 09:55:06 UTC
Created attachment 196289 [details] play*:5 gstreamer log Using latest git in gst-uninstalled with core, base, good, bad, ugly,no ffmpeg and faad plugin available and no h264 decoder gst-launch-0.10 playbin2 uri=file:///..myclip.mp4 Where clip is quicktime, one h264 and one aac streams The pipeline doesn't finish preroll.
In cases like this, please just make *:5 logs and let people grep for themselves, much easier for everyone involved :)
Created attachment 196310 [details] GStreamer debug log *:5 Here it is. Sorry I need more practice submitting bugs.
Changed state back to unconfirmed.
Can reproduce, marking as blocker for now, since it looks like a regression.
Created attachment 196607 [details] [review] Patch the partially fixes the issue The attached patch partially fixes the issue as it now moves to playing. But it doesn't post the message for the missing decoder as h264parse src pads are not fixed and it just discards the stream. I'm not sure on how properly fix this part. The factory list filtering part should replace the code in connect_pad that was used to avoid connecting 2 parsers in a row. But maybe it should just check with the last added element to the chain and I'm not sure if only considering parsers.
Can you explain why this fixes this problem and what exactly was the cause for not prerolling?
When at connect_pad the h264parse was trying to be skipped it was the only element on the factory list. I moved the code to avoid connecting two elements in a row to the analyze_pad part by filtering the candidate factories. Which in the second attempt to plug h264parse will generate an empty factory list that will be handled by the code following the filtered list. I've added a check for !fixed caps in order to post or not the message due a critical but I'm not sure on which is the desired behavior in this case. My patch is just an starting point don't take it as written in stone, but I've the gut feeling that checking for already existing factory in the chain early in the analize_pad should be better than later in connect_pad. I've also noticed that the return value of connect_pad is not checked which maybe should be.
commit 936e87cdcfe766c4ebf9186f722de1278dae950c Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> Date: Mon Sep 19 11:53:02 2011 +0200 decodebin2: Fix non-prerolling pipelines and not-linked errors if a parser is available but no decoder Fixes bug #658846.