Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-base for 
openSUSE:Factory checked in at 2023-07-27 16:50:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-base (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.32662 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-base"

Thu Jul 27 16:50:21 2023 rev:94 rq:1100814 version:1.22.5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-base/gstreamer-plugins-base.changes
    2023-07-01 23:17:25.262033635 +0200
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.32662/gstreamer-plugins-base.changes
 2023-07-27 16:50:37.613752701 +0200
@@ -1,0 +2,22 @@
+Tue Jul 25 11:05:58 UTC 2023 - Bjørn Lie <bjorn....@gmail.com>
+
+- Update to version 1.22.5:
+  + appsink: add missing make_writable call
+  + audioaggregator: Do not post message before being constructed
+  + decodebin3:
+    - Prevent a critical warning when reassigning output slots
+    - Fix slot input linking when the associated stream has changed
+    - Remove spurious input locking during parsebin reconfiguration
+  + urisourcebin: Set source element to READY before querying it
+  + gl/viv-fb: meson build updates
+  + plugins: fix compiler warnings with GLib >= 2.76
+  + subtitleoverlay: fix mutex error if sink caps is not video
+  + video:
+    - timecode: Add support for framerates lower than 1fps
+    - accept timecode of 119.88 (120/1.001) FPS
+    - cannot attach time code meta when frame rate is 119.88
+      (120000/1001)
+  + videodecoder: fix copying buffer metas
+- Rebase reduce-required-meson.patch.
+
+-------------------------------------------------------------------

Old:
----
  gst-plugins-base-1.22.4.tar.xz

New:
----
  gst-plugins-base-1.22.5.tar.xz

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

Other differences:
------------------
++++++ gstreamer-plugins-base.spec ++++++
--- /var/tmp/diff_new_pack.uW7nDH/_old  2023-07-27 16:50:38.313756657 +0200
+++ /var/tmp/diff_new_pack.uW7nDH/_new  2023-07-27 16:50:38.317756680 +0200
@@ -20,7 +20,7 @@
 %define gst_branch 1.0
 %define gstreamer_req_version %(echo %{version} | sed -e "s/+.*//")
 Name:           gstreamer-plugins-base
-Version:        1.22.4
+Version:        1.22.5
 Release:        0
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        GPL-2.0-or-later AND LGPL-2.1-or-later

++++++ gst-plugins-base-1.22.4.tar.xz -> gst-plugins-base-1.22.5.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/ChangeLog 
new/gst-plugins-base-1.22.5/ChangeLog
--- old/gst-plugins-base-1.22.4/ChangeLog       2023-06-20 18:44:10.143448800 
+0200
+++ new/gst-plugins-base-1.22.5/ChangeLog       2023-07-20 16:23:40.389558000 
+0200
@@ -1,3 +1,179 @@
+=== release 1.22.5 ===
+
+2023-07-20 15:22:48 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * NEWS:
+       * RELEASE:
+       * gst-plugins-base.doap:
+       * meson.build:
+         Release 1.22.5
+
+2023-07-18 01:25:47 +0000  Ruslan Khamidullin <rusl...@borisfx.com>
+
+       * tests/check/libs/videotimecode.c:
+         video: add extensive tests for gst_video_time_code_is_valid()
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5061>
+
+2023-07-12 22:45:28 +0000  Ruslan Khamidullin <rusl...@borisfx.com>
+
+       * gst-libs/gst/video/gstvideotimecode.c:
+         video: accept timecode of 119.88 (120/1.001) FPS
+         The drop-frame rules are specified in “SMPTE ST 12-3:2016” and are
+         consistent with the traditional ones:
+         “
+         To minimize fractional time deviation from real time, the first two
+         super-frame numbers (00 and 01) shall be omitted from the count at the
+         start of each minute except minutes 00, 10, 20, 30, 40, and 50. Thus 
the
+         first eight frame numbers (0 through 7) are omitted from the count at
+         the start of each minute except minutes 00, 10, 20, 30, 40, and 50.
+         ”
+         Where “super-frame” is a group of 4 frames for 120 FPS.
+         Fixes #2797
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5061>
+
+2023-04-10 12:54:51 +0300  Sebastian Dröge <sebast...@centricular.com>
+
+       * gst-libs/gst/video/gstvideotimecode.c:
+       * tests/check/libs/videotimecode.c:
+         video: timecode: Add support for framerates lower than 1fps
+         These are not explicitly defined but the existing calculations can be
+         extended to also cover that case by inverting them to avoid floating
+         point calculations.
+         Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2465
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5074>
+
+2023-07-18 15:15:40 +0100  Philippe Normand <ph...@igalia.com>
+
+       * gst/playback/gstdecodebin3.c:
+         decodebin3: Prevent a critical warning when reassigning output slots
+         Do not attempt to send a streams-selected message when reassigning
+         an output slot in case upstream signalled that it is handling stream 
selection.
+         In this case decodebin3 doesn't keep track of stream
+         collections (`dbin->collection` is NULL).
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5069>
+
+2023-07-17 15:23:35 +0100  Philippe Normand <ph...@igalia.com>
+
+       * gst/playback/gstdecodebin3.c:
+         decodebin3: Fix slot input linking when the associated stream has 
changed
+         Setting the input field on the empty slot prevents future linking of 
it and will
+         result in flow errors later on.
+         This was observed in WebKit's MediaStream source element, when it 
changes the
+         caps on one of its associated streams, from an encoded format to a 
raw video
+         format. The associated stream-id on the sticky stream-start event 
doesn´t
+         change, but the element creates a new GstStream with a different ID 
and sets it
+         on the stream-start event. Stream parsing is disabled in 
urisourcebin, so
+         decodebin3 handles the parsing. Without this patch we would end-up 
with unlinked
+         pads in decodebin3 after switching to the raw video format.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5067>
+
+2023-01-31 16:12:17 +0100  Edward Hervey <edw...@centricular.com>
+
+       * gst/playback/gsturisourcebin.c:
+         urisourcebin: Set source element to READY before querying it
+         Generating the source element is done when urisourcebin is doing the 
READY to
+         PAUSED state change, so it is reasonable to set the new source 
element to that
+         state.
+         This also allows detecting early failures with backing libraries or
+         hardware (checks done in NULL->READY).
+         Finally it makes more sense to have an element in READY when 
attempting to query
+         information from it (such as SCHEDULING queries or probing live-ness).
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5058>
+
+2023-06-21 13:45:13 +0200  Andoni Morales Alastruey <ylat...@gmail.com>
+
+       * gst-libs/gst/video/gstvideodecoder.c:
+       * tests/check/libs/videodecoder.c:
+         videodecoder: fix segfault copying buffer metas
+         The current implementation copies metas without checking if the buffer
+         is writable.
+         The operation that needs to be done, replacing the input buffer and
+         copying the metas, is only part of that process. We create a new 
function
+         that does both.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5054>
+
+2023-07-12 17:08:32 +0100  Philippe Normand <ph...@igalia.com>
+
+       * gst/playback/gstdecodebin3.c:
+         decodebin3: Remove spurious input locking during parsebin 
reconfiguration
+         Commit 22917b140ffac5208eff173321fa7cdad8976cca added extra locks in
+         `reset_input_parsebin()` but all call sites of that function already 
take the
+         input lock.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5025>
+
+2023-05-16 21:24:44 +1000  Matthew Waters <matt...@centricular.com>
+
+       * gst-libs/gst/gl/meson.build:
+       * gst-libs/gst/gl/viv-fb/gstglviv-fb.h:
+         gl: provide a pkg-config/gir file for the viv-fb backend
+         Required to be able to generate coherent bindings for window system
+         specific APIs due to limitations in gobject-introspection.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4959>
+
+2023-05-16 22:09:48 +1000  Matthew Waters <matt...@centricular.com>
+
+       * gst-libs/gst/gl/meson.build:
+         gl: don't install the viv-fb window header file
+         It is not needed at all by any external implementations and should not
+         be exposed to the outside world.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4959>
+
+2023-06-30 13:53:19 +0200  Carlos Rafael Giani <crg7...@mailbox.org>
+
+       * gst-libs/gst/gl/meson.build:
+         gl: Separate viv direct texture checks from viv-fb winsys check
+         Vivante direct textures do not depend on the viv-fb windowing system.
+         Decouple these two to be able to use direct textures even when viv-fb
+         is not enabled.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4959>
+
+2023-03-09 00:25:51 +0530  Nirbheek Chauhan <nirbh...@centricular.com>
+
+       * gst-libs/gst/gl/meson.build:
+         meson: Install viv-fb GL headers, needed by i.MX
+         Needed by qmlglsink at build time to allocate a viv-fb display.
+         Without this, the GL fastpath doesn't work, and performance is really
+         bad.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4959>
+
+2023-03-26 16:40:28 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * gst/subparse/gstsubparse.c:
+         taglist, plugins: fix compiler warnings with GLib >= 2.76
+         Fix compiler warnings about not using the return value when
+         freeing the GString segment with g_string_free(.., FALSE):
+         ignoring return value of ‘g_string_free_and_steal’ declared with 
attribute ‘warn_unused_result’
+         which we get with newer GLib versions. These were all harmless.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5015>
+
+2023-07-07 16:01:33 +0300  Maksym Khomenko <maksym.khomenko@skelia.partners>
+
+       * gst-libs/gst/app/gstappsink.c:
+         appsink: add missing make_writable call
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5013>
+
+2023-07-05 14:27:22 -0400  Thibault Saunier <tsaun...@igalia.com>
+
+       * gst-libs/gst/audio/gstaudioaggregator.c:
+         bad: audioaggregator: Do not post message before being constructed
+         `gst_aggregator_set_latency` will post a message on the bus which
+         triggers traces for not constructed objects which fails in rust 
tracers
+         as object should have names in all traces.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4984>
+
+2023-07-04 15:37:16 +0200  Guillaume Desmottes 
<guillaume.desmot...@onestream.live>
+
+       * gst/playback/gstsubtitleoverlay.c:
+         subtitleoverlay: fix mutex error if sink caps is not video
+         We were trying to unlock a mutex that was not locked.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4972>
+
+2023-06-20 19:10:38 +0100  Tim-Philipp Müller <t...@centricular.com>
+
+       * meson.build:
+         Back to development
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4907>
+
 === release 1.22.4 ===
 
 2023-06-20 17:42:25 +0100  Tim-Philipp Müller <t...@centricular.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/NEWS 
new/gst-plugins-base-1.22.5/NEWS
--- old/gst-plugins-base-1.22.4/NEWS    2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/NEWS    2023-07-20 16:22:48.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.4 and was
-released on 20 June 2023.
+The latest bug-fix release in the stable 1.22 series is 1.22.5 and was
+released on 20 July 2023.
 
 See https://gstreamer.freedesktop.org/releases/1.22/ for the latest
 version of this document.
 
-Last updated: Tuesday 20 June 2023, 16:30 UTC (log)
+Last updated: Thursday 20 July 2023, 12:00 UTC (log)
 
 Introduction
 
@@ -2008,6 +2008,187 @@
 -   List of Merge Requests applied in 1.22.4
 -   List of Issues fixed in 1.22.4
 
+1.22.5
+
+The fifth 1.22 bug-fix release (1.22.5) was released on 20 July 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.5
+
+-   Security fixes for the RealMedia demuxer
+-   vaapi decoders, postproc: Disable DMAbuf from caps negotiation to
+    fix garbled video in some cases
+-   decodebin3, playbin3, parsebin fixes, especially for stream
+    reconfiguration
+-   hlsdemux2: fix early seeking; don’t pass referer when updating
+    playlists; webvtt fixes
+-   gtk: Fix critical caused by pointer movement when stream is getting
+    ready
+-   qt6: Set sampler filtering method, fixes bad quality with qml6glsink
+    and gstqt6d3d11
+-   v4l2src: handle resolution change when buffers are copied
+-   videoflip: update orientation tag in auto mode
+-   video timecode: Add support for framerates lower than 1fps and
+    accept 119.88 (120/1.001) fps
+-   webrtcsink: fixes for x264enc and NVIDIA encoders
+-   cerbero: Pull ninja from system if possible, avoid spurious
+    bootstrap of cmake
+-   packages: Recipe updates for ffmpeg, libsoup, orc
+-   various bug fixes, memory leak fixes, and other stability and
+    reliability improvements
+
+gstreamer
+
+-   taglist, plugins: fix compiler warnings with GLib >= 2.76
+-   tracerutils: allow casting parameter types
+-   inputselector: fix playing variable is never set
+
+gst-plugins-base
+
+-   appsink: add missing make_writable call
+-   audioaggregator: Do not post message before being constructed
+-   decodebin3: Prevent a critical warning when reassigning output slots
+-   decodebin3: Fix slot input linking when the associated stream has
+    changed
+-   decodebin3: Remove spurious input locking during parsebin
+    reconfiguration
+-   urisourcebin: Set source element to READY before querying it
+-   gl/viv-fb: meson build updates
+-   plugins: fix compiler warnings with GLib >= 2.76
+-   subtitleoverlay: fix mutex error if sink caps is not video
+-   video: timecode: Add support for framerates lower than 1fps
+-   video: accept timecode of 119.88 (120/1.001) FPS
+-   video: cannot attach time code meta when frame rate is 119.88
+    (120000/1001)
+-   videodecoder: fix copying buffer metas
+
+gst-plugins-good
+
+-   adaptivedemux2: Fix early seeking
+-   hlsdemux2: Ensure processed webvtt ends with empty new line
+-   hlsdemux2: Don’t set a referer when updating playlists
+-   matroska: demux: Strip signal byte when encrypted
+-   rtspsrc: Fix crash when is-live=false
+-   gtk: Fix critical caused by pointer movement when stream is getting
+    ready
+-   qt6: Set sampler filtering method, fixes bad quality with qml6glsink
+    and gstqt6d3d11
+-   qtdemux: opus: set entry as sampled
+-   v4l2src: handle resolution change when buffers are copied
+-   v4l2videodec: Fix handling of initial gaps
+-   v4l2videodec: correctly register v4l2mpeg2dec
+-   v4l2videoenc: replace custom QUERY_CAPS handling with getcaps
+    callback
+-   videoflip: update orientation tag in auto mode
+-   videoflip: fix critical when tag list is not writable
+
+gst-plugins-bad
+
+-   d3d11bufferpool: Fix heavy CPU usage in case of fixed-size pool
+-   jpegparser: jpegdecoder: Don’t pollute bus and comply with spec
+-   plugins: fix compiler warnings with GLib >= 2.76
+-   webrtcbin: Prevent critical warning when creating an additional data
+    channel
+-   webrtcstats: Properly report IceCandidate type
+
+gst-plugins-ugly
+
+-   rmdemux: add some integer overflow checks
+
+gst-plugins-rs
+
+-   fallbackswitch: Change the threshold for trailing buffers
+-   fallbackswitch: Fix pad health calculation and notifies
+-   fmp4mux: Fix draining in chunk mode if keyframes are too late
+-   livesync: Wait for the end timestamp of the previous buffer before
+    looking at queue
+-   livesync: Improve EOS handling
+-   togglerecord: Clip segment before calculating timestamp/duration
+-   togglerecord: Error out if main stream buffer has no valid running
+    time
+-   webrtcsink: fix pipeline when input caps contain max-framerate
+-   webrtcsink: Configure only 4 threads for x264enc
+-   webrtcsink: Translate force-keyunit events to force-IDR action
+    signal for NVIDIA encoders
+-   webrtcsink: Set config-interval=-1 and aggregate-mode=zero-latency
+    on rtph264pay and rtph265pay
+-   webrtcsink: Set VP8/VP9 payloader based on payloader element factory
+    name
+-   webrtcink: Use correct property types for nvvideoconvert
+-   webrtc/signalling: fix race condition in message ordering
+-   videofx: Minimize dependencies of the image crate
+
+gst-libav
+
+-   No changes
+
+gst-rtsp-server
+
+-   No changes
+
+gstreamer-vaapi
+
+-   vaapidecode,vaapipostproc: Disable DMAbuf from caps negotiation.
+
+gstreamer-sharp
+
+-   No changes
+
+gst-omx
+
+-   No changes
+
+gst-python
+
+-   No changes
+
+gst-editing-services
+
+-   ges: some fixes for 32-bit systems
+-   ges, nle: Avoid setting state or sending query when constructing
+    objects
+
+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.5
+
+-   Pull ninja from system if possible, avoid spurious bootstrap of
+    cmake
+-   ffmpeg: update to 5.0.3
+-   libsoup: update to 2.74.3
+-   orc: update to 0.4.34
+
+Contributors to 1.22.5
+
+Andoni Morales Alastruey, Bastien Nocera, Carlos Rafael Giani, David
+Craven, Doug Nazar, Edward Hervey, François Laignel, Guillaume
+Desmottes, He Junyan, Hou Qi, Jan Alexander Steffens (heftig), Jan
+Schmidt, Maksym Khomenko, Mathieu Duponchelle, Matthew Waters, Michael
+Olbrich, Michael Tretter, Nicolas Dufresne, Nirbheek Chauhan, Philippe
+Normand, Ruslan Khamidullin, Sebastian Dröge, Seungha Yang, Théo
+Maillart, Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez
+Leal, Vivia Nikolaidou, Yatin Maan,
+
+… 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.5
+
+-   List of Merge Requests applied in 1.22.5
+-   List of Issues fixed in 1.22.5
+
 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-base-1.22.4/RELEASE 
new/gst-plugins-base-1.22.5/RELEASE
--- old/gst-plugins-base-1.22.4/RELEASE 2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/RELEASE 2023-07-20 16:22:48.000000000 +0200
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-base 1.22.4.
+This is GStreamer gst-plugins-base 1.22.5.
 
 The GStreamer team is thrilled to announce a new major feature release
 of your favourite cross-platform multimedia framework!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/gst/playback/gstdecodebin3.c 
new/gst-plugins-base-1.22.5/gst/playback/gstdecodebin3.c
--- old/gst-plugins-base-1.22.4/gst/playback/gstdecodebin3.c    2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst/playback/gstdecodebin3.c    2023-07-20 
16:22:48.000000000 +0200
@@ -1035,7 +1035,6 @@
 
   GST_DEBUG_OBJECT (dbin, "Resetting %" GST_PTR_FORMAT, input->parsebin);
 
-  INPUT_LOCK (dbin);
   GST_STATE_LOCK (dbin);
   gst_element_set_state (input->parsebin, GST_STATE_NULL);
   input->drained = FALSE;
@@ -1048,7 +1047,6 @@
   }
   gst_element_sync_state_with_parent (input->parsebin);
   GST_STATE_UNLOCK (dbin);
