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 2024-01-05 21:40:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-good"

Fri Jan  5 21:40:06 2024 rev:99 rq:1136821 version:1.22.8

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes
    2023-11-17 20:49:08.760276336 +0100
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.28375/gstreamer-plugins-good.changes
 2024-01-05 21:40:15.139733011 +0100
@@ -1,0 +2,19 @@
+Thu Jan  4 07:54:19 UTC 2024 - Antonio Larrosa <alarr...@suse.com>
+
+- Update to version 1.22.8:
+  + dcaparse: keep upstream buffer meta
+  + rtpklvdepay: Recover after invalid fragmented KLV unit
+  + matroska-demux: fix accumulated base offset in segment seeks
+  + qtdemux: fix bug report URL
+  + qtdemux: Don't overflow sample index
+  + qtdemux: Fix reverse playback for pcm audio stream
+  + qtdemux: Ignore raw audio streams when adjusting seek
+  + qtdemux: Under-seeking to a key unit in certain (encoded by
+    Adobe products) ProRes movies (macOS x86_64 & arm64,
+    Windows x86_64, ...)
+  + rtpac3depay: should output audio/x-ac3 not audio/ac3
+  + rtp: Fix incorrect RTP channel order lookup by name
+  + v4l2bufferpool: add lock as atomic operation for seek
+- Rebase reduce-required-meson.patch
+
+-------------------------------------------------------------------

Old:
----
  gst-plugins-good-1.22.7.tar.xz

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

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

Other differences:
------------------
++++++ gstreamer-plugins-good.spec ++++++
--- /var/tmp/diff_new_pack.rLwqqu/_old  2024-01-05 21:40:15.987764019 +0100
+++ /var/tmp/diff_new_pack.rLwqqu/_new  2024-01-05 21:40:15.987764019 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package gstreamer-plugins-good
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -26,7 +26,7 @@
 %define gst_branch 1.0
 
 Name:           gstreamer-plugins-good
-Version:        1.22.7
+Version:        1.22.8
 Release:        0
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        LGPL-2.1-or-later

++++++ gst-plugins-good-1.22.7.tar.xz -> gst-plugins-good-1.22.8.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/ChangeLog 
new/gst-plugins-good-1.22.8/ChangeLog
--- old/gst-plugins-good-1.22.7/ChangeLog       2023-11-13 12:07:52.976034200 
+0100
+++ new/gst-plugins-good-1.22.8/ChangeLog       2023-12-18 13:13:04.650869600 
+0100
@@ -1,3 +1,125 @@
+=== release 1.22.8 ===
+
+2023-12-18 12:09:37 +0000  Tim-Philipp Müller <t...@centricular.com>
+
+       * NEWS:
+       * RELEASE:
+       * docs/gst_plugins_cache.json:
+       * gst-plugins-good.doap:
+       * meson.build:
+         Release 1.22.8
+
+2023-12-15 15:19:35 -0500  Arun Raghavan <a...@asymptotic.io>
+
+       * gst/rtp/gstrtpchannels.c:
+         rtp: Fix incorrect RTP channel order lookup by name
+         The g_ascii_strcasecmp() logic is inverted, since it returns 0 on 
equality.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5817>
+
+2023-04-29 16:20:13 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * gst/matroska/matroska-demux.c:
+       * tests/check/elements/matroskademux.c:
+         matroska-demux: fix accumulated base offset in segment seeks
+         When doing a segment seek, the base offset in the new segment
+         would be increased by segment.position which is basically the
+         timestamp of the last packet. This does not include the duration
+         of the last packet though, so might be slightly shorter than the
+         actual duration of the clip or the requested segment.
+         Increase the base offset by the segment duration instead when
+         accumulating segments, which is more correct as it doesn't cut
+         off the last frame and makes the effective loop segment duration
+         consistent with the actual duration returned from a duration
+         query.
+         In case a segment stop was specified it's also possible that
+         some data was sent beyond the stop that's necessary for decoding
+         so the base offset increment should be based on that then and
+         not on the timestamp of the last buffer pushed out.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5787>
+
+2023-12-05 09:25:22 +0100  Guillaume Desmottes 
<guillaume.desmot...@onestream.live>
+
+       * gst/isomp4/qtdemux_tags.c:
+       * meson.build:
+         qtdemux: fix bug report URL
+         Using PACKAGE_BUGREPORT as in other modules.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5786>
+
+2023-12-01 14:51:49 +0900  Hosang Lee <hosang10....@lge.com>
+
+       * gst/isomp4/qtdemux.c:
+         qtdemux: Don't overflow sample index
+         Don't reduce sample index if it is already at 0.
+         Assigning -1 to a guint32 variable causes unexpected behavior.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5751>
+
+2023-12-01 15:05:41 +0900  Hosang Lee <hosang10....@lge.com>
+
+       * gst/isomp4/qtdemux.c:
+         qtdemux: Fix reverse playback for pcm audio stream
+         Some raw lpcm or adpcm may have larger sample sizes than the max
+         buffer size value set.
+         Trimming the buffer causes bogus size error on reverse playback.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5745>
+
+2023-04-21 09:58:36 +0800  jeri.li <jeri...@mediatek.com>
+
+       * sys/v4l2/gstv4l2bufferpool.c:
+         v4l2bufferpool: add lock as atomic operation for seek
+         When seek flush, gst v4l2 buffer pool flush is not atomic which will
+         lead double enqueue buffer (qbuf) issue, and v4l2 buffer pool qbuf is
+         also not atomic which will lead no free buffer found in the pool.
+         1. add lock for calculate enqueue number in streamon function
+         2. add lock for v4l2 capture end streamoff in pool flush function
+         3. lock the whole funciton of v4l2 buffer pool qbuf, then the buffer
+         pool index and qbuf operation are atomic
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5695>
+
+2023-06-07 14:38:18 +0200  Robin Gustavsson <robin.gustavs...@spiideo.com>
+
+       * gst/rtp/gstrtpklvdepay.c:
+       * tests/check/elements/rtp-payloading.c:
+         rtpklvdepay: Recover after invalid fragmented KLV unit
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5686>
+
+2023-06-29 15:20:29 +0200  Piotr Brzeziński <pi...@centricular.com>
+
+       * gst/isomp4/qtdemux.c:
+         qtdemux: Ignore raw audio streams when adjusting seek
+         Because we treat raw audio chunks/samples as keyframes, they were 
interfering
+         with seek time adjustment.
+         Became apparent when the accompanying video stream was I-frame only,
+         for example ProRes.
+         Since raw audio streams can be seeked freely, it's fine to just 
ignore them here,
+         giving priority to the real keyframes in the video stream.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5674>
+
+2023-10-12 17:23:00 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * docs/gst_plugins_cache.json:
+       * gst/rtp/gstrtpac3depay.c:
+         rtpac3depay: should output audio/x-ac3 not audio/ac3
+         audio/x-ac3 is the canonical media format in GStreamer.
+         audio/ac3 is sometimes accepted as input (e.g. in rtpac3pay
+         or ac3parse), but shouldn't be output.
+         Fixes #3038.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5662>
+
+2023-11-14 15:36:34 +0900  Dongyun Seo <dongyun....@lge.com>
+
+       * gst/audioparsers/gstdcaparse.c:
+         dcaparse: keep upstream buffer meta
+         Some audio decoders cannot decode DTS stream if there is no
+         valid timestamp. So, keep upstream buffer meta.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5664>
+
+2023-11-13 14:57:09 +0000  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/5650>
+
 === release 1.22.7 ===
 
 2023-11-13 11:04:22 +0000  Tim-Philipp Müller <t...@centricular.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/NEWS 
