Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-good for 
openSUSE:Factory checked in at 2023-07-01 23:17:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.13546 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-good"

Sat Jul  1 23:17:25 2023 rev:94 rq:1096145 version:1.22.4

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes
    2023-06-19 22:50:09.361419376 +0200
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.13546/gstreamer-plugins-good.changes
 2023-07-01 23:17:27.190045192 +0200
@@ -1,0 +2,28 @@
+Mon Jun 26 14:23:55 UTC 2023 - Bjørn Lie <bjorn....@gmail.com>
+
+- Update to version 1.22.4:
+  + flacparse: Avoid integer overflow in available data check for
+    image tags.
+  + flvmux: use the correct timestamp to calculate wait times.
+  + isomp4: Fix (E)AC-3 channel count handling.
+  + jpegdec: fixes related to interlaced jpeg.
+  + pngdec: Fix wrong colours output from 16bit RGB images.
+  + qtmux, qtdemux: fix byte order for opus extension.
+  + rtspsrc: Do not try send dropped get/set parameter.
+  + qt5, qt6: Add more meson options and eliminate all automagic.
+  + qt: glrenderer: don't attempt to use QWindow from non-Qt main
+    thread.
+  + qml6glsink: Support building on win32.
+  + v4l2src: fix support for bayer format.
+  + v4l2: Change to query only up to
+    V4L2_CID_PRIVATE_BASE+V4L2_CID_MAX_CTRLS.
+  + v4l2videodec: treat MPEG-1 format as MPEG-2.
+  + v4l2videoenc: support force keyframe event in v4l2 encoder.
+  + tests: rtpbin_buffer_list: fix possible unaligned write/read on
+    32-bit ARM.
+- Add libQt5Gui-private-headers-devel BuildRequires: New
+  explicit dependency.
+- Rebase reduce-required-meson.patch.
+- Drop adaptivedemux2-uri-data.patch: Fixed upstream.
+
+-------------------------------------------------------------------

Old:
----
  adaptivedemux2-uri-data.patch
  gst-plugins-good-1.22.3.tar.xz

New:
----
  gst-plugins-good-1.22.4.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gstreamer-plugins-good.spec ++++++
--- /var/tmp/diff_new_pack.4WFZas/_old  2023-07-01 23:17:27.942049701 +0200
+++ /var/tmp/diff_new_pack.4WFZas/_new  2023-07-01 23:17:27.950049749 +0200
@@ -26,7 +26,7 @@
 %define gst_branch 1.0
 
 Name:           gstreamer-plugins-good
-Version:        1.22.3
+Version:        1.22.4
 Release:        0
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        LGPL-2.1-or-later
@@ -36,7 +36,6 @@
 Source1:        gstreamer-plugins-good.appdata.xml
 Source99:       baselibs.conf
 Patch0:         reduce-required-meson.patch
-Patch1:         adaptivedemux2-uri-data.patch
 
 BuildRequires:  Mesa-libGLESv2-devel
 BuildRequires:  Mesa-libGLESv3-devel
@@ -58,6 +57,7 @@
 BuildRequires:  python3-xml
 BuildRequires:  zlib-devel
 
+BuildRequires:  libQt5Gui-private-headers-devel
 BuildRequires:  pkgconfig(Qt5Core)
 BuildRequires:  pkgconfig(Qt5Gui)
 BuildRequires:  pkgconfig(Qt5Qml)

