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 <[email protected]>
+
+- 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 <[email protected]>
+
+ * NEWS:
+ * RELEASE:
+ * gst-plugins-base.doap:
+ * meson.build:
+ Release 1.22.5
+
+2023-07-18 01:25:47 +0000 Ruslan Khamidullin <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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
<[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
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 <[email protected]>
+ *
+ * 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 <[email protected]>\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 <[email protected]>\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',