matroska-demux: fix accumulated base offset in segment seeks
authorTim-Philipp Müller <tim@centricular.com>
Sat, 29 Apr 2023 15:20:13 +0000 (16:20 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Sat, 9 Dec 2023 14:06:53 +0000 (14:06 +0000)
commit44503fc88cbc8185ebd70635539342222361cb6b
treef11c1fef5f5b115c736c71ca014ac69da6f07634
parent511bf307d4b979bbce59bafdfba9c83e57e8b782
matroska-demux: fix accumulated base offset in segment seeks

When doing a segment seek, the base offset in the new segment
would be increased by segment.position which is basically the
timestamp of the last packet. This does not include the duration
of the last packet though, so might be slightly shorter than the
actual duration of the clip or the requested segment.

Increase the base offset by the segment duration instead when
accumulating segments, which is more correct as it doesn't cut
off the last frame and makes the effective loop segment duration
consistent with the actual duration returned from a duration
query.

In case a segment stop was specified it's also possible that
some data was sent beyond the stop that's necessary for decoding
so the base offset increment should be based on that then and
not on the timestamp of the last buffer pushed out.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5787>
subprojects/gst-plugins-good/gst/matroska/matroska-demux.c
subprojects/gst-plugins-good/tests/check/elements/matroskademux.c