++++++ gst-plugins-good-1.22.3.tar.xz -> gst-plugins-good-1.22.4.tar.xz ++++++
++++ 2226 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-good-1.22.3/ChangeLog new/gst-plugins-good-1.22.4/ChangeLog
--- old/gst-plugins-good-1.22.3/ChangeLog       2023-05-19 10:24:53.834972900 
+0200
+++ new/gst-plugins-good-1.22.4/ChangeLog       2023-06-20 18:45:41.851180600 
+0200
@@ -1,3 +1,239 @@
+=== release 1.22.4 ===
+
+2023-06-20 17:42:25 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * NEWS:
+       * RELEASE:
+       * docs/gst_plugins_cache.json:
+       * gst-plugins-good.doap:
+       * meson.build:
+         Release 1.22.4
+
+2023-06-08 19:12:54 +0200  Jonas Kvinge <jo...@jkvinge.net>
+
+       * ext/adaptivedemux2/gstadaptivedemux.c:
+         adaptivedemux2: Allow data dash+xml manifest for uri
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4853>
+
+2023-06-13 13:20:16 +0300  Sebastian Dröge <sebast...@centricular.com>
+
+       * gst/audioparsers/gstflacparse.c:
+         flacparse: Avoid integer overflow in available data check for image 
tags
+         If the image length as stored in the file is some bogus integer then
+         adding it to the current byte readers position can overflow and 
wrongly
+         have the check for enough available data succeed.
+         This then later can cause NULL pointer dereferences or out of bounds
+         reads/writes when actually reading the image data.
+         Fixes ZDI-CAN-20775
+         Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2661
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4897>
+
+2023-06-19 15:11:30 +0200  François Laignel <franc...@centricular.com>
+
+       * gst/isomp4/qtdemux.c:
+       * gst/isomp4/qtdemux_dump.c:
+       * gst/isomp4/qtdemux_dump.h:
+       * gst/isomp4/qtdemux_types.c:
+         qtdemux: parse Opus and dOps as qtdemux nodes and add size checks
+         This allows checking the nodes conformity and dumping parsed values.
+         Note: Audio Sample Entry version parsing and offset handling is 
handled as part
+         of `FOURCC_soun` common processing and in `qtdemux_parse_node`.
+         Also, only read `stream_count` and `coupled_count` when
+         `channel_mapping_family` != 0. See:
+         https://opus-codec.org/docs/opus_in_isobmff.html#4.3.2
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4891>
+
+2023-06-16 10:29:28 +0200  François Laignel <franc...@centricular.com>
+
+       * gst/isomp4/qtdemux.c:
+         qtdemux: fix byte order for opus extension and version field type
+         The "Encapsulation of Opus in ISO Base Media File Format" [1] 
specifications,
+         § 4.3.2 Opus Specific Box, indicates that data must be stored as 
big-endian.
+         [1] https://opus-codec.org/docs/opus_in_isobmff.html#4.3.2
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4891>
+
+2023-06-16 10:02:16 +0200  François Laignel <franc...@centricular.com>
+
+       * gst/isomp4/atoms.c:
+         qtmux: fix byte order for opus extension
+         The "Encapsulation of Opus in ISO Base Media File Format" [1] 
specifications,
+         § 4.3.2 Opus Specific Box, indicates that data must be stored as 
big-endian.
+         In `build_opus_extension`, `gst_byte_writer_put*_le ()` variants were 
used,
+         causing audio streams conversion to Opus in mp4 to offset samples due 
to the
+         PreSkip field incorrect value (29ms early in our test cases).
+         [1] https://opus-codec.org/docs/opus_in_isobmff.html#4.3.2
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4891>
+
+2023-05-30 15:10:11 +0200  Jan Alexander Steffens (heftig) 
<jan.steff...@ltnglobal.com>
+
+       * gst/isomp4/gstqtmux.c:
+       * gst/isomp4/qtdemux.c:
+         isomp4: Fix (E)AC-3 channel count handling
+         The muxer used a fixed value of 2 channels because the TR 102 366 spec
+         says they're to be ignored. However, the demuxer still trusted them,
+         resulting in bad caps.
+         Make the muxer fill in the correct channel count anyway (FFmpeg 
already
+         does) and make the demuxer ignore the value.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4773>
+
+2023-04-20 17:31:32 -0400  Daniel Morin <daniel.mo...@collabora.com>
+
+       * sys/v4l2/gstv4l2bufferpool.c:
+       * sys/v4l2/gstv4l2object.c:
+       * sys/v4l2/gstv4l2object.h:
+         v4l2src: fix support for bayer format
+         - Define a new function that identify if the v4l2object is raw based
+         on pixel format
+         - Only consider setting delta flag on buffer if the video is not raw.
+         Sponsored by Living Optics Ltd.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4867>
+
+2023-06-12 19:24:15 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * tests/check/elements/rtpbin_buffer_list.c:
+         tests: rtpbin_buffer_list: fix possible unaligned read on 32-bit ARM
+         Fixes #2666
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4855>
+
+2023-05-30 17:52:34 +0900  ekwange <ekwa...@gmail.com>
+
+       * sys/v4l2/v4l2_calls.c:
+         v4l2: Change to query only up to 
V4L2_CID_PRIVATE_BASE+V4L2_CID_MAX_CTRLS
+         Fix to prevent infinite querying.
+         There are devices that exceed V4L2_CID_PRIVATE_BASE+V4L2_CID_MAX_CTRLS
+         but do not return EINVAL.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4851>
+
+2023-06-05 07:29:57 +0200  Jochen Henneberg <j...@henneberg-systemdesign.com>
+
+       * gst/rtsp/gstrtspsrc.c:
+         rtspsrc: Cleanup code for next pending command
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4799>
+
+2023-06-05 06:50:55 +0200  Jochen Henneberg <j...@henneberg-systemdesign.com>
+
+       * gst/rtsp/gstrtspsrc.c:
+         rtspsrc: Do not try send dropped get/set parameter
+         If the set_get_param_q has been emptied we have to reset the cached
+         pending command to CMD_LOOP as we will not have the request parameters
+         anymore.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4799>
+
+2023-06-06 09:24:37 +0800  Hou Qi <qi....@nxp.com>
+
+       * sys/v4l2/gstv4l2videodec.c:
+         v4l2videodec: treat MPEG 1 format as MPEG 2
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4787>
+
+2023-05-18 14:23:49 +0530  Nirbheek Chauhan <nirbh...@centricular.com>
+
+       * ext/qt6/gstqt6glutility.cc:
+       * ext/qt6/meson.build:
+         meson: Support building qml6glsink on win32
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4762>
+
+2023-05-03 21:05:54 +0530  Nirbheek Chauhan <nirbh...@centricular.com>
+
+       * ext/qt/meson.build:
+       * ext/qt6/meson.build:
+       * meson_options.txt:
+         meson: Add more qt options and eliminate all automagic
+         The qt5 and qt6 plugins will now correctly error out if you enable the
+         option, and you can also now explicitly ensure that wayland, x11,
+         eglfs support is actually functional by enabling the options. It was
+         too easy to build non-functional support for these.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4776>
+
+2023-01-11 01:11:06 +0530  Nirbheek Chauhan <nirbh...@centricular.com>
+
+       * ext/qt/meson.build:
+         meson: Add build_rpath for qt5 plugin on macOS
+         Without this, the plugin cannot be loaded in a devenv because the
+         RPATH is not added to the plugin dylib. This RPATH will be stripped on
+         install, which is what we want.
+         When deploying apps, people are supposed to use `macdeployqt` to
+         create an AppBundle that bundles Qt for you and sets the RPATHs
+         correctly to point to that bundled Qt.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4776>
+
+2023-06-01 16:21:47 +0200  Piotr Brzeziński <pi...@centricular.com>
+
+       * ext/libpng/gstpngdec.c:
+         pngdec: Fix 16bit RGB images display
+         Due to the alpha value being inserted with _BEFORE, we were ending up
+         with ARGB instead of RGBA, thus displaying completely wrong colours.
+         According to libpng's manual, "to add an opaque alpha channel, use 
filler=0xff
+         or 0xffff and PNG_FILLER_AFTER which will generate RGBA pixels".
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4759>
+
+2023-05-29 17:01:01 +1000  Matthew Waters <matt...@centricular.com>
+
+       * ext/qt/qtglrenderer.cc:
+         qt/glrenderer: don't attempt to use QWindow from non-Qt main thread
+         Use QObject::deleteLater() to schedule deletion in the main thread.
+         Remove the moveToThread of the QWindow.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4744>
+
+2023-05-24 16:17:46 +0200  Michael Olbrich <m.olbr...@pengutronix.de>
+
+       * gst/flv/gstflvmux.c:
+         flvmux: use the correct timestamp to calculate wait times
+         Since c0bf793c05cf793aa18a8548cda702625e388115 ("flvmux: Set PTS 
based on
+         running time") the timestamp of the output buffer is already in 
running
+         time. So using that for 'srcpad->segment.position' does not work 
correctly
+         because gst_aggregator_simple_get_next_time() will convert it again 
with
+         gst_segment_to_running_time().
+         This means that the timestamp returned by
+         gst_aggregator_simple_get_next_time() may be incorrect. For example, 
if
+         flvmux is added to a already runinng pipeline then the timestamp is 
too
+         small and gst_aggregator_wait_and_check() returns immediately. As a 
result,
+         buffers may be muxed in the wrong order.
+         To fix this, use the PTS of the incoming buffer instead of the 
outgoing
+         buffer. Also add the duration as get_next_time() is supposed to 
return the
+         timestamp of the next buffer, not the current one.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4734>
+
+2020-08-31 16:38:48 +0200  Michael Olbrich <m.olbr...@pengutronix.de>
+
+       * ext/jpeg/gstjpegdec.c:
+         jpegdec: be stricter when detecting interlaced video
+         There are broken(?) mjpeg videos that are incorrectly detected as
+         interlaced. This happens because 'info.height > height' (e.g. 1088 > 
1080).
+         In the interlaced case info.height is approximately 'height * 2' but 
not
+         exactly because height is a multiple of DCTSIZE. Make the check more
+         restrictive but take the rounding effect into account.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4717>
+
+2020-08-31 16:12:33 +0200  Michael Olbrich <m.olbr...@pengutronix.de>
+
+       * ext/jpeg/gstjpegdec.c:
+         jpegdec: decode the correct number of lines for interlaced frames
+         For interlaced jpeg, gst_jpeg_dec_decode_direct() is called twice, 
once for each
+         field. In this case, stride[n] is plane_stride[n] * 2 to ensure that 
only every
+         other line is written. So the loop must stop at height / num_fields.
+         If the frame is really interlaced then continuing beyound this, is 
not harmful,
+         because jpeg_read_raw_data() will do nothing and return 0, so am info 
message is
+         printed.
+         However, if the frame is not actually interlaced, just misdetected as 
interlaced
+         then there is still data available from the second half of the frame. 
Now
+         line[0][j] is set to the scratch buffer. If the scratch buffer is not 
allocated
+         (because the height is a multiple of v_samp[0] * DCTSIZE) then the 
result is a
+         segfault due to a null-pointer dereference.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4717>
+
+2023-05-05 15:12:46 +0800  YURI FEDOSEEV <yuri.fedos...@helixleisure.com>
+
+       * sys/v4l2/gstv4l2videoenc.c:
+         v4l2videoenc: support force keyframe event in v4l2 encoder
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4702>
+
+2023-05-19 12:36:19 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * docs/gst_plugins_cache.json:
+       * meson.build:
+         Back to development
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4679>
+
 === release 1.22.3 ===
 
 2023-05-19 09:23:19 +0100  Tim-Philipp Müller <t...@centricular.com>
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-good-1.22.3/NEWS new/gst-plugins-good-1.22.4/NEWS
--- old/gst-plugins-good-1.22.3/NEWS    2023-05-19 10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/NEWS    2023-06-20 18:42:25.000000000 +0200
@@ -2,13 +2,13 @@
 
 GStreamer 1.22.0 was originally released on 23 January 2023.
 
-The latest bug-fix release in the stable 1.22 series is 1.22.3 and was
-released on 19 May 2023.
+The latest bug-fix release in the stable 1.22 series is 1.22.4 and was
+released on 20 June 2023.
 
 See https://gstreamer.freedesktop.org/releases/1.22/ for the latest
 version of this document.
 
-Last updated: Friday 19 May 2023, 01:00 UTC (log)
+Last updated: Tuesday 20 June 2023, 16:30 UTC (log)
 
 Introduction
 
@@ -1831,6 +1831,183 @@
 -   List of Merge Requests applied in 1.22.3
 -   List of Issues fixed in 1.22.3
 
+1.22.4
+
+The fourth 1.22 bug-fix release (1.22.4) was released on 20 June 2023.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.4
+
+-   Security fixes for flacparse, dvdspu, and subparse
+-   d3d11videosink: Fix error on pause and play
+-   decklink: Correctly handle SDK strings on macOS and free strings
+    after usage on Linux
+-   filesink: Fix buffered mode writing of buffer lists and buffers with
+    multiple memories
+-   gldownload: handle passthrough without a critical
+-   h265parse: Fix framerate handling regression
+-   oggdemux: vp8 fixes
+-   mp4mux, qtmux, qtdemux: Opus audio mapping fixes
+-   pngdec: Fix wrong colours output from 16bit RGB images
+-   ptp clock: Work around ptpd bug in default configuration
+-   srtpdec: fix critical warnings on shutdown
+-   v4l2src: fix support for bayer format
+-   v4l2videoenc: support force-keyframe event in v4l2 encoder
+-   vtenc: apply DTS offset to ensure DTS <= PTS
+-   gst-python: allow more functions to be called before gst_init()
+-   cerbero: fix vaapi variant; add qt6 build on windows; ensure errors
+    on unguarded use of new APIs, require macOS 10.13
+-   packages: ship codecalpha, rtponvif, dvbsubenc, switchbin,
+    videosignal plugins; fix pango crash on 32-bit windows
+-   various bug fixes, memory leak fixes, and other stability and
+    reliability improvements
+
+gstreamer
+
+-   filesink: Fix buffered mode writing of buffer lists and buffers with
+    multiple memories
+-   basesink: Clear EOS flag on STREAM-START event
+-   typefindhelper: downgrade bogus error level debug log message
+-   ptp: Correctly parse clock ID from the commandline parameters in the
+    helper
+-   ptp: Work around bug in ptpd in default configuration
+
+gst-plugins-base
+
+-   alsasink: Fix stall for transition from PAUSED to READY with USB
+    speakerphone.
+-   appsink: unref buffer in prev sample early so buffers from v4l2 can
+    be released properly
+-   basetextoverlay: Fix typo in “text-y” property description
+-   gldownload: handle passthrough without a critical
+-   glfilter: add parent meta to output buffer for input buffer
+-   oggdemux: vp8: Push headers downstream and detect keyframe packets
+-   opus: Fix potential crash when getting unexpected channel position
+-   streamsynchronizer: reset eos on STREAM_START
+-   subparse: Look for the closing > of a tag after the opening <
+-   video: convertframe: Add D3D11 specific conversion path
+-   videometa: Only validate the alignment only when it contains some
+    info
+-   video-blend: Fix linking error with C++
+
+gst-plugins-good
+
+-   flacparse: Avoid integer overflow in available data check for image
+    tags
+-   flvmux: use the correct timestamp to calculate wait times
+-   isomp4: Fix (E)AC-3 channel count handling
+-   jpegdec: fixes related to interlaced jpeg
+-   pngdec: Fix wrong colours output from 16bit RGB images
+-   qtmux, qtdemux: fix byte order for opus extension
+-   rtspsrc: Do not try send dropped get/set parameter
+-   qt5, qt6: Add more meson options and eliminate all automagic
+-   qt: glrenderer: don’t attempt to use QWindow from non-Qt main thread
+-   qml6glsink: Support building on win32
+-   v4l2src: fix support for bayer format
+-   v4l2: Change to query only up to
+    V4L2_CID_PRIVATE_BASE+V4L2_CID_MAX_CTRLS
+-   v4l2videodec: treat MPEG-1 format as MPEG-2
+-   v4l2videoenc: support force keyframe event in v4l2 encoder
+-   tests: rtpbin_buffer_list: fix possible unaligned write/read on
+    32-bit ARM
+
+gst-plugins-bad
+
+-   asfmux: fix possible unaligned write on 32-bit ARM
+-   d3d11videosink: Fix error on pause and play
+-   d3dvideosink: Fix navigation event leak
+-   decklink: Correctly handle SDK strings on macOS and free strings
+    after usage on Linux
+-   dvdspu: Make sure enough data is allocated for the available data
+-   fdkaacdec: Support up to 5 rear channels
+-   h265parse: Fix framerate handling
+-   kmssink: Add STM32 LTDC and NXP i.MX8M Plus LCDIFv3 auto-detection
+-   sdpdemux: ensure that only one srcpad is created per stream
+-   srtpdec: fix critical warnings on shutdown
+-   testsrcbin: Remove spurious caps unref
+-   va: map the mbbrc to correct enum value in get_property()
+-   vtenc: apply DTS offset to ensure DTS <= PTS
+-   vtdec: time glitches on h264 playback
+-   waylandsink: Emit “map” signal boarder surface is ready
+
+gst-plugins-ugly
+
+-   No changes
+
+gst-libav
+
+-   No changes
+
+gst-rtsp-server
+
+-   No changes
+
+gstreamer-vaapi
+
+-   vaapidecodebin: don’t load vaapipostproc if not available
+
+gstreamer-sharp
+
+-   No changes
+
+gst-omx
+
+-   No changes
+
+gst-python
+
+-   python: More functions can be called before gst_init()
+
+gst-editing-services
+
+-   ges: launcher: Never put sinks in a GstPipeline
+
+gst-validate + gst-integration-testsuites
+
+-   No changes
+
+gst-examples
+
+-   No changes
+
+Development build environment
+
+-   No changes
+
+Cerbero build tool and packaging changes in 1.22.4
+
+-   Ship codecalpha, rtponvif, dvbsubenc, switchbin, videosignal plugins
+-   pango: Fix crash on Windows 32bit build
+-   qml6: Add support for building the qml6 plugin on Windows and bump
+    meson to 1.1.1
+-   vaapi: update vaapi variant/recipe for meson option changes
+-   packages: Put libass in the same category as assrender
+-   cerbero: Don’t extract if already extracted in fetch
+-   darwin: Ensure errors on unguarded use of new APIs, require macOS
+    10.13
+
+Contributors to 1.22.4
+
+Andoni Morales Alastruey, Arun Raghavan, Colin Kinloch, Daniel Morin,
+Edward Hervey, ekwange, Elliot Chen, François Laignel, Guillaume
+Desmottes, Haihua Hu, He Junyan, Hou Qi, Jan Alexander Steffens
+(heftig), Jochen Henneberg, Jordan Petridis, Kevin Song, Maksym
+Khomenko, Marek Vasut, Mathieu Duponchelle, Matthew Waters,
+Mengkejiergeli Ba, Michael Olbrich, Nicolas Beland, Nicolas Dufresne,
+Nirbheek Chauhan, Philippe Normand, Piotr Brzeziński, Sebastian Dröge,
+Seungha Yang, Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez
+Leal, William Manley, Xavier Claessens, Yuri Fedoseev,
+
+… 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.22.4
+
+-   List of Merge Requests applied in 1.22.4
+-   List of Issues fixed in 1.22.4
+
 Schedule for 1.24
 
 Our next major feature release will be 1.24, and 1.23 will be the
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-good-1.22.3/RELEASE new/gst-plugins-good-1.22.4/RELEASE
--- old/gst-plugins-good-1.22.3/RELEASE 2023-05-19 10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/RELEASE 2023-06-20 18:42:25.000000000 +0200
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-good 1.22.3.
+This is GStreamer gst-plugins-good 1.22.4.
 
 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-good-1.22.3/docs/gst_plugins_cache.json 
new/gst-plugins-good-1.22.4/docs/gst_plugins_cache.json
--- old/gst-plugins-good-1.22.3/docs/gst_plugins_cache.json     2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/docs/gst_plugins_cache.json     2023-06-20 
18:42:25.000000000 +0200
@@ -7027,7 +7027,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer 1.22.3 FLV muxer",
+                        "default": "GStreamer 1.22.4 FLV muxer",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -7039,7 +7039,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer 1.22.3 FLV muxer",
+                        "default": "GStreamer 1.22.4 FLV muxer",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -21257,7 +21257,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer/1.22.3",
+                        "default": "GStreamer/1.22.4",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -21816,7 +21816,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer 1.22.3",
+                        "default": "GStreamer 1.22.4",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -23253,7 +23253,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer souphttpsrc 1.22.3 ",
+                        "default": "GStreamer souphttpsrc 1.22.4 ",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
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-good-1.22.3/ext/adaptivedemux2/gstadaptivedemux.c 
new/gst-plugins-good-1.22.4/ext/adaptivedemux2/gstadaptivedemux.c
--- old/gst-plugins-good-1.22.3/ext/adaptivedemux2/gstadaptivedemux.c   
2023-05-19 10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/adaptivedemux2/gstadaptivedemux.c   
2023-06-20 18:42:25.000000000 +0200
@@ -954,11 +954,12 @@
     GST_DEBUG_OBJECT (demux, "Fetched manifest at URI: %s (base: %s)",
         demux->manifest_uri, GST_STR_NULL (demux->manifest_base_uri));
 
-    if (!g_str_has_prefix (demux->manifest_uri, "http://";)
+    if (!g_str_has_prefix (demux->manifest_uri, "data:")
+        && !g_str_has_prefix (demux->manifest_uri, "http://";)
         && !g_str_has_prefix (demux->manifest_uri, "https://";)) {
       GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
           (_("Invalid manifest URI")),
-          ("Manifest URI needs to use either http:// or https://";));
+          ("Manifest URI needs to use either data:, http:// or https://";));
       ret = FALSE;
       goto unlock_out;
     }
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-good-1.22.3/ext/jpeg/gstjpegdec.c 
new/gst-plugins-good-1.22.4/ext/jpeg/gstjpegdec.c
--- old/gst-plugins-good-1.22.3/ext/jpeg/gstjpegdec.c   2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/jpeg/gstjpegdec.c   2023-06-20 
18:42:25.000000000 +0200
@@ -880,7 +880,7 @@
   gint lines, v_samp[3];
   guchar *base[3], *last[3];
   gint stride[3];