new/gst-plugins-good-1.22.8/NEWS
--- old/gst-plugins-good-1.22.7/NEWS    2023-11-13 12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/NEWS    2023-12-18 13:09:37.000000000 +0100
@@ -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.7 and was
-released on 13 November 2023.
+The latest bug-fix release in the stable 1.22 series is 1.22.8 and was
+released on 18 December 2023.
 
 See https://gstreamer.freedesktop.org/releases/1.22/ for the latest
 version of this document.
 
-Last updated: Monday 13 November 2023, 10:00 UTC (log)
+Last updated: Monday 18 December 2023, 11:00 UTC (log)
 
 Introduction
 
@@ -2582,6 +2582,160 @@
 -   List of Merge Requests applied in 1.22.7
 -   List of Issues fixed in 1.22.7
 
+1.22.8
+
+The eight 1.22 bug-fix release (1.22.8) was released on 18 December
+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.8
+
+-   Security fixes for the AV1 video codec parser
+-   avdec video decoder: fix another possible deadlock with FFmpeg 6.1
+-   qtdemux: reverse playback and seeking fixes for files with raw audio
+    streams
+-   v4l2: fix “newly allocated buffer … is not free” warning log flood
+-   GstPlay + GstPlayer library fixes
+-   dtls: Fix build failure on Windows when compiling against OpenSSL
+    3.2.0
+-   d3d11screencapturesrc: Fix wrong color with HDR enabled
+-   Cerbero build tool: More python 3.12 string escape warning fixes;
+    make sure to bundle build tools as well
+-   various bug fixes, build fixes, memory leak fixes, and other
+    stability and reliability improvements
+
+gstreamer
+
+-   buffer: Unref memories before metas
+-   pad: Recheck pads when linking after temporary unlock
+-   baseparse: Fixes to buffers extracted from adapter
+
+gst-plugins-base
+
+-   appsrc: Fix flow return when buffer is dropped
+-   audioringbuffer: Don’t try to map MONO channel
+-   encoding-target: Properly free when missing type field in
+    parse_encoding_profile
+-   pbutils: Don’t include default vp9 parameters in resulting codec
+    mime string
+-   videorate: Don’t forget last_ts on caps changes
+
+gst-plugins-good
+
+-   dcaparse: keep upstream buffer meta
+-   rtpklvdepay: Recover after invalid fragmented KLV unit
+-   matroska-demux: fix accumulated base offset in segment seeks
+-   qtdemux: fix bug report URL
+-   qtdemux: Don’t overflow sample index
+-   qtdemux: Fix reverse playback for pcm audio stream
+-   qtdemux: Ignore raw audio streams when adjusting seek
+-   qtdemux: Under-seeking to a key unit in certain (encoded by Adobe
+    products) ProRes movies (macOS x86_64 & arm64, Windows x86_64, …)
+-   rtpac3depay: should output audio/x-ac3 not audio/ac3
+-   rtp: Fix incorrect RTP channel order lookup by name
+-   v4l2bufferpool: add lock as atomic operation for seek
+
+gst-plugins-bad
+
+-   aesenc: Fix IV length addition to output buffer length
+-   av1parser: Fix array sizes in scalability structure
+-   camerabin: Fix source updates with user filters
+-   codecparsers: av1: Clip max tile rows and cols values
+-   dtlscertificate: Define WINSOCKAPI before including windows.h
+-   d3d11: fix building with address sanitizer
+-   d3d11screencapturesrc: Fix wrong color with HDR enabled
+-   h264decoder: Fix GstVideoCodecFrame leak
+-   ladspa: Make RDF parsing truly optional
+-   rtponviftimestamp: Fix drop-out-of-segment=false mode
+-   qsvdecoder: Fix stream format detection
+-   webrtcsdp: Remove fingerprint validation that doesn’t make sense
+-   GstPlay: Automatically flush the bus when disposing the signal
+    adapter
+-   GstPlayer: Without dispatcher emit signals directly instead of via
+    the default main context
+
+gst-plugins-ugly
+
+-   No changes
+
+gst-plugins-rs
+
+-   threadshare: Fix a deadlock in used-socket notification
+-   threadshare: Fix a typo while logging
+-   webrtcsink: don’t panic on failure to request pad from webrtcbin
+-   ndi: Remove wrong Clone impl on RecvInstance
+-   ndi: Don’t mark private type as public
+-   fallbacksrc: Fix timeout scheduling
+
+gst-libav
+
+-   avviddec: Unlock stream lock while waiting for decoded frame. Fixes
+    potential deadlock
+-   avviddec: Calculate latency only for fixed framerate
+
+gst-rtsp-server
+
+-   No changes
+
+gstreamer-vaapi
+
+-   No changes
+
+gstreamer-sharp
+
+-   No changes
+
+gst-omx
+
+-   No changes
+
+gst-python
+
+-   No changes
+
+gst-editing-services
+
+-   No changes
+
+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.8
+
+-   cerbero: Fix some more python 3.12 string escape warnings
+-   cerbero: Fix bundle-source not including build-tools recipes, fix
+    CalledProcessError handling
+-   pango: Add Perl interpreter consistency check
+
+Contributors to 1.22.8
+
+Alessandro Bono, Alexander Slobodeniuk, Arun Raghavan, Benjamin
+Gaignard, Daniel Moberg, Dongyun Seo, Doug Nazar, Guillaume Desmottes,
+Hosang Lee, Jan Alexander Steffens (heftig), jeri.li, Jimmy Ohn, L. E.
+Segovia, Mathieu Duponchelle, Nicolas Dufresne, Nirbheek Chauhan,
+Olivier Crête, Philippe Normand, Piotr Brzeziński, Rabindra Harlalka,
+Robert Mader, Robin Gustavsson, Sebastian Dröge, Seungha Yang, Stefan
+Brüns, Tim-Philipp Müller, 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.22.8
+
+-   List of Merge Requests applied in 1.22.8
+-   List of Issues fixed in 1.22.8
+
 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' old/gst-plugins-good-1.22.7/RELEASE 
