gstreamer/gst/matroska
Tim-Philipp Müller 43ce85f794 matroskademux: try to ensure keyframe when seeking without index
When seeking in pull mode without an index (because there is no index
or the file is still being written to) we bisect to find the right
cluster to jump to. However, it's possible the cluster we found doesn't
start with a keyframe, which leads to decoding errors, so if we know
that the found cluster starts with a delta frame try to scan back to
previous clusters until we find one that starts with a keyframe or
we are back at the beginning. Theoretically it's possible that all
clusters but the first one do not start with a keyframe and the
keyframes are in the middle of clusters, but this is extremely
unusual, so we will cover this case with a basic sanity check.

This problem is especially problematic with content recorded with
dynamic GOP and FPS, where long GOP lengths and low FPS may cause a
large set of clusters to lack key frames. Playback would then be
started on a non-keyframe cluster, and the large number of such frames
would make the content impossible to decode fo a long stretch of time.

Based on patch by: Mats Lindestam <matslm@axis.com>

https://bugzilla.gnome.org/show_bug.cgi?id=790696
2018-08-27 23:01:21 +02:00
..
ebml-ids.h Fix FSF address 2012-11-04 00:07:18 +00:00
ebml-read.c matroska: Quiet a WARN when parsing push mode 2017-01-17 11:50:27 +11:00
ebml-read.h Fix FSF address 2012-11-04 00:07:18 +00:00
ebml-write.c matroskamux: Create a TIME segment when creating streamable output 2015-10-11 11:37:51 +01:00
ebml-write.h matroskamux: Create a TIME segment when creating streamable output 2015-10-11 11:37:51 +01:00
lzo.c matroska: get rid of _stdint.h include 2016-02-08 00:11:55 +00:00
lzo.h Decode the codec private data and following ContentEncoding if necessary. 2008-08-02 18:18:05 +00:00
Makefile.am Remove plugin specific static build option 2017-05-16 14:41:19 -04:00
matroska-demux.c matroskademux: try to ensure keyframe when seeking without index 2018-08-27 23:01:21 +02:00
matroska-demux.h matroskademux: extract cluster prevsize if available 2018-08-27 23:00:53 +02:00
matroska-ids.c matroskademux: Add parsing Colour element 2017-11-08 11:01:55 +02:00
matroska-ids.h matroska: fix handling of FlagInterlaced 2018-08-23 23:32:06 +02:00
matroska-mux.c matroska: fix handling of FlagInterlaced 2018-08-23 23:32:06 +02:00
matroska-mux.h matroska: re-activate and update TOC support 2017-12-15 16:14:43 +02:00
matroska-parse.c matroska: fix handling of FlagInterlaced 2018-08-23 23:32:06 +02:00
matroska-parse.h matroska: Remove unused variable 2015-08-13 14:11:12 +01:00
matroska-read-common.c matroska: fix memory leaks due to toc related updates 2017-12-15 16:14:43 +02:00
matroska-read-common.h matroska: re-activate and update TOC support 2017-12-15 16:14:43 +02:00
matroska.c Fix FSF address 2012-11-04 00:07:18 +00:00
meson.build meson: Add feature options for all plugins 2018-07-27 18:42:54 +05:30
webm-mux.c Add AV1 to matroska plugin 2017-12-15 18:00:31 +01:00
webm-mux.h Fix FSF address 2012-11-04 00:07:18 +00:00