-  INPUT_UNLOCK (dbin);
 }
 
 
@@ -2220,6 +2218,11 @@
 
   GST_LOG_OBJECT (dbin, "Checking");
 
+  if (dbin->upstream_selected) {
+    GST_DEBUG ("Upstream handles stream selection, returning");
+    return NULL;
+  }
+
   if (dbin->to_activate != NULL) {
     GST_DEBUG ("Still have streams to activate");
     return NULL;
@@ -2659,7 +2662,6 @@
 
   if (empty_slot) {
     GST_DEBUG_OBJECT (dbin, "Re-using existing unused slot %d", 
empty_slot->id);
-    empty_slot->input = input;
     return empty_slot;
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst/playback/gstsubtitleoverlay.c 
new/gst-plugins-base-1.22.5/gst/playback/gstsubtitleoverlay.c
--- old/gst-plugins-base-1.22.4/gst/playback/gstsubtitleoverlay.c       
2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst/playback/gstsubtitleoverlay.c       
2023-07-20 16:22:48.000000000 +0200
@@ -1735,7 +1735,6 @@
   if (!gst_video_info_from_caps (&info, caps)) {
     GST_ERROR_OBJECT (self, "Failed to parse caps");
     ret = FALSE;
-    GST_SUBTITLE_OVERLAY_UNLOCK (self);
     goto out;
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst/playback/gsturisourcebin.c 
new/gst-plugins-base-1.22.5/gst/playback/gsturisourcebin.c
--- old/gst-plugins-base-1.22.4/gst/playback/gsturisourcebin.c  2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst/playback/gsturisourcebin.c  2023-07-20 
16:22:48.000000000 +0200
@@ -1465,8 +1465,6 @@
   GObjectClass *source_class;
   GstElement *source;
   GParamSpec *pspec;
-  GstQuery *query;
-  GstSchedulingFlags flags;
   GError *err = NULL;
 
   if (!urisrc->uri)
@@ -1486,31 +1484,9 @@
 
   GST_LOG_OBJECT (urisrc, "found source type %s", G_OBJECT_TYPE_NAME (source));
 
-  urisrc->is_stream = IS_STREAM_URI (urisrc->uri);
-
-  query = gst_query_new_scheduling ();
-  if (gst_element_query (source, query)) {
-    gst_query_parse_scheduling (query, &flags, NULL, NULL, NULL);
-    if ((flags & GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED))
-      urisrc->is_stream = TRUE;
-  }
-  gst_query_unref (query);
-
   source_class = G_OBJECT_GET_CLASS (source);
 
-  if (urisrc->is_stream) {
-    /* Live sources are not streamable */
-    pspec = g_object_class_find_property (source_class, "is-live");
-    if (pspec && G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_BOOLEAN) {
-      gboolean is_live;
-      g_object_get (G_OBJECT (source), "is-live", &is_live, NULL);
-      if (is_live)
-        urisrc->is_stream = FALSE;
-    }
-  }
-
-  GST_LOG_OBJECT (urisrc, "source is stream: %d", urisrc->is_stream);
-
+  /* Propagate connection speed */
   pspec = g_object_class_find_property (source_class, "connection-speed");
   if (pspec != NULL) {
     guint64 speed = urisrc->connection_speed / 1000;
@@ -1750,6 +1726,38 @@
   GstIterator *pads_iter;
   gboolean res = TRUE;
 
+  /* Collect generic information about the source */
+
+  urisrc->is_stream = IS_STREAM_URI (urisrc->uri);
+
+  if (!urisrc->is_stream) {
+    GstQuery *query;
+    GstSchedulingFlags flags;
+    /* do a final check to see if the source element is streamable */
+    query = gst_query_new_scheduling ();
+    if (gst_element_query (urisrc->source, query)) {
+      gst_query_parse_scheduling (query, &flags, NULL, NULL, NULL);
+      if ((flags & GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED))
+        urisrc->is_stream = TRUE;
+    }
+    gst_query_unref (query);
+  }
+
+  if (urisrc->is_stream) {
+    GObjectClass *source_class = G_OBJECT_GET_CLASS (urisrc->source);
+    GParamSpec *pspec = g_object_class_find_property (source_class, "is-live");
+    /* Live sources are not streamable */
+    if (pspec && G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_BOOLEAN) {
+      gboolean is_live;
+      g_object_get (G_OBJECT (urisrc->source), "is-live", &is_live, NULL);
+      if (is_live)
+        urisrc->is_stream = FALSE;
+    }
+  }
+
+  GST_LOG_OBJECT (urisrc, "source is stream: %d", urisrc->is_stream);
+
+  /* Handle the existing source pads */
   pads_iter = gst_element_iterate_src_pads (urisrc->source);
 
 restart:
@@ -2285,12 +2293,16 @@
    * handled by the application right after. */
   gst_bin_add (GST_BIN_CAST (urisrc), urisrc->source);
 
-  /* notify of the new source used */
+  /* notify of the new source used and allow external users to do final
+   * modifications before activating the element */
   g_object_notify (G_OBJECT (urisrc), "source");
 
   g_signal_emit (urisrc, gst_uri_source_bin_signals[SIGNAL_SOURCE_SETUP],
       0, urisrc->source);
 
+  if (gst_element_set_state (urisrc->source,
+          GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS)
+    goto state_fail;
   /* see if the source element emits raw audio/video all by itself,
    * if so, we can create streams for the pads and be done with it.
    * Also check that is has source pads, if not, we assume it will
@@ -2323,6 +2335,12 @@
         (_("Source element is invalid.")), (NULL));
     return FALSE;
   }
+state_fail:
+  {
+    GST_ELEMENT_ERROR (urisrc, CORE, FAILED,
+        (_("Source element can't be prepared")), (NULL));
+    return FALSE;
+  }
 no_pads:
   {
     GST_ELEMENT_ERROR (urisrc, CORE, FAILED,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/gst/subparse/gstsubparse.c 
new/gst-plugins-base-1.22.5/gst/subparse/gstsubparse.c
--- old/gst-plugins-base-1.22.4/gst/subparse/gstsubparse.c      2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst/subparse/gstsubparse.c      2023-07-20 
16:22:48.000000000 +0200
@@ -610,8 +610,7 @@
       break;
     }
   }
-  ret = markup->str;
-  g_string_free (markup, FALSE);
+  ret = g_string_free (markup, FALSE);
   GST_DEBUG ("parse_mdvdsub returning (%f+%f): %s",
       state->start_time / (double) GST_SECOND,
       state->duration / (double) GST_SECOND, ret);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst-libs/gst/app/gstappsink.c 
new/gst-plugins-base-1.22.5/gst-libs/gst/app/gstappsink.c
--- old/gst-plugins-base-1.22.4/gst-libs/gst/app/gstappsink.c   2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst-libs/gst/app/gstappsink.c   2023-07-20 
16:22:48.000000000 +0200
@@ -1048,6 +1048,7 @@
   if (G_UNLIKELY (!priv->last_caps &&
           gst_pad_has_current_caps (GST_BASE_SINK_PAD (psink)))) {
     priv->last_caps = gst_pad_get_current_caps (GST_BASE_SINK_PAD (psink));
+    priv->sample = gst_sample_make_writable (priv->sample);
     gst_sample_set_caps (priv->sample, priv->last_caps);
     GST_DEBUG_OBJECT (appsink, "activating pad caps %" GST_PTR_FORMAT,
         priv->last_caps);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst-libs/gst/audio/gstaudioaggregator.c 
new/gst-plugins-base-1.22.5/gst-libs/gst/audio/gstaudioaggregator.c
--- old/gst-plugins-base-1.22.4/gst-libs/gst/audio/gstaudioaggregator.c 
2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst-libs/gst/audio/gstaudioaggregator.c 
2023-07-20 16:22:48.000000000 +0200
@@ -638,12 +638,24 @@
   GST_OBJECT_UNLOCK (aagg);
 }
 
+
+static void
+gst_audio_aggregator_constructed (GObject * object)
+{
+  GstAudioAggregator *aagg = GST_AUDIO_AGGREGATOR (object);
+
+  gst_audio_aggregator_translate_output_buffer_duration (aagg,
+      DEFAULT_OUTPUT_BUFFER_DURATION);
+  gst_audio_aggregator_recalculate_latency (aagg);
+}
+
 static void
 gst_audio_aggregator_class_init (GstAudioAggregatorClass * klass)
 {
   GObjectClass *gobject_class = (GObjectClass *) klass;
   GstAggregatorClass *gstaggregator_class = (GstAggregatorClass *) klass;
 
+  gobject_class->constructed = gst_audio_aggregator_constructed;
   gobject_class->set_property = gst_audio_aggregator_set_property;
   gobject_class->get_property = gst_audio_aggregator_get_property;
   gobject_class->dispose = gst_audio_aggregator_dispose;
@@ -759,10 +771,6 @@
   aagg->priv->alignment_threshold = DEFAULT_ALIGNMENT_THRESHOLD;
   aagg->priv->discont_wait = DEFAULT_DISCONT_WAIT;
 
-  gst_audio_aggregator_translate_output_buffer_duration (aagg,
-      DEFAULT_OUTPUT_BUFFER_DURATION);
-  gst_audio_aggregator_recalculate_latency (aagg);
-
   aagg->current_caps = NULL;
 
   aagg->priv->selected_samples_info =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/gst-libs/gst/gl/meson.build 
new/gst-plugins-base-1.22.5/gst-libs/gst/gl/meson.build
--- old/gst-plugins-base-1.22.4/gst-libs/gst/gl/meson.build     2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst-libs/gst/gl/meson.build     2023-07-20 
16:22:48.000000000 +0200
@@ -3,6 +3,7 @@
 gstglx11_dep = dependency('', required : false)
 gstglwayland_dep = dependency('', required : false)
 gstglegl_dep = dependency('', required : false)
+gstglviv_fb_dep = dependency('', required : false)
 
 if get_option('gl').disabled()
   message('GStreamer OpenGL integration disabled via options.')
@@ -111,6 +112,8 @@
 gl_wayland_headers = []
 gl_egl_sources = []
 gl_egl_headers = []
+gl_viv_fb_sources = []
+gl_viv_fb_headers = []
 
 glconf = configuration_data()
 glconf_options = [
@@ -918,18 +921,27 @@
   endif
 endif
 
+if cc.has_function ('glTexDirectVIV', dependencies : gles2_dep)
+  glconf.set('GST_GL_HAVE_VIV_DIRECTVIV', 1)
+endif
+
 if need_platform_egl != 'no' and need_win_viv_fb != 'no'
   if egl_dep.found() and cc.has_function ('fbGetDisplay', dependencies : 
egl_dep)
-    if cc.has_function ('glTexDirectVIV', dependencies : gles2_dep)
-      enabled_gl_winsys += 'viv-fb'
-      glconf.set('GST_GL_HAVE_WINDOW_VIV_FB', 1)
-      glconf.set('GST_GL_HAVE_VIV_DIRECTVIV', 1)
-      gl_priv_sources += [
-        'viv-fb/gstgldisplay_viv_fb.c',
-        'viv-fb/gstglwindow_viv_fb_egl.c',
-      ]
-      gl_cpp_args += ['-DEGL_API_FB']
-    endif
+    enabled_gl_winsys += 'viv-fb'
+    glconf.set('GST_GL_HAVE_WINDOW_VIV_FB', 1)
+    gl_priv_sources += files([
+      'viv-fb/gstgldisplay_viv_fb.c',
+      'viv-fb/gstglwindow_viv_fb_egl.c',
+    ])
+    gl_viv_fb_sources += files([
+      'viv-fb/gstgldisplay_viv_fb.c',
+    ])
+
+    gl_cpp_args += ['-DEGL_API_FB']
+    gl_viv_fb_headers = files([
+      'viv-fb/gstglviv-fb.h',
+      'viv-fb/gstgldisplay_viv_fb.h',
+    ])
   endif
 endif
 
@@ -1051,7 +1063,7 @@
   common_args += '-I@0@'.format(meson.current_build_dir())
 
   gstgl = library('gstgl-' + api_version,
-    gl_sources, gl_egl_sources, gl_x11_sources, gl_wayland_sources, 
gl_priv_sources, gl_enumtypes_c, gl_enumtypes_h,
+    gl_sources, gl_egl_sources, gl_x11_sources, gl_wayland_sources, 
gl_viv_fb_sources, gl_priv_sources, gl_enumtypes_c, gl_enumtypes_h,
     c_args : common_args,
     cpp_args : common_args,
     objc_args : common_args + gl_objc_args,
@@ -1235,6 +1247,42 @@
     meson.override_dependency(pkg_name, gstglegl_dep)
   endif
 
+  if gl_viv_fb_headers.length() > 0
+    install_headers(gl_viv_fb_headers, subdir : 'gstreamer-1.0/gst/gl/viv-fb')
+    pkg_name = 'gstreamer-gl-viv-fb-1.0'
+    pkgconfig.generate(
+      libraries : [gstgl],
+      subdirs : pkgconfig_subdirs,
+      name : pkg_name,
+      description : 'Streaming media framework, OpenGL plugins libraries 
(Vivante Framebuffer specifics)',
+    )
+    gl_viv_fb_gir = []
+    if build_gir
+      gir = {
+        'sources' : gl_viv_fb_sources + gl_viv_fb_headers,
+        'namespace' : 'GstGLVivFB',
+        'nsversion' : api_version,
+        'identifier_prefix' : 'Gst',
+        'symbol_prefix' : 'gst',
+        'export_packages' : pkg_name,
+        'includes' : ['Gst-1.0', 'GstBase-1.0', 'GstVideo-1.0'],
+        'install' : true,
+        'extra_args' : gir_init_section + 
['--c-include=gst/gl/viv-fb/gstglviv-fb.h'],
+        'dependencies' : [video_dep, gst_dep, gst_base_dep]
+      }
+      gir_dict = gir + {'includes': gir['includes'] + ['GstGL-1.0']}
+      gst_libraries += [[pkg_name, {'gir': gir_dict}]]
+      if not static_build
+        gir += {'includes': gir['includes'] + [gl_gir[0]]}
+        gl_viv_fb_gir = gnome.generate_gir(gstgl, kwargs: gir)
+        library_def += {'gir_targets':  library_def.get('gir_targets', []) + 
[gl_viv_fb_gir]}
+      endif
+    endif
+    gstglviv_fb_dep = declare_dependency(dependencies : [gstgl_dep],
+      sources : gl_viv_fb_gir)
+    meson.override_dependency(pkg_name, gstglviv_fb_dep)
+  endif
+
 elif get_option('gl').enabled()
   error('GStreamer OpenGL integration required via options, but needed 
dependencies not found.')
 endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst-libs/gst/gl/viv-fb/gstglviv-fb.h 
new/gst-plugins-base-1.22.5/gst-libs/gst/gl/viv-fb/gstglviv-fb.h
--- old/gst-plugins-base-1.22.4/gst-libs/gst/gl/viv-fb/gstglviv-fb.h    
1970-01-01 01:00:00.000000000 +0100
+++ new/gst-plugins-base-1.22.5/gst-libs/gst/gl/viv-fb/gstglviv-fb.h    
2023-07-20 16:22:48.000000000 +0200
@@ -0,0 +1,27 @@
+/*
+ * GStreamer
+ * Copyright (C) 2023 Matthew Waters <matt...@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GL_VIV_FB_H__
+#define __GST_GL_VIV_FB_H__
+
+#include <gst/gl/gl.h>
+#include <gst/gl/viv-fb/gstgldisplay_viv_fb.h>
+
+#endif /* __GST_GL_VIV_FB_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst-libs/gst/video/gstvideodecoder.c 
new/gst-plugins-base-1.22.5/gst-libs/gst/video/gstvideodecoder.c
--- old/gst-plugins-base-1.22.4/gst-libs/gst/video/gstvideodecoder.c    
2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst-libs/gst/video/gstvideodecoder.c    
2023-07-20 16:22:48.000000000 +0200
@@ -542,6 +542,9 @@
 static gboolean gst_video_decoder_handle_missing_data_default (GstVideoDecoder 
*
     decoder, GstClockTime timestamp, GstClockTime duration);
 
+static void gst_video_decoder_replace_input_buffer (GstVideoDecoder * decoder,
+    GstVideoCodecFrame * frame, GstBuffer ** dest_buffer);
+
 static void gst_video_decoder_copy_metas (GstVideoDecoder * decoder,
     GstVideoCodecFrame * frame, GstBuffer * src_buffer,
     GstBuffer * dest_buffer);
@@ -2470,11 +2473,7 @@
       GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
     }
 
-    if (frame->input_buffer) {
-      gst_video_decoder_copy_metas (decoder, frame, frame->input_buffer, buf);
-      gst_buffer_unref (frame->input_buffer);
-    }
-    frame->input_buffer = buf;
+    gst_video_decoder_replace_input_buffer (decoder, frame, &buf);
 
     if (decoder->input_segment.rate < 0.0) {
       priv->parse_gather = g_list_prepend (priv->parse_gather, frame);
@@ -3401,6 +3400,20 @@
   }
 }
 
+static void
+gst_video_decoder_replace_input_buffer (GstVideoDecoder * decoder,
+    GstVideoCodecFrame * frame, GstBuffer ** dest_buffer)
+{
+  if (frame->input_buffer) {
+    *dest_buffer = gst_buffer_make_writable (*dest_buffer);
+    gst_video_decoder_copy_metas (decoder, frame, frame->input_buffer,
+        *dest_buffer);
+    gst_buffer_unref (frame->input_buffer);
+  }
+
+  frame->input_buffer = *dest_buffer;
+}
+
 /**
  * gst_video_decoder_finish_frame:
  * @decoder: a #GstVideoDecoder
@@ -3841,12 +3854,8 @@
     buffer = gst_buffer_new_and_alloc (0);
   }
 
-  if (priv->current_frame->input_buffer) {
-    gst_video_decoder_copy_metas (decoder, priv->current_frame,
-        priv->current_frame->input_buffer, buffer);
-    gst_buffer_unref (priv->current_frame->input_buffer);
-  }
-  priv->current_frame->input_buffer = buffer;
+  gst_video_decoder_replace_input_buffer (decoder, priv->current_frame,
+      &buffer);
 
   gst_video_decoder_get_buffer_info_at_offset (decoder,
       priv->frame_offset, &pts, &dts, &duration, &flags);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/gst-libs/gst/video/gstvideotimecode.c 
new/gst-plugins-base-1.22.5/gst-libs/gst/video/gstvideotimecode.c
--- old/gst-plugins-base-1.22.4/gst-libs/gst/video/gstvideotimecode.c   
2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst-libs/gst/video/gstvideotimecode.c   
2023-07-20 16:22:48.000000000 +0200
@@ -81,30 +81,42 @@
 
   /* We can't have more frames than rounded up frames per second */
   fr = (tc->config.fps_n + (tc->config.fps_d >> 1)) / tc->config.fps_d;
-  if (tc->frames >= fr && (tc->config.fps_n != 0 || tc->config.fps_d != 1))
-    return FALSE;
+  if (tc->config.fps_d > tc->config.fps_n) {
+    guint64 s;
+
+    if (tc->frames > 0)
+      return FALSE;
+    /* For less than 1 fps only certain second values are allowed */
+    s = tc->seconds + (60 * (tc->minutes + (60 * tc->hours)));
+    if ((s * tc->config.fps_n) % tc->config.fps_d != 0)
+      return FALSE;
+  } else {
+    if (tc->frames >= fr && (tc->config.fps_n != 0 || tc->config.fps_d != 1))
+      return FALSE;
+  }
 
-  /* We either need a specific X/1001 framerate or otherwise an integer
-   * framerate */
+  /* We need either a specific X/1001 framerate, or less than 1 FPS,
+   * otherwise an integer framerate. */
   if (tc->config.fps_d == 1001) {
     if (tc->config.fps_n != 30000 && tc->config.fps_n != 60000 &&
-        tc->config.fps_n != 24000)
+        tc->config.fps_n != 24000 && tc->config.fps_n != 120000)
       return FALSE;
-  } else if (tc->config.fps_n % tc->config.fps_d != 0) {
+  } else if (tc->config.fps_n >= tc->config.fps_d
+      && tc->config.fps_n % tc->config.fps_d != 0) {
     return FALSE;
   }
 
-  /* We only support 30000/1001 and 60000/1001 as drop-frame framerates.
-   * 24000/1001 is *not* a drop-frame framerate! */
+  /* We support only 30000/1001, 60000/1001, and 120000/1001 (see above) as
+   * drop-frame framerates. 24000/1001 is *not* a drop-frame framerate! */
   if (tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME) {
-    if (tc->config.fps_d != 1001 || (tc->config.fps_n != 30000
-            && tc->config.fps_n != 60000))
+    if (tc->config.fps_d != 1001 || tc->config.fps_n == 24000)
       return FALSE;
   }
 
   /* Drop-frame framerates require skipping over the first two
-   * timecodes every minutes except for every tenth minute in case
-   * of 30000/1001 and the first four timecodes for 60000/1001 */
+   * timecodes every minute except for every tenth minute in case
+   * of 30000/1001, the first four timecodes for 60000/1001,
+   * and the first eight timecodes for 120000/1001. */
   if ((tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME) &&
       tc->minutes % 10 && tc->seconds == 0 && tc->frames < fr / 15) {
     return FALSE;
@@ -256,8 +268,6 @@
     GDateTime * dt, GstVideoTimeCodeFlags flags, guint field_count)
 {
   GDateTime *jam;
-  guint64 frames;
-  gboolean add_a_frame = FALSE;
 
   g_return_val_if_fail (tc != NULL, FALSE);
   g_return_val_if_fail (dt != NULL, FALSE);
@@ -268,31 +278,51 @@
   jam = g_date_time_new_local (g_date_time_get_year (dt),
       g_date_time_get_month (dt), g_date_time_get_day_of_month (dt), 0, 0, 
0.0);
 
-  /* Note: This might be inaccurate for 1 frame
-   * in case we have a drop frame timecode */
-  frames =
-      gst_util_uint64_scale_round (g_date_time_get_microsecond (dt) *
-      G_GINT64_CONSTANT (1000), fps_n, fps_d * GST_SECOND);
-  if (G_UNLIKELY (((frames == fps_n) && (fps_d == 1)) ||
-          ((frames == fps_n / 1000) && (fps_d == 1001)))) {
-    /* Avoid invalid timecodes */
-    frames--;
-    add_a_frame = TRUE;
-  }
+  if (fps_d > fps_n) {
+    guint64 hour, min, sec;
 
-  gst_video_time_code_init (tc, fps_n, fps_d, jam, flags,
-      g_date_time_get_hour (dt), g_date_time_get_minute (dt),
-      g_date_time_get_second (dt), frames, field_count);
+    sec =
+        g_date_time_get_second (dt) + (60 * (g_date_time_get_minute (dt) +
+            (60 * g_date_time_get_hour (dt))));
+    sec -= (sec * fps_n) % fps_d;
+
+    min = sec / 60;
+    sec = sec % 60;
+    hour = min / 60;
+    min = min % 60;
 
-  if (tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME) {
-    guint df = (tc->config.fps_n + (tc->config.fps_d >> 1)) /
-        (15 * tc->config.fps_d);
-    if (tc->minutes % 10 && tc->seconds == 0 && tc->frames < df) {
-      tc->frames = df;
+    gst_video_time_code_init (tc, fps_n, fps_d, jam, flags,
+        hour, min, sec, 0, field_count);
+  } else {
+    guint64 frames;
+    gboolean add_a_frame = FALSE;
+
+    /* Note: This might be inaccurate for 1 frame
+     * in case we have a drop frame timecode */
+    frames =
+        gst_util_uint64_scale_round (g_date_time_get_microsecond (dt) *
+        G_GINT64_CONSTANT (1000), fps_n, fps_d * GST_SECOND);
+    if (G_UNLIKELY (((frames == fps_n) && (fps_d == 1)) ||
+            ((frames == fps_n / 1000) && (fps_d == 1001)))) {
+      /* Avoid invalid timecodes */
+      frames--;
+      add_a_frame = TRUE;
     }
+
+    gst_video_time_code_init (tc, fps_n, fps_d, jam, flags,
+        g_date_time_get_hour (dt), g_date_time_get_minute (dt),
+        g_date_time_get_second (dt), frames, field_count);
+
+    if (tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME) {
+      guint df = (tc->config.fps_n + (tc->config.fps_d >> 1)) /
+          (15 * tc->config.fps_d);
+      if (tc->minutes % 10 && tc->seconds == 0 && tc->frames < df) {
+        tc->frames = df;
+      }
+    }
+    if (add_a_frame)
+      gst_video_time_code_increment_frame (tc);
   }
-  if (add_a_frame)
-    gst_video_time_code_increment_frame (tc);
 
   g_date_time_unref (jam);
 
@@ -366,6 +396,9 @@
         (ff_minutes * tc->minutes) +
         dropframe_multiplier * ((gint) (tc->minutes / 10)) +
         (ff_hours * tc->hours);
+  } else if (tc->config.fps_d > tc->config.fps_n) {
+    return gst_util_uint64_scale (tc->seconds + (60 * (tc->minutes +
+                (60 * tc->hours))), tc->config.fps_n, tc->config.fps_d);
   } else {
     return tc->frames + (ff_nom * (tc->seconds + (60 * (tc->minutes +
                     (60 * tc->hours)))));
@@ -468,6 +501,17 @@
         framecount - (ff_nom * sec_new) - (ff_minutes * min_new) -
         (dropframe_multiplier * ((gint) (min_new / 10))) -
         (ff_hours * h_notmod24);
+  } else if (tc->config.fps_d > tc->config.fps_n) {
+    frames_new =
+        frames + gst_util_uint64_scale (tc->seconds + (60 * (tc->minutes +
+                (60 * tc->hours))), tc->config.fps_n, tc->config.fps_d);
+    sec_new =
+        gst_util_uint64_scale (frames_new, tc->config.fps_d, tc->config.fps_n);
+    frames_new = 0;
+    min_new = sec_new / 60;
+    sec_new = sec_new % 60;
+    h_notmod24 = min_new / 60;
+    min_new = min_new % 60;
   } else {
     framecount =
         frames + tc->frames + (ff_nom * (tc->seconds + (sixty * (tc->minutes +
@@ -492,7 +536,7 @@
   /* The calculations above should always give correct results */
   g_assert (min_new < 60);
   g_assert (sec_new < 60);
-  g_assert (frames_new < ff_nom);
+  g_assert (frames_new < ff_nom || (ff_nom == 0 && frames_new == 0));
 
   tc->hours = h_new;
   tc->minutes = min_new;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/gst-plugins-base.doap 
new/gst-plugins-base-1.22.5/gst-plugins-base.doap
--- old/gst-plugins-base-1.22.4/gst-plugins-base.doap   2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/gst-plugins-base.doap   2023-07-20 
16:22:48.000000000 +0200
@@ -36,6 +36,16 @@
 
  <release>
   <Version>
+   <revision>1.22.5</revision>
+   <branch>1.22</branch>
+   <name></name>
+   <created>2023-07-20</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.22.5.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.22.4</revision>
    <branch>1.22</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/meson.build 
new/gst-plugins-base-1.22.5/meson.build
--- old/gst-plugins-base-1.22.4/meson.build     2023-06-20 18:42:25.000000000 
+0200
+++ new/gst-plugins-base-1.22.5/meson.build     2023-07-20 16:22:48.000000000 
+0200
@@ -1,5 +1,5 @@
 project('gst-plugins-base', 'c',
-  version : '1.22.4',
+  version : '1.22.5',
   meson_version : '>= 0.62',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/po/gst-plugins-base-1.0.pot 
new/gst-plugins-base-1.22.5/po/gst-plugins-base-1.0.pot
--- old/gst-plugins-base-1.22.4/po/gst-plugins-base-1.0.pot     2023-06-20 
18:44:09.739450500 +0200
+++ new/gst-plugins-base-1.22.5/po/gst-plugins-base-1.0.pot     2023-07-20 
16:23:40.065552700 +0200
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base-1.22.4\n"
+"Project-Id-Version: gst-plugins-base-1.22.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-06-20 17:44+0100\n"
+"POT-Creation-Date: 2023-07-20 15:23+0100\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"
@@ -102,7 +102,7 @@
 #: gst/playback/gstplaysink.c:3652 gst/playback/gstplaysink.c:4581
 #: gst/playback/gstplaysinkconvertbin.c:97
 #: gst/playback/gstplaysinkconvertbin.c:117 gst/playback/gsturidecodebin.c:1548
-#: gst/playback/gsturisourcebin.c:1638
+#: gst/playback/gsturisourcebin.c:1614
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
@@ -174,33 +174,33 @@
 msgid "No decoder available for type '%s'."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1457 gst/playback/gsturisourcebin.c:1558
+#: gst/playback/gsturidecodebin.c:1457 gst/playback/gsturisourcebin.c:1534
 msgid "No URI specified to play from."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1463 gst/playback/gsturisourcebin.c:1564
+#: gst/playback/gsturidecodebin.c:1463 gst/playback/gsturisourcebin.c:1540
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1470 gst/playback/gsturisourcebin.c:1571
+#: gst/playback/gsturidecodebin.c:1470 gst/playback/gsturisourcebin.c:1547
 msgid "This stream type cannot be played yet."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1488 gst/playback/gsturisourcebin.c:1589
+#: gst/playback/gsturidecodebin.c:1488 gst/playback/gsturisourcebin.c:1565
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:2382
+#: gst/playback/gsturidecodebin.c:2382 gst/playback/gsturisourcebin.c:2341
 msgid "Source element can't be prepared"
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:2388 gst/playback/gsturisourcebin.c:2323
+#: gst/playback/gsturidecodebin.c:2388 gst/playback/gsturisourcebin.c:2335
 msgid "Source element is invalid."
 msgstr ""
 
-#: gst/playback/gsturisourcebin.c:2329
+#: gst/playback/gsturisourcebin.c:2347
 msgid "Source element has no pads."
 msgstr ""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.22.4/po/gst-plugins-base.pot 
new/gst-plugins-base-1.22.5/po/gst-plugins-base.pot
--- old/gst-plugins-base-1.22.4/po/gst-plugins-base.pot 2023-06-20 
18:44:09.739450500 +0200
+++ new/gst-plugins-base-1.22.5/po/gst-plugins-base.pot 2023-07-20 
16:23:40.065552700 +0200
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base-1.22.4\n"
+"Project-Id-Version: gst-plugins-base-1.22.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-06-20 17:44+0100\n"
+"POT-Creation-Date: 2023-07-20 15:23+0100\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"
@@ -102,7 +102,7 @@
 #: gst/playback/gstplaysink.c:3652 gst/playback/gstplaysink.c:4581
 #: gst/playback/gstplaysinkconvertbin.c:97
 #: gst/playback/gstplaysinkconvertbin.c:117 gst/playback/gsturidecodebin.c:1548
-#: gst/playback/gsturisourcebin.c:1638
+#: gst/playback/gsturisourcebin.c:1614
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
@@ -174,33 +174,33 @@
 msgid "No decoder available for type '%s'."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1457 gst/playback/gsturisourcebin.c:1558
+#: gst/playback/gsturidecodebin.c:1457 gst/playback/gsturisourcebin.c:1534
 msgid "No URI specified to play from."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1463 gst/playback/gsturisourcebin.c:1564
+#: gst/playback/gsturidecodebin.c:1463 gst/playback/gsturisourcebin.c:1540
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1470 gst/playback/gsturisourcebin.c:1571
+#: gst/playback/gsturidecodebin.c:1470 gst/playback/gsturisourcebin.c:1547
 msgid "This stream type cannot be played yet."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1488 gst/playback/gsturisourcebin.c:1589
+#: gst/playback/gsturidecodebin.c:1488 gst/playback/gsturisourcebin.c:1565
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:2382
+#: gst/playback/gsturidecodebin.c:2382 gst/playback/gsturisourcebin.c:2341
 msgid "Source element can't be prepared"
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:2388 gst/playback/gsturisourcebin.c:2323
+#: gst/playback/gsturidecodebin.c:2388 gst/playback/gsturisourcebin.c:2335
 msgid "Source element is invalid."
 msgstr ""
 
-#: gst/playback/gsturisourcebin.c:2329
+#: gst/playback/gsturisourcebin.c:2347
 msgid "Source element has no pads."
 msgstr ""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/tests/check/libs/videodecoder.c 
new/gst-plugins-base-1.22.5/tests/check/libs/videodecoder.c
--- old/gst-plugins-base-1.22.4/tests/check/libs/videodecoder.c 2023-06-20 
18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/tests/check/libs/videodecoder.c 2023-07-20 
16:22:48.000000000 +0200
@@ -1315,12 +1315,18 @@
 
 GST_END_TEST;
 
+/*
+ * MODE_META_COPY: takes an extra ref to the input buffer to check metas
+ *                 are copied to a writable buffer.
+ *                 see: 
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4912
+ */
 typedef enum
 {
   MODE_NONE = 0,
   MODE_SUBFRAMES = 1,
   MODE_PACKETIZED = 1 << 1,
   MODE_META_ROI = 1 << 2,
+  MODE_META_COPY = 1 << 3,
 } SubframeMode;
 
 static void
@@ -1379,10 +1385,19 @@
       gst_buffer_add_video_region_of_interest_meta (buffer, "face", 0, 0, 10,
           10);
 
+    /* Take an extra ref to check that we ensure buffer is writable when 
copying metas
+     * https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4912
+     */
+    if (mode & MODE_META_COPY) {
+      gst_buffer_ref (buffer);
+    }
     fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
     fail_unless (gst_pad_push_event (mysrcpad,
             gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
                 gst_structure_new_empty ("custom1"))));
+    if (mode & MODE_META_COPY) {
+      gst_buffer_unref (buffer);
+    }
   }
   /* Send EOS */
   fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
@@ -1540,6 +1555,14 @@
 
 GST_END_TEST;
 
+GST_START_TEST (videodecoder_playback_packetized_subframes_metadata_copy)
+{
+  videodecoder_playback_subframe_mode (MODE_SUBFRAMES |
+      MODE_PACKETIZED | MODE_META_ROI | MODE_META_COPY);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (videodecoder_playback_invalid_ts_packetized)
 {
   videodecoder_playback_invalid_ts_subframe_mode (MODE_PACKETIZED);
@@ -1589,6 +1612,7 @@
   tcase_add_test (tc, videodecoder_playback_parsed_subframes);
   tcase_add_test (tc, videodecoder_playback_packetized_subframes);
   tcase_add_test (tc, videodecoder_playback_packetized_subframes_metadata);
+  tcase_add_test (tc, 
videodecoder_playback_packetized_subframes_metadata_copy);
   tcase_add_test (tc, videodecoder_playback_invalid_ts_packetized);
   tcase_add_test (tc, videodecoder_playback_invalid_ts_packetized_subframes);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.22.4/tests/check/libs/videotimecode.c 
new/gst-plugins-base-1.22.5/tests/check/libs/videotimecode.c
--- old/gst-plugins-base-1.22.4/tests/check/libs/videotimecode.c        
2023-06-20 18:42:25.000000000 +0200
+++ new/gst-plugins-base-1.22.5/tests/check/libs/videotimecode.c        
2023-07-20 16:22:48.000000000 +0200
@@ -584,26 +584,65 @@
 
 GST_END_TEST;
 
-GST_START_TEST (videotimecode_invalid)
+GST_START_TEST (videotimecode_validation)
 {
-  GstVideoTimeCode *tc;
-
-  tc = gst_video_time_code_new (25, 1, NULL,
-      GST_VIDEO_TIME_CODE_FLAGS_NONE, 1, 67, 4, 5, 0);
-  fail_unless (gst_video_time_code_is_valid (tc) == FALSE);
-  gst_video_time_code_free (tc);
-  tc = gst_video_time_code_new (60, 1, NULL,
-      GST_VIDEO_TIME_CODE_FLAGS_NONE, 28, 1, 2, 3, 0);
-  fail_unless (gst_video_time_code_is_valid (tc) == FALSE);
-  gst_video_time_code_free (tc);
-  tc = gst_video_time_code_new (30000, 1001, NULL,
-      GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME, 1, 23, 0, 0, 0);
-  fail_unless (gst_video_time_code_is_valid (tc) == FALSE);
-  gst_video_time_code_free (tc);
-  tc = gst_video_time_code_new (25, 1, NULL,
-      GST_VIDEO_TIME_CODE_FLAGS_NONE, 10, 11, 12, 13, 0);
-  fail_unless (gst_video_time_code_is_valid (tc) == TRUE);
-  gst_video_time_code_free (tc);
+#define CHECK_TC(fps_n, fps_d, drop, hours, minutes, seconds, frames, valid)   
 \
+    G_STMT_START { GstVideoTimeCode *tc =                                 \
+        gst_video_time_code_new (fps_n, fps_d, /*latest_daily_jam=*/ NULL,\
+          drop ? GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME                     \
+               : GST_VIDEO_TIME_CODE_FLAGS_NONE,                          \
+          hours, minutes, seconds, frames, /*field_count=*/ 0);           \
+      if (valid)  /* not '...(tc) == valid' for nicer error messages */   \
+        fail_unless (gst_video_time_code_is_valid (tc));                  \
+      else                                                                \
+        fail_if (gst_video_time_code_is_valid (tc));                      \
+      gst_video_time_code_free (tc);                                      \
+    } G_STMT_END
+
+  /* plain vanilla valid */
+  CHECK_TC (25, 1, FALSE, 10, 11, 12, 13, TRUE);
+
+  /* disallowed invalid frame rate */
+  CHECK_TC (25, 0, FALSE, 0, 0, 0, 0, FALSE);
+  /* disallowed unknown frame rate */
+  CHECK_TC (0, 1, FALSE, 0, 0, 0, 0, FALSE);
+  /* disallowed fractional frame rate */
+  CHECK_TC (90000, 1001, FALSE, 0, 0, 0, 0, FALSE);
+  /* allowed fractional frame rate */
+  CHECK_TC (24000, 1001, FALSE, 0, 0, 0, 0, TRUE);
+  /* allowed frame rate less than 1 FPS */
+  CHECK_TC (900, 1000, FALSE, 0, 0, 0, 0, TRUE);
+  /* allowed integer frame rate */
+  CHECK_TC (9000, 100, FALSE, 0, 0, 0, 0, TRUE);
+  /* TODO: CHECK_TC (60060, 1001, FALSE, 0, 0, 0, 0, TRUE);
+   * https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2823
+   */
+
+  /* 'hours' >= 24 */
+  CHECK_TC (60, 1, FALSE, 28, 1, 2, 3, FALSE);
+  /* 'minutes' >= 60 */
+  CHECK_TC (30, 1, FALSE, 1, 67, 4, 5, FALSE);
+  /* 'seconds' >= 60 */
+  CHECK_TC (25, 1, FALSE, 0, 1, 234, 5, FALSE);
+  /* 'frames' >= FPS */
+  CHECK_TC (24, 1, FALSE, 0, 1, 2, 34, FALSE);
+  /* TODO Add tests for dis-/allowed 'seconds' when FPS<1.0 */
+
+  /* 23.976 is not a drop-frame frame rate */
+  CHECK_TC (24000, 1001, TRUE, 0, 0, 0, 11, FALSE);
+  /* non-dropped frame at 29.97 FPS */
+  CHECK_TC (30000, 1001, TRUE, 0, 20, 0, 0, TRUE);
+  /* dropped frame at 29.97 FPS */
+  CHECK_TC (30000, 1001, TRUE, 0, 25, 0, 1, FALSE);
+  /* non-dropped frame at 59.94 FPS */
+  CHECK_TC (60000, 1001, TRUE, 1, 30, 0, 2, TRUE);
+  /* dropped frame at 59.94 FPS */
+  CHECK_TC (60000, 1001, TRUE, 1, 36, 0, 3, FALSE);
+  /* non-dropped frame at 119.88 FPS */
+  CHECK_TC (120000, 1001, TRUE, 12, 40, 0, 6, TRUE);
+  /* dropped frame at 119.88 FPS */
+  CHECK_TC (120000, 1001, TRUE, 12, 49, 0, 7, FALSE);
+#undef CHECK_TC
 }
 
 GST_END_TEST;
@@ -714,6 +753,56 @@
 
 GST_END_TEST;
 
+GST_START_TEST (videotimecode_half_fps)
+{
+  GstVideoTimeCode *tc;
+  GDateTime *dt;
+
+  dt = g_date_time_new_utc (2016, 7, 29, 10, 32, 50);
+
+  tc = gst_video_time_code_new (1, 2, dt,
+      GST_VIDEO_TIME_CODE_FLAGS_NONE, 0, 0, 0, 0, 0);
+
+  fail_unless (gst_video_time_code_is_valid (tc));
+  fail_unless_equals_uint64 (gst_video_time_code_nsec_since_daily_jam (tc), 0);
+  fail_unless_equals_uint64 (gst_video_time_code_frames_since_daily_jam (tc),
+      0);
+  fail_unless_equals_int (tc->frames, 0);
+  fail_unless_equals_int (tc->seconds, 0);
+  fail_unless_equals_int (tc->minutes, 0);
+  fail_unless_equals_int (tc->hours, 0);
+
+  gst_video_time_code_add_frames (tc, 10);
+  fail_unless (gst_video_time_code_is_valid (tc));
+  fail_unless_equals_uint64 (gst_video_time_code_nsec_since_daily_jam (tc),
+      20 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_video_time_code_frames_since_daily_jam (tc),
+      10);
+  fail_unless_equals_int (tc->frames, 0);
+  fail_unless_equals_int (tc->seconds, 20);
+  fail_unless_equals_int (tc->minutes, 0);
+  fail_unless_equals_int (tc->hours, 0);
+
+  gst_video_time_code_add_frames (tc, 40);
+  fail_unless (gst_video_time_code_is_valid (tc));
+  fail_unless_equals_uint64 (gst_video_time_code_nsec_since_daily_jam (tc),
+      100 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_video_time_code_frames_since_daily_jam (tc),
+      50);
+  fail_unless_equals_int (tc->frames, 0);
+  fail_unless_equals_int (tc->seconds, 40);
+  fail_unless_equals_int (tc->minutes, 1);
+  fail_unless_equals_int (tc->hours, 0);
+
+  tc->seconds += 1;
+  fail_if (gst_video_time_code_is_valid (tc));
+
+  gst_video_time_code_free (tc);
+  g_date_time_unref (dt);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_videotimecode_suite (void)
 {
@@ -747,7 +836,7 @@
   tcase_add_test (tc, videotimecode_dailyjam_distance);
   tcase_add_test (tc, videotimecode_serialize_deserialize);
   tcase_add_test (tc, videotimecode_interval);
-  tcase_add_test (tc, videotimecode_invalid);
+  tcase_add_test (tc, videotimecode_validation);
 
   tcase_add_test (tc, videotimecode_from_date_time_1s);
   tcase_add_test (tc, videotimecode_from_date_time_halfsecond);
@@ -755,6 +844,8 @@
 
   tcase_add_test (tc, videotimecode_from_to_string);
 
+  tcase_add_test (tc, videotimecode_half_fps);
+
   return s;
 }
 

++++++ reduce-required-meson.patch ++++++
--- /var/tmp/diff_new_pack.uW7nDH/_old  2023-07-27 16:50:39.209761719 +0200
+++ /var/tmp/diff_new_pack.uW7nDH/_new  2023-07-27 16:50:39.213761742 +0200
@@ -1,10 +1,10 @@
-Index: gst-plugins-base-1.22.4/meson.build
+Index: gst-plugins-base-1.22.5/meson.build
 ===================================================================
---- gst-plugins-base-1.22.4.orig/meson.build
-+++ gst-plugins-base-1.22.4/meson.build
+--- gst-plugins-base-1.22.5.orig/meson.build
++++ gst-plugins-base-1.22.5/meson.build
 @@ -1,6 +1,6 @@
  project('gst-plugins-base', 'c',
-   version : '1.22.4',
+   version : '1.22.5',
 -  meson_version : '>= 0.62',
 +  meson_version : '>= 0.61',
    default_options : [ 'warning_level=1',

Reply via email to