new/gst-plugins-good-1.22.8/RELEASE
--- old/gst-plugins-good-1.22.7/RELEASE 2023-11-13 12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/RELEASE 2023-12-18 13:09:37.000000000 +0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-good 1.22.7.
+This is GStreamer gst-plugins-good 1.22.8.
 
 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' old/gst-plugins-good-1.22.7/docs/gst_plugins_cache.json 
new/gst-plugins-good-1.22.8/docs/gst_plugins_cache.json
--- old/gst-plugins-good-1.22.7/docs/gst_plugins_cache.json     2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/docs/gst_plugins_cache.json     2023-12-18 
13:09:37.000000000 +0100
@@ -7027,7 +7027,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer 1.22.7 FLV muxer",
+                        "default": "GStreamer 1.22.8 FLV muxer",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -7039,7 +7039,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer 1.22.7 FLV muxer",
+                        "default": "GStreamer 1.22.8 FLV muxer",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -13721,7 +13721,7 @@
                         "presence": "always"
                     },
                     "src": {
-                        "caps": "audio/ac3:\n",
+                        "caps": "audio/x-ac3:\n",
                         "direction": "src",
                         "presence": "always"
                     }
@@ -21257,7 +21257,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer/1.22.7",
+                        "default": "GStreamer/1.22.8",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -21816,7 +21816,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer 1.22.7",
+                        "default": "GStreamer 1.22.8",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
@@ -23253,7 +23253,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer souphttpsrc 1.22.7 ",
+                        "default": "GStreamer souphttpsrc 1.22.8 ",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.22.7/gst/audioparsers/gstdcaparse.c 
new/gst-plugins-good-1.22.8/gst/audioparsers/gstdcaparse.c
--- old/gst-plugins-good-1.22.7/gst/audioparsers/gstdcaparse.c  2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/audioparsers/gstdcaparse.c  2023-12-18 
13:09:37.000000000 +0100
@@ -505,6 +505,7 @@
   size = gst_buffer_get_size (buffer);
   if (size >= 2) {
     newbuf = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, 2, size - 2);
+    gst_buffer_copy_into (newbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1);
     gst_buffer_unref (buffer);
     ret = dcaparse->baseparse_chainfunc (pad, parent, newbuf);
   } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/gst/isomp4/qtdemux.c 
new/gst-plugins-good-1.22.8/gst/isomp4/qtdemux.c
--- old/gst-plugins-good-1.22.7/gst/isomp4/qtdemux.c    2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/isomp4/qtdemux.c    2023-12-18 
13:09:37.000000000 +0100
@@ -1144,6 +1144,10 @@
     if (CUR_STREAM (str)->sparse && !use_sparse)
       continue;
 
+    /* raw audio streams can be ignored as we can seek anywhere within them */
+    if (str->subtype == FOURCC_soun && str->need_clip)
+      continue;
+
     seg_idx = gst_qtdemux_find_segment (qtdemux, str, desired_time);
     GST_DEBUG_OBJECT (qtdemux, "align segment %d", seg_idx);
 
@@ -5016,7 +5020,12 @@
     }
 
     /* Remember until where we want to go */
-    str->to_sample = str->from_sample - 1;
+    if (str->from_sample == 0) {
+      GST_LOG_OBJECT (qtdemux, "already at sample 0");
+      str->to_sample = 0;
+    } else {
+      str->to_sample = str->from_sample - 1;
+    }
     /* Define our time position */
     target_ts =
         str->samples[k_index].timestamp + str->samples[k_index].pts_offset;
