Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gstreamer-plugins-base for openSUSE:Factory checked in at 2022-12-25 15:14:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-base (Old) and /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1563 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-base" Sun Dec 25 15:14:22 2022 rev:88 rq:1045096 version:1.20.5 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-plugins-base/gstreamer-plugins-base.changes 2022-10-25 11:18:46.025971702 +0200 +++ /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1563/gstreamer-plugins-base.changes 2022-12-25 15:14:29.153248429 +0100 @@ -1,0 +2,27 @@ +Fri Dec 23 18:59:40 UTC 2022 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 1.20.5: + + audioconvert, audioresample, audiofilter: fix divide by 0 for + input buffer without caps + + cdparanoia: Ignore compiler warning coming from the cdparanoia + header + + oggdemux, parsebin: More leak fixes + + opengl: + - Fix automatic dispmanx detection for rpi4 + - Fix usage of eglCreate/DestroyImage + - Fix static linking on macOS + + Bump core requirement in 1.20 branch to 1.20.4 + + oggdemux: Don't leak incoming EOS event + + opusdec: Various channel-related fixes + + subparse: Fix non-closed tag handling. + + textrender: + - Don't blindly forward all events and don't blindly forward + all events + - Negotiate caps on a GAP event if none were negotiated yet + + timeoverlay: fix pad leak + + videodecoder: Only post latency message if it changed + + videoscale: buffer meta handling fixes (NULL-terminate array of + valid meta tags) + + videosink: Don't return unknown end-time from get_times() + +------------------------------------------------------------------- Old: ---- gst-plugins-base-1.20.4.tar.xz New: ---- gst-plugins-base-1.20.5.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-plugins-base.spec ++++++ --- /var/tmp/diff_new_pack.NuSVTy/_old 2022-12-25 15:14:29.653251259 +0100 +++ /var/tmp/diff_new_pack.NuSVTy/_new 2022-12-25 15:14:29.657251281 +0100 @@ -20,7 +20,7 @@ %define gst_branch 1.0 %define gstreamer_req_version %(echo %{version} | sed -e "s/+.*//") Name: gstreamer-plugins-base -Version: 1.20.4 +Version: 1.20.5 Release: 0 Summary: GStreamer Streaming-Media Framework Plug-Ins License: GPL-2.0-or-later AND LGPL-2.1-or-later ++++++ gst-plugins-base-1.20.4.tar.xz -> gst-plugins-base-1.20.5.tar.xz ++++++ ++++ 1701 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ChangeLog new/gst-plugins-base-1.20.5/ChangeLog --- old/gst-plugins-base-1.20.4/ChangeLog 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ChangeLog 2022-12-20 00:34:46.000000000 +0100 @@ -1,7 +1,243 @@ +=== release 1.20.5 === + +2022-12-19 23:34:42 +0000 Tim-Philipp Müller <t...@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-base.doap: + * meson.build: + Release 1.20.5 + +2022-12-19 23:34:34 +0000 Tim-Philipp Müller <t...@centricular.com> + + * ChangeLog: + Update ChangeLogs for 1.20.5 + +2022-12-19 15:22:15 +0100 Philipp Zabel <p.za...@pengutronix.de> + + * gst/videoscale/gstvideoscale.c: + videoscale: fix valid_tags NULL-terminated array of strings + The valid_tags array of strings must be NULL-terminated, + as it is passed to the g_strv_contains() function. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3604> + +2022-11-17 15:41:35 +0100 Edward Hervey <edw...@centricular.com> + + * gst/playback/gstdecodebin2.c: + decodebin2: Minor debug fix for decodepad + decodedad might have their name changed when exposing, causing a race when + trying to get their name without taking a lock. Just use GST_PTR_POINTER in + debug statements instead + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3597> + +2022-11-21 15:12:26 +0100 Edward Hervey <edw...@centricular.com> + + * ext/ogg/gstoggdemux.c: + oggdemux: Don't leak pending seek event + Make sure any pending seek event is released when going back down to READY. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3578> + +2022-11-21 15:10:35 +0100 Edward Hervey <edw...@centricular.com> + + * gst/playback/gstparsebin.c: + parsebin: Don't leak parsepad list on shutdown + Free it as it is down in other cases + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3578> + +2022-11-30 20:48:28 +0200 Vivia Nikolaidou <vi...@ahiru.eu> + + * ext/opus/gstopusdec.c: + opusdec: Use proper guint/guint8 type conversion + Do not cast, that might yield wrong results. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3576> + +2022-11-30 20:47:11 +0200 Vivia Nikolaidou <vi...@ahiru.eu> + + * ext/opus/gstopusdec.c: + opusdec: Negotiate default to 2 channels + In that place, dec->n_channels can still theoretically be 0. Default to + 2 in that case. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3576> + +2022-12-11 17:36:53 +0000 Tim-Philipp Müller <t...@centricular.com> + + * ext/pango/gsttimeoverlay.c: + timeoverlay: fix pad leak + Spotted by Jiri Uncovsky. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3559> + +2022-12-07 14:49:05 +0200 Sebastian Dröge <sebast...@centricular.com> + + * ext/pango/gsttextrender.c: + textrender: Negotiate caps on a GAP event if none were negotiated yet + Otherwise downstream wouldn't have received a segment event either and + wouldn't know what to do with the gap event + And also forward any pending segment event. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3548> + +2022-11-26 09:23:59 +0100 Tim-Philipp Müller <t...@centricular.com> + + * gst-libs/gst/audio/gstaudiofilter.c: + * gst/audioconvert/gstaudioconvert.c: + * gst/audioresample/gstaudioresample.c: + audioconvert, audioresample, audiofilter: fix divide by 0 for input buffer without caps + gst-launch-1.0 audiotestsrc ! udpsink host=127.0.0.1 + gst-launch-1.0 udpsrc ! audioconvert ! autoaudiosink + would crash with a floating point exception when clipping the input + buffer owing to a division by zero because no caps event was received. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3470> + +2022-11-21 18:47:50 +0200 Sebastian Dröge <sebast...@centricular.com> + + * ext/pango/gsttextrender.c: + * ext/pango/gsttextrender.h: + textrender: Don't pass plaintext as pango markup to Pango + Otherwise e.g. & in the text will cause Pango to complain about invalid + markup and render the text incorrectly. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3458> + +2022-11-21 18:43:54 +0200 Sebastian Dröge <sebast...@centricular.com> + + * ext/pango/gsttextrender.c: + textrender: Don't blindly forward all events + Use gst_pad_event_default(), which does the right thing by default. + Especially it does not forward text/x-plain caps downstream. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3458> + +2022-11-14 07:26:25 +0100 Edward Hervey <edw...@centricular.com> + + * ext/ogg/gstoggdemux.c: + oggdemux: Don't leak incoming EOS event + If we're going to drop it ... then do drop it :) + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3412> + +2022-11-05 07:34:27 +0100 Edward Hervey <edw...@centricular.com> + + * gst/subparse/gstsubparse.c: + subparse: Fix non-closed tag handling. + Unclear what the goal was, but we could end up reading way past the next_tag. + Instead just move everything from after the end tag ('>') to the next_tag. + Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53040 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3351> + +2022-10-27 15:13:36 +0300 Sebastian Dröge <sebast...@centricular.com> + + * gst-libs/gst/app/gstappsrc.c: + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + core/base: Only post latency messages if the latency values have actually changed + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1525 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3291> + +2022-10-27 07:21:19 +0200 Edward Hervey <edw...@centricular.com> + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Only post latency message if it changed + Posting latency messages causes a full and potentially expensive latency + recalculation of the pipeline. While subclasses should check whether the latency + really changed or not before calling this function, we ensure that we do not + post such messages if it didn't change. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3291> + +2022-10-06 00:00:59 +0900 Seungha Yang <seun...@centricular.com> + + * gst-libs/gst/video/gstvideosink.c: + videosink: Don't return unknown end-time from get_times() + ... in case of reverse playback. Otherwise basesink will not + wait for clock + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3277> + +2022-10-21 21:50:01 +0530 Nirbheek Chauhan <nirbh...@centricular.com> + + * gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h: + * gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m: + * gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m: + gl/vulkan: Fix static linking on macOS + duplicate symbol '__invoke_on_main' in: + /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstvulkan-1.0.a(cocoa_gstvkwindow_cocoa.m.o) + /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstgl-1.0.a(cocoa_gstglwindow_cocoa.m.o) + ld: 1 duplicate symbol for architecture x86_64 + clang: error: linker command failed with exit code 1 (use -v to see invocation) + Also make the same change in iOS for consistency. + Continuation of https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1132 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3263> + +2022-10-14 14:59:49 +0100 Tim-Philipp Müller <t...@centricular.com> + + * meson.build: + gst-plugins-base: bump core req to 1.20.4 + For newly-added _gst_meta_tag_memory_reference symbol. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2928#note_1591459 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3185> + +2022-10-04 05:39:51 +0100 Matthew Waters <matt...@centricular.com> + + * gst-libs/gst/gl/meson.build: + build/gl: fix automatic dispmanx detection for rpi4 + rpi4 doesn't contain dispmanx but still contains bcm_host.pc which + confuses the configure detection. Add an explicit check for + EGL_DISPMANX_WINDOW_T to ensure that we only build with dispmanx when + the types are available. + Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/893 + Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/952 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3246> + +2022-07-06 21:45:24 +0300 Jordan Petridis <jor...@centricular.com> + + * ext/cdparanoia/meson.build: + cdparanoia: Ignore compiler warning coming from the cdparanoia header + When trying to build the plugin, GCC starts complaining about issues + with one of the cdparanoia headers and it block us from being able + to build the plugin with Werror. + The current warning in the header look like this: + ``` + [1/2] Compiling C object subprojects/gst-plugins-base/ext/cdparanoia/libgstcdparanoia.so.p/gstcdparanoiasrc.c.o + In file included from ../subprojects/gst-plugins-base/ext/cdparanoia/gstcdparanoiasrc.h:37, + from ../subprojects/gst-plugins-base/ext/cdparanoia/gstcdparanoiasrc.c:31: + /usr/include/cdda/cdda_interface.h:164:3: warning: initialization discards âconstâ qualifier from pointer target type [-Wdiscarded-qualifiers] + 164 | "Success", + | ^~~~~~~~~ + ... + /usr/include/cdda/cdda_interface.h:163:14: warning: âstrerror_trâ defined but not used [-Wunused-variable] + 163 | static char *strerror_tr[]={ + | ^~~~~~~~~~~ + [2/2] Linking target subprojects/gst-plugins-base/ext/cdparanoia/libgstcdparanoia.so + ``` + Last release of cdparanoia was in 2008, so our best bet for the + time is to ignore the warnings. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3232> + +2022-10-14 16:12:45 +0200 Edward Hervey <edw...@centricular.com> + + * tools/gst-play.c: + gst-play: Don't leak the stream collection + We are given a reference to the collection when parsing it from the + message. Just store it (instead of referencing it again). + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3191> + +2022-08-22 16:33:23 -0400 Nicolas Dufresne <nicolas.dufre...@collabora.com> + + * gst-libs/gst/gl/egl/gsteglimage.c: + opengl: Fix usage of eglCreate/DestroyImage + The implementation was inconsistent between create and destroy. EGLImage + creation and destruction is requires for EGL 1.5 and up, while + otherwise the KHR version is only available if EGL_KHR_image_base + feature is set. Not doing these check may lead to getting a function + pointer to a stub, which is notably the case when using apitrace. + Fixes #1389 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3170> + +2022-10-12 18:40:25 +0100 Tim-Philipp Müller <t...@centricular.com> + + * meson.build: + Back to development + === release 1.20.4 === 2022-10-12 16:39:47 +0100 Tim-Philipp Müller <t...@centricular.com> + * ChangeLog: * NEWS: * RELEASE: * gst-plugins-base.doap: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/NEWS new/gst-plugins-base-1.20.5/NEWS --- old/gst-plugins-base-1.20.4/NEWS 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/NEWS 2022-12-20 00:34:46.000000000 +0100 @@ -2,13 +2,13 @@ GStreamer 1.20.0 was originally released on 3 February 2022. -The latest bug-fix release in the 1.20 series is 1.20.4 and was released -on 12 October 2022. +The latest bug-fix release in the 1.20 series is 1.20.5 and was released +on 19 December 2022. See https://gstreamer.freedesktop.org/releases/1.20/ for the latest version of this document. -Last updated: Wednesday 12 October 2022, 15:00 UTC (log) +Last updated: Monday 19 December 2022, 19:00 UTC (log) Introduction @@ -1791,6 +1791,13 @@ Known Issues +- GStreamer may fail to build the hotdoc documentation with the Meson + 0.64.0 release owing to a Meson bug. This should only affect systems + where hotdoc is installed, and will be fixed in Meson 0.64.1 by this + Meson PR in combination with this GStreamer MR. In the meantime, + users can pass -Ddoc=disabledor downgrade to an older Meson version + (< 0.64.0). + - nothing in particular at this point (but also see possibly breaking changes section above) @@ -2530,6 +2537,7 @@ chroma (Y41B, YUV9, YVU9 and IYU9) - macOS build and packaging fixes, in particular fix finding of gio modules on macOS for https/TLS support +- Fix consuming of the macOS package as a framework in XCode - Performance improvements - Miscellaneous bug fixes, memory leak fixes, and other stability and reliability improvements @@ -2783,6 +2791,252 @@ - List of Merge Requests applied in 1.20.4 - List of Issues fixed in 1.20.4 +1.20.5 + +The fifth 1.20 bug-fix release (1.20.5) was released on 19 December +2022. + +This release only contains bugfixes and it should be safe to upgrade +from 1.20.x. + +Highlighted bugfixes in 1.20.5 + +- systemclock waiting fixes for certain 32-bit platforms/libcs +- alphacombine: robustness improvements for corner case scenarios +- avfvideosrc: Report latency when doing screen capture +- d3d11videosink: various thread-safety and stability fixes +- decklink: fix performance issue when HDMI signal has been lost for a + long time +- flacparse: Fix handling of headers advertising 32 bits per sample +- mpegts: Handle when iconv doesnât support ISO 6937 (e.g. musl libc) +- opengl: fix automatic dispmanx detection for rpi4 and fix usage of + eglCreate/DestroyImage +- opusdec: Various channel-related fixes +- textrender: event handling fixes, esp. for GAP event +- subparse: Fix non-closed tag handling +- videoscale: fix handling of unknown buffer metas +- videosink: reverse playback handling fixes +- qtmux: Prefill mode fixes, especially for raw audio +- multiudpsink: allow binding to IPv6 address +- rtspsrc: Fix usage of IPv6 connections in SETUP +- rtspsrc: Only EOS on timeout if all streams are timed out/EOS +- splitmuxsrc: fix playback stall if there are unlinked pads +- v4l2: Fix SIGSEGV on state change during format changes +- wavparse robustness fixes +- Fix static linking on macOS (opengl, vulkan) +- gstreamer-vaapi: fix headless build against mesa >= 22.3.0 +- GStreamer Editing Services library: Fix build with tools disabled +- webrtc example/demo fixes +- unit test fixes for aesdec and rtpjitterbuffer +- Cerbero: Fix ios cross-compile with cmake on M1; some recipe updates + and other build fixes +- Binary packages: pkg-config file fixes for various recipes (ffmpeg, + taglib, gstreamer) +- Binary packages: Enable high bitdepth support for libvpx (VP8/VP9 + encoding/decoding) +- Binary packages: ship aes plugin +- Miscellaneous bug fixes, memory leak fixes, and other stability and + reliability improvements +- Performance improvements + +gstreamer + +- allocator: Copy allocator name in gst_allocator_register() +- miniobject: support higher refcount values +- pads: Fix non-serialized sticky event push, e.g. instant change rate + events +- padtemplate: Fix annotations +- systemclock: Use futex_time64 syscall on x32 and other platforms + that always⦠+- Fix build of 1.20 branch with Meson 0.64.1 for those who have hotdoc + installed on their system. +- meson: fix check for pthread_setname_np() +- -Wimplicit-function-declaration in pthread_setname_np check (missing + _GNU_SOURCE) +- gst-inspect: Donât leak list + +Core Elements + +- concat: Properly propagate EOS seqnum +- fakesrc: avoid time overflow with datarate + +gst-plugins-base + +- audioconvert, audioresample, audiofilter: fix divide by 0 for input + buffer without caps +- cdparanoia: Ignore compiler warning coming from the cdparanoia + header +- oggdemux, parsebin: More leak fixes +- opengl: fix automatic dispmanx detection for rpi4 +- opengl: Fix usage of eglCreate/DestroyImage +- opengl: Fix static linking on macOS +- opusdec: Various channel-related fixes +- textrender: Negotiate caps on a GAP event if none were negotiated + yet +- textrender: Donât blindly forward all events and donât blindly + forward all events +- timeoverlay: fix pad leak +- oggdemux: Donât leak incoming EOS event +- subparse: Fix non-closed tag handling. +- videodecoder: Only post latency message if it changed +- videoscale: buffer meta handling fixes (NULL-terminate array of + valid meta tags) +- videosink: Donât return unknown end-time from get_times() +- Bump core requirement in 1.20 branch to 1.20.4 + +Tools + +- gst-play: Donât leak the stream collection + +gst-plugins-good + +- flacparse: Fix handling of headers advertising 32bps +- qt5: deactivate context if fill_info fails +- qt5: initialize GError properly in gst_qt_get_gl_wrapcontext() +- qtdemux: check return value from gst_structure_get in PIFF box +- qtdemux: use unsigned int types to store result of QT_UINT32 +- qtmux: Prefill mode fixes +- oss4: Fix debug category initialization +- multiudpsink: allow binding to IPv6 address +- rtpjitterbuffer tests: Cast drop-messages-interval type properly + (fixing it on 32-bit architectures) +- rtspsrc: fix seek event leaks +- rtspsrc: Donât replace 404 errors with âno auth protocol foundâ +- rtspsrc: Only EOS on timeout if all streams are timed out/EOS +- rtspsrc: Fix usage of IPv6 connections in SETUP +- splitmuxsrc: donât queue data on unlinked pads +- v4l2: Fix SIGSEGV on âchange stateâ during âformat changeâ +- v4l2videodec: Fix activation of internal pool +- wavparse: Avoid occasional crash due to referencing freed buffer. +- wavparse: Fix crash that occurs in push mode when header chunks are + corrupted in certain ways. + +gst-plugins-bad + +- aesdec: Fix padding removal for per-buffer-padding=FALSE +- aesdec test failing in gst-plugins-bad +- alphacombine: Add missing query handler for gaps +- avfdeviceprovider: do not leak the properties +- avfvideosrc: Report latency when doing screen capture +- d3d11screencapturesrc: Specify PAR 1/1 to template caps +- d3d11videosink: Fixing focus lost on desktop layout change +- d3d11videosink: Call ShowWindow() from window thread +- d3d11videosink: Fix deadlock when parent window is busy +- d3d11videosink: Always clear back buffer on resize +- decklink: reset calculation of time_mapping to fix clipping HDMI + video +- directshow: Fix build error with glib 2.75 and newer +- dvbsubenc: Forward GAP events as-is if we wouldnât produce an end + packet and⦠+- dvbsubenc: Write Display Definition Segment if a non-default + width/height is used +- h265decoder: Do not abort when failed to prepare ref pic set +- h264parser: Fix a typo in pred_weight_table parsing. +- mediafoundation, d3d11: Fix memory leak and make leak tracer happy +- mpegts: Handle when iconv doesnât support ISO 6937 (e.g. musl libc) +- mpegts: Check continuity counter on section streams +- mpegts: Revert âmpegtspacketizer: memcmp potentially seen_before + dataâ +- mpegtspacketizer: memcmp potentially seen_before data +- mpegtsdemux: Always clear packetizer on DISCONT push mode +- srt: various fixes - improve stats and error handling +- rtmp2: Improve error messages +- rtmp2sink: Correctly return GST_FLOW_ERROR on error +- vulkan: Fix static linking on macOS +- webrtcbin: also add rtcp-fb ccm fir for video mlines by default +- webrtc/nice: fix small leak of split strings + +gst-plugins-ugly + +- No changes + +gst-libav + +- avdec_h265: Fix endless renegotiation with alternate interlacing +- avviddec: Avoid flushing on framerate changes + +gst-rtsp-server + +- rtsp-server: Free client if no connection could be created + +gstreamer-vaapi + +- vaapi: prefix internal USE_X11 define to fix build with mesa 22.3.0 +- vaapi: libs: context: use queried value for attrib +- gstreamer-vaapi cannot be built without X11 with recent mesa + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- No changes + +gst-editing-services + +- Fix building ges with tools disabled +- Fix leaks and minor races in GES + +gst-examples: + +- webrtc: Fix double free in webrtc-recvonly-h264 demo +- webrtc: Fix critical in webrtc-recvonly-h264 example +- webrtc/signalling examples: Fix compatibility with Python 3.10 + +Development build environment + gst-full build + +- No major changes + +Cerbero build tool and packaging changes in 1.20.5 + +- oven: output status line at least every minute +- Unconditionally set CMAKE_SYSTEM_NAME on Windows +- Fix ios cross-compile with cmake on M1 +- Speed up downloads on Windows drastically +- Fix tar usage on bsdtar and print progress while compressing +- Actually print the sha for which the cache was not found + +Recipes + +- ffmpeg: add patch to generate the pc files properly +- taglib: add patch to generate the pc files properly +- fontconfig: update to 2.14.1 +- Windows: Crash on GStreamer 1.20.x x86_64 MSVC + MS-Windows due to + libfontconfig fonts.conf file invalid. +- openssl: Fix compile errors on upgrades +- moltenvk: Also ship the static library on macOS +- gstreamer: Add some missing pkgconfig files +- gst-plugins-good: Fix post_install failure when qt5 is enabled +- gst-plugins-bad: Ship AES plugin +- libvpx: Enable high bitdepth support +- openssl: update to 1.1.1s +- glib: Update patch to auto-detect modules on macOS + +Contributors to 1.20.5 + +Aleksandr Slobodeniuk, Arun Raghavan, A. Wilcox, Bo Elmgreen, Boyuan +Zhang, Bunio FH, Célestin Marot, Devin Anderson, Edward Hervey, He +Junyan, Ignacio Casal Quinteiro, Jacek Skiba, Jan Alexander Steffens +(heftig), Jan Schmidt, Jonas Bonn, Jordan Petridis, Justin Chadwell, +Linus Svensson, Marek Olejnik, Mathieu Duponchelle, Matthew Waters, +Nicolas Dufresne, Nirbheek Chauhan, Patrick Griffis, Pawel Stawicki, +Philippe Normand, Ruben Gonzalez, Sam Van Den Berge, Sebastian Dröge, +Seungha Yang, Stéphane Cerveau, Tim-Philipp Müller, Vivia Nikolaidou, +Wojciech Kapsa, Xavier Claessens, + +⦠and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.20.5 + +- List of Merge Requests applied in 1.20.5 +- List of Issues fixed in 1.20.5 + Schedule for 1.22 Our next major feature release will be 1.22, and 1.21 will be the @@ -2790,7 +3044,7 @@ development of 1.21/1.22 will happen in the git main branch. The plan for the 1.22 development cycle is now confirmed, and we aim for -a 1.22.0 release in December 2022. +a 1.22.0 release in December 2022 or early January 2023. 1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/RELEASE new/gst-plugins-base-1.20.5/RELEASE --- old/gst-plugins-base-1.20.4/RELEASE 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/RELEASE 2022-12-20 00:34:46.000000000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-base 1.20.4. +This is GStreamer gst-plugins-base 1.20.5. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ext/cdparanoia/meson.build new/gst-plugins-base-1.20.5/ext/cdparanoia/meson.build --- old/gst-plugins-base-1.20.4/ext/cdparanoia/meson.build 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ext/cdparanoia/meson.build 2022-12-20 00:34:46.000000000 +0100 @@ -29,10 +29,19 @@ endif if cdparanoia_found + # The cdda/cdda_interface.h header triggers GCC 12+ warnings which + # then trickle down when we build the plugin with -Werror. + # This wouldn't be needed usually, but cdparanoia's last release + # was in 2008. + extra_args = cc.get_supported_arguments([ + '-Wno-discarded-qualifiers', + '-Wno-unused-variable' + ]) + gstcdparanoia = library('gstcdparanoia', ['gstcdparanoiasrc.c'], include_directories: [configinc, libsinc], - c_args : gst_plugins_base_args, + c_args : gst_plugins_base_args + extra_args, dependencies : cdparanoia_deps + glib_deps + [audio_dep, gst_dep, gst_base_dep], install : true, install_dir : plugins_install_dir, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ext/ogg/gstoggdemux.c new/gst-plugins-base-1.20.5/ext/ogg/gstoggdemux.c --- old/gst-plugins-base-1.20.4/ext/ogg/gstoggdemux.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ext/ogg/gstoggdemux.c 2022-12-20 00:34:46.000000000 +0100 @@ -2524,6 +2524,7 @@ GST_DEBUG_OBJECT (ogg, "Error seeking back after duration check: %d", res); } + gst_event_unref (event); res = TRUE; break; } else { @@ -2538,6 +2539,8 @@ } if (!drop) res = gst_ogg_demux_send_event (ogg, event); + else + gst_event_unref (event); if (ogg->current_chain == NULL) { GST_WARNING_OBJECT (ogg, "EOS while trying to retrieve chain, seeking disabled"); @@ -5262,6 +5265,7 @@ gst_ogg_demux_clear_chains (ogg); GST_OBJECT_LOCK (ogg); ogg->running = FALSE; + gst_event_replace (&ogg->seek_event, NULL); GST_OBJECT_UNLOCK (ogg); break; case GST_STATE_CHANGE_READY_TO_NULL: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ext/opus/gstopusdec.c new/gst-plugins-base-1.20.5/ext/opus/gstopusdec.c --- old/gst-plugins-base-1.20.4/ext/opus/gstopusdec.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ext/opus/gstopusdec.c 2022-12-20 00:34:46.000000000 +0100 @@ -310,7 +310,7 @@ gst_structure_fixate_field_nearest_int (s, "rate", dec->sample_rate); gst_structure_get_int (s, "rate", &rate); channels = dec->n_channels > 0 ? dec->n_channels : 2; - gst_structure_fixate_field_nearest_int (s, "channels", dec->n_channels); + gst_structure_fixate_field_nearest_int (s, "channels", channels); gst_structure_get_int (s, "channels", &channels); gst_caps_unref (inter); @@ -363,6 +363,7 @@ { GstAudioChannelPosition pos[64]; const GstAudioChannelPosition *posn = NULL; + guint8 n_channels; if (!gst_opus_header_is_id_header (buf)) { GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL), @@ -372,7 +373,7 @@ if (!gst_codec_utils_opus_parse_header (buf, &dec->sample_rate, - (guint8 *) & dec->n_channels, + &n_channels, &dec->channel_mapping_family, &dec->n_streams, &dec->n_stereo_streams, @@ -381,6 +382,7 @@ ("Failed to parse Opus ID header")); return GST_FLOW_ERROR; } + dec->n_channels = n_channels; dec->r128_gain_volume = gst_opus_dec_get_r128_volume (dec->r128_gain); GST_INFO_OBJECT (dec, @@ -886,13 +888,15 @@ } } else { const GstAudioChannelPosition *posn = NULL; + guint8 n_channels; if (!gst_codec_utils_opus_parse_caps (caps, &dec->sample_rate, - (guint8 *) & dec->n_channels, &dec->channel_mapping_family, + &n_channels, &dec->channel_mapping_family, &dec->n_streams, &dec->n_stereo_streams, dec->channel_mapping)) { ret = FALSE; goto done; } + dec->n_channels = n_channels; if (dec->channel_mapping_family == 1 && dec->n_channels <= 8) posn = gst_opus_channel_positions[dec->n_channels - 1]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ext/pango/gsttextrender.c new/gst-plugins-base-1.20.5/ext/pango/gsttextrender.c --- old/gst-plugins-base-1.20.4/ext/pango/gsttextrender.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ext/pango/gsttextrender.c 2022-12-20 00:34:46.000000000 +0100 @@ -531,7 +531,10 @@ /* render text */ GST_DEBUG ("rendering '%*s'", (gint) size, data); - pango_layout_set_markup (render->layout, (gchar *) data, size); + if (render->have_pango_markup) + pango_layout_set_markup (render->layout, (gchar *) data, size); + else + pango_layout_set_text (render->layout, (gchar *) data, size); gst_text_render_render_pangocairo (render); gst_buffer_unmap (inbuf, &map); @@ -630,8 +633,44 @@ } break; } + case GST_EVENT_CAPS: + { + GstCaps *caps; + GstStructure *structure; + const gchar *format; + + gst_event_parse_caps (event, &caps); + + structure = gst_caps_get_structure (caps, 0); + format = gst_structure_get_string (structure, "format"); + render->have_pango_markup = (strcmp (format, "pango-markup") == 0); + + gst_event_unref (event); + ret = TRUE; + + break; + } + case GST_EVENT_GAP: + /* Negotiate caps first if we negotiated none so far as otherwise + * downstream wouldn't have received a segment event either and + * wouldn't know what to do with the gap event */ + if (!gst_pad_has_current_caps (render->srcpad)) { + if (gst_text_render_renegotiate (render) != GST_FLOW_OK) { + gst_event_unref (event); + ret = FALSE; + break; + } + } + + if (render->segment_event) { + gst_pad_push_event (render->srcpad, render->segment_event); + render->segment_event = NULL; + } + + ret = gst_pad_event_default (pad, parent, event); + break; default: - ret = gst_pad_push_event (render->srcpad, event); + ret = gst_pad_event_default (pad, parent, event); break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ext/pango/gsttextrender.h new/gst-plugins-base-1.20.5/ext/pango/gsttextrender.h --- old/gst-plugins-base-1.20.4/ext/pango/gsttextrender.h 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ext/pango/gsttextrender.h 2022-12-20 00:34:46.000000000 +0100 @@ -93,6 +93,7 @@ gint ypad; GstEvent *segment_event; + gboolean have_pango_markup; }; struct _GstTextRenderClass { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/ext/pango/gsttimeoverlay.c new/gst-plugins-base-1.20.5/ext/pango/gsttimeoverlay.c --- old/gst-plugins-base-1.20.4/ext/pango/gsttimeoverlay.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/ext/pango/gsttimeoverlay.c 2022-12-20 00:34:46.000000000 +0100 @@ -331,6 +331,7 @@ video_sink = gst_element_get_static_pad (GST_ELEMENT (overlay), "video_sink"); overlay->orig_video_event = GST_PAD_EVENTFUNC (video_sink); gst_pad_set_event_function (video_sink, gst_time_overlay_video_event); + gst_object_unref (video_sink); } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst/audioconvert/gstaudioconvert.c new/gst-plugins-base-1.20.5/gst/audioconvert/gstaudioconvert.c --- old/gst-plugins-base-1.20.4/gst/audioconvert/gstaudioconvert.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst/audioconvert/gstaudioconvert.c 2022-12-20 00:34:46.000000000 +0100 @@ -918,6 +918,11 @@ GstAudioConvert *this = GST_AUDIO_CONVERT (base); if (base->segment.format == GST_FORMAT_TIME) { + if (!GST_AUDIO_INFO_IS_VALID (&this->in_info)) { + GST_WARNING_OBJECT (this, "Got buffer, but not negotiated yet!"); + return GST_FLOW_NOT_NEGOTIATED; + } + input = gst_audio_buffer_clip (input, &base->segment, this->in_info.rate, this->in_info.bpf); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst/audioresample/gstaudioresample.c new/gst-plugins-base-1.20.5/gst/audioresample/gstaudioresample.c --- old/gst-plugins-base-1.20.4/gst/audioresample/gstaudioresample.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst/audioresample/gstaudioresample.c 2022-12-20 00:34:46.000000000 +0100 @@ -977,6 +977,11 @@ GstAudioResample *resample = GST_AUDIO_RESAMPLE (base); if (base->segment.format == GST_FORMAT_TIME) { + if (!GST_AUDIO_INFO_IS_VALID (&resample->in)) { + GST_WARNING_OBJECT (resample, "Got buffer, but not negotiated yet!"); + return GST_FLOW_NOT_NEGOTIATED; + } + input = gst_audio_buffer_clip (input, &base->segment, resample->in.rate, resample->in.bpf); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst/playback/gstdecodebin2.c new/gst-plugins-base-1.20.5/gst/playback/gstdecodebin2.c --- old/gst-plugins-base-1.20.4/gst/playback/gstdecodebin2.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst/playback/gstdecodebin2.c 2022-12-20 00:34:46.000000000 +0100 @@ -5012,7 +5012,7 @@ GstDecodePad *dpad = user_data; gboolean res = TRUE; - GST_LOG_OBJECT (pad, "%s dpad:%p", GST_EVENT_TYPE_NAME (event), dpad); + GST_LOG_OBJECT (pad, "event %s", GST_EVENT_TYPE_NAME (event)); if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) { GST_DEBUG_OBJECT (pad, "we received EOS"); @@ -5159,8 +5159,8 @@ ret = FALSE; GST_DEBUG_OBJECT (dpad->dbin, - "calling autoplug-query for %s (element %s): %" GST_PTR_FORMAT, - GST_PAD_NAME (dpad), GST_ELEMENT_NAME (delem->element), query); + "calling autoplug-query for %" GST_PTR_FORMAT " (element %s): %" + GST_PTR_FORMAT, dpad, GST_ELEMENT_NAME (delem->element), query); g_signal_emit (G_OBJECT (dpad->dbin), gst_decode_bin_signals[SIGNAL_AUTOPLUG_QUERY], 0, dpad, delem->element, query, &ret); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst/playback/gstparsebin.c new/gst-plugins-base-1.20.5/gst/playback/gstparsebin.c --- old/gst-plugins-base-1.20.4/gst/playback/gstparsebin.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst/playback/gstparsebin.c 2022-12-20 00:34:46.000000000 +0100 @@ -3573,6 +3573,7 @@ /* Don't expose if we're currently shutting down */ DYN_LOCK (parsebin); if (G_UNLIKELY (parsebin->shutdown)) { + g_list_free_full (endpads, (GDestroyNotify) gst_object_unref); GST_WARNING_OBJECT (parsebin, "Currently, shutting down, aborting exposing"); DYN_UNLOCK (parsebin); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst/subparse/gstsubparse.c new/gst-plugins-base-1.20.5/gst/subparse/gstsubparse.c --- old/gst-plugins-base-1.20.4/gst/subparse/gstsubparse.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst/subparse/gstsubparse.c 2022-12-20 00:34:46.000000000 +0100 @@ -785,9 +785,11 @@ last = g_ptr_array_index (open_tags, num_open_tags - 1); if (num_open_tags == 0 || g_ascii_strncasecmp (end_tag - 1, last, strlen (last))) { - GST_LOG ("broken input, closing tag '%s' is not open", end_tag - 1); - memmove (next_tag, end_tag + 1, strlen (end_tag) + 1); - next_tag -= strlen (end_tag); + GST_LOG ("broken input, closing tag '%s' is not open", next_tag); + /* Move everything after the tag end, including closing \0 */ + memmove (next_tag, end_tag + 1, strlen (end_tag)); + cur = next_tag; + continue; } else { --num_open_tags; g_ptr_array_remove_index (open_tags, num_open_tags); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst/videoscale/gstvideoscale.c new/gst-plugins-base-1.20.5/gst/videoscale/gstvideoscale.c --- old/gst-plugins-base-1.20.4/gst/videoscale/gstvideoscale.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst/videoscale/gstvideoscale.c 2022-12-20 00:34:46.000000000 +0100 @@ -519,7 +519,8 @@ const gchar *const valid_tags[] = { GST_META_TAG_VIDEO_STR, GST_META_TAG_VIDEO_COLORSPACE_STR, GST_META_TAG_VIDEO_ORIENTATION_STR, - GST_META_TAG_VIDEO_SIZE_STR + GST_META_TAG_VIDEO_SIZE_STR, + NULL }; tags = gst_meta_api_type_get_tags (info->api); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/app/gstappsrc.c new/gst-plugins-base-1.20.5/gst-libs/gst/app/gstappsrc.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/app/gstappsrc.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/app/gstappsrc.c 2022-12-20 00:34:46.000000000 +0100 @@ -183,6 +183,9 @@ guint64 min_latency; guint64 max_latency; + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; + gboolean emit_signals; guint min_percent; gboolean handle_segment_change; @@ -1103,6 +1106,7 @@ priv->is_eos = FALSE; priv->flushing = TRUE; priv->started = FALSE; + priv->posted_latency_msg = FALSE; gst_app_src_flush_queued (appsrc, TRUE); g_cond_broadcast (&priv->cond); g_mutex_unlock (&priv->mutex); @@ -2325,6 +2329,10 @@ priv->max_latency = max; changed = TRUE; } + if (!priv->posted_latency_msg) { + priv->posted_latency_msg = TRUE; + changed = TRUE; + } g_mutex_unlock (&priv->mutex); if (changed) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/audio/gstaudiodecoder.c new/gst-plugins-base-1.20.5/gst-libs/gst/audio/gstaudiodecoder.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/audio/gstaudiodecoder.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/audio/gstaudiodecoder.c 2022-12-20 00:34:46.000000000 +0100 @@ -180,6 +180,8 @@ /* MT-protected (with LOCK) */ GstClockTime min_latency; GstClockTime max_latency; + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; GstAllocator *allocator; GstAllocationParams params; @@ -555,6 +557,7 @@ memset (&dec->priv->ctx, 0, sizeof (dec->priv->ctx)); gst_audio_info_init (&dec->priv->ctx.info); + dec->priv->ctx.posted_latency_msg = FALSE; GST_OBJECT_UNLOCK (dec); dec->priv->ctx.had_output_data = FALSE; dec->priv->ctx.had_input_data = FALSE; @@ -3391,24 +3394,43 @@ * @min: minimum latency * @max: maximum latency * - * Sets decoder latency. + * Sets decoder latency. If the provided values changed from + * previously provided ones, this will also post a LATENCY message on the bus + * so the pipeline can reconfigure its global latency. */ void gst_audio_decoder_set_latency (GstAudioDecoder * dec, GstClockTime min, GstClockTime max) { + gboolean post_message = FALSE; + g_return_if_fail (GST_IS_AUDIO_DECODER (dec)); g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min)); g_return_if_fail (min <= max); + GST_DEBUG_OBJECT (dec, + "min_latency:%" GST_TIME_FORMAT " max_latency:%" GST_TIME_FORMAT, + GST_TIME_ARGS (min), GST_TIME_ARGS (max)); + GST_OBJECT_LOCK (dec); - dec->priv->ctx.min_latency = min; - dec->priv->ctx.max_latency = max; + if (dec->priv->ctx.min_latency != min) { + dec->priv->ctx.min_latency = min; + post_message = TRUE; + } + if (dec->priv->ctx.max_latency != max) { + dec->priv->ctx.max_latency = max; + post_message = TRUE; + } + if (!dec->priv->ctx.posted_latency_msg) { + dec->priv->ctx.posted_latency_msg = TRUE; + post_message = TRUE; + } GST_OBJECT_UNLOCK (dec); /* post latency message on the bus */ - gst_element_post_message (GST_ELEMENT (dec), - gst_message_new_latency (GST_OBJECT (dec))); + if (post_message) + gst_element_post_message (GST_ELEMENT (dec), + gst_message_new_latency (GST_OBJECT (dec))); } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/audio/gstaudioencoder.c new/gst-plugins-base-1.20.5/gst-libs/gst/audio/gstaudioencoder.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/audio/gstaudioencoder.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/audio/gstaudioencoder.c 2022-12-20 00:34:46.000000000 +0100 @@ -172,6 +172,9 @@ GstClockTime min_latency; GstClockTime max_latency; + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; + GList *headers; gboolean new_headers; @@ -487,6 +490,7 @@ memset (&enc->priv->ctx, 0, sizeof (enc->priv->ctx)); gst_audio_info_init (&enc->priv->ctx.info); + enc->priv->ctx.posted_latency_msg = FALSE; GST_OBJECT_UNLOCK (enc); if (enc->priv->upstream_tags) { @@ -2308,27 +2312,43 @@ * @min: minimum latency * @max: maximum latency * - * Sets encoder latency. + * Sets encoder latency. If the provided values changed from + * previously provided ones, this will also post a LATENCY message on the bus + * so the pipeline can reconfigure its global latency. */ void gst_audio_encoder_set_latency (GstAudioEncoder * enc, GstClockTime min, GstClockTime max) { + gboolean post_message = FALSE; + g_return_if_fail (GST_IS_AUDIO_ENCODER (enc)); g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min)); g_return_if_fail (min <= max); + GST_DEBUG_OBJECT (enc, + "min_latency:%" GST_TIME_FORMAT " max_latency:%" GST_TIME_FORMAT, + GST_TIME_ARGS (min), GST_TIME_ARGS (max)); + GST_OBJECT_LOCK (enc); - enc->priv->ctx.min_latency = min; - enc->priv->ctx.max_latency = max; + if (enc->priv->ctx.min_latency != min) { + enc->priv->ctx.min_latency = min; + post_message = TRUE; + } + if (enc->priv->ctx.max_latency != max) { + enc->priv->ctx.max_latency = max; + post_message = TRUE; + } + if (!enc->priv->ctx.posted_latency_msg) { + enc->priv->ctx.posted_latency_msg = TRUE; + post_message = TRUE; + } GST_OBJECT_UNLOCK (enc); - GST_LOG_OBJECT (enc, "set to %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT, - GST_TIME_ARGS (min), GST_TIME_ARGS (max)); - /* post latency message on the bus */ - gst_element_post_message (GST_ELEMENT (enc), - gst_message_new_latency (GST_OBJECT (enc))); + if (post_message) + gst_element_post_message (GST_ELEMENT (enc), + gst_message_new_latency (GST_OBJECT (enc))); } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/audio/gstaudiofilter.c new/gst-plugins-base-1.20.5/gst-libs/gst/audio/gstaudiofilter.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/audio/gstaudiofilter.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/audio/gstaudiofilter.c 2022-12-20 00:34:46.000000000 +0100 @@ -180,6 +180,11 @@ GstAudioFilter *filter = GST_AUDIO_FILTER (btrans); if (btrans->segment.format == GST_FORMAT_TIME) { + if (!GST_AUDIO_INFO_IS_VALID (&filter->info)) { + GST_WARNING_OBJECT (filter, "Got buffer, but not negotiated yet!"); + return GST_FLOW_NOT_NEGOTIATED; + } + input = gst_audio_buffer_clip (input, &btrans->segment, filter->info.rate, filter->info.bpf); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h new/gst-plugins-base-1.20.5/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h --- old/gst-plugins-base-1.20.4/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h 2022-12-20 00:34:46.000000000 +0100 @@ -61,7 +61,7 @@ gboolean gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa); G_GNUC_INTERNAL -void _invoke_on_main (GstGLWindowCB func, gpointer data, GDestroyNotify notify); +void _gst_gl_invoke_on_main (GstGLWindowCB func, gpointer data, GDestroyNotify notify); G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m new/gst-plugins-base-1.20.5/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m --- old/gst-plugins-base-1.20.4/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m 2022-12-20 00:34:46.000000000 +0100 @@ -313,7 +313,7 @@ context_cocoa->priv->pixel_format = fmt; context_cocoa->priv->gl_context = glContext; - _invoke_on_main ((GstGLWindowCB) gst_gl_window_cocoa_create_window, + _gst_gl_invoke_on_main ((GstGLWindowCB) gst_gl_window_cocoa_create_window, gst_object_ref (window_cocoa), (GDestroyNotify) gst_object_unref); if (!context_cocoa->priv->gl_context) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m new/gst-plugins-base-1.20.5/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m --- old/gst-plugins-base-1.20.4/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m 2022-12-20 00:34:46.000000000 +0100 @@ -269,8 +269,8 @@ static void gst_gl_window_cocoa_close (GstGLWindow * window) { - _invoke_on_main ((GstGLWindowCB) _close_window, gst_object_ref (window), - (GDestroyNotify) gst_object_unref); + _gst_gl_invoke_on_main ((GstGLWindowCB) _close_window, + gst_object_ref (window), (GDestroyNotify) gst_object_unref); } static guintptr @@ -352,8 +352,8 @@ } if (!priv->external_view && !priv->visible) - _invoke_on_main ((GstGLWindowCB) _show_window, gst_object_ref (window), - (GDestroyNotify) gst_object_unref); + _gst_gl_invoke_on_main ((GstGLWindowCB) _show_window, + gst_object_ref (window), (GDestroyNotify) gst_object_unref); } } @@ -585,8 +585,8 @@ render->rect.w = width; render->rect.h = height; - _invoke_on_main ((GstGLWindowCB) _set_render_rectangle, render, - (GDestroyNotify) _free_set_render_rectangle); + _gst_gl_invoke_on_main ((GstGLWindowCB) _set_render_rectangle, render, + (GDestroyNotify) _free_set_render_rectangle); return TRUE; } @@ -738,7 +738,7 @@ @end void -_invoke_on_main (GstGLWindowCB func, gpointer data, GDestroyNotify notify) +_gst_gl_invoke_on_main (GstGLWindowCB func, gpointer data, GDestroyNotify notify) { if ([NSThread isMainThread]) { func (data); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/gl/egl/gsteglimage.c new/gst-plugins-base-1.20.5/gst-libs/gst/gl/egl/gsteglimage.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/gl/egl/gsteglimage.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/gl/egl/gsteglimage.c 2022-12-20 00:34:46.000000000 +0100 @@ -299,10 +299,8 @@ EGLContext egl_context = EGL_NO_CONTEXT; EGLImageKHR img = EGL_NO_IMAGE_KHR; GstGLDisplayEGL *display_egl; - gint plat_major, plat_minor; guint attrib_len = 0; - gst_gl_context_get_gl_platform_version (context, &plat_major, &plat_minor); display_egl = gst_gl_display_egl_from_gl_display (context->display); if (!display_egl) { @@ -321,6 +319,9 @@ while (attribs[attrib_len++] != EGL_NONE) { } #ifdef EGL_VERSION_1_5 + gint plat_major, plat_minor; + gst_gl_context_get_gl_platform_version (context, &plat_major, &plat_minor); + if (GST_GL_CHECK_GL_VERSION (plat_major, plat_minor, 1, 5)) { EGLImageKHR (*gst_eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list); @@ -347,7 +348,7 @@ g_free (egl_attribs); } else #endif - { + if (gst_gl_context_check_feature (context, "EGL_KHR_image_base")) { EGLImageKHR (*gst_eglCreateImageKHR) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list); EGLint *egl_attribs = NULL; @@ -356,8 +357,8 @@ gst_eglCreateImageKHR = gst_gl_context_get_proc_address (context, "eglCreateImageKHR"); if (!gst_eglCreateImageKHR) { - GST_WARNING_OBJECT (context, "\"eglCreateImageKHR\" not exposed by the " - "implementation"); + GST_ERROR_OBJECT (context, "\"eglCreateImageKHR\" not exposed by the " + "implementation as required by EGL_KHR_image_base"); return EGL_NO_IMAGE_KHR; } @@ -371,6 +372,9 @@ egl_attribs); g_free (egl_attribs); + } else { + GST_INFO_OBJECT (context, "EGLImage creation not supported"); + return EGL_NO_IMAGE_KHR; } return img; @@ -383,16 +387,31 @@ EGLDisplay egl_display = EGL_DEFAULT_DISPLAY; GstGLDisplayEGL *display_egl; - gst_eglDestroyImage = gst_gl_context_get_proc_address (context, - "eglDestroyImage"); - if (!gst_eglDestroyImage) { +#ifdef EGL_VERSION_1_5 + gint plat_major, plat_minor; + gst_gl_context_get_gl_platform_version (context, &plat_major, &plat_minor); + + if (GST_GL_CHECK_GL_VERSION (plat_major, plat_minor, 1, 5)) { + gst_eglDestroyImage = gst_gl_context_get_proc_address (context, + "eglDestroyImage"); + if (!gst_eglDestroyImage) { + GST_ERROR_OBJECT (context, "\"eglDestroyImage\" not exposed by the " + "implementation as required by EGL >= 1.5"); + return; + } + } else +#endif + if (gst_gl_context_check_feature (context, "EGL_KHR_image_base")) { gst_eglDestroyImage = gst_gl_context_get_proc_address (context, "eglDestroyImageKHR"); if (!gst_eglDestroyImage) { GST_ERROR_OBJECT (context, "\"eglDestroyImage\" not exposed by the " - "implementation"); + "implementation as required by EGL_KHR_image_base"); return; } + } else { + GST_ERROR_OBJECT (context, "Destruction of EGLImage not supported."); + return; } display_egl = gst_gl_display_egl_from_gl_display (context->display); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/gl/meson.build new/gst-plugins-base-1.20.5/gst-libs/gst/gl/meson.build --- old/gst-plugins-base-1.20.4/gst-libs/gst/gl/meson.build 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/gl/meson.build 2022-12-20 00:34:46.000000000 +0100 @@ -689,7 +689,16 @@ endif if need_win_dispmanx != 'no' - if bcm_host_dep.found() + have_dispmanx_window_t = cc.has_type( + 'EGL_DISPMANX_WINDOW_T', + prefix: ''' +#include <bcm_host.h> +#include <EGL/egl.h> +''', + dependencies: [gl_lib_deps, egl_dep, bcm_host_dep], + include_directories: gl_includes) + + if have_dispmanx_window_t and bcm_host_dep.found() if not egl_dep.found() error('dispmanx requires the use of egl') endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/video/gstvideodecoder.c new/gst-plugins-base-1.20.5/gst-libs/gst/video/gstvideodecoder.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/video/gstvideodecoder.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/video/gstvideodecoder.c 2022-12-20 00:34:46.000000000 +0100 @@ -446,6 +446,9 @@ gint64 min_latency; gint64 max_latency; + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; + /* upstream stream tags (global tags are passed through as-is) */ GstTagList *upstream_tags; @@ -2384,6 +2387,8 @@ priv->dropped = 0; priv->processed = 0; + priv->posted_latency_msg = FALSE; + priv->decode_frame_number = 0; priv->base_picture_number = 0; @@ -5073,24 +5078,41 @@ * @min_latency: minimum latency * @max_latency: maximum latency * - * Lets #GstVideoDecoder sub-classes tell the baseclass what the decoder - * latency is. Will also post a LATENCY message on the bus so the pipeline - * can reconfigure its global latency. + * Lets #GstVideoDecoder sub-classes tell the baseclass what the decoder latency + * is. If the provided values changed from previously provided ones, this will + * also post a LATENCY message on the bus so the pipeline can reconfigure its + * global latency. */ void gst_video_decoder_set_latency (GstVideoDecoder * decoder, GstClockTime min_latency, GstClockTime max_latency) { + gboolean post_message = FALSE; g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min_latency)); g_return_if_fail (max_latency >= min_latency); + GST_DEBUG_OBJECT (decoder, + "min_latency:%" GST_TIME_FORMAT " max_latency:%" GST_TIME_FORMAT, + GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency)); + GST_OBJECT_LOCK (decoder); - decoder->priv->min_latency = min_latency; - decoder->priv->max_latency = max_latency; + if (decoder->priv->min_latency != min_latency) { + decoder->priv->min_latency = min_latency; + post_message = TRUE; + } + if (decoder->priv->max_latency != max_latency) { + decoder->priv->max_latency = max_latency; + post_message = TRUE; + } + if (!decoder->priv->posted_latency_msg) { + decoder->priv->posted_latency_msg = TRUE; + post_message = TRUE; + } GST_OBJECT_UNLOCK (decoder); - gst_element_post_message (GST_ELEMENT_CAST (decoder), - gst_message_new_latency (GST_OBJECT_CAST (decoder))); + if (post_message) + gst_element_post_message (GST_ELEMENT_CAST (decoder), + gst_message_new_latency (GST_OBJECT_CAST (decoder))); } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/video/gstvideoencoder.c new/gst-plugins-base-1.20.5/gst-libs/gst/video/gstvideoencoder.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/video/gstvideoencoder.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/video/gstvideoencoder.c 2022-12-20 00:34:46.000000000 +0100 @@ -134,6 +134,9 @@ gint64 min_latency; gint64 max_latency; + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; + /* FIXME 2.0: Use a GQueue or similar, see GstVideoCodecFrame::events */ GList *current_frame_events; @@ -524,6 +527,8 @@ priv->dropped = 0; priv->processed = 0; + + priv->posted_latency_msg = FALSE; } else { GList *l; @@ -2864,22 +2869,41 @@ * @min_latency: minimum latency * @max_latency: maximum latency * - * Informs baseclass of encoding latency. + * Informs baseclass of encoding latency. If the provided values changed from + * previously provided ones, this will also post a LATENCY message on the bus + * so the pipeline can reconfigure its global latency. */ void gst_video_encoder_set_latency (GstVideoEncoder * encoder, GstClockTime min_latency, GstClockTime max_latency) { + gboolean post_message = FALSE; + g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min_latency)); g_return_if_fail (max_latency >= min_latency); + GST_DEBUG_OBJECT (encoder, + "min_latency:%" GST_TIME_FORMAT " max_latency:%" GST_TIME_FORMAT, + GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency)); + GST_OBJECT_LOCK (encoder); - encoder->priv->min_latency = min_latency; - encoder->priv->max_latency = max_latency; + if (encoder->priv->min_latency != min_latency) { + encoder->priv->min_latency = min_latency; + post_message = TRUE; + } + if (encoder->priv->max_latency != max_latency) { + encoder->priv->max_latency = max_latency; + post_message = TRUE; + } + if (!encoder->priv->posted_latency_msg) { + encoder->priv->posted_latency_msg = TRUE; + post_message = TRUE; + } GST_OBJECT_UNLOCK (encoder); - gst_element_post_message (GST_ELEMENT_CAST (encoder), - gst_message_new_latency (GST_OBJECT_CAST (encoder))); + if (post_message) + gst_element_post_message (GST_ELEMENT_CAST (encoder), + gst_message_new_latency (GST_OBJECT_CAST (encoder))); } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-libs/gst/video/gstvideosink.c new/gst-plugins-base-1.20.5/gst-libs/gst/video/gstvideosink.c --- old/gst-plugins-base-1.20.4/gst-libs/gst/video/gstvideosink.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-libs/gst/video/gstvideosink.c 2022-12-20 00:34:46.000000000 +0100 @@ -273,6 +273,12 @@ *end = timestamp + gst_util_uint64_scale_int (GST_SECOND, vsink->priv->info.fps_d, vsink->priv->info.fps_n); + } else if (bsink->segment.rate < 0) { + /* The end time will be used for clock waiting time position + * in case of revese playback, and unknown end time will result in + * never waiting for clock (as if sync=false). + * Returning timestamp here would be the best effort we can do */ + *end = timestamp; } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/gst-plugins-base.doap new/gst-plugins-base-1.20.5/gst-plugins-base.doap --- old/gst-plugins-base-1.20.4/gst-plugins-base.doap 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/gst-plugins-base.doap 2022-12-20 00:34:46.000000000 +0100 @@ -36,6 +36,16 @@ <release> <Version> + <revision>1.20.5</revision> + <branch>1.20</branch> + <name></name> + <created>2022-12-19</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.20.5.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.20.4</revision> <branch>1.20</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/meson.build new/gst-plugins-base-1.20.5/meson.build --- old/gst-plugins-base-1.20.4/meson.build 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/meson.build 2022-12-20 00:34:46.000000000 +0100 @@ -1,5 +1,5 @@ project('gst-plugins-base', 'c', - version : '1.20.4', + version : '1.20.5', meson_version : '>= 0.59', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -30,11 +30,7 @@ glib_req = '>= 2.56.0' orc_req = '>= 0.4.24' -if gst_version_is_stable - gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor) -else - gst_req = '>= ' + gst_version -endif +gst_req = '>= 1.20.4' # for _gst_meta_tag_memory_reference api_version = '1.0' soversion = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-base-1.20.4/tools/gst-play.c new/gst-plugins-base-1.20.5/tools/gst-play.c --- old/gst-plugins-base-1.20.4/tools/gst-play.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gst-plugins-base-1.20.5/tools/gst-play.c 2022-12-20 00:34:46.000000000 +0100 @@ -604,8 +604,9 @@ if (collection) { g_mutex_lock (&play->selection_lock); - gst_object_replace ((GstObject **) & play->collection, - (GstObject *) collection); + if (play->collection) + gst_object_unref (play->collection); + play->collection = collection; g_mutex_unlock (&play->selection_lock); } break;