gstreamer/subprojects
Alicia Boya García 5fd3c8a16c qtdemux: Fix premature EOS when some files are played in push mode
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2771

This EOS branch exists so that if a seek with a stop is made, qtdemux
stops accepting bytes from the sink after the entire requested playback
range is demuxed, as otherwise we could keep download content that is
not being used.

This patch fixes two flaws that were present in that EOS check:

1) A comparison was made between track time and movie time without conversion.
This made the check trigger early in files with edit lists. This patch fixes
this by converting the track PTS to movie PTS (stream time) for the check.

2) To avoid sending a EOS prematurely when the segment stop is within a GOP and
B-frames are present, the check for EOS should only be done for keyframes. I
gather this was already the intention with the existing code, but because it
used `stream->on_keyframe` instead of the local variable `keyframe` the old
code was checking if the *previous* frame was a keyframe.

It's interesting to note that these two flaws in the old code mask each other
in most cases: the track PTS will have reached the movie end PTS, but EOS would
only be sent if the previous frame was a keyframe. A simple case where they
wouldn't mask each other, reproducing the bug, is a sequence of 3 frame GOPs
with structure I-B-P.

The following validateflow tests have been added to future-proof the
fix:

 * validate.test.mp4.qtdemux_ibpibp_non_frag_pull.default
 * validate.test.mp4.qtdemux_ibpibp_non_frag_push.default

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5021>
2023-07-26 19:14:43 +00:00
..
gst-devtools gst-omx: Retire the whole package 2023-07-16 19:10:03 +00:00
gst-docs docs: Port toolkit integration tutorial to gtksink 2023-07-20 00:27:37 +00:00
gst-editing-services gst-omx: Retire the whole package 2023-07-16 19:10:03 +00:00
gst-examples webrtc/js: Support renegotiation during a call correctly 2023-07-19 13:01:49 +00:00
gst-integration-testsuites qtdemux: Fix premature EOS when some files are played in push mode 2023-07-26 19:14:43 +00:00
gst-libav gst-omx: Retire the whole package 2023-07-16 19:10:03 +00:00
gst-plugins-bad codecs: AV1: Ensure current picture and frame to NULL before return 2023-07-26 16:27:43 +08:00
gst-plugins-base video: Add GST_VIDEO_FORMATS_STR to declare all video formats as a string 2023-07-25 19:34:58 +00:00
gst-plugins-good qtdemux: Fix premature EOS when some files are played in push mode 2023-07-26 19:14:43 +00:00
gst-plugins-ugly rmdemux: Check for integer overflow when calculation audio packet size 2023-07-19 19:01:36 +00:00
gst-python gst-python: fix build and usage in Windows 2023-07-21 06:37:45 +00:00
gst-rtsp-server gst-omx: Retire the whole package 2023-07-16 19:10:03 +00:00
gstreamer query: Add a quark for SELECTABLE query type 2023-07-19 01:24:30 +00:00
gstreamer-sharp gst-omx: Retire the whole package 2023-07-16 19:10:03 +00:00
gstreamer-vaapi vaapi: delete the unused dma caps variable when ensuring src pad caps 2023-07-20 11:02:14 +08:00
macos-bison-binary macos-bison-binary: Remove warning when running on arm64 2022-12-16 23:58:07 +00:00
packagefiles subprojects: update glib to 2.76.4 2023-07-26 12:11:22 +00:00
win-flex-bison-binaries
win-nasm
win-pkgconfig win: add new win-pkgconfig subproject 2023-07-21 06:37:45 +00:00
avtp.wrap
bindinator.wrap
cairo.wrap cairo.wrap: Bump to latest to fix MSYS2 build failure 2023-07-12 21:17:25 +00:00
dav1d.wrap meson: add missing source_filename in the dav1d wrap 2023-04-03 14:29:36 +00:00
dssim.wrap
dv.wrap
expat.wrap meson: Update some more wraps 2022-12-10 15:13:09 +00:00
fdk-aac.wrap
FFmpeg.wrap
fontconfig.wrap meson: Provide fontconfig dep from the subproject 2023-07-20 11:00:35 +00:00
freetype2.wrap
fribidi.wrap fribidi.wrap: Move to tarball, bump, provide dep 2023-07-12 21:17:25 +00:00
gl-headers.wrap
glib-networking.wrap subprojects: update glib-networking to 2.74.0 and switch to file wrap 2022-11-18 00:51:48 +00:00
glib.wrap subprojects: update glib to 2.76.4 2023-07-26 12:11:22 +00:00
gobject-introspection.wrap gi: add support for introspection with subprojects 2023-07-21 06:37:45 +00:00
graphene.wrap meson: Use tarball for graphene instead of git 2023-07-20 11:00:35 +00:00
gst-plugins-rs.wrap gst-plugins-rs: Track main branch again 2023-01-24 19:08:50 +00:00
gtk-sharp.wrap
gtk.wrap gtk: Update subproject from 4.9.2 to 4.10.3 2023-07-19 07:38:36 +00:00
harfbuzz.wrap harfbuzz.wrap: Bump to latest to fix MSYS2 build failure 2023-07-12 21:17:25 +00:00
json-glib.wrap
lame.wrap meson: Update lame to -7 which contains the def file fix 2022-12-19 01:43:08 +05:30
libdrm.wrap
libffi.wrap libffi: fix wrap file to provide the libffi dependency 2023-07-21 06:37:45 +00:00
libgudev.wrap meson: Add a wrap file for libgudev 2023-04-19 22:47:19 +00:00
libjpeg-turbo.wrap
liblc3.wrap lc3: plugin for LC3 audio codec 2023-07-05 03:00:43 +00:00
libmicrodns.wrap
libnice.wrap libnice: disable gst tests in static mode 2023-05-31 15:17:11 +00:00
libopenjp2.wrap meson: Update some more wraps 2022-12-10 15:13:09 +00:00
libpng.wrap
libpsl.wrap meson: Ensure that soup plugin is built on Windows 2023-07-15 05:06:35 +00:00
libsoup.wrap subprojects: switch libsoup to a file wrap 2022-11-18 00:56:25 +00:00
libsrtp2.wrap subprojects: Update libsrtp2 wrap to v2.5.0 2023-02-01 10:34:35 +00:00
libva.wrap subprojects: libva: Pin to 2.19.0.pre1 (1c58941) 2023-06-15 21:14:29 +00:00
libwpe.wrap
libxml2.wrap libxml2: update to 2.10.3-4 2023-06-22 08:38:22 +00:00
ogg.wrap
openh264.wrap
opus.wrap
orc.wrap orc: update subproject wrap to 0.4.34 2023-05-30 01:21:20 +00:00
pango.wrap pango.wrap: Bump to 1.50.14, remove merged patch 2023-07-12 21:17:25 +00:00
pcre2.wrap meson: Force pcre2 to be provided by a subproject on macOS 2023-07-20 11:00:35 +00:00
pixman.wrap meson: Fix pixman build on ARM64 macOS 2023-07-20 11:00:35 +00:00
proxy-libintl.wrap
pycairo.wrap
pygobject.wrap meson: Allow sysdeps to be forced as fallback subprojects 2023-02-06 09:26:02 +00:00
sqlite3.wrap meson: Update some more wraps 2022-12-10 15:13:09 +00:00
vorbis.wrap
webrtc-audio-processing.wrap meson: Update webrtc-audio-processing wrap to 1.1 2023-06-01 09:34:37 +00:00
wpebackend-fdo.wrap
x264.wrap
zlib.wrap meson: Update some more wraps 2022-12-10 15:13:09 +00:00