-  guint height, field_height;
+  guint field_height;
 
   line[0] = y;
   line[1] = u;
@@ -893,7 +893,7 @@
   if (G_UNLIKELY (v_samp[0] > 2 || v_samp[1] > 2 || v_samp[2] > 2))
     goto format_not_supported;
 
-  height = field_height = GST_VIDEO_FRAME_HEIGHT (frame);
+  field_height = GST_VIDEO_FRAME_HEIGHT (frame);
 
   /* XXX: division by 2 here might not be a good idea yes. But we are doing 
this
    * already in gst_jpeg_dec_handle_frame() for interlaced jpeg */
@@ -943,7 +943,7 @@
   } else
 #endif
   {
-    for (i = 0; i < height; i += v_samp[0] * DCTSIZE) {
+    for (i = 0; i < field_height; i += v_samp[0] * DCTSIZE) {
       for (j = 0; j < (v_samp[0] * DCTSIZE); ++j) {
         /* Y */
         line[0][j] = base[0] + (i + j) * stride[0];
@@ -1406,8 +1406,8 @@
   /* is it interlaced MJPEG? (we really don't want to scan the jpeg data
    * to see if there are two SOF markers in the packet to detect this) */
   if (gst_video_decoder_get_packetized (bdec) &&
-      dec->input_state &&
-      dec->input_state->info.height > height &&
+      dec->input_state && height > DCTSIZE &&
+      dec->input_state->info.height > (2 * (height - DCTSIZE)) &&
       dec->input_state->info.height <= (height * 2)
       && dec->input_state->info.width == width) {
     GST_LOG_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-good-1.22.3/ext/libpng/gstpngdec.c 
new/gst-plugins-good-1.22.4/ext/libpng/gstpngdec.c
--- old/gst-plugins-good-1.22.3/ext/libpng/gstpngdec.c  2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/libpng/gstpngdec.c  2023-06-20 
18:42:25.000000000 +0200
@@ -250,7 +250,7 @@
 
   /* Add alpha channel if 16-bit depth, but not for GRAY images */
   if ((bpc > 8) && (color_type != PNG_COLOR_TYPE_GRAY)) {
-    png_set_add_alpha (pngdec->png, 0xffff, PNG_FILLER_BEFORE);
+    png_set_add_alpha (pngdec->png, 0xffff, PNG_FILLER_AFTER);
     png_set_swap (pngdec->png);
   }
 #if 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-good-1.22.3/ext/qt/meson.build 
new/gst-plugins-good-1.22.4/ext/qt/meson.build
--- old/gst-plugins-good-1.22.3/ext/qt/meson.build      2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/qt/meson.build      2023-06-20 
18:42:25.000000000 +0200
@@ -22,6 +22,9 @@
 # deciding whether to build the qt5 examples
 qt5qml_dep = dependency('', required: false)
 qt5_option = get_option('qt5')
+qt5_egl = get_option('qt-egl')
+qt5_wayland = get_option('qt-wayland')
+qt5_x11 = get_option('qt-x11')
 qt5_method = get_option('qt-method')
 
 if qt5_option.disabled()
@@ -68,18 +71,23 @@
 # Look for the QPA platform native interface header
 qpa_header_path = join_paths(qt5qml_dep.version(), 'QtGui')
 qpa_header = join_paths(qpa_header_path, 'qpa/qplatformnativeinterface.h')
-if cxx.has_header(qpa_header, dependencies : qt5qml_dep)
+need_qpa_include = qt5_option.enabled() and (host_system == 'android' or 
qt5_wayland.enabled())
+if cxx.has_header(qpa_header, dependencies : qt5qml_dep, required: 
need_qpa_include)
   qt_defines += '-DHAVE_QT_QPA_HEADER'
   qt_defines += '-DQT_QPA_HEADER=' + '<@0@>'.format(qpa_header)
   have_qpa_include = true
   message('Found QtGui QPA header in ' + qpa_header_path)
 endif
 
-# Try to come up with all the platform/winsys combinations that will work
+## Try to come up with all the platform/winsys combinations that will work
 
-if gst_gl_have_window_x11 and gst_gl_have_platform_glx
-  # FIXME: automagic
-  qt5x11extras = dependency('qt5', modules : ['X11Extras'], method: 
qt5_method, required : false)
+# X11 windowing
+qt5_x11 = qt5_x11 \
+    .require(gstglx11_dep.found(), error_message: 'gstreamer-gl-x11-1.0 is 
required') \
+    .require(gst_gl_have_window_x11, error_message: 'x11 windowing support in 
gstreamer-gl is required') \
+    .require(gst_gl_have_platform_glx, error_message: 'glx platform support in 
gstreamer-gl is required')
+if qt5_x11.allowed()
+  qt5x11extras = dependency('qt5', modules : ['X11Extras'], method: 
qt5_method, required: qt5_x11)
   if qt5x11extras.found()
     optional_deps += [qt5x11extras, gstglx11_dep]
     qt_defines += ['-DHAVE_QT_X11']
@@ -87,70 +95,105 @@
   endif
 endif
 
-if gst_gl_have_platform_egl
-  # Embedded linux (e.g. i.MX6) with or without windowing support
+# Wayland windowing
+qt5_wayland = qt5_wayland \
+    .require(gstglwayland_dep.found(), error_message: 
'gstreamer-gl-wayland-1.0 is required') \
+    .require(gst_gl_have_window_wayland, error_message: 'wayland windowing 
support in gstreamer-gl is required') \
+    .require(gst_gl_have_platform_egl, error_message: 'egl platform support in 
gstreamer-gl is required') \
+    .require(have_qpa_include, error_message: 'QPA platform native interface 
header is required')
+if qt5_wayland.allowed()
+  qt5waylandextras = dependency('qt5', modules : ['WaylandClient'], method: 
qt5_method, required: qt5_wayland)
+  if qt5waylandextras.found()
+    optional_deps += [qt5waylandextras, gstglwayland_dep]
+    qt_defines += ['-DHAVE_QT_WAYLAND']
+    have_qt_windowing = true
+  endif
+endif
+
+# EGL windowing for Embedded linux (e.g. i.MX6) with or without windowing
+# support
+qt5_egl = qt5_egl \
+    .require(host_system == 'linux') \
+    .require(gstglegl_dep.found(), error_message: 'gstreamer-gl-egl-1.0 is 
required') \
+    .require(gst_gl_have_platform_egl, error_message: 'egl platform support in 
gstreamer-gl is required')
+if qt5_egl.allowed()
   qt_defines += ['-DHAVE_QT_EGLFS']
   optional_deps += gstglegl_dep
   have_qt_windowing = true
-  if have_qpa_include
-    # Wayland windowing
-    if gst_gl_have_window_wayland
-      # FIXME: automagic
-      qt5waylandextras = dependency('qt5', modules : ['WaylandClient'], 
method: qt5_method, required : false)
-      if qt5waylandextras.found()
-        optional_deps += [qt5waylandextras, gstglwayland_dep]
-        qt_defines += ['-DHAVE_QT_WAYLAND']
-        have_qt_windowing = true
-      endif
-    endif
-    # Android windowing
-    if gst_gl_have_window_android
-      # FIXME: automagic
-      qt5androidextras = dependency('qt5', modules : ['AndroidExtras'], 
method: qt5_method, required : false)
-      # for gl functions in QtGui/qopenglfunctions.h
-      # FIXME: automagic
-      glesv2_dep = cc.find_library('GLESv2', required : false)
-      if glesv2_dep.found() and qt5androidextras.found()
-        optional_deps += [qt5androidextras, glesv2_dep]
-        qt_defines += ['-DHAVE_QT_ANDROID']
-        have_qt_windowing = true
-        # Needed for C++11 support in Cerbero. People building with Android
-        # in some other way need to add the necessary bits themselves.
-        optional_deps += dependency('gnustl', required : false)
-      endif
+endif
+
+# Android windowing
+if host_system == 'android'
+  qt5_android = qt5_option \
+      .require(gst_gl_have_window_android, error_message: 'android windowing 
support in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_egl, error_message: 'egl platform support 
in gstreamer-gl is required')
+  if gst_gl_have_window_android
+    qt5androidextras = dependency('qt5', modules : ['AndroidExtras'], method: 
qt5_method, required : qt5_android)
+    # for gl functions in QtGui/qopenglfunctions.h
+    glesv2_dep = cc.find_library('GLESv2', required : qt5_android)
+    if glesv2_dep.found() and qt5androidextras.found()
+      optional_deps += [qt5androidextras, glesv2_dep]
+      qt_defines += ['-DHAVE_QT_ANDROID']
+      have_qt_windowing = true
+      # Needed for C++11 support in Cerbero. People building with Android
+      # in some other way need to add the necessary bits themselves.
+      optional_deps += dependency('gnustl', required : false)
     endif
   endif
 endif
 
-if gst_gl_have_platform_wgl and gst_gl_have_window_win32
-  # for wglMakeCurrent()
-  # FIXME: automagic
-  opengl32_dep = cc.find_library('opengl32', required : false)
-  if opengl32_dep.found()
-    qt_defines += ['-DHAVE_QT_WIN32']
-    optional_deps += opengl32_dep
-    have_qt_windowing = true
+# Win32 windowing
+if host_system == 'windows'
+  qt5_win32 = qt5_option \
+      .require(gst_gl_have_window_win32, error_message: 'win32 windowing 
support in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_wgl, error_message: 'wgl platform support 
in gstreamer-gl is required')
+  if qt5_win32.allowed()
+    # for wglMakeCurrent()
+    opengl32_dep = cc.find_library('opengl32', required : qt5_win32)
+    if opengl32_dep.found()
+      qt_defines += ['-DHAVE_QT_WIN32']
+      optional_deps += opengl32_dep
+      have_qt_windowing = true
+    endif
   endif
 endif
 
-if gst_gl_have_window_cocoa and gst_gl_have_platform_cgl
-  # FIXME: automagic
-  qt5macextras = dependency('qt5', modules : ['MacExtras'], method: 
qt5_method, required : false)
-  if qt5macextras.found()
-    qt_defines += ['-DHAVE_QT_MAC']
-    optional_deps += qt5macextras
-    have_qt_windowing = true
+# macOS windowing
+if host_system == 'darwin'
+  qt5_macos = qt5_option \
+      .require(gst_gl_have_window_cocoa, error_message: 'cocoa windowing 
support in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_cgl, error_message: 'cgl platform support 
in gstreamer-gl is required')
+  if qt5_macos.allowed()
+    qt5macextras = dependency('qt5', modules : ['MacExtras'], method: 
qt5_method, required : qt5_macos)
+    if qt5macextras.found()
+      qt_defines += ['-DHAVE_QT_MAC']
+      optional_deps += qt5macextras
+      have_qt_windowing = true
+    endif
   endif
 endif
 
-if gst_gl_have_window_eagl and gst_gl_have_platform_eagl
-  if host_machine.system() == 'ios'
+# iOS windowing
+if host_system == 'ios'
+  qt5_ios = qt5_option \
+      .require(gst_gl_have_window_eagl, error_message: 'eagl windowing support 
in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_eagl, error_message: 'eagl platform 
support in gstreamer-gl is required')
+  if qt5_ios.allowed()
     qt_defines += ['-DHAVE_QT_IOS']
     have_qt_windowing = true
   endif
 endif
 
-if have_qt_windowing
+if qt5_option.require(have_qt_windowing).allowed()
+  # rpath is needed to be able to load the plugin on macOS inside the devenv
+  qmlgl_kwargs = {}
+  if host_system == 'darwin'
+    fs = import('fs')
+    qt_bindir = fs.parent(find_program('qmake').full_path())
+    qt_libdir = fs.parent(qt_bindir) / 'lib'
+    qmlgl_kwargs += {'build_rpath': qt_libdir}
+  endif
+
   # Build it!
   moc_files = qt5_mod.preprocess(moc_headers : moc_headers)
   gstqmlgl = library('gstqmlgl', sources, moc_files,
@@ -159,6 +202,7 @@
     include_directories: [configinc, libsinc],
     dependencies : [gst_dep, gstvideo_dep, gstgl_dep, gstglproto_dep, 
qt5qml_dep, optional_deps],
     override_options : ['cpp_std=c++11'],
+    kwargs: qmlgl_kwargs,
     install: true,
     install_dir : plugins_install_dir)
   plugins += [gstqmlgl]
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-good-1.22.3/ext/qt/qtglrenderer.cc 
new/gst-plugins-good-1.22.4/ext/qt/qtglrenderer.cc
--- old/gst-plugins-good-1.22.3/ext/qt/qtglrenderer.cc  2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/qt/qtglrenderer.cc  2023-06-20 
18:42:25.000000000 +0200
@@ -152,7 +152,7 @@
     delete data->m_context;
   data->m_context = nullptr;
   if (data->m_surface)
-    delete data->m_surface;
+    data->m_surface->deleteLater();
   data->m_surface = nullptr;
 }
 
@@ -281,7 +281,6 @@
         g_mutex_lock (&m_sharedRenderData->lock);
         m_sharedRenderData->m_surface = new GstBackingSurface;
         m_sharedRenderData->m_surface->create();
-        m_sharedRenderData->m_surface->moveToThread 
(m_sharedRenderData->m_renderThread);
         GST_TRACE ("%p created surface %p", m_sharedRenderData,
             m_sharedRenderData->m_surface);
         g_cond_broadcast (&m_sharedRenderData->cond);
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-good-1.22.3/ext/qt6/gstqt6glutility.cc 
new/gst-plugins-good-1.22.4/ext/qt6/gstqt6glutility.cc
--- old/gst-plugins-good-1.22.3/ext/qt6/gstqt6glutility.cc      2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/qt6/gstqt6glutility.cc      2023-06-20 
18:42:25.000000000 +0200
@@ -254,7 +254,6 @@
     gst_gl_display_filter_gl_api (display, gst_gl_context_get_gl_api 
(*wrap_glcontext));
     gst_gl_context_activate (*wrap_glcontext, FALSE);
   }
-#if 0
 #if GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined 
(HAVE_QT_WIN32)
   g_return_val_if_fail (context != NULL, FALSE);
 
@@ -289,7 +288,6 @@
 
   } G_STMT_END;
 #endif
-#endif
   return TRUE;
 }
 #if 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-good-1.22.3/ext/qt6/meson.build 
new/gst-plugins-good-1.22.4/ext/qt6/meson.build
--- old/gst-plugins-good-1.22.3/ext/qt6/meson.build     2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/ext/qt6/meson.build     2023-06-20 
18:42:25.000000000 +0200
@@ -14,6 +14,9 @@
 
 qt6qml_dep = dependency('', required: false)
 qt6_option = get_option('qt6')
+qt6_egl = get_option('qt-egl')
+qt6_wayland = get_option('qt-wayland')
+qt6_x11 = get_option('qt-x11')
 qt6_method = get_option('qt-method')
 
 if qt6_option.disabled()
@@ -53,83 +56,94 @@
 # Look for the QPA platform native interface header
 qpa_header_path = join_paths(qt6qml_dep.version(), 'QtGui')
 qpa_header = join_paths(qpa_header_path, 'qpa/qplatformnativeinterface.h')
-if cxx.has_header(qpa_header, dependencies : qt6qml_dep)
+need_qpa_include = qt6_option.enabled() and (host_system == 'android' or 
qt6_wayland.enabled())
+if cxx.has_header(qpa_header, dependencies : qt6qml_dep, required: 
need_qpa_include)
   qt_defines += '-DHAVE_QT_QPA_HEADER'
   qt_defines += '-DQT_QPA_HEADER=' + '<@0@>'.format(qpa_header)
   have_qpa_include = true
   message('Found QtGui QPA header in ' + qpa_header_path)
 endif
 
-# Try to come up with all the platform/winsys combinations that will work
+## Try to come up with all the platform/winsys combinations that will work
 
-if gst_gl_have_window_x11 and gst_gl_have_platform_glx
-  # FIXME: automagic
+# X11 windowing
+qt6_x11 = qt6_x11 \
+    .require(gstglx11_dep.found(), error_message: 'gstreamer-gl-x11-1.0 is 
required') \
+    .require(gst_gl_have_window_x11, error_message: 'x11 windowing support in 
gstreamer-gl is required') \
+    .require(gst_gl_have_platform_glx, error_message: 'glx platform support in 
gstreamer-gl is required')
+if qt6_x11.allowed()
   qt_defines += ['-DHAVE_QT_X11']
   have_qt_windowing = true
 endif
 
-if gst_gl_have_platform_egl
-  # Embedded linux (e.g. i.MX6) with or without windowing support
+# Wayland windowing
+qt6_wayland = qt6_wayland \
+    .require(gstglwayland_dep.found(), error_message: 
'gstreamer-gl-wayland-1.0 is required') \
+    .require(gst_gl_have_window_wayland, error_message: 'wayland windowing 
support in gstreamer-gl is required') \
+    .require(gst_gl_have_platform_egl, error_message: 'egl platform support in 
gstreamer-gl is required') \
+    .require(have_qpa_include, error_message: 'QPA platform native interface 
header is required')
+if qt6_wayland.allowed()
+  qt6waylandextras = dependency('qt6', modules : ['WaylandClient'], method: 
qt6_method, required: qt6_wayland)
+  if qt6waylandextras.found()
+    optional_deps += [qt6waylandextras, gstglwayland_dep]
+    qt_defines += ['-DHAVE_QT_WAYLAND']
+    have_qt_windowing = true
+  endif
+endif
+
+# EGL windowing for Embedded linux (e.g. i.MX6) with or without windowing
+# support
+qt6_egl = qt6_egl \
+    .require(host_system == 'linux') \
+    .require(gstglegl_dep.found(), error_message: 'gstreamer-gl-egl-1.0 is 
required') \
+    .require(gst_gl_have_platform_egl, error_message: 'egl platform support in 
gstreamer-gl is required')
+if qt6_egl.allowed()
   qt_defines += ['-DHAVE_QT_EGLFS']
   optional_deps += gstglegl_dep
   have_qt_windowing = true
-  if have_qpa_include
-    # Wayland windowing
-    if gst_gl_have_window_wayland
-      # FIXME: automagic
-      qt6waylandextras = dependency('qt6', modules : ['WaylandClient'], 
method: qt6_method, required : false)
-      if qt6waylandextras.found()
-        optional_deps += [qt6waylandextras, gstglwayland_dep]
-        qt_defines += ['-DHAVE_QT_WAYLAND']
-        have_qt_windowing = true
-      endif
+endif
+
+# TODO: Android windowing
+
+# Win32 windowing
+if host_system == 'windows'
+  qt6_win32 = qt6_option \
+      .require(gst_gl_have_window_win32, error_message: 'win32 windowing 
support in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_wgl, error_message: 'wgl platform support 
in gstreamer-gl is required')
+  if qt6_win32.allowed()
+    # for wglMakeCurrent()
+    opengl32_dep = cc.find_library('opengl32', required : qt6_win32)
+    if opengl32_dep.found()
+      qt_defines += ['-DHAVE_QT_WIN32']
+      optional_deps += opengl32_dep
+      have_qt_windowing = true
     endif
-    # Android windowing
-#    if gst_gl_have_window_android
-      # FIXME: automagic
-#      qt5androidextras = dependency('qt5', modules : ['AndroidExtras'], 
method: qt6_method, required : false)
-      # for gl functions in QtGui/qopenglfunctions.h
-      # FIXME: automagic
-#      glesv2_dep = cc.find_library('GLESv2', required : false)
-#      if glesv2_dep.found() and qt5androidextras.found()
-#        optional_deps += [qt5androidextras, glesv2_dep]
-#        qt_defines += ['-DHAVE_QT_ANDROID']
-#        have_qt_windowing = true
-        # Needed for C++11 support in Cerbero. People building with Android
-        # in some other way need to add the necessary bits themselves.
-#        optional_deps += dependency('gnustl', required : false)
-#      endif
-#    endif
   endif
 endif
 
-#if gst_gl_have_platform_wgl and gst_gl_have_window_win32
-  # for wglMakeCurrent()
-  # FIXME: automagic
-#  opengl32_dep = cc.find_library('opengl32', required : false)
-#  if opengl32_dep.found()
-#    qt_defines += ['-DHAVE_QT_WIN32']
-#    optional_deps += opengl32_dep
-#    have_qt_windowing = true
-#  endif
-#endif
-
-if gst_gl_have_window_cocoa and gst_gl_have_platform_cgl
-  # FIXME: automagic
-  if host_machine.system() == 'darwin'
+# macOS windowing
+if host_system == 'darwin'
+  qt6_macos = qt6_option \
+      .require(gst_gl_have_window_cocoa, error_message: 'cocoa windowing 
support in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_cgl, error_message: 'cgl platform support 
in gstreamer-gl is required')
+  if qt6_macos.allowed()
     qt_defines += ['-DHAVE_QT_MAC']
     have_qt_windowing = true
   endif
 endif
 
-if gst_gl_have_window_eagl and gst_gl_have_platform_eagl
-  if host_machine.system() == 'ios'
+# iOS windowing
+if host_system == 'ios'
+  qt6_ios = qt6_option \
+      .require(gst_gl_have_window_eagl, error_message: 'eagl windowing support 
in gstreamer-gl is required') \
+      .require(gst_gl_have_platform_eagl, error_message: 'eagl platform 
support in gstreamer-gl is required')
+  if qt6_ios.allowed()
     qt_defines += ['-DHAVE_QT_IOS']
     have_qt_windowing = true
   endif
 endif
 
-if have_qt_windowing
+if qt6_option.require(have_qt_windowing).allowed()
   # Build it!
   moc_files = qt6_mod.preprocess(moc_headers : moc_headers)
   gstqml6gl = library('gstqml6', sources, moc_files,
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-good-1.22.3/gst/audioparsers/gstflacparse.c 
new/gst-plugins-good-1.22.4/gst/audioparsers/gstflacparse.c
--- old/gst-plugins-good-1.22.3/gst/audioparsers/gstflacparse.c 2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/audioparsers/gstflacparse.c 2023-06-20 
18:42:25.000000000 +0200
@@ -1111,6 +1111,7 @@
   GstMapInfo map;
   guint32 img_len = 0, img_type = 0;
   guint32 img_mimetype_len = 0, img_description_len = 0;
+  const guint8 *img_data;
 
   gst_buffer_map (buffer, &map, GST_MAP_READ);
   gst_byte_reader_init (&reader, map.data, map.size);
@@ -1137,7 +1138,7 @@
   if (!gst_byte_reader_get_uint32_be (&reader, &img_len))
     goto error;
 
-  if (gst_byte_reader_get_pos (&reader) + img_len > map.size)
+  if (!gst_byte_reader_get_data (&reader, img_len, &img_data))
     goto error;
 
   GST_INFO_OBJECT (flacparse, "Got image of %d bytes", img_len);
@@ -1146,8 +1147,7 @@
     if (flacparse->tags == NULL)
       flacparse->tags = gst_tag_list_new_empty ();
 
-    gst_tag_list_add_id3_image (flacparse->tags,
-        map.data + gst_byte_reader_get_pos (&reader), img_len, img_type);
+    gst_tag_list_add_id3_image (flacparse->tags, img_data, img_len, img_type);
   }
 
   gst_buffer_unmap (buffer, &map);
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-good-1.22.3/gst/flv/gstflvmux.c 
new/gst-plugins-good-1.22.4/gst/flv/gstflvmux.c
--- old/gst-plugins-good-1.22.3/gst/flv/gstflvmux.c     2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/flv/gstflvmux.c     2023-06-20 
18:42:25.000000000 +0200
@@ -801,12 +801,6 @@
 static GstFlowReturn
 gst_flv_mux_push (GstFlvMux * mux, GstBuffer * buffer)
 {
-  GstAggregator *agg = GST_AGGREGATOR (mux);
-  GstAggregatorPad *srcpad = GST_AGGREGATOR_PAD (agg->srcpad);
-
-  if (GST_BUFFER_PTS_IS_VALID (buffer))
-    srcpad->segment.position = GST_BUFFER_PTS (buffer);
-
   /* pushing the buffer that rewrites the header will make it no longer be the
    * total output size in bytes, but it doesn't matter at that point */
   mux->byte_count += gst_buffer_get_size (buffer);
@@ -1660,6 +1654,8 @@
 {
   GstBuffer *tag;
   GstFlowReturn ret;
+  GstClockTime pts = GST_BUFFER_PTS (buffer);
+  GstClockTime duration = GST_BUFFER_DURATION (buffer);
   GstClockTime dts =
       gst_flv_mux_segment_to_running_time (&GST_AGGREGATOR_PAD (pad)->segment,
       GST_BUFFER_DTS (buffer));
@@ -1678,6 +1674,14 @@
   if (ret == GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (dts))
     pad->last_timestamp = dts;
 
+  if (ret == GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (pts)) {
+    GstAggregator *agg = GST_AGGREGATOR (mux);
+    GstAggregatorPad *srcpad = GST_AGGREGATOR_PAD (agg->srcpad);
+    srcpad->segment.position = pts;
+    if (GST_CLOCK_TIME_IS_VALID (duration))
+      srcpad->segment.position += duration;
+  }
+
   return 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-good-1.22.3/gst/isomp4/atoms.c 
new/gst-plugins-good-1.22.4/gst/isomp4/atoms.c
--- old/gst-plugins-good-1.22.3/gst/isomp4/atoms.c      2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/isomp4/atoms.c      2023-06-20 
18:42:25.000000000 +0200
@@ -5706,9 +5706,9 @@
   gst_byte_writer_init (&bw);
   hdl &= gst_byte_writer_put_uint8 (&bw, 0x00); /* version number */
   hdl &= gst_byte_writer_put_uint8 (&bw, channels);
-  hdl &= gst_byte_writer_put_uint16_le (&bw, pre_skip);
-  hdl &= gst_byte_writer_put_uint32_le (&bw, rate);
-  hdl &= gst_byte_writer_put_uint16_le (&bw, output_gain);
+  hdl &= gst_byte_writer_put_uint16_be (&bw, pre_skip);
+  hdl &= gst_byte_writer_put_uint32_be (&bw, rate);
+  hdl &= gst_byte_writer_put_uint16_be (&bw, output_gain);
   hdl &= gst_byte_writer_put_uint8 (&bw, mapping_family);
   if (mapping_family > 0) {
     hdl &= gst_byte_writer_put_uint8 (&bw, stream_count);
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-good-1.22.3/gst/isomp4/gstqtmux.c 
new/gst-plugins-good-1.22.4/gst/isomp4/gstqtmux.c
--- old/gst-plugins-good-1.22.3/gst/isomp4/gstqtmux.c   2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/isomp4/gstqtmux.c   2023-06-20 
18:42:25.000000000 +0200
@@ -6087,9 +6087,9 @@
   } else if (strcmp (mimetype, "audio/x-ac3") == 0) {
     entry.fourcc = FOURCC_ac_3;
 
-    /* Fixed values according to TS 102 366 but it also mentions that
-     * they should be ignored */
-    entry.channels = 2;
+    /* TS 102 366 mentions that these fields should be ignored,
+     * but be friendly and fill in the channel count like FFmpeg does */
+    entry.channels = channels;
     entry.sample_size = 16;
 
     /* AC-3 needs an extension atom but its data can only be obtained from
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-good-1.22.3/gst/isomp4/qtdemux.c 
new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux.c
--- old/gst-plugins-good-1.22.3/gst/isomp4/qtdemux.c    2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux.c    2023-06-20 
18:42:25.000000000 +0200
@@ -8301,6 +8301,7 @@
       case FOURCC_alac:
       case FOURCC_fLaC:
       case FOURCC_aavd:
+      case FOURCC_opus:
       {
         guint32 version;
         guint32 offset;
@@ -8312,6 +8313,8 @@
           min_size = 20;
         else if (fourcc == FOURCC_fLaC)
           min_size = 86;
+        else if (fourcc == FOURCC_opus)
+          min_size = 55;
         else
           min_size = 40;
 
@@ -12647,6 +12650,16 @@
           entry->bytes_per_packet = entry->bytes_per_sample;
           break;
         }
+
+          /* According to TS 102 366, the channel count in
+           * a (E)AC3SampleEntry box is to be ignored */
+        case 0x20736d:
+        case GST_MAKE_FOURCC ('e', 'c', '-', '3'):
+        case GST_MAKE_FOURCC ('s', 'a', 'c', '3'):     // Nero Recode
+        case FOURCC_ac_3:
+          entry->n_channels = 0;
+          break;
+
         default:
           break;
       }
@@ -12873,34 +12886,95 @@
         }
         case FOURCC_opus:
         {
-          const guint8 *dops_data;
           guint8 *channel_mapping = NULL;
-          guint32 rate;
-          guint8 channels;
+          guint32 dops_len, rate;
+          guint8 n_channels;
           guint8 channel_mapping_family;
           guint8 stream_count;
           guint8 coupled_count;
           guint8 i;
 
-          version = GST_READ_UINT16_BE (stsd_entry_data + 16);
-          if (version == 1)
-            dops_data = stsd_entry_data + 51;
-          else
-            dops_data = stsd_entry_data + 35;
-
-          channels = GST_READ_UINT8 (dops_data + 10);
-          rate = GST_READ_UINT32_LE (dops_data + 13);
-          channel_mapping_family = GST_READ_UINT8 (dops_data + 19);
-          stream_count = GST_READ_UINT8 (dops_data + 20);
-          coupled_count = GST_READ_UINT8 (dops_data + 21);
-
-          if (channels > 0) {
-            channel_mapping = g_malloc (channels * sizeof (guint8));
-            for (i = 0; i < channels; i++)
-              channel_mapping[i] = GST_READ_UINT8 (dops_data + i + 22);
+          GNode *opus;
+          GNode *dops;
+
+          opus = qtdemux_tree_get_child_by_type (stsd, FOURCC_opus);
+          if (opus == NULL) {
+            GST_WARNING_OBJECT (qtdemux, "Opus Sample Entry not found");
+            goto corrupt_file;
+          }
+
+          dops = qtdemux_tree_get_child_by_type (opus, FOURCC_dops);
+          if (dops == NULL) {
+            GST_WARNING_OBJECT (qtdemux, "Opus Specific Box not found");
+            goto corrupt_file;
+          }
+
+          /* Opus Specific Box content:
+           * 4 bytes: length
+           * 4 bytes: "dOps"
+           * 1 byte: Version;
+           * 1 byte: OutputChannelCount;
+           * 2 bytes: PreSkip (big-endians);
+           * 4 bytes: InputSampleRate (big-endians);
+           * 2 bytes: OutputGain (big-endians);
+           * 1 byte: ChannelMappingFamily;
+           * if (ChannelMappingFamily != 0) {
+           *   1 byte: StreamCount;
+           *   1 byte: CoupledCount;
+           *   for (OutputChannel in 0..OutputChannelCount) {
+           *     1 byte: ChannelMapping;
+           *   }
+           * }
+           */
+
+          dops_len = QT_UINT32 ((guint8 *) dops->data);
+          if (len < offset + dops_len) {
+            GST_WARNING_OBJECT (qtdemux,
+                "Opus Sample Entry has bogus size %" G_GUINT32_FORMAT, len);
+            goto corrupt_file;
+          }
+          if (dops_len < 19) {
+            GST_WARNING_OBJECT (qtdemux,
+                "Opus Specific Box has bogus size %" G_GUINT32_FORMAT,
+                dops_len);
+            goto corrupt_file;
+          }
+
+          n_channels = GST_READ_UINT8 ((guint8 *) dops->data + 9);
+          rate = GST_READ_UINT32_BE ((guint8 *) dops->data + 12);
+          channel_mapping_family = GST_READ_UINT8 ((guint8 *) dops->data + 18);
+
+          if (channel_mapping_family != 0) {
+            if (dops_len < 21 + n_channels) {
+              GST_WARNING_OBJECT (qtdemux,
+                  "Opus Specific Box has bogus size %" G_GUINT32_FORMAT,
+                  dops_len);
+              goto corrupt_file;
+            }
+
+            stream_count = GST_READ_UINT8 ((guint8 *) dops->data + 19);
+            coupled_count = GST_READ_UINT8 ((guint8 *) dops->data + 20);
+
+            if (n_channels > 0) {
+              channel_mapping = g_malloc (n_channels * sizeof (guint8));
+              for (i = 0; i < n_channels; i++)
+                channel_mapping[i] =
+                    GST_READ_UINT8 ((guint8 *) dops->data + i + 21);
+            }
+          } else if (n_channels == 1) {
+            stream_count = 1;
+            coupled_count = 0;
+          } else if (n_channels == 2) {
+            stream_count = 1;
+            coupled_count = 1;
+          } else {
+            GST_WARNING_OBJECT (qtdemux,
+                "Opus unexpected nb of channels %d without channel mapping",
+                n_channels);
+            goto corrupt_file;
           }
 
-          entry->caps = gst_codec_utils_opus_create_caps (rate, channels,
+          entry->caps = gst_codec_utils_opus_create_caps (rate, n_channels,
               channel_mapping_family, stream_count, coupled_count,
               channel_mapping);
           g_free (channel_mapping);
@@ -13256,6 +13330,7 @@
             }
             break;
           }
+          case FOURCC_opus:
           case FOURCC_lpcm:
           case FOURCC_in24:
           case FOURCC_in32:
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-good-1.22.3/gst/isomp4/qtdemux_dump.c 
new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux_dump.c
--- old/gst-plugins-good-1.22.3/gst/isomp4/qtdemux_dump.c       2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux_dump.c       2023-06-20 
18:42:25.000000000 +0200
@@ -1054,6 +1054,88 @@
 }
 
 gboolean
+qtdemux_dump_opus (GstQTDemux * qtdemux, GstByteReader * data, int depth)
+{
+  guint16 version, data_ref_id, n_channels, sample_size;
+  guint32 sample_rate;
+
+  if (!gst_byte_reader_skip (data, 6) ||
+      !gst_byte_reader_get_uint16_be (data, &data_ref_id) ||
+      !gst_byte_reader_get_uint16_be (data, &version) ||
+      !gst_byte_reader_skip (data, 6) ||
+      !gst_byte_reader_get_uint16_be (data, &n_channels) ||
+      !gst_byte_reader_get_uint16_be (data, &sample_size) ||
+      !gst_byte_reader_skip (data, 4) ||
+      !gst_byte_reader_get_uint32_be (data, &sample_rate))
+    return FALSE;
+
+  GST_LOG ("%*s  data reference: %d", depth, "", data_ref_id);
+  GST_LOG ("%*s  version:        %d", depth, "", version);
+  GST_LOG ("%*s  channel count:  %d", depth, "", n_channels);
+  GST_LOG ("%*s  sample size:    %d", depth, "", sample_size);
+  GST_LOG ("%*s  sample rate:    %d", depth, "", sample_rate >> 16);
+
+  return TRUE;
+}
+
+gboolean
+qtdemux_dump_dops (GstQTDemux * qtdemux, GstByteReader * data, int depth)
+{
+  guint8 version, n_channels, channel_mapping_family;
+  guint8 stream_count = 1, coupled_count = 0, i = 0;
+  guint8 *channel_mapping = NULL;
+  guint16 pre_skip, output_gain;
+  guint32 sample_rate;
+
+  if (!gst_byte_reader_get_uint8 (data, &version) ||
+      !gst_byte_reader_get_uint8 (data, &n_channels) ||
+      !gst_byte_reader_get_uint16_be (data, &pre_skip) ||
+      !gst_byte_reader_get_uint32_be (data, &sample_rate) ||
+      !gst_byte_reader_get_uint16_be (data, &output_gain) ||
+      !gst_byte_reader_get_uint8 (data, &channel_mapping_family))
+    return FALSE;
+
+  if (channel_mapping_family != 0) {
+    if (!gst_byte_reader_get_uint8 (data, &stream_count) ||
+        !gst_byte_reader_get_uint8 (data, &coupled_count))
+      return FALSE;
+
+    if (n_channels > 0) {
+      channel_mapping = g_malloc (n_channels * sizeof (guint8));
+
+      for (i = 0; i < n_channels; i++)
+        if (!gst_byte_reader_get_uint8 (data, &channel_mapping[i])) {
+          g_free (channel_mapping);
+          return FALSE;
+        }
+    }
+  }
+
+  GST_LOG ("%*s  version:                %d", depth, "", version);
+  GST_LOG ("%*s  channel count:          %d", depth, "", n_channels);
+  GST_LOG ("%*s  pre skip:               %d", depth, "", pre_skip);
+  GST_LOG ("%*s  sample rate:            %d", depth, "", sample_rate);
+  GST_LOG ("%*s  output gain:            %d", depth, "", output_gain);
+  GST_LOG ("%*s  channel mapping family: %d", depth, "",
+      channel_mapping_family);
+
+  if (channel_mapping_family != 0) {
+    GST_LOG ("%*s  stream count:           %d", depth, "", stream_count);
+    GST_LOG ("%*s  coupled count:          %d", depth, "", coupled_count);
+
+    if (n_channels > 0) {
+      for (i = 0; i < n_channels; i++)
+        GST_LOG ("%*s  channel mapping: %d -> %d", depth, "", i,
+            channel_mapping[i]);
+
+      g_free (channel_mapping);
+    }
+  }
+
+  return TRUE;
+}
+
+gboolean
 qtdemux_dump_gmin (GstQTDemux * qtdemux, GstByteReader * data, int depth)
 {
   guint32 ver_flags;
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-good-1.22.3/gst/isomp4/qtdemux_dump.h 
new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux_dump.h
--- old/gst-plugins-good-1.22.3/gst/isomp4/qtdemux_dump.h       2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux_dump.h       2023-06-20 
18:42:25.000000000 +0200
@@ -89,6 +89,10 @@
     int depth);
 gboolean qtdemux_dump_fLaC (GstQTDemux * qtdemux, GstByteReader * data,
     int depth);
+gboolean qtdemux_dump_opus (GstQTDemux * qtdemux, GstByteReader * data,
+    int depth);
+gboolean qtdemux_dump_dops (GstQTDemux * qtdemux, GstByteReader * data,
+    int depth);
 gboolean qtdemux_dump_gmin (GstQTDemux * qtdemux, GstByteReader * data,
     int depth);
 
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-good-1.22.3/gst/isomp4/qtdemux_types.c 
new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux_types.c
--- old/gst-plugins-good-1.22.3/gst/isomp4/qtdemux_types.c      2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/isomp4/qtdemux_types.c      2023-06-20 
18:42:25.000000000 +0200
@@ -97,6 +97,8 @@
   {FOURCC_alac, "alac", 0,},
   {FOURCC_fLaC, "fLaC", 0, qtdemux_dump_fLaC},
   {FOURCC_dfLa, "dfLa", 0, qtdemux_dump_dfLa},
+  {FOURCC_opus, "opus", 0, qtdemux_dump_opus},
+  {FOURCC_dops, "dOps", 0, qtdemux_dump_dops},
   {FOURCC_wave, "wave", QT_FLAG_CONTAINER},
   {FOURCC_appl, "appl", QT_FLAG_CONTAINER},
   {FOURCC_cfhd, "cfhd", QT_FLAG_CONTAINER},
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-good-1.22.3/gst/rtsp/gstrtspsrc.c 
new/gst-plugins-good-1.22.4/gst/rtsp/gstrtspsrc.c
--- old/gst-plugins-good-1.22.3/gst/rtsp/gstrtspsrc.c   2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst/rtsp/gstrtspsrc.c   2023-06-20 
18:42:25.000000000 +0200
@@ -9341,21 +9341,33 @@
 
   GST_OBJECT_LOCK (src);
   cmd = src->pending_cmd;
-  if (cmd == CMD_RECONNECT || cmd == CMD_PLAY || cmd == CMD_PAUSE
-      || cmd == CMD_LOOP || cmd == CMD_OPEN || cmd == CMD_GET_PARAMETER
-      || cmd == CMD_SET_PARAMETER) {
-    if (g_queue_is_empty (&src->set_get_param_q)) {
-      src->pending_cmd = CMD_LOOP;
-    } else {
-      ParameterRequest *next_req;
-      if (cmd == CMD_GET_PARAMETER || cmd == CMD_SET_PARAMETER) {
-        req = g_queue_pop_head (&src->set_get_param_q);
+
+  switch (cmd) {
+    case CMD_CLOSE:
+      src->pending_cmd = CMD_WAIT;
+      break;
+    case CMD_GET_PARAMETER:
+    case CMD_SET_PARAMETER:
+      req = g_queue_pop_head (&src->set_get_param_q);
+      if (!req)
+        cmd = CMD_LOOP;
+      /* fall through */
+    case CMD_OPEN:
+    case CMD_PLAY:
+    case CMD_PAUSE:
+    case CMD_LOOP:
+    case CMD_RECONNECT:
+      if (g_queue_is_empty (&src->set_get_param_q)) {
+        src->pending_cmd = CMD_LOOP;
+      } else {
+        ParameterRequest *next_req;
+        next_req = g_queue_peek_head (&src->set_get_param_q);
+        src->pending_cmd = next_req->cmd;
       }
-      next_req = g_queue_peek_head (&src->set_get_param_q);
-      src->pending_cmd = next_req ? next_req->cmd : CMD_LOOP;
-    }
-  } else
-    src->pending_cmd = CMD_WAIT;
+      break;
+    default:
+      break;
+  }
   GST_DEBUG_OBJECT (src, "got command %s", cmd_to_string (cmd));
 
   /* we got the message command, so ensure communication is possible again */
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-good-1.22.3/gst-plugins-good.doap 
new/gst-plugins-good-1.22.4/gst-plugins-good.doap
--- old/gst-plugins-good-1.22.3/gst-plugins-good.doap   2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/gst-plugins-good.doap   2023-06-20 
18:42:25.000000000 +0200
@@ -34,6 +34,16 @@
 
  <release>
   <Version>
+   <revision>1.22.4</revision>
+   <branch>1.22</branch>
+   <name></name>
+   <created>2023-06-20</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.22.4.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.22.3</revision>
    <branch>1.22</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-good-1.22.3/meson.build new/gst-plugins-good-1.22.4/meson.build
--- old/gst-plugins-good-1.22.3/meson.build     2023-05-19 10:23:19.000000000 
+0200
+++ new/gst-plugins-good-1.22.4/meson.build     2023-06-20 18:42:25.000000000 
+0200
@@ -1,5 +1,5 @@
 project('gst-plugins-good', 'c',
-  version : '1.22.3',
+  version : '1.22.4',
   meson_version : '>= 0.62',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])
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-good-1.22.3/meson_options.txt 
new/gst-plugins-good-1.22.4/meson_options.txt
--- old/gst-plugins-good-1.22.3/meson_options.txt       2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/meson_options.txt       2023-06-20 
18:42:25.000000000 +0200
@@ -87,6 +87,9 @@
 # Qt plugin options
 option('qt-method', type: 'combo', value: 'auto', choices: ['auto', 
'pkg-config', 'qmake'],
        description: 'Method to use to find Qt')
+option('qt-egl', type: 'feature', value: 'auto', description: 'EGLFS support 
in the Qt plugins')
+option('qt-wayland', type: 'feature', value: 'auto', description: 'Wayland 
support in the Qt plugins')
+option('qt-x11', type: 'feature', value: 'auto', description: 'Wayland support 
in the Qt plugins')
 option('qt5', type : 'feature', value : 'auto', yield : true, description : 
'Qt5 QML video sink plugin')
 option('qt6', type : 'feature', value : 'auto', yield : true, description : 
'Qt6 QML video sink plugin')
 
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-good-1.22.3/sys/v4l2/gstv4l2bufferpool.c 
new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2bufferpool.c
--- old/gst-plugins-good-1.22.3/sys/v4l2/gstv4l2bufferpool.c    2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2bufferpool.c    2023-06-20 
18:42:25.000000000 +0200
@@ -1378,7 +1378,7 @@
       break;
   }
 
-  if (GST_VIDEO_INFO_FORMAT (&obj->info) == GST_VIDEO_FORMAT_ENCODED) {
+  if (!gst_v4l2_object_is_raw (obj)) {
     if ((group->buffer.flags & V4L2_BUF_FLAG_KEYFRAME) ||
         GST_V4L2_PIXELFORMAT (obj) == V4L2_PIX_FMT_MJPEG ||
         GST_V4L2_PIXELFORMAT (obj) == V4L2_PIX_FMT_JPEG ||
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-good-1.22.3/sys/v4l2/gstv4l2object.c 
new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2object.c
--- old/gst-plugins-good-1.22.3/sys/v4l2/gstv4l2object.c        2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2object.c        2023-06-20 
18:42:25.000000000 +0200
@@ -1668,6 +1668,22 @@
   return template;
 }
 
+gboolean
+gst_v4l2_object_is_raw (GstV4l2Object * v4l2object)
+{
+  gint i;
+
+  if (GST_VIDEO_INFO_FORMAT (&v4l2object->info) != GST_VIDEO_FORMAT_ENCODED)
+    return TRUE;
+
+  for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
+    if (gst_v4l2_formats[i].format == GST_V4L2_PIXELFORMAT (v4l2object)) {
+      return ! !(gst_v4l2_formats[i].flags & GST_V4L2_RAW);
+    }
+  }
+  return FALSE;
+}
+
 /* Add an 'alternate' variant of the caps with the feature */
 static void
 add_alternate_variant (GstV4l2Object * v4l2object, GstCaps * caps,
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-good-1.22.3/sys/v4l2/gstv4l2object.h 
new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2object.h
--- old/gst-plugins-good-1.22.3/sys/v4l2/gstv4l2object.h        2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2object.h        2023-06-20 
18:42:25.000000000 +0200
@@ -320,6 +320,8 @@
 GstFlowReturn  gst_v4l2_object_poll (GstV4l2Object * v4l2object, GstClockTime 
timeout);
 gboolean       gst_v4l2_object_subscribe_event (GstV4l2Object * v4l2object, 
guint32 event);
 
+gboolean     gst_v4l2_object_is_raw (GstV4l2Object * obj);
+
 /* crop / compose */
 gboolean     gst_v4l2_object_set_crop (GstV4l2Object * obj, struct v4l2_rect 
*result);
 gboolean     gst_v4l2_object_get_crop_bounds (GstV4l2Object * obj, struct 
v4l2_rect *bounds);
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-good-1.22.3/sys/v4l2/gstv4l2videodec.c 
new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2videodec.c
--- old/gst-plugins-good-1.22.3/sys/v4l2/gstv4l2videodec.c      2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2videodec.c      2023-06-20 
18:42:25.000000000 +0200
@@ -1384,12 +1384,20 @@
     gint mpegversion = 0;
     gst_structure_get_int (s, "mpegversion", &mpegversion);
 
-    if (mpegversion == 2) {
-      SET_META ("MPEG2");
-      cdata->codec = gst_v4l2_mpeg2_get_codec ();
-    } else {
-      SET_META ("MPEG4");
-      cdata->codec = gst_v4l2_mpeg4_get_codec ();
+    switch (mpegversion) {
+        /* MPEG 2 decoders supports MPEG 1 format */
+      case 1:
+      case 2:
+        SET_META ("MPEG2");
+        cdata->codec = gst_v4l2_mpeg2_get_codec ();
+        break;
+      case 4:
+        SET_META ("MPEG4");
+        cdata->codec = gst_v4l2_mpeg4_get_codec ();
+        break;
+      default:
+        g_warning ("Unsupported MPEG Video version %i", mpegversion);
+        break;
     }
   } else if (gst_structure_has_name (s, "video/x-h263")) {
     SET_META ("H263");
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-good-1.22.3/sys/v4l2/gstv4l2videoenc.c 
new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2videoenc.c
--- old/gst-plugins-good-1.22.3/sys/v4l2/gstv4l2videoenc.c      2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/sys/v4l2/gstv4l2videoenc.c      2023-06-20 
18:42:25.000000000 +0200
@@ -817,6 +817,17 @@
   }
 
   if (frame->input_buffer) {
+    /* Process force keyframe event if it was passed */
+    if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) {
+      struct v4l2_control ctrl = { V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME, 1 };
+      if (self->v4l2output->ioctl (self->v4l2output->video_fd, VIDIOC_S_CTRL,
+              &ctrl) < 0)
+        GST_ELEMENT_WARNING (self, RESOURCE, FAILED,
+            (_("Failed to force keyframe.")),
+            ("VIDIOC_S_CTRL (V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME) failed: %s 
(%d)",
+                g_strerror (errno), errno));
+    }
+
     GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
     GST_LOG_OBJECT (encoder, "Passing buffer with frame number %u",
         frame->system_frame_number);
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-good-1.22.3/sys/v4l2/v4l2_calls.c 
new/gst-plugins-good-1.22.4/sys/v4l2/v4l2_calls.c
--- old/gst-plugins-good-1.22.3/sys/v4l2/v4l2_calls.c   2023-05-19 
10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/sys/v4l2/v4l2_calls.c   2023-06-20 
18:42:25.000000000 +0200
@@ -307,6 +307,10 @@
       } else {
         GST_WARNING_OBJECT (e, "Failed querying control %d on device '%s'. "
             "(%d - %s)", n, v4l2object->videodev, errno, strerror (errno));
+        if (n > (V4L2_CID_PRIVATE_BASE + V4L2_CID_MAX_CTRLS)) {
+          GST_DEBUG_OBJECT (e, "Finish control by reaching 
V4L2_CID_MAX_CTRLS");
+          break;
+        }
         continue;
       }
     }
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-good-1.22.3/tests/check/elements/rtpbin_buffer_list.c 
new/gst-plugins-good-1.22.4/tests/check/elements/rtpbin_buffer_list.c
--- old/gst-plugins-good-1.22.3/tests/check/elements/rtpbin_buffer_list.c       
2023-05-19 10:23:19.000000000 +0200
+++ new/gst-plugins-good-1.22.4/tests/check/elements/rtpbin_buffer_list.c       
2023-06-20 18:42:25.000000000 +0200
@@ -25,6 +25,12 @@
 #include <gst/rtp/gstrtpbuffer.h>
 #include <gst/rtp/gstrtcpbuffer.h>
 
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+#define READ_UINT64(mem) GST_READ_UINT64_BE(mem)
+#else
+#define READ_UINT64(mem) GST_READ_UINT64_LE(mem)
+#endif
+
 /* UDP/IP is assumed for bandwidth calculation */
 #define UDP_IP_HEADER_OVERHEAD 28
 
@@ -236,8 +242,8 @@
    * most likely be changed in gstrtpbin.
    */
   fail_unless (info.data != NULL);
-  fail_unless_equals_uint64 (*(guint64 *) info.data,
-      *(guint64 *) rtp_header[index]);
+  fail_unless_equals_uint64 (READ_UINT64 (info.data),
+      READ_UINT64 (rtp_header[index]));
   fail_unless (*(guint16 *) (info.data + 12) ==
       *(guint16 *) (rtp_header[index] + 12));
 

++++++ reduce-required-meson.patch ++++++
--- /var/tmp/diff_new_pack.4WFZas/_old  2023-07-01 23:17:28.818054952 +0200
+++ /var/tmp/diff_new_pack.4WFZas/_new  2023-07-01 23:17:28.822054976 +0200
@@ -1,10 +1,10 @@
-Index: gst-plugins-good-1.22.3/meson.build
+Index: gst-plugins-good-1.22.4/meson.build
 ===================================================================
---- gst-plugins-good-1.22.3.orig/meson.build
-+++ gst-plugins-good-1.22.3/meson.build
+--- gst-plugins-good-1.22.4.orig/meson.build
++++ gst-plugins-good-1.22.4/meson.build
 @@ -1,6 +1,6 @@
  project('gst-plugins-good', 'c',
-   version : '1.22.3',
+   version : '1.22.4',
 -  meson_version : '>= 0.62',
 +  meson_version : '>= 0.61',
    default_options : [ 'warning_level=1',

Reply via email to