@@ -15576,7 +15585,7 @@
   if (g_str_has_prefix (name, "audio/x-raw")) {
     stream->need_clip = TRUE;
     stream->min_buffer_size = 1024 * entry->bytes_per_frame;
-    stream->max_buffer_size = 4096 * entry->bytes_per_frame;
+    stream->max_buffer_size = entry->rate * entry->bytes_per_frame;
     GST_DEBUG ("setting min/max buffer sizes to %d/%d", 
stream->min_buffer_size,
         stream->max_buffer_size);
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/gst/isomp4/qtdemux_tags.c 
new/gst-plugins-good-1.22.8/gst/isomp4/qtdemux_tags.c
--- old/gst-plugins-good-1.22.7/gst/isomp4/qtdemux_tags.c       2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/isomp4/qtdemux_tags.c       2023-12-18 
13:09:37.000000000 +0100
@@ -763,7 +763,8 @@
     namestr_dbg = g_strndup (namestr, namesize);
 
     GST_WARNING_OBJECT (demux, "This tag %s:%s type:%u is not mapped, "
-        "file a bug at bugzilla.gnome.org", meanstr_dbg, namestr_dbg, 
datatype);
+        "file a bug at %s", meanstr_dbg, namestr_dbg, datatype,
+        PACKAGE_BUGREPORT);
 
     g_free (namestr_dbg);
     g_free (meanstr_dbg);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.22.7/gst/matroska/matroska-demux.c 
new/gst-plugins-good-1.22.8/gst/matroska/matroska-demux.c
--- old/gst-plugins-good-1.22.7/gst/matroska/matroska-demux.c   2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/matroska/matroska-demux.c   2023-12-18 
13:09:37.000000000 +0100
@@ -6076,6 +6076,20 @@
         if ((stop = demux->common.segment.stop) == -1)
           stop = demux->last_stop_end;
 
+        /* segment.position will still be at the last timestamp and won't 
always
+         * include the duration of the last packet. Expand that to the segment
+         * duration so that segment.base is increased correctly to include the
+         * length of the last packet when doing segment seeks. We need to do
+         * this before the segment-done event goes out so everything's ready
+         * for the next seek request coming in. */
+        if (GST_CLOCK_TIME_IS_VALID (stop)) {
+          GST_DEBUG_OBJECT (demux, "End of segment, updating segment.position "
+              "from %" GST_TIME_FORMAT " to stop %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (demux->common.segment.position),
+              GST_TIME_ARGS (stop));
+          demux->common.segment.position = stop;
+        }
+
         GST_LOG_OBJECT (demux, "Sending segment done, at end of segment");
         msg = gst_message_new_segment_done (GST_OBJECT (demux), 
GST_FORMAT_TIME,
             stop);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/gst/rtp/gstrtpac3depay.c 
new/gst-plugins-good-1.22.8/gst/rtp/gstrtpac3depay.c
--- old/gst-plugins-good-1.22.7/gst/rtp/gstrtpac3depay.c        2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/rtp/gstrtpac3depay.c        2023-12-18 
13:09:37.000000000 +0100
@@ -52,7 +52,7 @@
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/ac3")
+    GST_STATIC_CAPS ("audio/x-ac3")
     );
 
 static GstStaticPadTemplate gst_rtp_ac3_depay_sink_template =
@@ -120,7 +120,7 @@
     clock_rate = 90000;         /* default */
   depayload->clock_rate = clock_rate;
 
-  srccaps = gst_caps_new_empty_simple ("audio/ac3");
+  srccaps = gst_caps_new_empty_simple ("audio/x-ac3");
   res = gst_pad_set_caps (depayload->srcpad, srccaps);
   gst_caps_unref (srccaps);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/gst/rtp/gstrtpchannels.c 
new/gst-plugins-good-1.22.8/gst/rtp/gstrtpchannels.c
--- old/gst-plugins-good-1.22.7/gst/rtp/gstrtpchannels.c        2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/rtp/gstrtpchannels.c        2023-12-18 
13:09:37.000000000 +0100
@@ -250,7 +250,7 @@
     }
 
     /* compare names */
-    if (g_ascii_strcasecmp (channel_orders[i].name, order)) {
+    if (!g_ascii_strcasecmp (channel_orders[i].name, order)) {
       res = &channel_orders[i];
       break;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/gst/rtp/gstrtpklvdepay.c 
new/gst-plugins-good-1.22.8/gst/rtp/gstrtpklvdepay.c
--- old/gst-plugins-good-1.22.7/gst/rtp/gstrtpklvdepay.c        2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst/rtp/gstrtpklvdepay.c        2023-12-18 
13:09:37.000000000 +0100
@@ -330,8 +330,8 @@
     }
   }
 
-  /* If this is the first packet and looks like a start, clear resync flag */
-  if (klvdepay->resync && klvdepay->last_marker_seq == -1 && start)
+  /* If this looks like a start, clear the resync flag */
+  if (klvdepay->resync && start)
     klvdepay->resync = FALSE;
 
   if (marker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/gst-plugins-good.doap 
new/gst-plugins-good-1.22.8/gst-plugins-good.doap
--- old/gst-plugins-good-1.22.7/gst-plugins-good.doap   2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/gst-plugins-good.doap   2023-12-18 
13:09:37.000000000 +0100
@@ -34,6 +34,16 @@
 
  <release>
   <Version>
+   <revision>1.22.8</revision>
+   <branch>1.22</branch>
+   <name></name>
+   <created>2023-12-18</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.22.8.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.22.7</revision>
    <branch>1.22</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/meson.build 
new/gst-plugins-good-1.22.8/meson.build
--- old/gst-plugins-good-1.22.7/meson.build     2023-11-13 12:04:22.000000000 
+0100
+++ new/gst-plugins-good-1.22.8/meson.build     2023-12-18 13:09:37.000000000 
+0100
@@ -1,5 +1,5 @@
 project('gst-plugins-good', 'c',
-  version : '1.22.7',
+  version : '1.22.8',
   meson_version : '>= 0.62',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])
