[Bug 795424] qtdemux: Add MSE-style flush
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Fri Sep 21 23:16:55 UTC 2018
https://bugzilla.gnome.org/show_bug.cgi?id=795424
--- Comment #31 from Alicia Boya GarcĂa <aboya at igalia.com> ---
It has been a while without any activity in this bug, so first I'll try to do a
recap on the current behavior of qtdemux.
Currently qtdemux may receive a flush in the following scenarios:
* Case 1: qtdemux receives a seek or a flush from user: when it arrives it
soft-resets. The flush propagates.
* Case 2: qtdemux makes a seek by itself to skip an mdat that appears before
moov: qtdemux expects a flush; when it arrives it soft-resets. The flush does
not propagate. (Not that it could, as at this point there are still no
streams.)
In BYTES mode, the soft-reset consists on clearing the GstAdapter (e.g. if
qtdemux was in the middle of parsing a frame, the half-frame is discarded),
clearing the seek segment (i.e. if the user did a seek to set start/stop times
or a playback rate, it's reset back to default values) and resetting the flow
combiner (i.e. if a stream was in EOS, it no longer is).
TIME mode is a bit different in that seeks from the user are forwarded directly
to the source element and not handled by qtdemux. qtdemux will still receive a
flush from the source, and like before it will soft-reset and propagate the
flush.
In TIME mode, however soft-resets actually reset more stuff: pretty much
everything related to the overall movie is resetted except for the streams. The
sample tables of the streams are preserved, except in mss_mode, where they are
cleared.
----
After careful consideration, I've decided that it's best not to alter the
default behavior of flushes. Sebastian mentioned "adaptivedemux keyframe-only
mode" as an example of a case where an intelligent source may want to feed
qtdemux with specific chunks of the file to emit very specific frames. They may
still want to flush downstream at some point without losing the sample tables.
Therefore, I'm modifying the patch back so that it only reacts if the flush
contains a specific GstStructure field. In absence of that field, the code path
remains virtually identical.
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list