Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gstreamer for openSUSE:Factory checked in at 2022-12-25 15:14:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer (Old) and /work/SRC/openSUSE:Factory/.gstreamer.new.1563 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer" Sun Dec 25 15:14:21 2022 rev:82 rq:1045094 version:1.20.5 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer/gstreamer.changes 2022-10-25 11:18:39.557957366 +0200 +++ /work/SRC/openSUSE:Factory/.gstreamer.new.1563/gstreamer.changes 2022-12-25 15:14:26.585233893 +0100 @@ -1,0 +2,59 @@ +Thu Dec 22 12:43:08 UTC 2022 - Dirk Müller <[email protected]> + +- update to 1.20.5: + + This release only contains bugfixes and it should be safe to + upgrade from 1.20.x. + + systemclock waiting fixes for certain 32-bit platforms/libcs + + alphacombine: robustness improvements for corner case scenarios + + avfvideosrc: Report latency when doing screen capture + + d3d11videosink: various thread-safety and stability fixes + + decklink: fix performance issue when HDMI signal has been lost + for a long time + + flacparse: Fix handling of headers advertising 32 bits per + sample + + mpegts: Handle when iconv doesn't support ISO 6937 (e.g. musl + libc) + + opengl: fix automatic dispmanx detection for rpi4 and fix usage + of eglCreate/DestroyImage + + opusdec: Various channel-related fixes + + textrender: event handling fixes, esp. for GAP event + + subparse: Fix non-closed tag handling + + videoscale: fix handling of unknown buffer metas + + videosink: reverse playback handling fixes + + qtmux: Prefill mode fixes, especially for raw audio + + multiudpsink: allow binding to IPv6 address + + rtspsrc: + - Fix usage of IPv6 connections in SETUP + - Only EOS on timeout if all streams are timed out/EOS + + splitmuxsrc: fix playback stall if there are unlinked pads + + v4l2: Fix SIGSEGV on state change during format changes + + wavparse robustness fixes + + Fix static linking on macOS (opengl, vulkan) + + gstreamer-vaapi: fix headless build against mesa >= 22.3.0 + + GStreamer Editing Services library: Fix build with tools + disabled + + webrtc example/demo fixes + + unit test fixes for aesdec and rtpjitterbuffer + + Cerbero: Fix ios cross-compile with cmake on M1; some recipe + updates and other build fixes + + Miscellaneous bug fixes, memory leak fixes, and other stability + and reliability improvements + + Performance improvements + + Changes in gstreamer base package: + - allocator: Copy allocator name in gst_allocator_register() + - concat: Properly propagate EOS seqnum + - fakesrc: avoid time overflow with datarate + - Fix build of 1.20 branch with Meson 0.64.1 for those who have + hotdoc installed on their system. + - gst-inspect: Don't leak list + - meson: fix check for pthread_setname_np() + - miniobject: support higher refcount values + - pads: Fix non-serialized sticky event push, e.g. instant + change rate events + - padtemplate: Fix annotations + - systemclock: Use futex_time64 syscall on x32 and other + platforms that always... + - -Wimplicit-function-declaration in pthread_setname_np check + (missing GNUSOURCE) + +------------------------------------------------------------------- Old: ---- gstreamer-1.20.4.tar.xz New: ---- gstreamer-1.20.5.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer.spec ++++++ --- /var/tmp/diff_new_pack.IZL6A4/_old 2022-12-25 15:14:27.941241570 +0100 +++ /var/tmp/diff_new_pack.IZL6A4/_new 2022-12-25 15:14:27.941241570 +0100 @@ -19,7 +19,7 @@ %define gst_branch 1.0 Name: gstreamer -Version: 1.20.4 +Version: 1.20.5 Release: 0 Summary: Streaming-Media Framework Runtime License: LGPL-2.1-or-later ++++++ gstreamer-1.20.4.tar.xz -> gstreamer-1.20.5.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/ChangeLog new/gstreamer-1.20.5/ChangeLog --- old/gstreamer-1.20.4/ChangeLog 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/ChangeLog 2022-12-20 00:34:46.000000000 +0100 @@ -1,7 +1,125 @@ +=== release 1.20.5 === + +2022-12-19 23:34:42 +0000 Tim-Philipp Müller <[email protected]> + + * NEWS: + * RELEASE: + * gstreamer.doap: + * meson.build: + Release 1.20.5 + +2022-12-19 23:34:34 +0000 Tim-Philipp Müller <[email protected]> + + * ChangeLog: + Update ChangeLogs for 1.20.5 + +2022-12-12 11:34:51 +0200 Sebastian Dröge <[email protected]> + + * gst/gstsystemclock.c: + * meson.build: + systemclock: Use `futex_time64` syscall if available (32-bit systems) and use correct `struct timespec` definition + See also https://gitlab.gnome.org/GNOME/glib/-/issues/2634 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1648 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3572> + +2022-11-07 09:27:09 -0500 Xavier Claessens <[email protected]> + + * docs/meson.build: + hotdoc: gst-hotdoc-plugins-scanner is not needed for libraries + Meson >= 0.64.0 does not allow any more to add executables into + hotdoc.generate_doc(..., dependencies: ...) and it should not be needed + any way. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3554> + +2022-12-07 11:49:40 +0000 Tim-Philipp Müller <[email protected]> + + * meson.build: + meson: fix check for pthread_setname_np() + Need to define _GNU_SOURCE. + Fixes #1542 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3539> + +2022-11-30 09:59:09 +0100 Edward Hervey <[email protected]> + + * tools/gst-inspect.c: + gst-inspect: Don't leak list + Just iterate the list instead of trying to be smart... + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3499> + +2022-11-18 16:57:16 +0100 Célestin Marot <[email protected]> + + * plugins/elements/gstfakesrc.c: + fakesrc: avoid time overflow with datarate + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3438> + +2022-11-08 17:45:37 +0200 Sebastian Dröge <[email protected]> + + * gst/gstallocator.c: + allocator: Switch `allow-none` annotations to `nullable` / `optional` + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3369> + +2022-11-08 17:44:54 +0200 Sebastian Dröge <[email protected]> + + * gst/gstallocator.c: + allocator: Copy allocator name in gst_allocator_register() + The parameter is not marked as `transfer full` and stays around in the + hash table, so we will have to copy it ourselves. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3369> + +2022-10-24 12:13:14 +0200 Edward Hervey <[email protected]> + + * gst/gstpad.c: + gstpad: Fix non-serialized sticky event push + With non-serialized sticky events, such as GST_EVENT_INSTANT_RATE, we both want + to store the event (for later re-linking) *AND* push the event in a non-blocking + way. + We therefore must *not* propagate pending sticky events if the event is "sticky + or serialized" but only if it's "serialized" + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3332> + +2022-10-27 15:13:36 +0300 Sebastian Dröge <[email protected]> + + * libs/gst/base/gstaggregator.c: + * libs/gst/base/gstbaseparse.c: + core/base: Only post latency messages if the latency values have actually changed + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1525 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3291> + +2022-10-27 11:18:24 +0200 Edward Hervey <[email protected]> + + * plugins/elements/gstconcat.c: + concat: Properly propagate EOS seqnum + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3288> + +2022-10-22 22:04:57 +0900 Seungha Yang <[email protected]> + + * gst/gstpadtemplate.c: + padtemplate: Fix annotations + gst_caps_replace() does not take ownership of the new caps + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3262> + +2022-10-18 16:41:36 +0200 Bunio_FH <[email protected]> + + * gst/gstminiobject.c: + gstminiobject: shares capacity increase + during the MSE (WebKit) tests from Apple suite: + https://hls-streaming.cdn-apple.com/hls_conformance/dist/v1.1/index.html?pretty=true&whitelist=MSE%20Suite + webkit attempts to add a single audio buffer containing ~35.5k frames. + when corresponding GstSamples are pulled buffer is being referenced + more than object capacity allows: 2^15-1. since the case could be considered + malformed a surgical patch is applied to increase the capacity. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3233> + +2022-10-12 18:40:25 +0100 Tim-Philipp Müller <[email protected]> + + * meson.build: + Back to development + === release 1.20.4 === 2022-10-12 16:39:47 +0100 Tim-Philipp Müller <[email protected]> + * ChangeLog: * NEWS: * RELEASE: * gstreamer.doap: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/NEWS new/gstreamer-1.20.5/NEWS --- old/gstreamer-1.20.4/NEWS 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/NEWS 2022-12-20 00:34:46.000000000 +0100 @@ -2,13 +2,13 @@ GStreamer 1.20.0 was originally released on 3 February 2022. -The latest bug-fix release in the 1.20 series is 1.20.4 and was released -on 12 October 2022. +The latest bug-fix release in the 1.20 series is 1.20.5 and was released +on 19 December 2022. See https://gstreamer.freedesktop.org/releases/1.20/ for the latest version of this document. -Last updated: Wednesday 12 October 2022, 15:00 UTC (log) +Last updated: Monday 19 December 2022, 19:00 UTC (log) Introduction @@ -1791,6 +1791,13 @@ Known Issues +- GStreamer may fail to build the hotdoc documentation with the Meson + 0.64.0 release owing to a Meson bug. This should only affect systems + where hotdoc is installed, and will be fixed in Meson 0.64.1 by this + Meson PR in combination with this GStreamer MR. In the meantime, + users can pass -Ddoc=disabledor downgrade to an older Meson version + (< 0.64.0). + - nothing in particular at this point (but also see possibly breaking changes section above) @@ -2530,6 +2537,7 @@ chroma (Y41B, YUV9, YVU9 and IYU9) - macOS build and packaging fixes, in particular fix finding of gio modules on macOS for https/TLS support +- Fix consuming of the macOS package as a framework in XCode - Performance improvements - Miscellaneous bug fixes, memory leak fixes, and other stability and reliability improvements @@ -2783,6 +2791,252 @@ - List of Merge Requests applied in 1.20.4 - List of Issues fixed in 1.20.4 +1.20.5 + +The fifth 1.20 bug-fix release (1.20.5) was released on 19 December +2022. + +This release only contains bugfixes and it should be safe to upgrade +from 1.20.x. + +Highlighted bugfixes in 1.20.5 + +- systemclock waiting fixes for certain 32-bit platforms/libcs +- alphacombine: robustness improvements for corner case scenarios +- avfvideosrc: Report latency when doing screen capture +- d3d11videosink: various thread-safety and stability fixes +- decklink: fix performance issue when HDMI signal has been lost for a + long time +- flacparse: Fix handling of headers advertising 32 bits per sample +- mpegts: Handle when iconv doesnât support ISO 6937 (e.g. musl libc) +- opengl: fix automatic dispmanx detection for rpi4 and fix usage of + eglCreate/DestroyImage +- opusdec: Various channel-related fixes +- textrender: event handling fixes, esp. for GAP event +- subparse: Fix non-closed tag handling +- videoscale: fix handling of unknown buffer metas +- videosink: reverse playback handling fixes +- qtmux: Prefill mode fixes, especially for raw audio +- multiudpsink: allow binding to IPv6 address +- rtspsrc: Fix usage of IPv6 connections in SETUP +- rtspsrc: Only EOS on timeout if all streams are timed out/EOS +- splitmuxsrc: fix playback stall if there are unlinked pads +- v4l2: Fix SIGSEGV on state change during format changes +- wavparse robustness fixes +- Fix static linking on macOS (opengl, vulkan) +- gstreamer-vaapi: fix headless build against mesa >= 22.3.0 +- GStreamer Editing Services library: Fix build with tools disabled +- webrtc example/demo fixes +- unit test fixes for aesdec and rtpjitterbuffer +- Cerbero: Fix ios cross-compile with cmake on M1; some recipe updates + and other build fixes +- Binary packages: pkg-config file fixes for various recipes (ffmpeg, + taglib, gstreamer) +- Binary packages: Enable high bitdepth support for libvpx (VP8/VP9 + encoding/decoding) +- Binary packages: ship aes plugin +- Miscellaneous bug fixes, memory leak fixes, and other stability and + reliability improvements +- Performance improvements + +gstreamer + +- allocator: Copy allocator name in gst_allocator_register() +- miniobject: support higher refcount values +- pads: Fix non-serialized sticky event push, e.g. instant change rate + events +- padtemplate: Fix annotations +- systemclock: Use futex_time64 syscall on x32 and other platforms + that always⦠+- Fix build of 1.20 branch with Meson 0.64.1 for those who have hotdoc + installed on their system. +- meson: fix check for pthread_setname_np() +- -Wimplicit-function-declaration in pthread_setname_np check (missing + _GNU_SOURCE) +- gst-inspect: Donât leak list + +Core Elements + +- concat: Properly propagate EOS seqnum +- fakesrc: avoid time overflow with datarate + +gst-plugins-base + +- audioconvert, audioresample, audiofilter: fix divide by 0 for input + buffer without caps +- cdparanoia: Ignore compiler warning coming from the cdparanoia + header +- oggdemux, parsebin: More leak fixes +- opengl: fix automatic dispmanx detection for rpi4 +- opengl: Fix usage of eglCreate/DestroyImage +- opengl: Fix static linking on macOS +- opusdec: Various channel-related fixes +- textrender: Negotiate caps on a GAP event if none were negotiated + yet +- textrender: Donât blindly forward all events and donât blindly + forward all events +- timeoverlay: fix pad leak +- oggdemux: Donât leak incoming EOS event +- subparse: Fix non-closed tag handling. +- videodecoder: Only post latency message if it changed +- videoscale: buffer meta handling fixes (NULL-terminate array of + valid meta tags) +- videosink: Donât return unknown end-time from get_times() +- Bump core requirement in 1.20 branch to 1.20.4 + +Tools + +- gst-play: Donât leak the stream collection + +gst-plugins-good + +- flacparse: Fix handling of headers advertising 32bps +- qt5: deactivate context if fill_info fails +- qt5: initialize GError properly in gst_qt_get_gl_wrapcontext() +- qtdemux: check return value from gst_structure_get in PIFF box +- qtdemux: use unsigned int types to store result of QT_UINT32 +- qtmux: Prefill mode fixes +- oss4: Fix debug category initialization +- multiudpsink: allow binding to IPv6 address +- rtpjitterbuffer tests: Cast drop-messages-interval type properly + (fixing it on 32-bit architectures) +- rtspsrc: fix seek event leaks +- rtspsrc: Donât replace 404 errors with âno auth protocol foundâ +- rtspsrc: Only EOS on timeout if all streams are timed out/EOS +- rtspsrc: Fix usage of IPv6 connections in SETUP +- splitmuxsrc: donât queue data on unlinked pads +- v4l2: Fix SIGSEGV on âchange stateâ during âformat changeâ +- v4l2videodec: Fix activation of internal pool +- wavparse: Avoid occasional crash due to referencing freed buffer. +- wavparse: Fix crash that occurs in push mode when header chunks are + corrupted in certain ways. + +gst-plugins-bad + +- aesdec: Fix padding removal for per-buffer-padding=FALSE +- aesdec test failing in gst-plugins-bad +- alphacombine: Add missing query handler for gaps +- avfdeviceprovider: do not leak the properties +- avfvideosrc: Report latency when doing screen capture +- d3d11screencapturesrc: Specify PAR 1/1 to template caps +- d3d11videosink: Fixing focus lost on desktop layout change +- d3d11videosink: Call ShowWindow() from window thread +- d3d11videosink: Fix deadlock when parent window is busy +- d3d11videosink: Always clear back buffer on resize +- decklink: reset calculation of time_mapping to fix clipping HDMI + video +- directshow: Fix build error with glib 2.75 and newer +- dvbsubenc: Forward GAP events as-is if we wouldnât produce an end + packet and⦠+- dvbsubenc: Write Display Definition Segment if a non-default + width/height is used +- h265decoder: Do not abort when failed to prepare ref pic set +- h264parser: Fix a typo in pred_weight_table parsing. +- mediafoundation, d3d11: Fix memory leak and make leak tracer happy +- mpegts: Handle when iconv doesnât support ISO 6937 (e.g. musl libc) +- mpegts: Check continuity counter on section streams +- mpegts: Revert âmpegtspacketizer: memcmp potentially seen_before + dataâ +- mpegtspacketizer: memcmp potentially seen_before data +- mpegtsdemux: Always clear packetizer on DISCONT push mode +- srt: various fixes - improve stats and error handling +- rtmp2: Improve error messages +- rtmp2sink: Correctly return GST_FLOW_ERROR on error +- vulkan: Fix static linking on macOS +- webrtcbin: also add rtcp-fb ccm fir for video mlines by default +- webrtc/nice: fix small leak of split strings + +gst-plugins-ugly + +- No changes + +gst-libav + +- avdec_h265: Fix endless renegotiation with alternate interlacing +- avviddec: Avoid flushing on framerate changes + +gst-rtsp-server + +- rtsp-server: Free client if no connection could be created + +gstreamer-vaapi + +- vaapi: prefix internal USE_X11 define to fix build with mesa 22.3.0 +- vaapi: libs: context: use queried value for attrib +- gstreamer-vaapi cannot be built without X11 with recent mesa + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- No changes + +gst-editing-services + +- Fix building ges with tools disabled +- Fix leaks and minor races in GES + +gst-examples: + +- webrtc: Fix double free in webrtc-recvonly-h264 demo +- webrtc: Fix critical in webrtc-recvonly-h264 example +- webrtc/signalling examples: Fix compatibility with Python 3.10 + +Development build environment + gst-full build + +- No major changes + +Cerbero build tool and packaging changes in 1.20.5 + +- oven: output status line at least every minute +- Unconditionally set CMAKE_SYSTEM_NAME on Windows +- Fix ios cross-compile with cmake on M1 +- Speed up downloads on Windows drastically +- Fix tar usage on bsdtar and print progress while compressing +- Actually print the sha for which the cache was not found + +Recipes + +- ffmpeg: add patch to generate the pc files properly +- taglib: add patch to generate the pc files properly +- fontconfig: update to 2.14.1 +- Windows: Crash on GStreamer 1.20.x x86_64 MSVC + MS-Windows due to + libfontconfig fonts.conf file invalid. +- openssl: Fix compile errors on upgrades +- moltenvk: Also ship the static library on macOS +- gstreamer: Add some missing pkgconfig files +- gst-plugins-good: Fix post_install failure when qt5 is enabled +- gst-plugins-bad: Ship AES plugin +- libvpx: Enable high bitdepth support +- openssl: update to 1.1.1s +- glib: Update patch to auto-detect modules on macOS + +Contributors to 1.20.5 + +Aleksandr Slobodeniuk, Arun Raghavan, A. Wilcox, Bo Elmgreen, Boyuan +Zhang, Bunio FH, Célestin Marot, Devin Anderson, Edward Hervey, He +Junyan, Ignacio Casal Quinteiro, Jacek Skiba, Jan Alexander Steffens +(heftig), Jan Schmidt, Jonas Bonn, Jordan Petridis, Justin Chadwell, +Linus Svensson, Marek Olejnik, Mathieu Duponchelle, Matthew Waters, +Nicolas Dufresne, Nirbheek Chauhan, Patrick Griffis, Pawel Stawicki, +Philippe Normand, Ruben Gonzalez, Sam Van Den Berge, Sebastian Dröge, +Seungha Yang, Stéphane Cerveau, Tim-Philipp Müller, Vivia Nikolaidou, +Wojciech Kapsa, 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.20.5 + +- List of Merge Requests applied in 1.20.5 +- List of Issues fixed in 1.20.5 + Schedule for 1.22 Our next major feature release will be 1.22, and 1.21 will be the @@ -2790,7 +3044,7 @@ development of 1.21/1.22 will happen in the git main branch. The plan for the 1.22 development cycle is now confirmed, and we aim for -a 1.22.0 release in December 2022. +a 1.22.0 release in December 2022 or early January 2023. 1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/RELEASE new/gstreamer-1.20.5/RELEASE --- old/gstreamer-1.20.4/RELEASE 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/RELEASE 2022-12-20 00:34:46.000000000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer core 1.20.4. +This is GStreamer core 1.20.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/gstreamer-1.20.4/docs/meson.build new/gstreamer-1.20.5/docs/meson.build --- old/gstreamer-1.20.4/docs/meson.build 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/docs/meson.build 2022-12-20 00:34:46.000000000 +0100 @@ -121,7 +121,7 @@ gi_index: 'gst/gi-index.md', gi_smart_index: true, gi_c_source_roots: [join_paths(meson.current_source_dir(), '../gst/'), ], - dependencies: [gst_dep, glib_dep, gobject_dep, gmodule_dep, hotdoc_plugin_scanner], + dependencies: [gst_dep, glib_dep, gobject_dep, gmodule_dep], extra_assets: [join_paths(meson.current_source_dir(), 'images')], )] @@ -147,7 +147,7 @@ gi_index: join_paths('libs/', name, 'index.md'), gi_smart_index: true, gi_order_generated_subpages: true, - dependencies: deps + [hotdoc_plugin_scanner], + dependencies: deps, install: false, )] endforeach diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/gst/gstallocator.c new/gstreamer-1.20.5/gst/gstallocator.c --- old/gstreamer-1.20.4/gst/gstallocator.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/gst/gstallocator.c 2022-12-20 00:34:46.000000000 +0100 @@ -233,13 +233,14 @@ g_rw_lock_writer_lock (&lock); /* The ref will never be released */ GST_OBJECT_FLAG_SET (allocator, GST_OBJECT_FLAG_MAY_BE_LEAKED); - g_hash_table_insert (allocators, (gpointer) name, (gpointer) allocator); + g_hash_table_insert (allocators, (gpointer) g_strdup (name), + (gpointer) allocator); g_rw_lock_writer_unlock (&lock); } /** * gst_allocator_find: - * @name: (allow-none): the name of the allocator + * @name: (nullable): the name of the allocator * * Find a previously registered allocator with @name. When @name is %NULL, the * default allocator will be returned. @@ -289,9 +290,9 @@ /** * gst_allocator_alloc: - * @allocator: (transfer none) (allow-none): a #GstAllocator to use + * @allocator: (transfer none) (nullable): a #GstAllocator to use * @size: size of the visible memory area - * @params: (transfer none) (allow-none): optional parameters + * @params: (transfer none) (nullable): optional parameters * * Use @allocator to allocate a new memory block with memory that is at least * @size big. @@ -599,7 +600,7 @@ _priv_gst_allocator_initialize (void) { g_rw_lock_init (&lock); - allocators = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, + allocators = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, gst_object_unref); #ifdef HAVE_GETPAGESIZE @@ -642,8 +643,8 @@ * @maxsize: allocated size of @data * @offset: offset in @data * @size: size of valid data - * @user_data: (allow-none): user_data - * @notify: (allow-none) (scope async) (closure user_data): called with @user_data when the memory is freed + * @user_data: (nullable): user_data + * @notify: (nullable) (scope async) (closure user_data): called with @user_data when the memory is freed * * Allocate a new memory block that wraps the given @data. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/gst/gstminiobject.c new/gstreamer-1.20.5/gst/gstminiobject.c --- old/gstreamer-1.20.4/gst/gstminiobject.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/gst/gstminiobject.c 2022-12-20 00:34:46.000000000 +0100 @@ -217,7 +217,7 @@ gboolean gst_mini_object_lock (GstMiniObject * object, GstLockFlags flags) { - gint access_mode, state, newstate; + guint access_mode, state, newstate; g_return_val_if_fail (object != NULL, FALSE); g_return_val_if_fail (GST_MINI_OBJECT_IS_LOCKABLE (object), FALSE); @@ -228,9 +228,9 @@ do { access_mode = flags & FLAG_MASK; - newstate = state = g_atomic_int_get (&object->lockstate); + newstate = state = (guint) g_atomic_int_get (&object->lockstate); - GST_CAT_TRACE (GST_CAT_LOCKING, "lock %p: state %08x, access_mode %d", + GST_CAT_TRACE (GST_CAT_LOCKING, "lock %p: state %08x, access_mode %u", object, state, access_mode); if (access_mode & GST_LOCK_FLAG_EXCLUSIVE) { @@ -265,7 +265,7 @@ lock_failed: { GST_CAT_DEBUG (GST_CAT_LOCKING, - "lock failed %p: state %08x, access_mode %d", object, state, + "lock failed %p: state %08x, access_mode %u", object, state, access_mode); return FALSE; } @@ -281,16 +281,16 @@ void gst_mini_object_unlock (GstMiniObject * object, GstLockFlags flags) { - gint access_mode, state, newstate; + guint access_mode, state, newstate; g_return_if_fail (object != NULL); g_return_if_fail (GST_MINI_OBJECT_IS_LOCKABLE (object)); do { access_mode = flags & FLAG_MASK; - newstate = state = g_atomic_int_get (&object->lockstate); + newstate = state = (guint) g_atomic_int_get (&object->lockstate); - GST_CAT_TRACE (GST_CAT_LOCKING, "unlock %p: state %08x, access_mode %d", + GST_CAT_TRACE (GST_CAT_LOCKING, "unlock %p: state %08x, access_mode %u", object, state, access_mode); if (access_mode & GST_LOCK_FLAG_EXCLUSIVE) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/gst/gstpad.c new/gstreamer-1.20.5/gst/gstpad.c --- old/gstreamer-1.20.4/gst/gstpad.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/gst/gstpad.c 2022-12-20 00:34:46.000000000 +0100 @@ -5492,8 +5492,7 @@ GST_PAD_PROBE_TYPE_BLOCK, event, probe_stopped); /* recheck sticky events because the probe might have cause a relink */ if (GST_PAD_HAS_PENDING_EVENTS (pad) && GST_PAD_IS_SRC (pad) - && (GST_EVENT_IS_SERIALIZED (event) - || GST_EVENT_IS_STICKY (event))) { + && (GST_EVENT_IS_SERIALIZED (event))) { PushStickyData data = { GST_FLOW_OK, FALSE, event }; GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PENDING_EVENTS); @@ -5510,8 +5509,7 @@ /* recheck sticky events because the probe might have cause a relink */ if (GST_PAD_HAS_PENDING_EVENTS (pad) && GST_PAD_IS_SRC (pad) - && (GST_EVENT_IS_SERIALIZED (event) - || GST_EVENT_IS_STICKY (event))) { + && (GST_EVENT_IS_SERIALIZED (event))) { PushStickyData data = { GST_FLOW_OK, FALSE, event }; GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PENDING_EVENTS); @@ -5669,15 +5667,17 @@ break; } } - if (GST_PAD_IS_SRC (pad) && (serialized || sticky)) { - /* all serialized or sticky events on the srcpad trigger push of - * sticky events */ + if (GST_PAD_IS_SRC (pad) && serialized) { + /* All serialized events on the srcpad trigger push of sticky events. + * + * Note that we do not do this for non-serialized sticky events since it + * could potentially block. */ res = (check_sticky (pad, event) == GST_FLOW_OK); } - if (!sticky) { + if (!serialized || !sticky) { GstFlowReturn ret; - /* other events are pushed right away */ + /* non-serialized and non-sticky events are pushed right away. */ ret = gst_pad_push_event_unchecked (pad, event, type); /* dropped events by a probe are not an error */ res = (ret == GST_FLOW_OK || ret == GST_FLOW_CUSTOM_SUCCESS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/gst/gstpadtemplate.c new/gstreamer-1.20.5/gst/gstpadtemplate.c --- old/gstreamer-1.20.4/gst/gstpadtemplate.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/gst/gstpadtemplate.c 2022-12-20 00:34:46.000000000 +0100 @@ -483,7 +483,7 @@ /** * gst_pad_template_set_documentation_caps: * @templ: the pad template to set documented capabilities on - * @caps: (transfer full): the documented capabilities + * @caps: (transfer none): the documented capabilities * * Certain elements will dynamically construct the caps of their * pad templates. In order not to let environment-specific information @@ -510,7 +510,7 @@ * * See gst_pad_template_set_documentation_caps(). * - * Returns: The caps to document. For convenience, this will return + * Returns: (transfer full): The caps to document. For convenience, this will return * gst_pad_template_get_caps() when no documentation caps were set. * Since: 1.18 */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/gst/gstsystemclock.c new/gstreamer-1.20.5/gst/gstsystemclock.c --- old/gstreamer-1.20.4/gst/gstsystemclock.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/gst/gstsystemclock.c 2022-12-20 00:34:46.000000000 +0100 @@ -70,11 +70,15 @@ #define GST_SYSTEM_CLOCK_WAIT(clock) g_cond_wait(GST_SYSTEM_CLOCK_GET_COND(clock),GST_SYSTEM_CLOCK_GET_LOCK(clock)) #define GST_SYSTEM_CLOCK_BROADCAST(clock) g_cond_broadcast(GST_SYSTEM_CLOCK_GET_COND(clock)) -#if defined(HAVE_FUTEX) +#if defined(HAVE_FUTEX) || defined(HAVE_FUTEX_TIME64) #include <unistd.h> #include <linux/futex.h> #include <sys/syscall.h> +#if !defined(__NR_futex) && !defined(__NR_futex_time64) +#error "Neither __NR_futex nor __NR_futex_time64 are defined but were found by meson" +#endif + #ifndef FUTEX_WAIT_BITSET_PRIVATE #define FUTEX_WAIT_BITSET_PRIVATE FUTEX_WAIT_BITSET #endif @@ -123,14 +127,35 @@ { g_atomic_int_inc (cond_val); +#if defined(__NR_futex_time64) + { + int res; + res = syscall (__NR_futex_time64, cond_val, (gsize) FUTEX_WAKE_PRIVATE, + (gsize) INT_MAX, NULL); + + /* If the syscall does not exist (`ENOSYS`), we retry again below with the + * normal `futex` syscall. This can happen if newer kernel headers are + * used than the kernel that is actually running. + */ +#ifdef __NR_futex + if (res >= 0 || errno != ENOSYS) { +#else + { +#endif + return; + } + } +#endif + +#if defined(__NR_futex) syscall (__NR_futex, cond_val, (gsize) FUTEX_WAKE_PRIVATE, (gsize) INT_MAX, NULL); +#endif } static gboolean gst_futex_cond_wait_until (guint * cond_val, GMutex * mutex, gint64 end_time) { - struct timespec end; guint sampled; int res; gboolean success; @@ -138,20 +163,92 @@ if (end_time < 0) return FALSE; - end.tv_sec = end_time / 1000000000; - end.tv_nsec = end_time % 1000000000; - sampled = *cond_val; g_mutex_unlock (mutex); - /* we use FUTEX_WAIT_BITSET_PRIVATE rather than FUTEX_WAIT_PRIVATE to be - * able to use absolute time */ - res = - syscall (__NR_futex, cond_val, (gsize) FUTEX_WAIT_BITSET_PRIVATE, - (gsize) sampled, &end, NULL, FUTEX_BITSET_MATCH_ANY); - success = (res < 0 && errno == ETIMEDOUT) ? FALSE : TRUE; - g_mutex_lock (mutex); - return success; + /* `struct timespec` as defined by the libc headers does not necessarily + * have any relation to the one used by the kernel for the `futex` syscall. + * + * Specifically, the libc headers might use 64-bit `time_t` while the kernel + * headers use 32-bit `__kernel_old_time_t` on certain systems. + * + * To get around this problem we + * a) check if `futex_time64` is available, which only exists on 32-bit + * platforms and always uses 64-bit `time_t`. + * b) otherwise (or if that returns `ENOSYS`), we call the normal `futex` + * syscall with the `struct timespec_t` used by the kernel, which uses + * `__kernel_long_t` for both its fields. We use that instead of + * `__kernel_old_time_t` because it is equivalent and available in the + * kernel headers for a longer time. + * + * Also some 32-bit systems do not define `__NR_futex` at all and only + * define `__NR_futex_time64`. + */ + +#ifdef __NR_futex_time64 + { + struct + { + gint64 tv_sec; + gint64 tv_nsec; + } end; + + end.tv_sec = end_time / 1000000000; + end.tv_nsec = end_time % 1000000000; + + /* we use FUTEX_WAIT_BITSET_PRIVATE rather than FUTEX_WAIT_PRIVATE to be + * able to use absolute time */ + res = + syscall (__NR_futex_time64, cond_val, (gsize) FUTEX_WAIT_BITSET_PRIVATE, + (gsize) sampled, &end, NULL, FUTEX_BITSET_MATCH_ANY); + + /* If the syscall does not exist (`ENOSYS`), we retry again below with the + * normal `futex` syscall. This can happen if newer kernel headers are + * used than the kernel that is actually running. + */ +#ifdef __NR_futex + if (res >= 0 || errno != ENOSYS) { +#else + { +#endif + success = (res < 0 && errno == ETIMEDOUT) ? FALSE : TRUE; + g_mutex_lock (mutex); + + return success; + } + } +#endif + +#ifdef __NR_futex + { + struct + { + __kernel_long_t tv_sec; + __kernel_long_t tv_nsec; + } end; + + /* Make sure to only ever call this if the end time actually fits into the + * target type */ + g_assert (sizeof (__kernel_long_t) >= 8 + || end_time / 1000000000 <= G_MAXINT32); + + end.tv_sec = end_time / 1000000000; + end.tv_nsec = end_time % 1000000000; + + /* we use FUTEX_WAIT_BITSET_PRIVATE rather than FUTEX_WAIT_PRIVATE to be + * able to use absolute time */ + res = + syscall (__NR_futex, cond_val, (gsize) FUTEX_WAIT_BITSET_PRIVATE, + (gsize) sampled, &end, NULL, FUTEX_BITSET_MATCH_ANY); + success = (res < 0 && errno == ETIMEDOUT) ? FALSE : TRUE; + g_mutex_lock (mutex); + + return success; + } +#endif + + /* We can't end up here because of the checks above */ + g_assert_not_reached (); } #elif defined (G_OS_UNIX) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/gstreamer.doap new/gstreamer-1.20.5/gstreamer.doap --- old/gstreamer-1.20.4/gstreamer.doap 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/gstreamer.doap 2022-12-20 00:34:46.000000000 +0100 @@ -40,6 +40,16 @@ <release> <Version> + <revision>1.20.5</revision> + <branch>1.20</branch> + <name></name> + <created>2022-12-19</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.20.5.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.20.4</revision> <branch>1.20</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/libs/gst/base/gstaggregator.c new/gstreamer-1.20.5/libs/gst/base/gstaggregator.c --- old/gstreamer-1.20.4/libs/gst/base/gstaggregator.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/libs/gst/base/gstaggregator.c 2022-12-20 00:34:46.000000000 +0100 @@ -382,6 +382,8 @@ GstClockTime sub_latency_min; /* protected by src_lock */ GstClockTime sub_latency_max; /* protected by src_lock */ + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; GstClockTime upstream_latency_min; /* protected by src_lock */ @@ -1897,6 +1899,7 @@ agg->priv->has_peer_latency = FALSE; agg->priv->peer_latency_live = FALSE; agg->priv->peer_latency_min = agg->priv->peer_latency_max = 0; + agg->priv->posted_latency_msg = FALSE; if (agg->priv->tags) gst_tag_list_unref (agg->priv->tags); @@ -3667,7 +3670,7 @@ * * Lets #GstAggregator sub-classes tell the baseclass what their internal * latency is. Will also post a LATENCY message on the bus so the pipeline - * can reconfigure its global latency. + * can reconfigure its global latency if the values changed. */ void gst_aggregator_set_latency (GstAggregator * self, @@ -3688,6 +3691,10 @@ self->priv->sub_latency_max = max_latency; changed = TRUE; } + if (!self->priv->posted_latency_msg) { + self->priv->posted_latency_msg = TRUE; + changed = TRUE; + } if (changed) SRC_BROADCAST (self); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/libs/gst/base/gstbaseparse.c new/gstreamer-1.20.5/libs/gst/base/gstbaseparse.c --- old/gstreamer-1.20.4/libs/gst/base/gstbaseparse.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/libs/gst/base/gstbaseparse.c 2022-12-20 00:34:46.000000000 +0100 @@ -231,6 +231,8 @@ guint lead_in, lead_out; GstClockTime lead_in_ts, lead_out_ts; GstClockTime min_latency, max_latency; + /* Tracks whether the latency message was posted at least once */ + gboolean posted_latency_msg; gboolean discont; gboolean flushing; @@ -899,6 +901,7 @@ parse->priv->detect_buffers_size = 0; parse->priv->segment_seqnum = GST_SEQNUM_INVALID; + parse->priv->posted_latency_msg = FALSE; GST_OBJECT_UNLOCK (parse); } @@ -4071,23 +4074,44 @@ * @max_latency: maximum parse latency * * Sets the minimum and maximum (which may likely be equal) latency introduced - * by the parsing process. If there is such a latency, which depends on the + * by the parsing process. If there is such a latency, which depends on the * particular parsing of the format, it typically corresponds to 1 frame duration. + * + * If the provided values changed from previously provided ones, this will + * also post a LATENCY message on the bus so the pipeline can reconfigure its + * global latency. */ void gst_base_parse_set_latency (GstBaseParse * parse, GstClockTime min_latency, GstClockTime max_latency) { + gboolean post_message = FALSE; + g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min_latency)); g_return_if_fail (min_latency <= max_latency); - GST_OBJECT_LOCK (parse); - parse->priv->min_latency = min_latency; - parse->priv->max_latency = max_latency; - GST_OBJECT_UNLOCK (parse); GST_INFO_OBJECT (parse, "min/max latency %" GST_TIME_FORMAT ", %" GST_TIME_FORMAT, GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency)); + + GST_OBJECT_LOCK (parse); + if (parse->priv->min_latency != min_latency) { + parse->priv->min_latency = min_latency; + post_message = TRUE; + } + if (parse->priv->max_latency != max_latency) { + parse->priv->max_latency = max_latency; + post_message = TRUE; + } + if (!parse->priv->posted_latency_msg) { + parse->priv->posted_latency_msg = TRUE; + post_message = TRUE; + } + GST_OBJECT_UNLOCK (parse); + + if (post_message) + gst_element_post_message (GST_ELEMENT_CAST (parse), + gst_message_new_latency (GST_OBJECT_CAST (parse))); } static gboolean diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/meson.build new/gstreamer-1.20.5/meson.build --- old/gstreamer-1.20.4/meson.build 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/meson.build 2022-12-20 00:34:46.000000000 +0100 @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.20.4', + version : '1.20.5', meson_version : '>= 0.59', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -258,7 +258,8 @@ cdata.set('HAVE_DECL_LOCALTIME_R', 1) endif -if cc.links('''#include <pthread.h> +if cc.links('''#define _GNU_SOURCE + #include <pthread.h> int main() { pthread_setname_np("example"); return 0; }''', name : 'pthread_setname_np(const char*)') @@ -272,7 +273,7 @@ endif # Check for futex(2) -if cc.links('''#include <linux/futex.h> +if cc.compiles('''#include <linux/futex.h> #include <sys/syscall.h> #include <unistd.h> int main (int argc, char ** argv) { @@ -281,6 +282,15 @@ }''', name : 'futex(2) system call') cdata.set('HAVE_FUTEX', 1) endif +if cc.compiles('''#include <linux/futex.h> + #include <sys/syscall.h> + #include <unistd.h> + int main (int argc, char ** argv) { + syscall (__NR_futex_time64, NULL, FUTEX_WAKE, FUTEX_WAIT); + return 0; + }''', name : 'futex(2) system call') + cdata.set('HAVE_FUTEX_TIME64', 1) +endif # Check for posix timers and monotonic clock time_prefix = '#include <time.h>\n' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/plugins/elements/gstconcat.c new/gstreamer-1.20.5/plugins/elements/gstconcat.c --- old/gstreamer-1.20.4/plugins/elements/gstconcat.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/plugins/elements/gstconcat.c 2022-12-20 00:34:46.000000000 +0100 @@ -616,6 +616,7 @@ break; } case GST_EVENT_EOS:{ + guint32 seqnum = gst_event_get_seqnum (event); gst_event_replace (&event, NULL); if (!gst_concat_pad_wait (spad, self)) { @@ -632,6 +633,7 @@ if (!next) { event = gst_event_new_eos (); + gst_event_set_seqnum (event, seqnum); } else { gst_element_post_message (GST_ELEMENT_CAST (self), gst_message_new_duration_changed (GST_OBJECT_CAST (self))); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/plugins/elements/gstfakesrc.c new/gstreamer-1.20.5/plugins/elements/gstfakesrc.c --- old/gstreamer-1.20.4/plugins/elements/gstfakesrc.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/plugins/elements/gstfakesrc.c 2022-12-20 00:34:46.000000000 +0100 @@ -805,9 +805,11 @@ GST_BUFFER_OFFSET (buf) = offset; if (src->datarate > 0) { - time = (src->bytes_sent * GST_SECOND) / src->datarate; + time = + gst_util_uint64_scale_int (src->bytes_sent, GST_SECOND, src->datarate); - GST_BUFFER_DURATION (buf) = size * GST_SECOND / src->datarate; + GST_BUFFER_DURATION (buf) = + gst_util_uint64_scale_int (size, GST_SECOND, src->datarate); } else if (gst_base_src_is_live (basesrc)) { GstClock *clock; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/po/gstreamer-1.0.pot new/gstreamer-1.20.5/po/gstreamer-1.0.pot --- old/gstreamer-1.20.4/po/gstreamer-1.0.pot 2022-10-12 17:40:00.565500700 +0200 +++ new/gstreamer-1.20.5/po/gstreamer-1.0.pot 2022-12-20 00:35:10.705764000 +0100 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gstreamer-1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-12 16:40+0100\n" +"POT-Creation-Date: 2022-12-19 23:35+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <[email protected]>\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.20.4/tools/gst-inspect.c new/gstreamer-1.20.5/tools/gst-inspect.c --- old/gstreamer-1.20.4/tools/gst-inspect.c 2022-10-12 17:39:51.000000000 +0200 +++ new/gstreamer-1.20.5/tools/gst-inspect.c 2022-12-20 00:34:46.000000000 +0100 @@ -753,7 +753,7 @@ static void print_pad_templates_info (GstElement * element, GstElementFactory * factory) { - GList *pads; + GList *pads, *tmp; GstStaticPadTemplate *padtemplate; GstPadTemplate *tmpl; @@ -769,9 +769,9 @@ pads = g_list_copy ((GList *) gst_element_factory_get_static_pad_templates (factory)); pads = g_list_sort (pads, gst_static_pad_compare_func); - while (pads) { - padtemplate = (GstStaticPadTemplate *) (pads->data); - pads = g_list_next (pads); + + for (tmp = pads; tmp; tmp = tmp->next) { + padtemplate = (GstStaticPadTemplate *) (tmp->data); if (padtemplate->direction == GST_PAD_SRC) n_print ("%sSRC template%s: %s'%s'%s\n", PROP_NAME_COLOR, RESET_COLOR, @@ -828,7 +828,7 @@ pop_indent (); - if (pads != NULL) + if (tmp->next) n_print ("\n"); } g_list_free (pads);