@@ -231,6 +231,7 @@
 cdata.set_quoted('PACKAGE', 'gst-plugins-good')
 cdata.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-good-1.0')
 cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), 
get_option('localedir')))
+cdata.set_quoted('PACKAGE_BUGREPORT', 
'https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/new')
 
 warning_flags = [
   '-Wmissing-declarations',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/po/gst-plugins-good-1.0.pot 
new/gst-plugins-good-1.22.8/po/gst-plugins-good-1.0.pot
--- old/gst-plugins-good-1.22.7/po/gst-plugins-good-1.0.pot     2023-11-13 
12:07:52.684029800 +0100
+++ new/gst-plugins-good-1.22.8/po/gst-plugins-good-1.0.pot     2023-12-18 
13:13:04.362865700 +0100
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good-1.22.7\n"
+"Project-Id-Version: gst-plugins-good-1.22.8\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-13 11:07+0000\n"
+"POT-Creation-Date: 2023-12-18 12:13+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <l...@li.org>\n"
@@ -99,39 +99,39 @@
 msgid "This file contains no playable streams."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:556 gst/isomp4/qtdemux.c:7408 gst/isomp4/qtdemux.c:7477
-#: gst/isomp4/qtdemux.c:7783 gst/isomp4/qtdemux.c:9181
+#: gst/isomp4/qtdemux.c:556 gst/isomp4/qtdemux.c:7417 gst/isomp4/qtdemux.c:7486
+#: gst/isomp4/qtdemux.c:7792 gst/isomp4/qtdemux.c:9190
 msgid "This file is invalid and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:3045
+#: gst/isomp4/qtdemux.c:3049
 msgid "Cannot play stream because it is encrypted with PlayReady DRM."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4364 gst/isomp4/qtdemux.c:8568
-#: gst/isomp4/qtdemux.c:8575 gst/isomp4/qtdemux.c:9883
-#: gst/isomp4/qtdemux.c:10325 gst/isomp4/qtdemux.c:10332
-#: gst/isomp4/qtdemux.c:13572
+#: gst/isomp4/qtdemux.c:4368 gst/isomp4/qtdemux.c:8577
+#: gst/isomp4/qtdemux.c:8584 gst/isomp4/qtdemux.c:9892
+#: gst/isomp4/qtdemux.c:10334 gst/isomp4/qtdemux.c:10341
+#: gst/isomp4/qtdemux.c:13581
 msgid "This file is corrupt and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4606
+#: gst/isomp4/qtdemux.c:4610
 msgid "Invalid atom size."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4659 gst/isomp4/qtdemux.c:4666
+#: gst/isomp4/qtdemux.c:4663 gst/isomp4/qtdemux.c:4670
 msgid "Cannot query file size"
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4675
+#: gst/isomp4/qtdemux.c:4679
 msgid "Cannot demux file"
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4715
+#: gst/isomp4/qtdemux.c:4719
 msgid "This file is incomplete and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:11466
+#: gst/isomp4/qtdemux.c:11475
 msgid "The video in this file might not play correctly."
 msgstr ""
 
@@ -208,7 +208,7 @@
 msgid "Raspberry Pi Camera Module"
 msgstr ""
 
-#: sys/v4l2/gstv4l2bufferpool.c:1858
+#: sys/v4l2/gstv4l2bufferpool.c:1861
 #, c-format
 msgid "Error reading %d bytes from device '%s'."
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/po/gst-plugins-good.pot 
new/gst-plugins-good-1.22.8/po/gst-plugins-good.pot
--- old/gst-plugins-good-1.22.7/po/gst-plugins-good.pot 2023-11-13 
12:07:52.684029800 +0100
+++ new/gst-plugins-good-1.22.8/po/gst-plugins-good.pot 2023-12-18 
13:13:04.362865700 +0100
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good-1.22.7\n"
+"Project-Id-Version: gst-plugins-good-1.22.8\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-13 11:07+0000\n"
+"POT-Creation-Date: 2023-12-18 12:13+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <l...@li.org>\n"
@@ -99,39 +99,39 @@
 msgid "This file contains no playable streams."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:556 gst/isomp4/qtdemux.c:7408 gst/isomp4/qtdemux.c:7477
-#: gst/isomp4/qtdemux.c:7783 gst/isomp4/qtdemux.c:9181
+#: gst/isomp4/qtdemux.c:556 gst/isomp4/qtdemux.c:7417 gst/isomp4/qtdemux.c:7486
+#: gst/isomp4/qtdemux.c:7792 gst/isomp4/qtdemux.c:9190
 msgid "This file is invalid and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:3045
+#: gst/isomp4/qtdemux.c:3049
 msgid "Cannot play stream because it is encrypted with PlayReady DRM."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4364 gst/isomp4/qtdemux.c:8568
-#: gst/isomp4/qtdemux.c:8575 gst/isomp4/qtdemux.c:9883
-#: gst/isomp4/qtdemux.c:10325 gst/isomp4/qtdemux.c:10332
-#: gst/isomp4/qtdemux.c:13572
+#: gst/isomp4/qtdemux.c:4368 gst/isomp4/qtdemux.c:8577
+#: gst/isomp4/qtdemux.c:8584 gst/isomp4/qtdemux.c:9892
+#: gst/isomp4/qtdemux.c:10334 gst/isomp4/qtdemux.c:10341
+#: gst/isomp4/qtdemux.c:13581
 msgid "This file is corrupt and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4606
+#: gst/isomp4/qtdemux.c:4610
 msgid "Invalid atom size."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4659 gst/isomp4/qtdemux.c:4666
+#: gst/isomp4/qtdemux.c:4663 gst/isomp4/qtdemux.c:4670
 msgid "Cannot query file size"
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4675
+#: gst/isomp4/qtdemux.c:4679
 msgid "Cannot demux file"
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4715
+#: gst/isomp4/qtdemux.c:4719
 msgid "This file is incomplete and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:11466
+#: gst/isomp4/qtdemux.c:11475
 msgid "The video in this file might not play correctly."
 msgstr ""
 
@@ -208,7 +208,7 @@
 msgid "Raspberry Pi Camera Module"
 msgstr ""
 
-#: sys/v4l2/gstv4l2bufferpool.c:1858
+#: sys/v4l2/gstv4l2bufferpool.c:1861
 #, c-format
 msgid "Error reading %d bytes from device '%s'."
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.22.7/sys/v4l2/gstv4l2bufferpool.c 
new/gst-plugins-good-1.22.8/sys/v4l2/gstv4l2bufferpool.c
--- old/gst-plugins-good-1.22.7/sys/v4l2/gstv4l2bufferpool.c    2023-11-13 
12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/sys/v4l2/gstv4l2bufferpool.c    2023-12-18 
13:09:37.000000000 +0100
@@ -682,9 +682,11 @@
         guint num_queued;
         guint i, n = 0;
 
+        GST_OBJECT_LOCK (pool);
         num_queued = g_atomic_int_get (&pool->num_queued);
         if (num_queued < pool->num_allocated)
           n = pool->num_allocated - num_queued;
+        GST_OBJECT_UNLOCK (pool);
 
         /* For captures, we need to enqueue buffers before we start streaming,
          * so the driver don't underflow immediately. As we have put then back
@@ -1147,6 +1149,8 @@
   gint old_buffer_state;
   gint index;
 
+  GST_OBJECT_LOCK (pool);
+
   index = group->buffer.index;
 
   old_buffer_state =
@@ -1182,8 +1186,6 @@
     }
   }
 
-  GST_OBJECT_LOCK (pool);
-
   /* If the pool was orphaned, don't try to queue any returned buffers.
    * This is done with the objet lock in order to synchronize with
    * orphaning. */
@@ -1205,6 +1207,7 @@
 already_queued:
   {
     GST_ERROR_OBJECT (pool, "the buffer %i was already queued", index);
+    GST_OBJECT_UNLOCK (pool);
     return GST_FLOW_ERROR;
   }
 was_orphaned:
@@ -2281,7 +2284,9 @@
 
   pool = GST_V4L2_BUFFER_POOL (bpool);
 
+  GST_OBJECT_LOCK (pool);
   gst_v4l2_buffer_pool_streamoff (pool);
+  GST_OBJECT_UNLOCK (pool);
 
   if (!V4L2_TYPE_IS_OUTPUT (pool->obj->type)) {
     ret = gst_v4l2_buffer_pool_flush_events (v4l2object);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.22.7/tests/check/elements/matroskademux.c 
new/gst-plugins-good-1.22.8/tests/check/elements/matroskademux.c
--- old/gst-plugins-good-1.22.7/tests/check/elements/matroskademux.c    
2023-11-13 12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/tests/check/elements/matroskademux.c    
2023-12-18 13:09:37.000000000 +0100
@@ -1,5 +1,5 @@
 /* GStreamer unit test for matroskademux
- * Copyright (C) 2015 Tim-Philipp Müller <t...@centricular.com>
+ * Copyright (C) 2015, 2023 Tim-Philipp Müller <t...@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -307,6 +307,183 @@
 
 GST_END_TEST;
 
+static void
+demux_pad_added_cb (GstElement * demux, GstPad * new_pad, gpointer user_data)
+{
+  GstElement *sink = GST_ELEMENT (user_data);
+
+  fail_unless (gst_element_link (demux, sink));
+}
+
+static const gint64 PINKNOISE_MKV_DURATION = 116099773;
+
+static void
+run_segment_looping_test (gint64 start, gint64 stop, gdouble rate)
+{
+  GstStateChangeReturn state_ret;
+  GstMessage *msg;
+  GstElement *src, *sink, *demux, *pipeline;
+  gboolean seek_ret;
+  GstBus *bus;
+  gchar *path;
+
+  g_assert (start >= 0);
+  g_assert (stop >= -1);
+  g_assert (rate > 0.0);
+
+  // only handle a rate for the middle segment case for now
+  g_assert (rate == 1.0 || stop != -1);
+
+  pipeline = gst_pipeline_new ("pipeline");
+  fail_unless (pipeline != NULL, "Failed to create pipeline!");
+
+  bus = gst_element_get_bus (pipeline);
+
+  src = gst_element_factory_make ("filesrc", "filesrc");
+  fail_unless (src != NULL, "Failed to create 'filesrc' element!");
+
+  demux = gst_element_factory_make ("matroskademux", "demux");
+  fail_unless (demux != NULL, "Failed to create matroskademux element");
+
+  sink = gst_element_factory_make ("fakesink", "fakesink");
+  fail_unless (sink != NULL, "Failed to create 'fakesink' element!");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, demux, sink, NULL);
+
+  fail_unless (gst_element_link (src, demux));
+
+  g_signal_connect (demux, "pad-added", G_CALLBACK (demux_pad_added_cb), sink);
+
+  path = g_build_filename (GST_TEST_FILES_PATH, "pinknoise-vorbis.mkv", NULL);
+  GST_LOG ("reading file '%s'", path);
+  g_object_set (src, "location", path, NULL);
+
+  state_ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  fail_unless (state_ret != GST_STATE_CHANGE_FAILURE);
+
+  if (state_ret == GST_STATE_CHANGE_ASYNC) {
+    GST_LOG ("waiting for pipeline to reach PAUSED state");
+    state_ret = gst_element_get_state (pipeline, NULL, NULL, -1);
+    fail_unless_equals_int (state_ret, GST_STATE_CHANGE_SUCCESS);
+  }
+
+  GST_LOG ("PAUSED, let's play a little..");
+  state_ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  fail_unless (state_ret != GST_STATE_CHANGE_FAILURE);
+
+  GST_LOG ("Send FLUSHING seek with SEGMENT flag set.. "
+      "(start=%" G_GINT64_FORMAT ", stop=%" G_GINT64_FORMAT ")", start, stop);
+
+  if (stop == -1) {
+    seek_ret = gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
+        GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SEGMENT, start);
+  } else {
+    seek_ret = gst_element_seek (pipeline, rate, GST_FORMAT_TIME,
+        GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SEGMENT,
+        GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, stop);
+  }
+  fail_unless (seek_ret == TRUE);
+
+  GST_LOG ("Waiting for pipeline to preroll again after flushing seek..");
+  state_ret = gst_element_get_state (pipeline, NULL, NULL, -1);
+  fail_unless_equals_int (state_ret, GST_STATE_CHANGE_SUCCESS);
+
+  {
+    GstFormat fmt = GST_FORMAT_UNDEFINED;
+    gint64 segment_end = 0;
+
+    GST_LOG ("Waiting for SEGMENT_DONE message..");
+    msg = gst_bus_timed_pop_filtered (bus, -1, GST_MESSAGE_SEGMENT_DONE);
+    fail_unless (msg != NULL);
+
+    gst_message_parse_segment_done (msg, &fmt, &segment_end);
+    fail_unless_equals_int (fmt, GST_FORMAT_TIME);
+    if (stop == -1) {
+      fail_unless_equals_int64 (segment_end, PINKNOISE_MKV_DURATION);
+    } else {
+      fail_unless_equals_int64 (segment_end, stop);
+    }
+    gst_clear_message (&msg);
+  }
+
+  GST_LOG ("Send non-FLUSHING seek to start new segment loop.. "
+      "(start=%" G_GINT64_FORMAT ", stop=%" G_GINT64_FORMAT ")", start, stop);
+
+  /* No segment flag this time, so will be expecting an EOS at the end */
+  if (stop == -1) {
+    seek_ret = gst_element_seek_simple (pipeline, GST_FORMAT_TIME, 0, start);
+  } else {
+    seek_ret = gst_element_seek (pipeline, rate, GST_FORMAT_TIME, 0,
+        GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, stop);
+  }
+  fail_unless (seek_ret == TRUE);
+
+  GST_LOG ("Waiting for EOS message..");
+  msg = gst_bus_timed_pop_filtered (bus, -1, GST_MESSAGE_EOS);
+  fail_unless (msg != NULL);
+  gst_clear_message (&msg);
+
+  {
+    GstPad *pad = gst_element_get_static_pad (sink, "sink");
+    GstEvent *ev = gst_pad_get_sticky_event (pad, GST_EVENT_SEGMENT, 0);
+    const GstSegment *segment = NULL;
+
+    gst_event_parse_segment (ev, &segment);
+
+    GST_INFO ("segment %" GST_SEGMENT_FORMAT, segment);
+
+    fail_unless_equals_int64 (segment->start, start);
+    if (stop == -1) {
+      fail_unless_equals_int64 (segment->stop, PINKNOISE_MKV_DURATION);
+      fail_unless_equals_int64 (segment->duration, PINKNOISE_MKV_DURATION);
+      fail_unless_equals_int64 (segment->base, PINKNOISE_MKV_DURATION);
+    } else {
+      fail_unless_equals_int64 (segment->stop, stop);
+      fail_unless_equals_int64 (segment->duration, PINKNOISE_MKV_DURATION);
+      fail_unless_equals_int64 (segment->base, (stop - start) / rate);
+    }
+
+    gst_clear_event (&ev);
+    gst_clear_object (&pad);
+  }
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+  gst_object_unref (pipeline);
+  gst_clear_object (&bus);
+
+  g_free (path);
+}
+
+/* Make sure segment seeks behave as expected, and the segment base offset
+ * is increased correctly by the clip duration rather than the last timestamp
+ * position. */
+GST_START_TEST (test_segment_looping)
+{
+  run_segment_looping_test (0, -1, 1.0);
+}
+
+GST_END_TEST;
+
+/* If we do a segment seek on a middle segment of the clip, we expect the
+ * base offset of the next segment to be the duration of our selected segment,
+ * not the duration of the entire clip, since we only played that much then. */
+GST_START_TEST (test_segment_looping_middle_segment)
+{
+  run_segment_looping_test (50 * GST_MSECOND, 100 * GST_MSECOND, 1.0);
+}
+
+GST_END_TEST;
+
+/* For positive non-1.0 rates the base offset of the next segment should be
+ * scaled accordingly, since it's in running time not stream time. */
+GST_START_TEST (test_segment_looping_middle_segment_with_rate)
+{
+  run_segment_looping_test (50 * GST_MSECOND, 100 * GST_MSECOND, 2.0);
+}
+
+GST_END_TEST;
+
 static Suite *
 matroskademux_suite (void)
 {
@@ -316,6 +493,9 @@
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_sub_terminator);
   tcase_add_test (tc_chain, test_toc_demux);
+  tcase_add_test (tc_chain, test_segment_looping);
+  tcase_add_test (tc_chain, test_segment_looping_middle_segment);
+  tcase_add_test (tc_chain, test_segment_looping_middle_segment_with_rate);
 
   return s;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.22.7/tests/check/elements/rtp-payloading.c 
new/gst-plugins-good-1.22.8/tests/check/elements/rtp-payloading.c
--- old/gst-plugins-good-1.22.7/tests/check/elements/rtp-payloading.c   
2023-11-13 12:04:22.000000000 +0100
+++ new/gst-plugins-good-1.22.8/tests/check/elements/rtp-payloading.c   
2023-12-18 13:09:37.000000000 +0100
@@ -1162,6 +1162,95 @@
 
 GST_END_TEST;
 
+typedef struct
+{
+  gint buffer_count;
+  gint drop_index;
+} KlvDepayProbeData;
+
+static GstPadProbeReturn
+rtp_klv_do_packet_loss_depay_probe_cb (GstPad * pad, GstPadProbeInfo * info,
+    KlvDepayProbeData * data)
+{
+  GstPadProbeReturn ret = GST_PAD_PROBE_OK;
+
+  if (info->type & GST_PAD_PROBE_TYPE_BUFFER_LIST) {
+    GstBufferList *buffer_list = info->data;
+    gint length = gst_buffer_list_length (buffer_list);
+
+    if (data->drop_index >= 0) {
+      gint drop_offset = data->drop_index - data->buffer_count;
+
+      if (0 <= drop_offset && drop_offset < length)
+        gst_buffer_list_remove (buffer_list, drop_offset, 1);
+    }
+
+    data->buffer_count += length;
+  } else {
+    if (data->buffer_count == data->drop_index)
+      ret = GST_PAD_PROBE_DROP;
+    data->buffer_count++;
+  }
+
+  return ret;
+}
+
+GST_START_TEST (rtp_klv_fragmented_packet_loss)
+{
+  /* Number of KLV frames to push through the pipeline */
+  const guint FRAME_COUNT = 5;
+
+  /* Repeat frame data */
+  int frame_data_size = sizeof (rtp_KLV_frame_data);
+  guint8 *frame_data = malloc (FRAME_COUNT * sizeof (rtp_KLV_frame_data));
+  for (guint i = 0; i < FRAME_COUNT; i++)
+    memcpy (frame_data + i * frame_data_size, rtp_KLV_frame_data,
+        frame_data_size);
+
+  /* Create RTP pipeline. */
+  rtp_pipeline *p =
+      rtp_pipeline_create (frame_data, frame_data_size, FRAME_COUNT,
+      "meta/x-klv, parsed=(bool)true", "rtpklvpay", "rtpklvdepay");
+
+  if (p == NULL) {
+    return;
+  }
+
+  /* Force super-small mtu of 60 to fragment KLV unit (4 fragments per unit) */
+  g_object_set (p->rtppay, "mtu", 60, NULL);
+
+  /* Drop the 7:th fragment on the depayloader's sink pad */
+  KlvDepayProbeData sink_probe_data = {.buffer_count = 0,.drop_index = 7 };
+  GstPad *depay_sink = gst_element_get_static_pad (p->rtpdepay, "sink");
+  gst_pad_add_probe (depay_sink,
+      GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST,
+      (GstPadProbeCallback) rtp_klv_do_packet_loss_depay_probe_cb,
+      &sink_probe_data, NULL);
+  gst_object_unref (depay_sink);
+
+  /* Count buffers on the depayloader's source pad */
+  KlvDepayProbeData src_probe_data = {.buffer_count = 0,.drop_index = -1 };
+  GstPad *depay_src = gst_element_get_static_pad (p->rtpdepay, "src");
+  gst_pad_add_probe (depay_src,
+      GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST,
+      (GstPadProbeCallback) rtp_klv_do_packet_loss_depay_probe_cb,
+      &src_probe_data, NULL);
+  gst_object_unref (depay_src);
+
+  /* Run RTP pipeline. */
+  rtp_pipeline_run (p);
+
+  /* Destroy RTP pipeline. */
+  rtp_pipeline_destroy (p);
+
+  free (frame_data);
+
+  /* We should be able to decode all RTP buffers except for the second one */
+  g_assert_cmpuint (src_probe_data.buffer_count, ==, FRAME_COUNT - 1);
+}
+
+GST_END_TEST;
+
 static const guint8 rtp_L16_frame_data[] =
     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1801,6 +1890,7 @@
   tcase_add_test (tc_chain, rtp_h265_list_gt_mtu_hvc1);
   tcase_add_test (tc_chain, rtp_klv);
   tcase_add_test (tc_chain, rtp_klv_fragmented);
+  tcase_add_test (tc_chain, rtp_klv_fragmented_packet_loss);
   tcase_add_test (tc_chain, rtp_L16);
   tcase_add_test (tc_chain, rtp_L24);
   tcase_add_test (tc_chain, rtp_mp2t);

++++++ reduce-required-meson.patch ++++++
--- /var/tmp/diff_new_pack.rLwqqu/_old  2024-01-05 21:40:16.743791663 +0100
+++ /var/tmp/diff_new_pack.rLwqqu/_new  2024-01-05 21:40:16.743791663 +0100
@@ -1,10 +1,10 @@
-Index: gst-plugins-good-1.22.7/meson.build
+Index: gst-plugins-good-1.22.8/meson.build
 ===================================================================
---- gst-plugins-good-1.22.7.orig/meson.build
-+++ gst-plugins-good-1.22.7/meson.build
+--- gst-plugins-good-1.22.8.orig/meson.build
++++ gst-plugins-good-1.22.8/meson.build
 @@ -1,6 +1,6 @@
  project('gst-plugins-good', 'c',
-   version : '1.22.7',
+   version : '1.22.8',
 -  meson_version : '>= 0.62',
 +  meson_version : '>= 0.61',
    default_options : [ 'warning_level=1',

Reply via email to