GNOME Bugzilla – Bug 609107
[qtdemux] Unknown atoms should also be skipped when looking for moov
Last modified: 2010-02-07 10:06:55 UTC
In the chain function in qtdemux, in the header state, we are looking for the moov atom. If another atom is encountered, we normally skip over it and check the next atom and so on until we find the moov atom. Then we seek back to the first mdat and commence normal operation. However, if the atom encountered is unknown to qtdemux, it will seek back to the first mdat rather than skipping over it as it should. I think this causes a seeking loop between the initial and header states in the chain function and so the video never pre-rolls. A sample can be found here: http://samples.mplayerhq.hu/mobileVideo_3gp/rudolf.3gp Note, this only applies in push mode so just lump the URI at playbin2 or so to test. Patch incoming...
Created attachment 153095 [details] [review] Unknown atoms should also be skipped when looking for moov
Created attachment 153096 [details] [review] Unknown atoms should also be skipped when looking for moov I remembered to put the 'Fixes bug #BINGO' in this time... ;)
Review of attachment 153096 [details] [review]: Haven't really tested, but the change looks simple and from the code seems good. One thing you forgot is to reset the variable when qtdemux is set to READY. Nitpick: you don't need to use "== TRUE"
Created attachment 153106 [details] [review] Unknown atoms should also be skipped when looking for moov Don't unnecessarily use == TRUE as TRUE is something non-zero. Initialise got_moov to FALSE and reset to FALSE when changing into READY state.
Committed this, so it gets as much testing as possible by those who use git: commit 7877ffb6f59024f10dc0f0e15be981dc228c3d27 Author: Robert Swain <robert.swain@collabora.co.uk> Date: Fri Feb 5 18:05:39 2010 +0100 qtdemux: skip unknown atoms when looking for moov Fixes bug #609107