Hello community, here is the log from the commit of package gstreamer-plugins-good for openSUSE:Factory checked in at 2020-12-12 20:27:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old) and /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.2328 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-good" Sat Dec 12 20:27:30 2020 rev:74 rq:854558 version:1.18.2 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes 2020-11-15 15:25:48.415413910 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.2328/gstreamer-plugins-good.changes 2020-12-12 20:27:38.849557343 +0100 @@ -1,0 +2,17 @@ +Thu Dec 10 07:20:21 UTC 2020 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 1.18.2: + + rpicamsrc: add vchostif library as it is required to build + successful + + deinterlace: Enable x86 assembly with nasm on MSVC + + v4l2: caps negotiate wrong as interlace feature + + aacparse: Fix caps change handling + + rtspsrc: Use URI hash for stream id + + flvmux: Release pads via GstAggregator + + qtmux: Chain up when releasing pad, and fix some locking + + matroska-mux: Fix sparse stream crash + + Splitmux testsuite races +- Fix the _service file and spec to really use the tarball + generated by service. + +------------------------------------------------------------------- Old: ---- gst-plugins-good-1.18.1.tar.xz New: ---- gst-plugins-good-1.18.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-plugins-good.spec ++++++ --- /var/tmp/diff_new_pack.BgJr5d/_old 2020-12-12 20:27:39.469557987 +0100 +++ /var/tmp/diff_new_pack.BgJr5d/_new 2020-12-12 20:27:39.473557991 +0100 @@ -29,15 +29,18 @@ %define ENABLE_EXPERIMENTAL 1 Name: gstreamer-plugins-good -Version: 1.18.1 +Version: 1.18.2 Release: 0 Summary: GStreamer Streaming-Media Framework Plug-Ins License: LGPL-2.1-or-later Group: Productivity/Multimedia/Other -URL: https://gstreamer.freedesktop.org/ -Source0: https://gstreamer.freedesktop.org/src/gst-plugins-good/%{_name}-%{version}.tar.xz +URL: https://gstreamer.freedesktop.org +# Disable tarball source url, use _service +#Source0: %%{url}/src/gst-plugins-good/%%{_name}-%%{version}.tar.xz +Source0: %{_name}-%{version}.tar.xz Source1: gstreamer-plugins-good.appdata.xml Source99: baselibs.conf + BuildRequires: Mesa-libGLESv2-devel BuildRequires: Mesa-libGLESv3-devel BuildRequires: gcc-c++ ++++++ _service ++++++ --- /var/tmp/diff_new_pack.BgJr5d/_old 2020-12-12 20:27:39.497558016 +0100 +++ /var/tmp/diff_new_pack.BgJr5d/_new 2020-12-12 20:27:39.497558016 +0100 @@ -1,10 +1,15 @@ +<?xml version="1.0"?> <services> <service name="tar_scm" mode="disabled"> <param name="url">https://gitlab.freedesktop.org/gstreamer/gst-plugins-good.git</param> <param name="filename">gst-plugins-good</param> - <!--<param name="versionformat">@PARENT_TAG@+git%cd.%h</param>--> - <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">1.18.1</param> + <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> + <param name="versionrewrite-pattern">(.*)\+0</param> + <param name="versionrewrite-replacement">\1</param> +<!-- + <param name="changesgenerate">enable</param> +--> + <param name="revision">1.18.2</param> <param name="scm">git</param> </service> <service name="recompress" mode="disabled"> ++++++ gst-plugins-good-1.18.1.tar.xz -> gst-plugins-good-1.18.2.tar.xz ++++++ ++++ 1689 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/.gitlab-ci.yml new/gst-plugins-good-1.18.2/.gitlab-ci.yml --- old/gst-plugins-good-1.18.1/.gitlab-ci.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/gst-plugins-good-1.18.2/.gitlab-ci.yml 2020-12-06 14:22:59.000000000 +0100 @@ -0,0 +1 @@ +include: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/1.18/gitlab/ci_template.yml" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/ChangeLog new/gst-plugins-good-1.18.2/ChangeLog --- old/gst-plugins-good-1.18.1/ChangeLog 2020-10-26 12:12:12.620011800 +0100 +++ new/gst-plugins-good-1.18.2/ChangeLog 2020-12-06 14:22:59.000000000 +0100 @@ -1,3 +1,180 @@ +=== release 1.18.2 === + +2020-12-06 13:22:58 +0000 Tim-Philipp Müller <t...@centricular.com> + + * ChangeLog: + * NEWS: + * RELEASE: + * gst-plugins-good.doap: + * meson.build: + Release 1.18.2 + +2020-11-15 11:30:07 +0000 Jose Quaresma <quaresma.j...@gmail.com> + + * sys/rpicamsrc/meson.build: + rpicamsrc: add vchostif library as it is required to build successful + fix: undefined reference to `vc_gencmd' + /usr/src/debug/gstreamer1.0-plugins-good/1.18.1-r0/build/../gst-plugins-good-1.18.1/sys/rpicamsrc/RaspiCamControl.c:1440: undefined reference to `vc_gencmd' + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/829> + +2020-11-24 22:11:50 +0530 Nirbheek Chauhan <nirbh...@centricular.com> + + * gst/deinterlace/meson.build: + * meson.build: + deinterlace: Enable x86 assembly with nasm on MSVC + We need to remove x86inc.asm from the list of compiled assembly files + because it is not supposed to be compiled separately. It is directly + included by yadif.asm, and it exports no symbols. + The object file was getting ignored on all platforms except on msvc + where it was causing a linker hang when building with debugging + enabled because the object file had no debug symbols (or similar). + We've seen this before in FFmpeg too, which uses nasm: + https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/-/merge_requests/46 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/826> + +2020-10-29 02:38:16 +1100 Jan Schmidt <j...@centricular.com> + + * gst/isomp4/gstqtmux.c: + qtmux: Chain up when releasing pad, and fix some locking. + Release pads by calling up into aggregator so it can do the right + things. Don't clean up the pad until after that. + Add some missing locks around some accesses to shared pad state. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/800> + +2020-11-12 09:32:30 +0800 Bing Song <bing.s...@nxp.com> + + * docs/gst_plugins_cache.json: + * sys/v4l2/gstv4l2object.c: + v4l2: caps negotiate wrong as interlace feature + gst_caps_simplify() will move interlace format before normal video + format. It will cause caps negotiate prefer interlaced caps which + isn't expected. Seperate normal caps and interlaced caps and then + merge it will keep prefer progress video format. + Add ARGB/BGRA for interlaced caps. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/802 + Part-of <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/813> + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/821> + +2020-11-13 14:58:44 +0200 Vivia Nikolaidou <vi...@ahiru.eu> + + * gst/audioparsers/gstaacparse.c: + aacparse: Fix caps change handling + In baseparse we set the fixed caps flag on all src pads, therefore the + source pad caps query in get_allowed_caps will return the current caps. + Current caps won't necessarily intersect with the new caps (e.g. sample + rate change). Replace get_allowed_caps with peer_query_caps. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/819> + +2020-11-10 18:18:12 +0000 ChrisDuncanAnyvision <chr...@anyvision.co> + + * gst/rtsp/gstrtspsrc.c: + * gst/rtsp/gstrtspsrc.h: + rtspsrc: Ensure same group-id used for both TCP/UDP stream-start events + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/814> + +2020-11-10 16:17:23 +0000 ChrisDuncanAnyvision <chr...@anyvision.co> + + * gst/rtsp/gstrtspsrc.c: + rtspsrc: Use consistent URI hashed stream-id for UDP and TCP/Interleaved streams + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/814> + +2020-11-01 10:30:27 +0200 Sebastian Dröge <sebast...@centricular.com> + + * gst/flv/gstflvmux.c: + flvmux: Release pads via GstAggregator + See https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/797 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/803> + +2020-10-31 12:52:04 +1100 Jan Schmidt <j...@centricular.com> + + * tests/check/elements/splitmuxsrc.c: + splitmuxsrc: Fix comment in a test + Fix a comment in the splitmuxsrc robust muxing test so it + describes the test properly. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-10-31 12:49:08 +1100 Jan Schmidt <j...@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + * gst/multifile/gstsplitmuxsink.h: + splitmuxsink: Change EOS catching logic. + Add a new state for ending the overall stream, and use it to decide + whether to pass the final EOS message up the bus instead of dropping + it. Fixes a small race that makes the testsuite sometimes not generate + the last fragment(s) sometimes because the wrong EOS gets + allowed through too early. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-10-31 02:19:07 +1100 Jan Schmidt <j...@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + * gst/multifile/gstsplitmuxsink.h: + splitmuxsink: Don't use the element state lock + Using the element state lock to avoid splitmuxsink shutting + down while doing element manipulations can lead to a deadlock on + shutdown if a fragment switch happens at exactly the wrong moment. + Use a private mutex and a shutdown boolean instead. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-10-30 03:38:15 +1100 Jan Schmidt <j...@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + splitmuxsink: Don't busy loop on a non-ready pad. + If a pad gets into the check_completed_gop method and then + the underlying conditions change on the reference context, + things could get stuck in a busy loop when the context should + instead jump back out and wait for more data. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-10-30 03:36:51 +1100 Jan Schmidt <j...@centricular.com> + + * gst/multifile/gstsplitmuxsrc.c: + splitmuxsrc: Mark running=false on shutdown. + Make sure that any late gst_element_call_async() callbacks + know that the elements is shutting down and bail out instead + of operating on the element we're trying to stop. + Fixes a spurious test failure in elements_splitmuxsrc + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-10-29 02:36:35 +1100 Jan Schmidt <j...@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + splitmuxsink: Forward EOS messages from async fragments. + Re-enable forwarding EOS messages from fragments that are completing + asynchronously, so that splitmuxsink itself won't go EOS until they + are complete. This was disabled to work around a bug in core that + is fixed in + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/683 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-09-17 22:56:01 +1000 Jan Schmidt <j...@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + * gst/multifile/gstsplitmuxsink.h: + splitmuxsink: Never start a new fragment with no reference buffers + If there has been no bytes from the reference stream muxed into + the current fragment, then time can't have advanced, there's no + GOP... this fragment would be broken or empty, so wait for some + data on the reference buffer. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/799> + +2020-10-27 23:43:49 +1100 Jan Schmidt <j...@centricular.com> + + * gst/matroska/matroska-mux.c: + matroska-mux: Fix sparse stream crash + https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/656 + introduced an invalid memory access when debug is enabled, by casting + the wrong pointer to a GstCollectPad. Fixing that showed the original + change was incorrect and leads to an infinite loop in the + testsuite. This patch fixes both problems. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/793> + +2020-10-27 12:34:19 +0000 Tim-Philipp Müller <t...@centricular.com> + + * docs/gst_plugins_cache.json: + * meson.build: + Back to development + === release 1.18.1 === 2020-10-26 11:12:10 +0000 Tim-Philipp Müller <t...@centricular.com> @@ -5,6 +182,7 @@ * ChangeLog: * NEWS: * RELEASE: + * docs/gst_plugins_cache.json: * gst-plugins-good.doap: * meson.build: Release 1.18.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/NEWS new/gst-plugins-good-1.18.2/NEWS --- old/gst-plugins-good-1.18.1/NEWS 2020-10-26 12:12:12.620011800 +0100 +++ new/gst-plugins-good-1.18.2/NEWS 2020-12-06 14:22:59.000000000 +0100 @@ -2,8 +2,8 @@ GStreamer 1.18.0 was originally released on 8 September 2020. -The latest bug-fix release in the 1.18 series is 1.18.1 and was released -on 26 October 2020. +The latest bug-fix release in the 1.18 series is 1.18.2 and was released +on 6 December 2020. See https://gstreamer.freedesktop.org/releases/1.18/ for the latest version of this document. @@ -2387,6 +2387,195 @@ - List of Merge Requests applied in 1.18.1 - List of Issues fixed in 1.18.1 +1.18.2 + +The second 1.18 bug-fix release (1.18.2) was released on 6 December +2020. + +This release only contains bugfixes and it should be safe to update from +1.18.x. + +Highlighted bugfixes in 1.18.2 + +- Fix MPEG-TS timestamping regression when playing DVB streams +- compositor: fix artefacts in certain input scaling/conversion + situations and make sure that the output format is actually + supported, plus renegotiation fixes +- Fix sftp:// URI playback in decodebin/playbin via giosrc +- adaptivedemux/dashdemux/hlsdemux fixes +- rtsp-server fixes +- android media: fix crash when encoding AVC +- fix races in various unit tests +- lots of other bug fixes and memory leak fixes +- various stability, performance and reliability improvements +- g-i annotation fixes +- build fixes + +gstreamer + +- bin: When removing a sink, check if the EOS status changed +- info: colorize PIDs in log messages +- aggregator: Include min-upstream-latency in buffering time, helps + especially with performance issues on single core systems where + there are a lot of threads running +- typefind: copy seqnum to new segment event, fixing issues with + oggdemux operating in push mode with typefind operating in pull mode +- identity, clocksync: Also provide system clock if sync=false +- queue2: Fix modes in scheduling query handling +- harness: Handle element not being set cleanly +- g-i: Add some missing nullable annotations, and fix some nullable + annotations: + - gst_test_clock_process_next_clock_id() returns nullable + - gst_stream_type_get_name() is not nullable +- build: fix build issue when compiling for 32-bit architectures with + 64-bit time_t (e.g. riscv32) by increasing padding in + GstClockEntryImpl in gst_private.h + +gst-plugins-base + +- gl/eagl: internal view resize fixes for glimagesink +- video-converter: increase the number of cache lines for resampling, + fixes significant color issues and artefacts with “special” resizing + parameters in compositor +- compositor: Don’t crash in prepare_frame() if the pad was just + removed +- decodebin3: Properly handle caps query with no filter +- videoaggregator: Guarantee that the output format is supported +- videoaggregator: Fix locking around vagg->info +- gluploadelement: Avoid race condition of base class’ context +- gluploadelement: Avoid race condition of inside upload creation +- gl: Fix prototype of glGetSynciv() +- tcpserversink: Don’t assume g_socket_get_remote_address() succeeds +- video-aggregator: Fix renegotiation when using convert pads +- videoaggregator: document and fix locking in convert pad +- audiodecoder, videodecoder: Don’t reset max-errors property value in + reset() +- audioencoder: Fix incorrect GST_LOG_OBJECT usage +- pbutils: Fix segfault when using invalid encoding profile +- g-i: videometa: gir annotate the size of plane array in new API +- examples/gl/gtk: Add missing dependency on gstgl +- video: fix doc warning + +gst-plugins-good + +- rpicamsrc: add vchostif library as it is required to build + successful +- deinterlace: Enable x86 assembly with nasm on MSVC +- v4l2: caps negotiate wrong as interlace feature +- aacparse: Fix caps change handling +- rtspsrc: Use URI hash for stream id +- flvmux: Release pads via GstAggregator +- qtmux: Chain up when releasing pad, and fix some locking +- matroska-mux: Fix sparse stream crash +- Splitmux testsuite races + +gst-plugins-bad + +- tsparse: timestamp packetized buffers, fixing timestamp handling + regression in connection with dvbsrc in MeTV +- ttmlparse: fix issues in aggregation of input TTML +- mpegdemux: Set duration on seeking query if possible, fixes seeking + in MPEG-PS streams in gst-play-1.0 +- mpegtsdemux: Fix off by one error +- adaptivedemux: Store QoS values on the element +- adaptivedemux: Don’t calculate bitrate for header/index fragments +- hlsdemux: Don’t double-free variant streams on errors +- mpegtspacketizer: Handle PCR issues with adaptive streams +- player: call ref_sink on pipeline +- vkdeviceprovider: Avoid deadlock on physical device +- wlvideoformat: fix DMA format convertor +- Webrtc shutdown crashes +- decklink: Update enum value bounds check in gst_decklink_get_mode() +- decklink: correct framerate 2KDCI 23.98 +- amc: Fix crash when encoding AVC +- d3d11videoprocessor: Fix wrong input/output supportability check +- opencv: allow compilation against 4.5.x +- tests: svthevcenc: Fix test_encode_simple +- tests: dtls: Don’t set dtlsenc state before linking +- mpegtsmux: Restore intervals when creating TsMux +- adaptivedemux, hlsdemux, curl: Use actual object for logging +- gi: player: Fix get_current_subtitle_track() annotation + +gst-plugins-ugly + +- no changes + +gst-libav + +- avauddec: Check planar-ness of frame rather than context, fixes + issue with aptX HD decoding + +gst-rtsp-server + +- stream: collect a clock_rate when blocking +- media: Ignore GstRTSPStreamBlocking from incomplete streams, to + prevent cases with prerolling when the inactive stream prerolls + first and the server proceeds without waiting for the active stream. + When there are no complete streams (during DESCRIBE), we will listen + to all streams. +- media: Use guint64 for setting the size-time property on rtpstorage, + fixes potential crashes or memory corruption. +- media: Get rates only on sender streams, fixing issue with ONVIF + audio backchannel streams +- media: Plug memory leak + +gstreamer-vaapi + +- H265 decoder: Fix a typo in scc reference setting + +gstreamer-sharp + +- no changes + +gst-omx + +- no changes + +gst-python + +- no changes + +gst-editing-services + +- Fix static build +- ges_init(): Fix potential initialisation crash on error + +gst-integration-testsuites + +- no changes + +gst-build + +- gst-env: use Path.open() in get_pkgconfig_variable_from_pcfile(), + fixes issues with python 3.5 +- subprojects: pin orc to 0.4.32 release (was 0.4.29) and pin libpsl + to 0.21.1 (was master) + +Cerbero build tool and packaging changes in 1.18.2 + +- build-tools: copy the removed site.py from setuptools, fixing python + programs (like meson) from using libraries from incorrect places + +Contributors to 1.18.2 + +Arun Raghavan, Bing Song, Chris Bass, Chris Duncan, Chris White, David +Keijser, David Phung, Edward Hervey, Fabrice Fontaine, Guillaume +Desmottes, Guiqin Zou, He Junyan, Jan Alexander Steffens (heftig), Jan +Schmidt, Jason Pereira, Jonathan Matthew, Jose Quaresma, Julian Bouzas, +Khem Raj, Kristofer Björkström, Marijn Suijten, Mart Raudsepp, Mathieu +Duponchelle, Matthew Waters, Nicola Murino, Nicolas Dufresne, Nirbheek +Chauhan, Olivier Crête, Philippe Normand, Rafostar, Randy Li, Sanchayan +Maity, Sebastian Dröge, Seungha Yang, Thibault Saunier, Tim-Philipp +Müller, Vivia Nikolaidou, Xavier Claessens + +… and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.18.2 + +- List of Merge Requests applied in 1.18.2 +- List of Issues fixed in 1.18.2 + Schedule for 1.20 Our next major feature release will be 1.20, and 1.19 will be the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/RELEASE new/gst-plugins-good-1.18.2/RELEASE --- old/gst-plugins-good-1.18.1/RELEASE 2020-10-26 12:12:12.620011800 +0100 +++ new/gst-plugins-good-1.18.2/RELEASE 2020-12-06 14:22:59.000000000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-good 1.18.1. +This is GStreamer gst-plugins-good 1.18.2. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/docs/gst_plugins_cache.json new/gst-plugins-good-1.18.2/docs/gst_plugins_cache.json --- old/gst-plugins-good-1.18.1/docs/gst_plugins_cache.json 2020-10-26 12:12:12.624011800 +0100 +++ new/gst-plugins-good-1.18.2/docs/gst_plugins_cache.json 2020-12-06 14:22:59.000000000 +0100 @@ -6595,7 +6595,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.18.1 FLV muxer", + "default": "GStreamer 1.18.2 FLV muxer", "mutable": "null", "readable": true, "type": "gchararray", @@ -6607,7 +6607,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.18.1 FLV muxer", + "default": "GStreamer 1.18.2 FLV muxer", "mutable": "null", "readable": true, "type": "gchararray", @@ -20636,7 +20636,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer/1.18.1", + "default": "GStreamer/1.18.2", "mutable": "null", "readable": true, "type": "gchararray", @@ -22593,7 +22593,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer souphttpsrc 1.18.1 ", + "default": "GStreamer souphttpsrc 1.18.2 ", "mutable": "null", "readable": true, "type": "gchararray", @@ -24203,7 +24203,7 @@ "long-name": "Video (video4linux2) Sink", "pad-templates": { "sink": { - "caps": "image/jpeg:\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, BGRA, ABGR, xBGR, RGBx, ARGB, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, xRGB, BGRx, RGB, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\nvideo/x-raw:\n format: { RGB16, BGR, ABGR, xBGR, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, RGB, BGRA, BGRx, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n", + "caps": "image/jpeg:\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGB16, BGR, ABGR, xBGR, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, RGB, BGRA, BGRx, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, ABGR, xBGR, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, RGB, BGRA, BGRx, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\n", "direction": "sink", "presence": "always" } @@ -24511,7 +24511,7 @@ "long-name": "Video (video4linux2) Source", "pad-templates": { "src": { - "caps": "image/jpeg:\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, BGRA, ABGR, xBGR, RGBx, ARGB, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, xRGB, BGRx, RGB, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\nvideo/x-raw:\n format: { RGB16, BGR, ABGR, xBGR, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, RGB, BGRA, BGRx, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n", + "caps": "image/jpeg:\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGB16, BGR, ABGR, xBGR, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, RGB, BGRA, BGRx, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, ABGR, xBGR, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, RGB, BGRA, BGRx, BGR15, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\n", "direction": "src", "presence": "always" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/audioparsers/gstaacparse.c new/gst-plugins-good-1.18.2/gst/audioparsers/gstaacparse.c --- old/gst-plugins-good-1.18.1/gst/audioparsers/gstaacparse.c 2020-10-26 12:12:12.648012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/audioparsers/gstaacparse.c 2020-12-06 14:22:59.000000000 +0100 @@ -173,7 +173,7 @@ gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps) { GstStructure *s; - GstCaps *src_caps = NULL, *allowed; + GstCaps *src_caps = NULL, *peercaps; gboolean res = FALSE; const gchar *stream_format; guint8 codec_data[2]; @@ -226,8 +226,8 @@ if (stream_format) gst_structure_set (s, "stream-format", G_TYPE_STRING, stream_format, NULL); - allowed = gst_pad_get_allowed_caps (GST_BASE_PARSE (aacparse)->srcpad); - if (allowed && !gst_caps_can_intersect (src_caps, allowed)) { + peercaps = gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (aacparse), NULL); + if (peercaps && !gst_caps_can_intersect (src_caps, peercaps)) { GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad, "Caps can not intersect"); if (aacparse->header_type == DSPAAC_HEADER_ADTS) { @@ -235,7 +235,7 @@ "Input is ADTS, trying raw"); gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "raw", NULL); - if (gst_caps_can_intersect (src_caps, allowed)) { + if (gst_caps_can_intersect (src_caps, peercaps)) { GstBuffer *codec_data_buffer; GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad, @@ -255,15 +255,15 @@ "Input is raw, trying ADTS"); gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "adts", NULL); - if (gst_caps_can_intersect (src_caps, allowed)) { + if (gst_caps_can_intersect (src_caps, peercaps)) { GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad, "Caps can intersect, we will prepend ADTS headers"); aacparse->output_header_type = DSPAAC_HEADER_ADTS; } } } - if (allowed) - gst_caps_unref (allowed); + if (peercaps) + gst_caps_unref (peercaps); aacparse->last_parsed_channels = 0; aacparse->last_parsed_sample_rate = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/deinterlace/meson.build new/gst-plugins-good-1.18.2/gst/deinterlace/meson.build --- old/gst-plugins-good-1.18.1/gst/deinterlace/meson.build 2020-10-26 12:12:12.656011800 +0100 +++ new/gst-plugins-good-1.18.2/gst/deinterlace/meson.build 2020-12-06 14:22:59.000000000 +0100 @@ -65,8 +65,7 @@ else asm_outformat = 'elf64' endif - asm_x = files('x86/yadif.asm', - 'x86/x86inc.asm') + asm_x = files('x86/yadif.asm') asm_stackalign_def = '-DSTACK_ALIGNMENT=64' asm_incdir = 'x86' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/flv/gstflvmux.c new/gst-plugins-good-1.18.2/gst/flv/gstflvmux.c --- old/gst-plugins-good-1.18.1/gst/flv/gstflvmux.c 2020-10-26 12:12:12.664012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/flv/gstflvmux.c 2020-12-06 14:22:59.000000000 +0100 @@ -781,9 +781,10 @@ gst_flv_mux_release_pad (GstElement * element, GstPad * pad) { GstFlvMux *mux = GST_FLV_MUX (element); - GstFlvMuxPad *flvpad = GST_FLV_MUX_PAD (pad); + GstFlvMuxPad *flvpad = GST_FLV_MUX_PAD (gst_object_ref (pad)); + + GST_ELEMENT_CLASS (gst_flv_mux_parent_class)->release_pad (element, pad); - gst_pad_set_active (pad, FALSE); gst_flv_mux_reset_pad (flvpad); if (flvpad == mux->video_pad) { @@ -794,7 +795,7 @@ GST_WARNING_OBJECT (pad, "Pad is not known audio or video pad"); } - gst_element_remove_pad (element, pad); + gst_object_unref (flvpad); } static GstFlowReturn diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/isomp4/gstqtmux.c new/gst-plugins-good-1.18.2/gst/isomp4/gstqtmux.c --- old/gst-plugins-good-1.18.1/gst/isomp4/gstqtmux.c 2020-10-26 12:12:12.672011900 +0100 +++ new/gst-plugins-good-1.18.2/gst/isomp4/gstqtmux.c 2020-12-06 14:22:59.000000000 +0100 @@ -3377,6 +3377,7 @@ gst_aggregator_update_segment (GST_AGGREGATOR (qtmux), &segment); } + GST_OBJECT_LOCK (qtmux); qtmux->current_chunk_size = 0; qtmux->current_chunk_duration = 0; qtmux->current_chunk_offset = -1; @@ -3384,7 +3385,6 @@ qtmux->current_pad = NULL; qtmux->longest_chunk = GST_CLOCK_TIME_NONE; - GST_OBJECT_LOCK (qtmux); for (l = GST_ELEMENT_CAST (qtmux)->sinkpads; l; l = l->next) { GstQTMuxPad *qtpad = (GstQTMuxPad *) l->data; @@ -6486,18 +6486,25 @@ gst_qt_mux_release_pad (GstElement * element, GstPad * pad) { GstQTMux *mux = GST_QT_MUX_CAST (element); + GstQTMuxPad *muxpad = GST_QT_MUX_PAD_CAST (pad); GST_DEBUG_OBJECT (element, "Releasing %s:%s", GST_DEBUG_PAD_NAME (pad)); - gst_element_remove_pad (element, pad); + /* Take a ref to the pad so we can clean it up after removing it from the element */ + pad = gst_object_ref (pad); + + /* Do aggregate level cleanup */ + GST_ELEMENT_CLASS (parent_class)->release_pad (element, pad); + GST_OBJECT_LOCK (mux); if (mux->current_pad && GST_PAD (mux->current_pad) == pad) { mux->current_pad = NULL; mux->current_chunk_size = 0; mux->current_chunk_duration = 0; } - GST_OBJECT_LOCK (mux); + gst_qt_mux_pad_reset (muxpad); + if (GST_ELEMENT (mux)->sinkpads == NULL) { /* No more outstanding request pads, reset our counters */ mux->video_pads = 0; @@ -6505,6 +6512,8 @@ mux->subtitle_pads = 0; } GST_OBJECT_UNLOCK (mux); + + gst_object_unref (pad); } static GstAggregatorPad * @@ -6572,9 +6581,12 @@ g_free (name); /* set up pad */ + GST_OBJECT_LOCK (qtmux); gst_qt_mux_pad_reset (qtpad); qtpad->trak = atom_trak_new (qtmux->context); + atom_moov_add_trak (qtmux->moov, qtpad->trak); + GST_OBJECT_UNLOCK (qtmux); /* set up pad functions */ qtpad->set_caps = setcaps_func; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/matroska/matroska-mux.c new/gst-plugins-good-1.18.2/gst/matroska/matroska-mux.c --- old/gst-plugins-good-1.18.1/gst/matroska/matroska-mux.c 2020-10-26 12:12:12.680012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/matroska/matroska-mux.c 2020-12-06 14:22:59.000000000 +0100 @@ -2255,8 +2255,6 @@ static gboolean gst_matroska_mux_subtitle_pad_setcaps (GstPad * pad, GstCaps * caps) { - GstCollectData *data = (GstCollectData *) (pad); - /* There is now (at least) one such alement (kateenc), and I'm going to handle it here and claim it works when it can be piped back through GStreamer and VLC */ @@ -2265,6 +2263,7 @@ GstMatroskaTrackSubtitleContext *scontext; GstMatroskaMux *mux; GstMatroskaPad *collect_pad; + GstCollectData *data; const gchar *mimetype; GstStructure *structure; const GValue *value = NULL; @@ -2293,6 +2292,8 @@ /* find context */ collect_pad = (GstMatroskaPad *) gst_pad_get_element_private (pad); g_assert (collect_pad); + data = (GstCollectData *) (collect_pad); + context = collect_pad->track; g_assert (context); g_assert (context->type == GST_MATROSKA_TRACK_TYPE_SUBTITLE); @@ -2373,10 +2374,8 @@ GST_COLLECT_PADS_STREAM_LOCK (mux->collect); GST_COLLECT_PADS_STATE_UNSET (data, GST_COLLECT_PADS_STATE_LOCKED); gst_collect_pads_set_waiting (mux->collect, data, FALSE); - GST_COLLECT_PADS_STATE_SET (data, GST_COLLECT_PADS_STATE_LOCKED); GST_COLLECT_PADS_STREAM_UNLOCK (mux->collect); - exit: return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/multifile/gstsplitmuxsink.c new/gst-plugins-good-1.18.2/gst/multifile/gstsplitmuxsink.c --- old/gst-plugins-good-1.18.1/gst/multifile/gstsplitmuxsink.c 2020-10-26 12:12:12.684012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/multifile/gstsplitmuxsink.c 2020-12-06 14:22:59.000000000 +0100 @@ -80,6 +80,9 @@ GST_DEBUG_CATEGORY_STATIC (splitmux_debug); #define GST_CAT_DEFAULT splitmux_debug +#define GST_SPLITMUX_STATE_LOCK(s) g_mutex_lock(&(s)->state_lock) +#define GST_SPLITMUX_STATE_UNLOCK(s) g_mutex_unlock(&(s)->state_lock) + #define GST_SPLITMUX_LOCK(s) g_mutex_lock(&(s)->lock) #define GST_SPLITMUX_UNLOCK(s) g_mutex_unlock(&(s)->lock) #define GST_SPLITMUX_WAIT_INPUT(s) g_cond_wait (&(s)->input_cond, &(s)->lock) @@ -577,6 +580,7 @@ gst_splitmux_sink_init (GstSplitMuxSink * splitmux) { g_mutex_init (&splitmux->lock); + g_mutex_init (&splitmux->state_lock); g_cond_init (&splitmux->input_cond); g_cond_init (&splitmux->output_cond); g_queue_init (&splitmux->out_cmd_q); @@ -650,6 +654,7 @@ g_cond_clear (&splitmux->input_cond); g_cond_clear (&splitmux->output_cond); g_mutex_clear (&splitmux->lock); + g_mutex_clear (&splitmux->state_lock); g_queue_foreach (&splitmux->out_cmd_q, (GFunc) out_cmd_buf_free, NULL); g_queue_clear (&splitmux->out_cmd_q); @@ -1178,16 +1183,15 @@ helper->pad = sinkpad; /* Takes the reference */ ctx->out_eos_async_done = TRUE; - /* HACK: Here, we explicitly unset the SINK flag on the target sink element - * that's about to be asynchronously disposed, so that it no longer - * participates in GstBin EOS logic. This fixes a race where if - * splitmuxsink really reaches EOS before an asynchronous background - * element has finished, then the bin won't actually send EOS to the - * pipeline. Even after finishing and removing the old element, the - * bin doesn't re-check EOS status on removing a SINK element. This - * should be fixed in core, making this hack unnecessary. */ - GST_OBJECT_FLAG_UNSET (splitmux->active_sink, GST_ELEMENT_FLAG_SINK); + /* There used to be a bug here, where we had to explicitly remove + * the SINK flag so that GstBin would ignore it for EOS purposes. + * That fixed a race where if splitmuxsink really reaches EOS + * before an asynchronous background element has finished, then + * the bin wouldn't actually send EOS to the pipeline. Even after + * finishing and removing the old element, the bin didn't re-check + * EOS status on removing a SINK element. That bug was fixed + * in core. */ GST_DEBUG_OBJECT (splitmux, "scheduled EOS to pad %" GST_PTR_FORMAT " ctx %p", sinkpad, ctx); @@ -1263,6 +1267,7 @@ continue; case SPLITMUX_OUTPUT_STATE_ENDING_FILE: + case SPLITMUX_OUTPUT_STATE_ENDING_STREAM: /* We've reached the max out running_time to get here, so end this file now */ if (ctx->out_eos == FALSE) { if (splitmux->async_finalize) { @@ -1586,6 +1591,12 @@ if (splitmux->output_state == SPLITMUX_OUTPUT_STATE_STOPPED) goto beach; ctx->out_eos = TRUE; + + if (ctx == splitmux->reference_ctx) { + splitmux->output_state = SPLITMUX_OUTPUT_STATE_ENDING_STREAM; + GST_SPLITMUX_BROADCAST_OUTPUT (splitmux); + } + GST_INFO_OBJECT (splitmux, "Have EOS event at pad %" GST_PTR_FORMAT " ctx %p", pad, ctx); break; @@ -1900,7 +1911,14 @@ sink = gst_object_ref (splitmux->active_sink); GST_SPLITMUX_UNLOCK (splitmux); - GST_STATE_LOCK (splitmux); + GST_SPLITMUX_STATE_LOCK (splitmux); + + if (splitmux->shutdown) { + GST_DEBUG_OBJECT (splitmux, + "Shutdown requested. Aborting fragment switch."); + GST_SPLITMUX_STATE_UNLOCK (splitmux); + return; + } if (splitmux->async_finalize) { if (splitmux->muxed_out_bytes > 0 @@ -2013,7 +2031,7 @@ gst_object_unref (muxer); GST_SPLITMUX_LOCK (splitmux); - GST_STATE_UNLOCK (splitmux); + GST_SPLITMUX_STATE_UNLOCK (splitmux); splitmux->switching_fragment = FALSE; do_async_done (splitmux); @@ -2031,7 +2049,7 @@ return; fail: - GST_STATE_UNLOCK (splitmux); + GST_SPLITMUX_STATE_UNLOCK (splitmux); GST_ELEMENT_ERROR (splitmux, RESOURCE, SETTINGS, ("Could not create the new muxer/sink"), NULL); } @@ -2084,7 +2102,12 @@ GST_SPLITMUX_UNLOCK (splitmux); return; } - } else if (splitmux->output_state == SPLITMUX_OUTPUT_STATE_ENDING_FILE) { + } else if (splitmux->output_state == SPLITMUX_OUTPUT_STATE_ENDING_STREAM) { + GST_DEBUG_OBJECT (splitmux, + "Passing EOS message. Output state %d max_out_running_time %" + GST_STIME_FORMAT, splitmux->output_state, + GST_STIME_ARGS (splitmux->max_out_running_time)); + } else { GST_DEBUG_OBJECT (splitmux, "Caught EOS at end of fragment, dropping"); splitmux->output_state = SPLITMUX_OUTPUT_STATE_START_NEXT_FILE; GST_SPLITMUX_BROADCAST_OUTPUT (splitmux); @@ -2092,11 +2115,6 @@ gst_message_unref (message); GST_SPLITMUX_UNLOCK (splitmux); return; - } else { - GST_DEBUG_OBJECT (splitmux, - "Passing EOS message. Output state %d max_out_running_time %" - GST_STIME_FORMAT, splitmux->output_state, - GST_STIME_ARGS (splitmux->max_out_running_time)); } GST_SPLITMUX_UNLOCK (splitmux); break; @@ -2186,8 +2204,10 @@ && splitmux->muxer_has_reserved_props; GST_OBJECT_UNLOCK (splitmux); - /* Have we muxed anything into the new file at all? */ - if (splitmux->fragment_total_bytes <= 0) + /* Have we muxed at least one thing from the reference + * stream into the file? If not, no other streams can have + * either */ + if (splitmux->fragment_reference_bytes <= 0) return FALSE; /* User told us to split now */ @@ -2361,6 +2381,7 @@ new_out_ts = splitmux->reference_ctx->in_running_time; splitmux->fragment_start_time = splitmux->gop_start_time; splitmux->fragment_total_bytes = 0; + splitmux->fragment_reference_bytes = 0; if (splitmux->tc_interval) { video_time_code_replace (&splitmux->fragment_start_tc, @@ -2501,16 +2522,19 @@ if (ctx->in_eos) return; - /* Some pad is not yet ready, or GOP is being pushed - * either way, sleep and wait to get woken */ - if (splitmux->input_state == SPLITMUX_INPUT_STATE_WAITING_GOP_COLLECT && !ctx->flushing && (ctx->in_running_time >= splitmux->max_in_running_time) && (splitmux->max_in_running_time != GST_CLOCK_STIME_NONE)) { + /* Some pad is not yet ready, or GOP is being pushed + * either way, sleep and wait to get woken */ GST_LOG_OBJECT (splitmux, "Sleeping for GOP collection (ctx %p)", ctx); GST_SPLITMUX_WAIT_INPUT (splitmux); GST_LOG_OBJECT (splitmux, "Done waiting for complete GOP (ctx %p)", ctx); + } else { + /* This pad is not ready or the state changed - break out and get another + * buffer / event */ + break; } } while (splitmux->input_state == SPLITMUX_INPUT_STATE_WAITING_GOP_COLLECT); } @@ -2800,6 +2824,9 @@ /* Update total input byte counter for overflow detect */ splitmux->gop_total_bytes += buf_info->buf_size; + if (ctx->is_reference) { + splitmux->fragment_reference_bytes += buf_info->buf_size; + } /* Now add this buffer to the queue just before returning */ g_queue_push_head (&ctx->queued_bufs, buf_info); @@ -3494,6 +3521,7 @@ GST_CLOCK_STIME_NONE; splitmux->max_out_running_time = 0; splitmux->fragment_total_bytes = 0; + splitmux->fragment_reference_bytes = 0; splitmux->gop_total_bytes = 0; splitmux->muxed_out_bytes = 0; splitmux->ready_for_output = FALSE; @@ -3540,12 +3568,21 @@ splitmux->output_state = SPLITMUX_OUTPUT_STATE_START_NEXT_FILE; GST_SPLITMUX_UNLOCK (splitmux); + + GST_SPLITMUX_STATE_LOCK (splitmux); + splitmux->shutdown = FALSE; + GST_SPLITMUX_STATE_UNLOCK (splitmux); break; } case GST_STATE_CHANGE_PAUSED_TO_READY: g_atomic_int_set (&(splitmux->split_requested), FALSE); g_atomic_int_set (&(splitmux->do_split_next_gop), FALSE); + case GST_STATE_CHANGE_READY_TO_NULL: + GST_SPLITMUX_STATE_LOCK (splitmux); + splitmux->shutdown = TRUE; + GST_SPLITMUX_STATE_UNLOCK (splitmux); + GST_SPLITMUX_LOCK (splitmux); gst_splitmux_sink_reset (splitmux); splitmux->output_state = SPLITMUX_OUTPUT_STATE_STOPPED; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/multifile/gstsplitmuxsink.h new/gst-plugins-good-1.18.2/gst/multifile/gstsplitmuxsink.h --- old/gst-plugins-good-1.18.1/gst/multifile/gstsplitmuxsink.h 2020-10-26 12:12:12.684012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/multifile/gstsplitmuxsink.h 2020-12-06 14:22:59.000000000 +0100 @@ -50,6 +50,7 @@ SPLITMUX_OUTPUT_STATE_AWAITING_COMMAND, /* Waiting first command packet from input */ SPLITMUX_OUTPUT_STATE_OUTPUT_GOP, /* Outputting a collected GOP */ SPLITMUX_OUTPUT_STATE_ENDING_FILE, /* Finishing the current fragment */ + SPLITMUX_OUTPUT_STATE_ENDING_STREAM, /* Finishing up the entire stream due to input EOS */ SPLITMUX_OUTPUT_STATE_START_NEXT_FILE /* Restarting after ENDING_FILE */ } SplitMuxOutputState; @@ -105,7 +106,11 @@ { GstBin parent; + GMutex state_lock; + gboolean shutdown; + GMutex lock; + GCond input_cond; GCond output_cond; @@ -144,6 +149,10 @@ /* Number of bytes sent to the * current fragment */ guint64 fragment_total_bytes; + /* Number of bytes for the reference + * stream in this fragment */ + guint64 fragment_reference_bytes; + /* Number of bytes we've collected into * the GOP that's being collected */ guint64 gop_total_bytes; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/multifile/gstsplitmuxsrc.c new/gst-plugins-good-1.18.2/gst/multifile/gstsplitmuxsrc.c --- old/gst-plugins-good-1.18.1/gst/multifile/gstsplitmuxsrc.c 2020-10-26 12:12:12.684012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/multifile/gstsplitmuxsrc.c 2020-12-06 14:22:59.000000000 +0100 @@ -993,7 +993,7 @@ SPLITMUX_SRC_LOCK (splitmux); if (!splitmux->running) goto out; - + splitmux->running = FALSE; GST_DEBUG_OBJECT (splitmux, "Stopping"); SPLITMUX_SRC_UNLOCK (splitmux); @@ -1028,7 +1028,6 @@ splitmux->num_parts = 0; splitmux->num_prepared_parts = 0; splitmux->num_created_parts = 0; - splitmux->running = FALSE; splitmux->total_duration = GST_CLOCK_TIME_NONE; /* Reset playback segment */ gst_segment_init (&splitmux->play_segment, GST_FORMAT_TIME); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/rtsp/gstrtspsrc.c new/gst-plugins-good-1.18.2/gst/rtsp/gstrtspsrc.c --- old/gst-plugins-good-1.18.1/gst/rtsp/gstrtspsrc.c 2020-10-26 12:12:12.704012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/rtsp/gstrtspsrc.c 2020-12-06 14:22:59.000000000 +0100 @@ -1400,6 +1400,7 @@ src->onvif_rate_control = DEFAULT_ONVIF_RATE_CONTROL; src->is_live = DEFAULT_IS_LIVE; src->seek_seqnum = GST_SEQNUM_INVALID; + src->group_id = GST_GROUP_ID_INVALID; /* get a list of all extensions */ src->extensions = gst_rtsp_ext_list_get (); @@ -1423,6 +1424,8 @@ g_mutex_init (&src->conninfo.recv_lock); g_cond_init (&src->cmd_cond); + g_mutex_init (&src->group_lock); + GST_OBJECT_FLAG_SET (src, GST_ELEMENT_FLAG_SOURCE); gst_bin_set_suppressed_flags (GST_BIN (src), GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); @@ -1478,6 +1481,8 @@ g_mutex_clear (&rtspsrc->conninfo.recv_lock); g_cond_clear (&rtspsrc->cmd_cond); + g_mutex_clear (&rtspsrc->group_lock); + G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -2987,6 +2992,19 @@ return res; } +static void +gst_rtspsrc_stream_start_event_add_group_id (GstRTSPSrc * src, GstEvent * event) +{ + g_mutex_lock (&src->group_lock); + + if (src->group_id == GST_GROUP_ID_INVALID) + src->group_id = gst_util_group_id_next (); + + g_mutex_unlock (&src->group_lock); + + gst_event_set_group_id (event, src->group_id); +} + static gboolean gst_rtspsrc_handle_src_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) @@ -2998,14 +3016,22 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_STREAM_START:{ - const gchar *upstream_id; + GChecksum *cs; + gchar *uri; gchar *stream_id; - gst_event_parse_stream_start (event, &upstream_id); - stream_id = g_strdup_printf ("%s/%s", upstream_id, stream->stream_id); + cs = g_checksum_new (G_CHECKSUM_SHA256); + uri = self->conninfo.location; + g_checksum_update (cs, (const guchar *) uri, strlen (uri)); + stream_id = + g_strdup_printf ("%s/%s", g_checksum_get_string (cs), + stream->stream_id); + + g_checksum_free (cs); gst_event_unref (event); event = gst_event_new_stream_start (stream_id); + gst_rtspsrc_stream_start_event_add_group_id (self, event); g_free (stream_id); break; } @@ -5388,7 +5414,6 @@ GChecksum *cs; gchar *uri; GList *streams; - guint group_id = gst_util_group_id_next (); /* generate an SHA256 sum of the URI */ cs = g_checksum_new (G_CHECKSUM_SHA256); @@ -5406,8 +5431,10 @@ stream_id = g_strdup_printf ("%s/%d", g_checksum_get_string (cs), ostream->id); + event = gst_event_new_stream_start (stream_id); - gst_event_set_group_id (event, group_id); + + gst_rtspsrc_stream_start_event_add_group_id (src, event); g_free (stream_id); gst_rtspsrc_stream_push_event (src, ostream, event); @@ -9168,6 +9195,7 @@ } break; case GST_STATE_CHANGE_PAUSED_TO_READY: + rtspsrc->group_id = GST_GROUP_ID_INVALID; break; default: break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst/rtsp/gstrtspsrc.h new/gst-plugins-good-1.18.2/gst/rtsp/gstrtspsrc.h --- old/gst-plugins-good-1.18.1/gst/rtsp/gstrtspsrc.h 2020-10-26 12:12:12.704012000 +0100 +++ new/gst-plugins-good-1.18.2/gst/rtsp/gstrtspsrc.h 2020-12-06 14:22:59.000000000 +0100 @@ -324,6 +324,9 @@ GstRTSPVersion version; GstEvent *initial_seek; + + guint group_id; + GMutex group_lock; }; struct _GstRTSPSrcClass { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/gst-plugins-good.doap new/gst-plugins-good-1.18.2/gst-plugins-good.doap --- old/gst-plugins-good-1.18.1/gst-plugins-good.doap 2020-10-26 12:12:12.644011700 +0100 +++ new/gst-plugins-good-1.18.2/gst-plugins-good.doap 2020-12-06 14:22:59.000000000 +0100 @@ -34,6 +34,16 @@ <release> <Version> + <revision>1.18.2</revision> + <branch>1.18</branch> + <name></name> + <created>2020-12-06</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.18.2.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.18.1</revision> <branch>1.18</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/meson.build new/gst-plugins-good-1.18.2/meson.build --- old/gst-plugins-good-1.18.1/meson.build 2020-10-26 12:12:12.712011800 +0100 +++ new/gst-plugins-good-1.18.2/meson.build 2020-12-06 14:22:59.000000000 +0100 @@ -1,5 +1,5 @@ project('gst-plugins-good', 'c', - version : '1.18.1', + version : '1.18.2', meson_version : '>= 0.48', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -363,9 +363,7 @@ # FIXME: nasm path needs testing on non-Linux, esp. Windows host_cpu = host_machine.cpu_family() if host_cpu == 'x86_64' - if cc.get_id() == 'msvc' - message('Nasm disabled on MSVC') - elif cc.get_define('__ILP32__') == '1' + if cc.get_define('__ILP32__') == '1' message('Nasm disabled on x32') else asm_option = get_option('asm') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/sys/rpicamsrc/meson.build new/gst-plugins-good-1.18.2/sys/rpicamsrc/meson.build --- old/gst-plugins-good-1.18.1/sys/rpicamsrc/meson.build 2020-10-26 12:12:12.724012000 +0100 +++ new/gst-plugins-good-1.18.2/sys/rpicamsrc/meson.build 2020-12-06 14:22:59.000000000 +0100 @@ -34,7 +34,7 @@ endif mmal_deps = [] -foreach rpi_lib : ['mmal_core', 'mmal_util', 'mmal_vc_client', 'vcos', 'bcm_host'] +foreach rpi_lib : ['mmal_core', 'mmal_util', 'mmal_vc_client', 'vcos', 'vchostif', 'bcm_host'] l = cc.find_library(rpi_lib, dirs: rpi_lib_path, required: false) if not l.found() if get_option('rpicamsrc').enabled() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/sys/v4l2/gstv4l2object.c new/gst-plugins-good-1.18.2/sys/v4l2/gstv4l2object.c --- old/gst-plugins-good-1.18.1/sys/v4l2/gstv4l2object.c 2020-10-26 12:12:12.728011800 +0100 +++ new/gst-plugins-good-1.18.2/sys/v4l2/gstv4l2object.c 2020-12-06 14:22:59.000000000 +0100 @@ -1644,10 +1644,11 @@ gst_v4l2_object_get_caps_helper (GstV4L2FormatFlags flags) { GstStructure *structure; - GstCaps *caps; + GstCaps *caps, *caps_interlaced; guint i; caps = gst_caps_new_empty (); + caps_interlaced = gst_caps_new_empty (); for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) { if ((gst_v4l2_formats[i].flags & flags) == 0) @@ -1680,14 +1681,19 @@ gst_caps_append_structure (caps, structure); - if (alt_s) + if (alt_s) { gst_caps_append_structure (caps, alt_s); + add_alternate_variant (NULL, caps_interlaced, alt_s); + } - add_alternate_variant (NULL, caps, structure); + add_alternate_variant (NULL, caps_interlaced, structure); } } - return gst_caps_simplify (caps); + caps = gst_caps_simplify (caps); + caps_interlaced = gst_caps_simplify (caps_interlaced); + + return gst_caps_merge (caps, caps_interlaced); } GstCaps * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/tests/check/elements/splitmuxsrc.c new/gst-plugins-good-1.18.2/tests/check/elements/splitmuxsrc.c --- old/gst-plugins-good-1.18.1/tests/check/elements/splitmuxsrc.c 2020-10-26 12:12:12.740012000 +0100 +++ new/gst-plugins-good-1.18.2/tests/check/elements/splitmuxsrc.c 2020-12-06 14:22:59.000000000 +0100 @@ -635,9 +635,9 @@ gchar *dest_pattern; gchar *in_pattern; - /* This test creates a new file only by changing the caps, which - * qtmux will reject (for now - if qtmux starts supporting caps - * changes, this test will break and need fixing/disabling */ + /* This test checks that splitmuxsink can support the + * qtmux robust muxing mode, and switch to a new fragment if the + * file index is about to overflow */ pipeline = gst_parse_launch ("videotestsrc num-buffers=10 !" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gst-plugins-good-1.18.1/tests/examples/qt/qmlsink-dynamically-added/.gitignore new/gst-plugins-good-1.18.2/tests/examples/qt/qmlsink-dynamically-added/.gitignore --- old/gst-plugins-good-1.18.1/tests/examples/qt/qmlsink-dynamically-added/.gitignore 2020-10-26 12:12:12.744011900 +0100 +++ new/gst-plugins-good-1.18.2/tests/examples/qt/qmlsink-dynamically-added/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1,4 +0,0 @@ -deployment.pri -play -qrc_qmlsink.cpp -*.o _______________________________________________ openSUSE Commits mailing list -- commit@lists.opensuse.org To unsubscribe, email commit-le...@lists.opensuse.org List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette List Archives: https://lists.opensuse.org/archives/list/commit@lists.opensuse.org