I forgot to mention. When gstreamer does not fail, it takes 3-4 seconds to pull a single frame out of a 5-second video. That's on a Nexus 4.
It would be almost (but not quite) as fast to just play the video and take a screenshot while the video is running... Michi. On 24 Jun 2015, at 21:29 , Michi Henning <michi.henn...@canonical.com> wrote: > HI Simon, > >> This sounds very bad and should be investigated, we can't rely on device >> detection code in every app. > > It's not an app. This is for the system-wide thumbnailer. But I agree. This > just has "hack" written all over it and is bad. > >> CPU detection will also already fail right >> now because >> >> - the Aquaris E4.5 (krillin) and the Aquaris E5 (vegetahd) share the >> same SoC >> >> - devices with the same SoC use different device enablement packages >> >> - gstreamer relies on hardware acceleration that is provided by Android >> blobs in the device enablement package >> >> So you could easily end up with having to work around an issue on >> krillin, which is at the same time not present on vegetahd, and two >> months later you have to update all your workarounds because all phones >> got an update in the meantime. > > Yes, the whole thing is brittle. What's at the core of it all is that > gstreamer is hopelessly broken on Arm, and is broken (albeit less severely) > on the desktop for H264 decoding. (We haven't seen issues with decoding mp3 > files so far.) > > What we are seeing is that gstreamer successfully pulls a thumbnail out of a > file 80 times in a row and then, on the 81st run, suddenly delivers an error > "negotiation failed". That's for the same physical untouched file. Other > times, we are seeing it hang, crash, try to allocate 24 GB of memory, > returning a black thumbnail at random, or hanging (at uninterruptible > priority, so a SIGKILL followed by waitpid() hangs). The fewer cores and the > less powerful a CPU we have, the worse it gets if we run more than one > process that uses gstreamer at a time. > > But, even with only a single process using gstreamer (system-wide), we are > still seeing random failures. > >> (Not to mention that you will not be able to ship all the correct >> workarounds for all devices, at the end of this year there will likely >> already be five different devices on the market.) >> >> >> So if you want to ship your app right now, you obviously have to add a >> workaround for krillin, but in the long term there will be no way around >> filing all those issues against ubuntu-system-image and/or gstreamer. > > The simple matter of the fact is that, if we are running on the BQ, we cannot > have more than one process trying to pull a thumbnail out of a video file at > a time. If we do, we get tons of gstreamer failures. On the Nexus 4, we can > run two processes at a time that each use gstreamer, and get away with it > most of the time. If we try to run 3 or 4, we are seeing the same avalanche > of failures. > > So, we either come up with a reliable way to limit the number of concurrent > gstreamer processes on the BQ to 1, and allowing 2 concurrent gstreamer > processes on other Arm devices, or we have to pick the lowest common > denominator for all Arm devices and just say "if on Arm, run only one > thumbnail extractor at a time". The latter option is unpalatable because it > means that we are only half as fast as we could be on the Nexus and other Arm > devices. That's a heavy price to pay... > > So, back to my question: is there a way that I can tell a BQ from everything > else on Arm that doesn't require parsing /proc/cpuinfo? If so, I'd love to > learn about it. If not, I'm afraid it'll be down to parsing the output from > cpuinfo until gstreamer is fixed (if ever). > > Cheers, > > Michi. -- Mailing list: https://launchpad.net/~ubuntu-phone Post to : ubuntu-phone@lists.launchpad.net Unsubscribe : https://launchpad.net/~ubuntu-phone More help : https://help.launchpad.net/ListHelp