Hello community, here is the log from the commit of package gstreamer for openSUSE:Factory checked in at 2020-11-09 13:56:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer (Old) and /work/SRC/openSUSE:Factory/.gstreamer.new.11331 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer" Mon Nov 9 13:56:34 2020 rev:69 rq:846449 version:1.18.1 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer/gstreamer.changes 2020-10-27 18:58:36.450728509 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer.new.11331/gstreamer.changes 2020-11-09 13:57:28.459955871 +0100 @@ -1,0 +2,30 @@ +Tue Oct 27 15:49:59 UTC 2020 - Antonio Larrosa <alarr...@suse.com> + +- Update to 1.18.1: + + Highlighted bugfixes in 1.18.1 + - important security fixes + - bug fixes and memory leak fixes + - various stability and reliability improvements + + gstreamer changes: + - aggregator: make peek() has() pop() drop() buffer API + threadsafe + - gstvalue: don't write to const char * + - meson: Disallow DbgHelp for UWP build + - info: Fix build on Windows ARM64 device + - build: use cpu_family for arch checks + - basetransform: Fix in/outbuf confusion of + _default_transform_meta + - Fix documentation + - info: Load DbgHelp.dll using g_module_open() + - padtemplate: mark documentation caps as may be leaked + - gstmeta: intern registered impl string + - aggregator: Hold SRC_LOCK while unblocking via + SRC_BROADCAST() + - ptp_helper_post_install.sh: deal with none + - skip elements/leak.c if tracer is not available + - aggregator: Wake up source pad in PAUSED<->PLAYING + transitions + - input-selector: Wake up blocking pads when releasing them + - ptp: Also handle gnu/kfreebsd + +------------------------------------------------------------------- Old: ---- gstreamer-1.18.0.tar.xz New: ---- gstreamer-1.18.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer.spec ++++++ --- /var/tmp/diff_new_pack.0dMAW3/_old 2020-11-09 13:57:29.335953961 +0100 +++ /var/tmp/diff_new_pack.0dMAW3/_new 2020-11-09 13:57:29.339953951 +0100 @@ -18,7 +18,7 @@ %define gst_branch 1.0 Name: gstreamer -Version: 1.18.0 +Version: 1.18.1 Release: 0 Summary: Streaming-Media Framework Runtime License: LGPL-2.1-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.0dMAW3/_old 2020-11-09 13:57:29.363953899 +0100 +++ /var/tmp/diff_new_pack.0dMAW3/_new 2020-11-09 13:57:29.363953899 +0100 @@ -4,7 +4,7 @@ <param name="filename">gstreamer</param> <!--<param name="versionformat">@PARENT_TAG@+git%cd.%h</param>--> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">1.18.0</param> + <param name="revision">1.18.1</param> <param name="scm">git</param> </service> <service name="recompress" mode="disabled"> ++++++ gstreamer-1.18.0.tar.xz -> gstreamer-1.18.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/ChangeLog new/gstreamer-1.18.1/ChangeLog --- old/gstreamer-1.18.0/ChangeLog 2020-09-08 01:01:36.027851000 +0200 +++ new/gstreamer-1.18.1/ChangeLog 2020-10-26 12:08:38.343754000 +0100 @@ -1,7 +1,167 @@ +=== release 1.18.1 === + +2020-10-26 11:08:36 +0000 Tim-Philipp Müller <t...@centricular.com> + + * ChangeLog: + * NEWS: + * RELEASE: + * gstreamer.doap: + * meson.build: + Release 1.18.1 + +2020-09-01 00:26:31 +0200 Mathieu Duponchelle <math...@centricular.com> + + * libs/gst/base/gstaggregator.c: + * tests/check/libs/aggregator.c: + aggregator: make peek() has() pop() drop() buffer API threadsafe + Enforce that the last buffer that was peeked (or had its existence + checked) on a pad is the one that gets popped / dropped, resetting + at the end of each aggregation cycle. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/603 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/675> + +2020-10-13 01:19:47 +0200 Mathieu Duponchelle <math...@centricular.com> + + * gst/gstvalue.c: + gstvalue: don't write to const char * + Our various deserializing functions require NULL terminators + to not over consume substrings (eg fields of an array). Instead + of writing a NULL terminator to the passed-in string, which may + result in segfaults, make a copy of the substring we're interested + in. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/446 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/673> + +2020-10-10 00:53:42 +0900 Seungha Yang <seun...@centricular.com> + + * meson.build: + meson: Disallow DbgHelp for UWP build + Most symbols in DbgHelp.h are not allowed for UWP + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/670> + +2020-10-07 03:49:33 +0900 Seungha Yang <seun...@centricular.com> + + * gst/gstinfo.c: + info: Fix build on Windows ARM64 device + gstinfo.c(3086): error C2094: label 'done' was undefined + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/668> + +2020-10-09 12:13:15 +1100 Matthew Waters <matt...@centricular.com> + + * meson.build: + build: use cpu_family for arch checks + e.g. on 32-bit arm, we may have armv6, armv7l, armv7hf, etc which all + generally have the same layouts. cpu_family() groups all of these into + just 'arm' that the ABI check table is expecting. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/667> + +2020-10-08 13:37:41 +0200 Jan Alexander Steffens (heftig) <jan.steff...@ltnglobal.com> + + * libs/gst/base/gstbasetransform.c: + basetransform: Fix in/outbuf confusion of _default_transform_meta + The default implementation doesn't actually use its buffer parameters, + but this error might have been the cause of some actual confusion in + the plugins code. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/666> + +2020-09-26 09:11:40 +0200 Víctor Manuel Jáquez Leal <vjaq...@igalia.com> + + * gst/gstpadtemplate.c: + padtemplate: add missing annotation + Adds missing "transfer full" annotation for caps parameter in + gst_pad_template_set_documentation_caps() + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/660> + +2020-09-16 02:16:52 +0200 Mathieu Duponchelle <math...@centricular.com> + + * gst/gstmeta.c: + gstmeta: intern registered impl string + Subsequent lookups in the hashtable are probably better done + on memory we're confident is allocated to us :) + It was easy to trigger invalid reads by calling gst_meta_register + with dynamically allocated memory, freeing that memory, then + calling gst_meta_get_info() + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/657> + +2020-09-15 21:07:27 +0900 Seungha Yang <seun...@centricular.com> + + * gst/gstinfo.c: + * meson.build: + info: Load DbgHelp.dll using g_module_open() + ... and update meson file so that enable it only using required headers. + "dependency(...)" is unlikely successful for Windows SDK libraries + since it doesn't ship pkg-config file. So it needs to be changed + to "find_library()" to link corresponding .lib file. That would + result to most MSVC build system will link dbghelp.dll. However, + one drawback of the change is that gstreamer-1.0.dll will mandate + dbghelp.dll although it should be optional. So g_module_open() way + can be the most safe way in this case. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/659> + +2020-09-30 11:56:40 +1000 Matthew Waters <matt...@centricular.com> + + * gst/gstpadtemplate.c: + padtemplate: mark documentation caps as may be leaked + The template itself is already marked as such and the caps, the + documentation caps are a logical extension of those two. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/658> + +2020-09-18 09:59:03 +0300 Sebastian Dröge <sebast...@centricular.com> + + * libs/gst/base/gstaggregator.c: + aggregator: Hold SRC_LOCK while unblocking via SRC_BROADCAST() + Otherwise the clock id we access might not be a valid pointer anymore. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/656> + +2020-09-08 12:45:42 +0100 Tom Schoonjans <tom.schoonj...@rfi.ac.uk> + + * libs/gst/helpers/ptp_helper_post_install.sh: + ptp_helper_post_install.sh: deal with none + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/655> + +2020-09-09 01:23:11 +0800 Xℹ Ruoyao <xry...@mengyan1223.wang> + + * tests/check/meson.build: + skip elements/leak.c if tracer is not available + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/654> + +2020-08-20 11:09:11 +0300 Sebastian Dröge <sebast...@centricular.com> + + * libs/gst/base/gstaggregator.c: + aggregator: Wake up source pad in PAUSED<->PLAYING transitions + When going to PLAYING we will now have a clock and can stop waiting on + the condition variable and instead start waiting on the clock if + necessary for the current configuration. + In the other direction when going to PAUSED the clock might have + disappeared and we might need to wait on the condition variable again + instead. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/653> + +2020-08-24 11:59:51 +0300 Sebastian Dröge <sebast...@centricular.com> + + * plugins/elements/gstinputselector.c: + input-selector: Wake up blocking pads when releasing them + Otherwise deactivating them will cause a deadlock as they're blocking + inside the streaming thread. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/601 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/652> + +2020-09-08 13:40:25 +0300 Sebastian Dröge <sebast...@centricular.com> + + * libs/gst/helpers/meson.build: + ptp: Also handle gnu/kfreebsd + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/651> + +2020-09-08 17:44:00 +0100 Tim-Philipp Müller <t...@centricular.com> + + * meson.build: + Back to development + === release 1.18.0 === 2020-09-08 00:01:33 +0100 Tim-Philipp Müller <t...@centricular.com> + * .gitlab-ci.yml: * ChangeLog: * NEWS: * README: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/NEWS new/gstreamer-1.18.1/NEWS --- old/gstreamer-1.18.0/NEWS 2020-09-08 01:01:36.027851000 +0200 +++ new/gstreamer-1.18.1/NEWS 2020-10-26 12:08:38.343754000 +0100 @@ -1,11 +1,14 @@ GStreamer 1.18 Release Notes -GStreamer 1.18.0 was originally released on 7 September 2020. +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. See https://gstreamer.freedesktop.org/releases/1.18/ for the latest version of this document. -Last updated: Monday 7 September 2020, 10:30 UTC (log) +Last updated: Monday 26 October 2020, 11:00 UTC (log) Introduction @@ -28,7 +31,8 @@ - Active Format Description (AFD) and Bar Data support -- ONVIF trick modes support in both GStreamer RTSP server and client +- RTSP server and client implementations gained ONVIF trick modes + support - Hardware-accelerated video decoding on Windows via DXVA2 / Direct3D11 @@ -39,24 +43,25 @@ - qmlgloverlay: New overlay element that renders a QtQuick scene over the top of an input video stream -- New imagesequencesrc element to easily create a video stream from a +- imagesequencesrc: New element to easily create a video stream from a sequence of jpeg or png images -- dashsink: Add new sink to produce DASH content +- dashsink: New sink to produce DASH content -- dvbsubenc: DVB Subtitle encoder element +- dvbsubenc: New DVB Subtitle encoder element -- TV broadcast compliant MPEG-TS muxing with constant bitrate muxing - and SCTE-35 support +- MPEG-TS muxing now also supports TV broadcast compliant muxing with + constant bitrate muxing and SCTE-35 support -- rtmp2: new RTMP client source and sink element implementation +- rtmp2: New RTMP client source and sink element from-scratch + implementation -- svthevcenc: new SVT-HEVC-based H.265 video encoder +- svthevcenc: New SVT-HEVC-based H.265 video encoder -- vaapioverlay compositor element using VA-API +- vaapioverlay: New compositor element using VA-API -- rtpmanager support for Google’s Transport-Wide Congestion Control - (twcc) RTP extension +- rtpmanager gained support for Google’s Transport-Wide Congestion + Control (twcc) RTP extension - splitmuxsink and splitmuxsrc gained support for auxiliary video streams @@ -64,18 +69,18 @@ - webrtcbin now contains some initial support for renegotiation involving stream addition and removal -- New RTP source and sink elements to easily set up RTP streaming via - rtp:// URIs +- RTP support was enhanced with new RTP source and sink elements to + easily set up RTP streaming via rtp:// URIs -- New Audio Video Transport Protocol (AVTP) plugin for Time-Sensitive - Applications +- avtp: New Audio Video Transport Protocol (AVTP) plugin for + Time-Sensitive Applications - Support for the Video Services Forum’s Reliable Internet Stream Transport (RIST) TR-06-1 Simple Profile - Universal Windows Platform (UWP) support -- rpicamsrc element for capturing from the Raspberry Pi camera +- rpicamsrc: New element for capturing from the Raspberry Pi camera - RTSP Server TCP interleaved backpressure handling improvements as well as support for Scale/Speed headers @@ -2179,7 +2184,208 @@ 1.18.0 -1.18.0 was released on 7 September 2020. +1.18.0 was released on 8 September 2020. + +1.18.1 + +The first 1.18 bug-fix release (1.18.1) was released on 26 October 2020. + +This release only contains bugfixes and it should be safe to update from +1.18.0. + +Highlighted bugfixes in 1.18.1 + +- important security fixes +- bug fixes and memory leak fixes +- various stability and reliability improvements + +gstreamer + +- aggregator: make peek() has() pop() drop() buffer API threadsafe +- gstvalue: don’t write to const char * +- meson: Disallow DbgHelp for UWP build +- info: Fix build on Windows ARM64 device +- build: use cpu_family for arch checks +- basetransform: Fix in/outbuf confusion of _default_transform_meta +- Fix documentation +- info: Load DbgHelp.dll using g_module_open() +- padtemplate: mark documentation caps as may be leaked +- gstmeta: intern registered impl string +- aggregator: Hold SRC_LOCK while unblocking via SRC_BROADCAST() +- ptp_helper_post_install.sh: deal with none +- skip elements/leak.c if tracer is not available +- aggregator: Wake up source pad in PAUSED<->PLAYING transitions +- input-selector: Wake up blocking pads when releasing them +- ptp: Also handle gnu/kfreebsd + +gst-plugins-base + +- theoradec: Set telemetry options only if they are nonzero +- glslstage: delete shader on finalize of stage +- urisourcebin: Fix crash caused by use after free +- decodebin3: Store stream-start event on output pad before exposing + it +- Add some missing nullable annotations +- typefind/xdgmime: Validate mimetypes to be valid GstStructure names + before using them +- uridecodebin3: Forward upstream events to decodebin3 directly +- video-converter: Add fast paths from v210 to I420/YV12, Y42B, UYVY + and YUY2 +- videoaggregator: Limit accepted caps by template caps +- gstrtpbuffer: fix header extension length validation +- decodebin3: only force streams-selected seqnum after a + select-streams +- videodecoder: don’t copy interlace-mode from reference state +- enable abi checks +- multihandlesink: Don’t pass NULL caps to gst_caps_is_equal +- audio: video: Fix in/outbuf confusion of transform_meta +- meson: Always wrap “prefix” option with join_paths() to make Windows + happy +- videoaggregator: ensure peek_next_sample() uses the correct caps +- meson: Actually build gstgl without implicit include dirs +- videoaggregator: Don’t require any pads to be configured for + negotiating source pad caps +- gst-libs: gl: Fix documentation typo and clarify + gl_memory_texsubimage +- audioaggregator: Reset offset if the output rate is renegotiated +- video-anc: Implement transform functions for AFD/Bar metas +- appsrc: Wake up the create() function on caps changes +- rtpbasepayload: do not forget delayed segment when forwarding gaps + +gst-plugins-good + +- v4l2object: Only offer inactive pools and if needed +- vpx: Fix the check to unfixed/unknown framerate to set bitrate +- qmlglsink: fix crash when created/destroyed in quick succession +- rtputils: Count metas with an empty tag list for copying/keeping +- rtpbin: Remove the rtpjitterbuffer with the stream +- rtph26*depay: drop FU’s without a corresponding start bit +- imagefreeze: Response caps query from srcpad +- rtpmp4gdepay: Allow lower-case “aac-hbr” instead of correct + “AAC-hbr” +- rtspsrc: Fix push-backchannel-buffer parameter mismatch +- jpegdec: check buffer size before dereferencing +- flvmux: Move stream skipping to GstAggregatorPadClass.skip_buffer +- v4l2object: plug memory leak +- splitmuxsink: fix sink pad release while PLAYING + +gst-plugins-bad + +- codecparsers: h264parser: guard against ref_pic_markings overflow +- v4l2codecs: Various fixes +- h265parse: Don’t enable passthrough by default +- srt: Fix “Fix timestamping” +- srt: Fixes for 1.4.2 +- dtlsconnection: Ignore OpenSSL system call errors +- h265parse: set interlace-mode=interleaved on interlaced content +- Replace GPL v2 with LGPL v2 in COPYING file +- srt: Consume the error from gst_srt_object_write +- srt: Check socket state before retrieving payload size +- x265enc: fix deadlock on reconfig +- webrtc: Require gstreamer-sdp in the pkg-config file +- srtsrc: Fix timestamping +- mfvideosrc: Use only the first video stream per device +- srtobject: typecast SRTO_LINGER to linger +- decklink: Correctly order the different dependent mode tables +- wasapisrc: Make sure that wasapisrc produces data in loopback mode +- wpesrc: fix some caps leaks using the non-GL output +- smoothstreaming: clear live adapter on seek +- vtdec/vulkan: use Shared storage mode for IOSurface textures +- wpe: Move webview load waiting to WPEView +- wpe: Use proper callback for TLS errors signal handling +- kmssink: Do not source using padded width/height +- avtp: avtpaafdepay: fix crash when building caps +- opencv: set opencv_dep when option is disabled to fix the build +- line21encoder: miscellaneous enhancements +- Hls youtube issues with urisourcebin/queue2 +- rtmp2: Replace stats queue with stats lock +- rtmp2sink: support EOS event for graceful connection shutdown +- mpegtsmux: Make handling of sinkpads thread-safe +- hlssink2: Actually release splitmuxsink’s pads +- mpegtsmux: Don’t create streams with reserved PID + +gst-plugins-ugly + +- no changes + +gst-libav + +- avaudenc/avvidenc: Reopen encoding session if it’s required +- avauddec/audenc/videnc: Don’t return GST_FLOW_EOS when draining +- avauddec/avviddec: Avoid dropping non-OK flow return +- avcodecmap: Enable 24 bit WMA Lossless decoding + +gst-rtsp-server + +- rtsp-stream: collect rtp info when blocking +- rtsp-media: set a 0 storage size for TCP receivers +- rtsp-stream: preroll on gap events +- rtsp-media: do not unblock on unsuspend + +gstreamer-vaapi + +- decoder: don’t reply src caps query with allowed if pad is fixed +- plugins: decode: fix a DMA caps typo in ensure_allowed_srcpad_caps + +gstreamer-sharp + +- Add bindings for some missing 1.18 API + +gst-omx + +- omxvideodec: support interlace-mode=interleaved input + +gst-python + +- no changes + +gst-editing-services + +- ges: Do not recreate auto-transitions when changing clip assets +- ges: Fix a copy/paste mistake in meson file + +gst-integration-testsuites + +- medias: Update for h265parse passthrough behavior change +- update validate.test.h265parse.alternate test + +gst-build + +- windows: Detect Strawberry Perl and error out early +- {pygobject,pycairo}.wrap: point to stable refs + +Cerbero build tool and packaging changes in 1.18.1 + +- Add macOS Big Sur support +- gst-plugins-bad: Ship rtpmanagerbad plugin +- gstreamer-1.0: Don’t enable DbgHelp for UWP build +- pango: fix font corruption on windows +- cairo: use thread local storage to grant one windows HDC per thread +- small fixes for Xcode 12 +- cerbero: Re-add alsa-devel to bootstrap on Linux +- FreeType: update to 2.10.4 to fix security vulnerability + +Contributors to 1.18.1 + +Aaron Boxer, Adam Williamson, Andrew Wesie, Arun Raghavan, Bastien +Reboulet, Brent Gardner, Edward Hervey, François Laignel, Guillaume +Desmottes, Havard Graff, He Junyan, Hosang Lee, Jacek Tomaszewski, Jakub +Adam, Jan Alexander Steffens (heftig), Jan Schmidt, Jérôme Laheurte, +Jordan Petridis, Marc Leeman, Marian Cichy, Marijn Suijten, Mathieu +Duponchelle, Matthew Waters, Michael Tretter, Nazar Mokrynskyi, Nicolas +Dufresne, Niklas Hambüchen, Nirbheek Chauhan, Olivier Crête, Philippe +Normand, raghavendra, Ricky Tang, Sebastian Dröge, Seungha Yang, +sohwan.park, Stéphane Cerveau, Thibault Saunier, Tim-Philipp Müller, Tom +Schoonjans, Víctor Manuel Jáquez Leal, Will Miller, Xavier Claessens, Xℹ +Ruoyao, Zebediah Figura, + +… 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.1 + +- List of Merge Requests applied in 1.18.1 +- List of Issues fixed in 1.18.1 Schedule for 1.20 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/RELEASE new/gstreamer-1.18.1/RELEASE --- old/gstreamer-1.18.0/RELEASE 2020-09-08 01:01:36.027851000 +0200 +++ new/gstreamer-1.18.1/RELEASE 2020-10-26 12:08:38.343754000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer core 1.18.0. +This is GStreamer core 1.18.1. 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.18.0/gst/gstinfo.c new/gstreamer-1.18.1/gst/gstinfo.c --- old/gstreamer-1.18.0/gst/gstinfo.c 2020-09-08 01:01:36.047851000 +0200 +++ new/gstreamer-1.18.1/gst/gstinfo.c 2020-10-26 12:08:38.367754000 +0100 @@ -156,9 +156,10 @@ #endif /* HAVE_BACKTRACE */ #ifdef HAVE_DBGHELP -#include <Windows.h> +#include <windows.h> #include <dbghelp.h> #include <tlhelp32.h> +#include <gmodule.h> #endif /* HAVE_DBGHELP */ #ifdef G_OS_WIN32 @@ -2958,19 +2959,91 @@ #endif /* HAVE_BACKTRACE */ #ifdef HAVE_DBGHELP -static void +/* *INDENT-OFF* */ +static struct +{ + DWORD (WINAPI * pSymSetOptions) (DWORD SymOptions); + BOOL (WINAPI * pSymInitialize) (HANDLE hProcess, + PCSTR UserSearchPath, + BOOL fInvadeProcess); + BOOL (WINAPI * pStackWalk64) (DWORD MachineType, + HANDLE hProcess, + HANDLE hThread, + LPSTACKFRAME64 StackFrame, + PVOID ContextRecord, + PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, + PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, + PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, + PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress); + PVOID (WINAPI * pSymFunctionTableAccess64) (HANDLE hProcess, + DWORD64 AddrBase); + DWORD64 (WINAPI * pSymGetModuleBase64) (HANDLE hProcess, + DWORD64 qwAddr); + BOOL (WINAPI * pSymFromAddr) (HANDLE hProcess, + DWORD64 Address, + PDWORD64 Displacement, + PSYMBOL_INFO Symbol); + BOOL (WINAPI * pSymGetModuleInfo64) (HANDLE hProcess, + DWORD64 qwAddr, + PIMAGEHLP_MODULE64 ModuleInfo); + BOOL (WINAPI * pSymGetLineFromAddr64) (HANDLE hProcess, + DWORD64 qwAddr, + PDWORD pdwDisplacement, + PIMAGEHLP_LINE64 Line64); +} dbg_help_vtable = { NULL,}; +/* *INDENT-ON* */ + +static GModule *dbg_help_module = NULL; + +static gboolean +dbghelp_load_symbol (const gchar * symbol_name, gpointer * symbol) +{ + if (dbg_help_module && + !g_module_symbol (dbg_help_module, symbol_name, symbol)) { + GST_WARNING ("Cannot load %s symbol", symbol_name); + g_module_close (dbg_help_module); + dbg_help_module = NULL; + } + + return ! !dbg_help_module; +} + +static gboolean dbghelp_initialize_symbols (HANDLE process) { static gsize initialization_value = 0; if (g_once_init_enter (&initialization_value)) { GST_INFO ("Initializing Windows symbol handler"); - SymSetOptions (SYMOPT_LOAD_LINES); - SymInitialize (process, NULL, TRUE); - GST_INFO ("Initialized Windows symbol handler"); + + dbg_help_module = g_module_open ("dbghelp.dll", G_MODULE_BIND_LAZY); + dbghelp_load_symbol ("SymSetOptions", + (gpointer *) & dbg_help_vtable.pSymSetOptions); + dbghelp_load_symbol ("SymInitialize", + (gpointer *) & dbg_help_vtable.pSymInitialize); + dbghelp_load_symbol ("StackWalk64", + (gpointer *) & dbg_help_vtable.pStackWalk64); + dbghelp_load_symbol ("SymFunctionTableAccess64", + (gpointer *) & dbg_help_vtable.pSymFunctionTableAccess64); + dbghelp_load_symbol ("SymGetModuleBase64", + (gpointer *) & dbg_help_vtable.pSymGetModuleBase64); + dbghelp_load_symbol ("SymFromAddr", + (gpointer *) & dbg_help_vtable.pSymFromAddr); + dbghelp_load_symbol ("SymGetModuleInfo64", + (gpointer *) & dbg_help_vtable.pSymGetModuleInfo64); + dbghelp_load_symbol ("SymGetLineFromAddr64", + (gpointer *) & dbg_help_vtable.pSymGetLineFromAddr64); + + if (dbg_help_module) { + dbg_help_vtable.pSymSetOptions (SYMOPT_LOAD_LINES); + dbg_help_vtable.pSymInitialize (process, NULL, TRUE); + GST_INFO ("Initialized Windows symbol handler"); + } g_once_init_leave (&initialization_value, 1); } + + return ! !dbg_help_module; } static gchar * @@ -2983,9 +3056,10 @@ CONTEXT context; STACKFRAME64 frame = { 0 }; PVOID save_context; - GString *trace = g_string_new (NULL); + GString *trace = NULL; - dbghelp_initialize_symbols (process); + if (!dbghelp_initialize_symbols (process)) + return NULL; memset (&context, 0, sizeof (CONTEXT)); context.ContextFlags = CONTEXT_FULL; @@ -3007,9 +3081,11 @@ frame.AddrPC.Offset = context.Rip; frame.AddrStack.Offset = context.Rsp; #else - goto done; + return NULL; #endif + trace = g_string_new (NULL); + module_info.SizeOfStruct = sizeof (module_info); save_context = (machine == IMAGE_FILE_MACHINE_I386) ? NULL : &context; @@ -3024,19 +3100,23 @@ line.SizeOfStruct = sizeof (line); - if (!StackWalk64 (machine, process, thread, &frame, save_context, 0, - SymFunctionTableAccess64, SymGetModuleBase64, 0)) + if (!dbg_help_vtable.pStackWalk64 (machine, process, thread, &frame, + save_context, 0, dbg_help_vtable.pSymFunctionTableAccess64, + dbg_help_vtable.pSymGetModuleBase64, 0)) { break; + } - if (SymFromAddr (process, frame.AddrPC.Offset, 0, symbol)) + if (dbg_help_vtable.pSymFromAddr (process, frame.AddrPC.Offset, 0, symbol)) g_string_append_printf (trace, "%s ", symbol->Name); else g_string_append (trace, "?? "); - if (SymGetLineFromAddr64 (process, frame.AddrPC.Offset, &displacement, - &line)) - g_string_append_printf (trace, "(%s:%u)", line.FileName, line.LineNumber); - else if (SymGetModuleInfo64 (process, frame.AddrPC.Offset, &module_info)) + if (dbg_help_vtable.pSymGetLineFromAddr64 (process, frame.AddrPC.Offset, + &displacement, &line)) + g_string_append_printf (trace, "(%s:%lu)", line.FileName, + line.LineNumber); + else if (dbg_help_vtable.pSymGetModuleInfo64 (process, frame.AddrPC.Offset, + &module_info)) g_string_append_printf (trace, "(%s)", module_info.ImageName); else g_string_append_printf (trace, "(%s)", "??"); @@ -3044,7 +3124,6 @@ g_string_append (trace, "\n"); } -done: return g_string_free (trace, FALSE); } #endif /* HAVE_DBGHELP */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/gst/gstmeta.c new/gstreamer-1.18.1/gst/gstmeta.c --- old/gstreamer-1.18.0/gst/gstmeta.c 2020-09-08 01:01:36.047851000 +0200 +++ new/gstreamer-1.18.1/gst/gstmeta.c 2020-10-26 12:08:38.367754000 +0100 @@ -198,7 +198,8 @@ g_type_name (api), size); g_rw_lock_writer_lock (&lock); - g_hash_table_insert (metainfo, (gpointer) impl, (gpointer) info); + g_hash_table_insert (metainfo, (gpointer) g_intern_string (impl), + (gpointer) info); g_rw_lock_writer_unlock (&lock); return info; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/gst/gstpadtemplate.c new/gstreamer-1.18.1/gst/gstpadtemplate.c --- old/gstreamer-1.18.0/gst/gstpadtemplate.c 2020-09-08 01:01:36.051851000 +0200 +++ new/gstreamer-1.18.1/gst/gstpadtemplate.c 2020-10-26 12:08:38.367754000 +0100 @@ -483,7 +483,7 @@ /** * gst_pad_template_set_documentation_caps: * @templ: the pad template to set documented capabilities on - * @caps: the documented capabilities + * @caps: (transfer full): the documented capabilities * * Certain elements will dynamically construct the caps of their * pad templates. In order not to let environment-specific information @@ -498,6 +498,8 @@ g_return_if_fail (GST_IS_PAD_TEMPLATE (templ)); g_return_if_fail (GST_IS_CAPS (caps)); + if (caps) + GST_MINI_OBJECT_FLAG_SET (caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED); gst_caps_replace (&(((GstPadTemplate *) (templ))->ABI.abi.documentation_caps), caps); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/gst/gstvalue.c new/gstreamer-1.18.1/gst/gstvalue.c --- old/gstreamer-1.18.0/gst/gstvalue.c 2020-09-08 01:01:36.059851000 +0200 +++ new/gstreamer-1.18.1/gst/gstvalue.c 2020-10-26 12:08:38.375754000 +0100 @@ -2705,8 +2705,7 @@ if (G_UNLIKELY (!_priv_gst_value_parse_string (s, &value_end, &s, TRUE))) return FALSE; /* Set NULL terminator for deserialization */ - c = *value_end; - *value_end = '\0'; + value_s = g_strndup (value_s, value_end - value_s); for (i = 0; i < G_N_ELEMENTS (try_types); i++) { g_value_init (value, try_types[i]); @@ -2722,14 +2721,13 @@ (type != G_TYPE_STRING)))) return FALSE; /* Set NULL terminator for deserialization */ - c = *value_end; - *value_end = '\0'; + value_s = g_strndup (value_s, value_end - value_s); ret = gst_value_deserialize (value, value_s); if (G_UNLIKELY (!ret)) g_value_unset (value); } - *value_end = c; + g_free (value_s); } *after = s; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/gstreamer.doap new/gstreamer-1.18.1/gstreamer.doap --- old/gstreamer-1.18.0/gstreamer.doap 2020-09-08 01:01:36.059851000 +0200 +++ new/gstreamer-1.18.1/gstreamer.doap 2020-10-26 12:08:38.379754000 +0100 @@ -40,6 +40,16 @@ <release> <Version> + <revision>1.18.1</revision> + <branch>1.18</branch> + <name></name> + <created>2020-10-26</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.18.1.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.18.0</revision> <branch>master</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/libs/gst/base/gstaggregator.c new/gstreamer-1.18.1/libs/gst/base/gstaggregator.c --- old/gstreamer-1.18.0/libs/gst/base/gstaggregator.c 2020-09-08 01:01:36.059851000 +0200 +++ new/gstreamer-1.18.1/libs/gst/base/gstaggregator.c 2020-10-26 12:08:38.379754000 +0100 @@ -46,6 +46,24 @@ * has been taken with pop_buffer (), a new buffer can be queued * on that pad. * + * * When gst_aggregator_pad_peek_buffer() or gst_aggregator_pad_has_buffer() + * are called, a reference is taken to the returned buffer, which stays + * valid until either: + * + * - gst_aggregator_pad_pop_buffer() is called, in which case the caller + * is guaranteed that the buffer they receive is the same as the peeked + * buffer. + * - gst_aggregator_pad_drop_buffer() is called, in which case the caller + * is guaranteed that the dropped buffer is the one that was peeked. + * - the subclass implementation of #GstAggregatorClass.aggregate returns. + * + * Subsequent calls to gst_aggregator_pad_peek_buffer() or + * gst_aggregator_pad_has_buffer() return / check the same buffer that was + * returned / checked, until one of the conditions listed above is met. + * + * Subclasses are only allowed to call these methods from the aggregate + * thread. + * * * If the subclass wishes to push a buffer downstream in its aggregate * implementation, it should do so through the * gst_aggregator_finish_buffer() method. This method will take care @@ -127,7 +145,7 @@ static GstClockTime gst_aggregator_get_latency_unlocked (GstAggregator * self); static void gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad, - GstBuffer * buffer); + GstBuffer * buffer, gboolean dequeued); GST_DEBUG_CATEGORY_STATIC (aggregator_debug); #define GST_CAT_DEFAULT aggregator_debug @@ -239,6 +257,7 @@ GQueue data; /* buffers, events and queries */ GstBuffer *clipped_buffer; guint num_buffers; + GstBuffer *peeked_buffer; /* used to track fill state of queues, only used with live-src and when * latency property is set to > 0 */ @@ -951,7 +970,8 @@ if (GST_IS_BUFFER (item->data) && klass->skip_buffer (aggpad, agg, item->data)) { GST_LOG_OBJECT (aggpad, "Skipping %" GST_PTR_FORMAT, item->data); - gst_aggregator_pad_buffer_consumed (aggpad, GST_BUFFER (item->data)); + gst_aggregator_pad_buffer_consumed (aggpad, GST_BUFFER (item->data), + TRUE); gst_buffer_unref (item->data); g_queue_delete_link (&aggpad->priv->data, item); } else { @@ -966,6 +986,22 @@ return TRUE; } +static gboolean +gst_aggregator_pad_reset_peeked_buffer (GstElement * self, GstPad * epad, + gpointer user_data) +{ + GstAggregatorPad *aggpad = (GstAggregatorPad *) epad; + + PAD_LOCK (aggpad); + + gst_buffer_replace (&aggpad->priv->peeked_buffer, NULL); + + PAD_UNLOCK (aggpad); + + return TRUE; +} + + static void gst_aggregator_pad_set_flushing (GstAggregatorPad * aggpad, GstFlowReturn flow_return, gboolean full) @@ -1300,8 +1336,11 @@ /* Ensure we have buffers ready (either in clipped_buffer or at the head of * the queue */ - if (!gst_aggregator_wait_and_check (self, &timeout)) + if (!gst_aggregator_wait_and_check (self, &timeout)) { + gst_element_foreach_sink_pad (GST_ELEMENT_CAST (self), + gst_aggregator_pad_reset_peeked_buffer, NULL); continue; + } if (gst_pad_check_reconfigure (GST_AGGREGATOR_SRC_PAD (self))) { if (!gst_aggregator_negotiate_unlocked (self)) { @@ -1319,6 +1358,9 @@ flow_return = klass->aggregate (self, timeout); } + gst_element_foreach_sink_pad (GST_ELEMENT_CAST (self), + gst_aggregator_pad_reset_peeked_buffer, NULL); + if (!priv->selected_samples_called_or_warned) { GST_FIXME_OBJECT (self, "Subclass should call gst_aggregator_selected_samples() from its " @@ -1834,6 +1876,13 @@ if (!gst_aggregator_start (self)) goto error_start; break; + case GST_STATE_CHANGE_PAUSED_TO_PLAYING: + /* Wake up any waiting as now we have a clock and can do + * proper waiting on the clock if necessary */ + SRC_LOCK (self); + SRC_BROADCAST (self); + SRC_UNLOCK (self); + break; default: break; } @@ -1851,6 +1900,13 @@ GST_ERROR_OBJECT (self, "Subclass failed to stop."); } break; + case GST_STATE_CHANGE_PLAYING_TO_PAUSED: + /* Wake up any waiting as now clock might be gone and we might + * need to wait on the condition variable again */ + SRC_LOCK (self); + SRC_BROADCAST (self); + SRC_UNLOCK (self); + break; default: break; } @@ -3235,9 +3291,12 @@ /* Must be called with the PAD_LOCK held */ static void -gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad, GstBuffer * buffer) +gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad, GstBuffer * buffer, + gboolean dequeued) { - pad->priv->num_buffers--; + if (dequeued) + pad->priv->num_buffers--; + if (buffer && pad->priv->emit_signals) { g_signal_emit (pad, gst_aggregator_pad_signals[PAD_SIGNAL_BUFFER_CONSUMED], 0, buffer); @@ -3278,7 +3337,7 @@ buffer = aggclass->clip (self, pad, buffer); if (buffer == NULL) { - gst_aggregator_pad_buffer_consumed (pad, buffer); + gst_aggregator_pad_buffer_consumed (pad, buffer, TRUE); GST_TRACE_OBJECT (pad, "Clipping consumed the buffer"); } } @@ -3302,22 +3361,44 @@ GstBuffer * gst_aggregator_pad_pop_buffer (GstAggregatorPad * pad) { - GstBuffer *buffer; + GstBuffer *buffer = NULL; PAD_LOCK (pad); - if (pad->priv->flow_return != GST_FLOW_OK) { - PAD_UNLOCK (pad); - return NULL; + /* If the subclass has already peeked a buffer, we guarantee + * that it receives the same buffer, no matter if the pad has + * errored out / been flushed in the meantime. + */ + if (pad->priv->peeked_buffer) { + buffer = pad->priv->peeked_buffer; + goto done; } - gst_aggregator_pad_clip_buffer_unlocked (pad); + if (pad->priv->flow_return != GST_FLOW_OK) + goto done; + gst_aggregator_pad_clip_buffer_unlocked (pad); buffer = pad->priv->clipped_buffer; +done: if (buffer) { - pad->priv->clipped_buffer = NULL; - gst_aggregator_pad_buffer_consumed (pad, buffer); + if (pad->priv->clipped_buffer != NULL) { + /* Here we still hold a reference to both the clipped buffer + * and possibly the peeked buffer, we transfer the first and + * potentially release the second + */ + gst_aggregator_pad_buffer_consumed (pad, buffer, TRUE); + pad->priv->clipped_buffer = NULL; + gst_buffer_replace (&pad->priv->peeked_buffer, NULL); + } else { + /* Here our clipped buffer has already been released, for + * example because of a flush. We thus transfer the reference + * to the peeked buffer to the caller, and we don't decrement + * pad.num_buffers as it has already been done elsewhere + */ + gst_aggregator_pad_buffer_consumed (pad, buffer, FALSE); + pad->priv->peeked_buffer = NULL; + } GST_DEBUG_OBJECT (pad, "Consumed: %" GST_PTR_FORMAT, buffer); } @@ -3359,24 +3440,29 @@ GstBuffer * gst_aggregator_pad_peek_buffer (GstAggregatorPad * pad) { - GstBuffer *buffer; + GstBuffer *buffer = NULL; PAD_LOCK (pad); - if (pad->priv->flow_return != GST_FLOW_OK) { - PAD_UNLOCK (pad); - return NULL; + if (pad->priv->peeked_buffer) { + buffer = gst_buffer_ref (pad->priv->peeked_buffer); + goto done; } + if (pad->priv->flow_return != GST_FLOW_OK) + goto done; + gst_aggregator_pad_clip_buffer_unlocked (pad); if (pad->priv->clipped_buffer) { buffer = gst_buffer_ref (pad->priv->clipped_buffer); + pad->priv->peeked_buffer = gst_buffer_ref (buffer); } else { buffer = NULL; } - PAD_UNLOCK (pad); +done: + PAD_UNLOCK (pad); return buffer; } @@ -3398,8 +3484,15 @@ gboolean has_buffer; PAD_LOCK (pad); - gst_aggregator_pad_clip_buffer_unlocked (pad); - has_buffer = (pad->priv->clipped_buffer != NULL); + + if (pad->priv->peeked_buffer) { + has_buffer = TRUE; + } else { + gst_aggregator_pad_clip_buffer_unlocked (pad); + has_buffer = (pad->priv->clipped_buffer != NULL); + if (has_buffer) + pad->priv->peeked_buffer = gst_buffer_ref (pad->priv->clipped_buffer); + } PAD_UNLOCK (pad); return has_buffer; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/libs/gst/base/gstbasetransform.c new/gstreamer-1.18.1/libs/gst/base/gstbasetransform.c --- old/gstreamer-1.18.0/libs/gst/base/gstbasetransform.c 2020-09-08 01:01:36.063850900 +0200 +++ new/gstreamer-1.18.1/libs/gst/base/gstbasetransform.c 2020-10-26 12:08:38.383754000 +0100 @@ -306,7 +306,7 @@ GstBuffer * inbuf, GstBuffer * outbuf); static gboolean gst_base_transform_default_transform_meta (GstBaseTransform * trans, - GstBuffer * inbuf, GstMeta * meta, GstBuffer * outbuf); + GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); /* static guint gst_base_transform_signals[LAST_SIGNAL] = { 0 }; */ @@ -502,7 +502,7 @@ static gboolean gst_base_transform_default_transform_meta (GstBaseTransform * trans, - GstBuffer * inbuf, GstMeta * meta, GstBuffer * outbuf) + GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf) { const GstMetaInfo *info = meta->info; const gchar *const *tags; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/libs/gst/helpers/meson.build new/gstreamer-1.18.1/libs/gst/helpers/meson.build --- old/gstreamer-1.18.0/libs/gst/helpers/meson.build 2020-09-08 01:01:36.071851000 +0200 +++ new/gstreamer-1.18.1/libs/gst/helpers/meson.build 2020-10-26 12:08:38.391754200 +0100 @@ -29,7 +29,7 @@ message('PTP not supported on Windows, not ported yet.') elif host_system == 'ios' message('PTP not supported on iOS because of permissions.') -elif ['linux', 'darwin', 'netbsd', 'freebsd', 'openbsd', 'kfreebsd', 'dragonfly', 'sunos', 'gnu'].contains(host_system) +elif ['linux', 'darwin', 'netbsd', 'freebsd', 'openbsd', 'kfreebsd', 'dragonfly', 'sunos', 'gnu', 'gnu/kfreebsd'].contains(host_system) message('PTP supported on ' + host_system + '.') have_ptp = true else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/libs/gst/helpers/ptp_helper_post_install.sh new/gstreamer-1.18.1/libs/gst/helpers/ptp_helper_post_install.sh --- old/gstreamer-1.18.0/libs/gst/helpers/ptp_helper_post_install.sh 2020-09-08 01:01:36.071851000 +0200 +++ new/gstreamer-1.18.1/libs/gst/helpers/ptp_helper_post_install.sh 2020-10-26 12:08:38.391754200 +0100 @@ -20,6 +20,9 @@ echo "Calling $setcap cap_net_bind_service,cap_net_admin+ep $ptp_helper" $setcap cap_net_bind_service,cap_net_admin+ep "$ptp_helper" || true ;; + none) + echo "No perms/caps to set for $ptp_helper" + ;; *) echo "$0 ERROR: unexpected permissions value '$with_ptp_helper_permissions'"; exit 2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/meson.build new/gstreamer-1.18.1/meson.build --- old/gstreamer-1.18.0/meson.build 2020-09-08 01:01:36.071851000 +0200 +++ new/gstreamer-1.18.1/meson.build 2020-10-26 12:08:38.391754200 +0100 @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.18.0', + version : '1.18.1', meson_version : '>= 0.48', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -172,7 +172,7 @@ [ 's390', 'HAVE_CPU_S390' ], ] foreach h : host_defines - if h.get(0) == host_machine.cpu() + if h.get(0) == host_machine.cpu_family() cdata.set(h.get(1), 1) endif endforeach @@ -367,15 +367,32 @@ platform_deps = [cc.find_library('ws2_32')] endif +building_for_uwp = false +if host_system == 'windows' + # Check whether we're building for UWP apps + code = ''' + #include <windows.h> + #if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) + #error "Not building for UWP" + #endif''' + if cc.compiles(code, name : 'building for UWP') + building_for_uwp = true + endif +endif + backtrace_deps = [] unwind_dep = dependency('libunwind', required : get_option('libunwind')) dw_dep = dependency('libdw', required: get_option('libdw')) -dbghelp_dep = dependency('DbgHelp', required : get_option('dbghelp')) -backtrace_deps = [unwind_dep, dw_dep, dbghelp_dep] +dbghelp_option = get_option('dbghelp') +if dbghelp_option.enabled() and building_for_uwp + error('DbgHelp is not supported for UWP') +endif +have_dbghelp = cc.has_header('dbghelp.h', required: dbghelp_option) and cc.has_header('tlhelp32.h', required: dbghelp_option) +backtrace_deps = [unwind_dep, dw_dep] backtrace_source_info = false backtrace_minimal = false # MSVC debug stack trace support -if host_system == 'windows' and dbghelp_dep.found() +if host_system == 'windows' and have_dbghelp and not building_for_uwp cdata.set('HAVE_DBGHELP', 1) backtrace_source_info = true # DWARF stack trace support with libunwind and elf-utils diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/plugins/elements/gstinputselector.c new/gstreamer-1.18.1/plugins/elements/gstinputselector.c --- old/gstreamer-1.18.0/plugins/elements/gstinputselector.c 2020-09-08 01:01:36.075851000 +0200 +++ new/gstreamer-1.18.1/plugins/elements/gstinputselector.c 2020-10-26 12:08:38.395754000 +0100 @@ -1821,9 +1821,11 @@ static void gst_input_selector_release_pad (GstElement * element, GstPad * pad) { + GstSelectorPad *selpad; GstInputSelector *sel; sel = GST_INPUT_SELECTOR (element); + selpad = GST_SELECTOR_PAD (pad); GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad)); GST_INPUT_SELECTOR_LOCK (sel); @@ -1834,6 +1836,13 @@ sel->active_sinkpad = NULL; sel->active_sinkpad_from_user = FALSE; } + + /* wake up the pad if it's currently waiting for EOS or a running time to be + * reached. Otherwise we'll deadlock on the streaming thread further below + * when deactivating the pad. */ + selpad->flushing = TRUE; + GST_INPUT_SELECTOR_BROADCAST (sel); + sel->n_pads--; GST_INPUT_SELECTOR_UNLOCK (sel); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/po/gstreamer-1.0.pot new/gstreamer-1.18.1/po/gstreamer-1.0.pot --- old/gstreamer-1.18.0/po/gstreamer-1.0.pot 2020-09-08 01:01:36.727849500 +0200 +++ new/gstreamer-1.18.1/po/gstreamer-1.0.pot 2020-10-26 12:08:38.859754600 +0100 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gstreamer-1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-08 00:01+0100\n" +"POT-Creation-Date: 2020-10-26 11:08+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <l...@li.org>\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/tests/check/libs/aggregator.c new/gstreamer-1.18.1/tests/check/libs/aggregator.c --- old/gstreamer-1.18.0/tests/check/libs/aggregator.c 2020-09-08 01:01:36.099851000 +0200 +++ new/gstreamer-1.18.1/tests/check/libs/aggregator.c 2020-10-26 12:08:38.415754000 +0100 @@ -58,6 +58,7 @@ guint64 timestamp; gboolean gap_expected; + gboolean do_flush_on_aggregate; }; struct _GstTestAggregatorClass @@ -100,7 +101,21 @@ testagg->gap_expected = FALSE; } - gst_aggregator_pad_drop_buffer (pad); + if (testagg->do_flush_on_aggregate) { + GstBuffer *popped_buf; + buf = gst_aggregator_pad_peek_buffer (pad); + + GST_DEBUG_OBJECT (pad, "Flushing on aggregate"); + + gst_pad_send_event (GST_PAD (pad), gst_event_new_flush_start ()); + popped_buf = gst_aggregator_pad_pop_buffer (pad); + + fail_unless (buf == popped_buf); + gst_buffer_unref (buf); + gst_buffer_unref (popped_buf); + } else { + gst_aggregator_pad_drop_buffer (pad); + } g_value_reset (&value); break; @@ -1259,6 +1274,37 @@ GST_END_TEST; +GST_START_TEST (test_flush_on_aggregate) +{ + GThread *thread1, *thread2; + ChainData data1 = { 0, }; + ChainData data2 = { 0, }; + TestData test = { 0, }; + + _test_data_init (&test, FALSE); + ((GstTestAggregator *) test.aggregator)->do_flush_on_aggregate = TRUE; + _chain_data_init (&data1, test.aggregator, gst_buffer_new (), NULL); + _chain_data_init (&data2, test.aggregator, gst_buffer_new (), NULL); + + thread1 = g_thread_try_new ("gst-check", push_data, &data1, NULL); + thread2 = g_thread_try_new ("gst-check", push_data, &data2, NULL); + + g_main_loop_run (test.ml); + g_source_remove (test.timeout_id); + + /* these will return immediately as when the data is popped the threads are + * unlocked and will terminate */ + g_thread_join (thread1); + g_thread_join (thread2); + + _chain_data_clear (&data1); + _chain_data_clear (&data2); + _test_data_clear (&test); +} + +GST_END_TEST; + + static Suite * gst_aggregator_suite (void) { @@ -1286,6 +1332,7 @@ tcase_add_test (general, test_timeout_pipeline_with_wait); tcase_add_test (general, test_add_remove); tcase_add_test (general, test_change_state_intensive); + tcase_add_test (general, test_flush_on_aggregate); return suite; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.18.0/tests/check/meson.build new/gstreamer-1.18.1/tests/check/meson.build --- old/gstreamer-1.18.0/tests/check/meson.build 2020-09-08 01:01:36.099851000 +0200 +++ new/gstreamer-1.18.1/tests/check/meson.build 2020-10-26 12:08:38.419754000 +0100 @@ -88,7 +88,7 @@ [ 'elements/filesrc.c', not gst_registry ], [ 'elements/funnel.c', not gst_registry ], [ 'elements/identity.c', not gst_registry or not gst_parse ], - [ 'elements/leaks.c' ], + [ 'elements/leaks.c', not tracer_hooks or not gst_debug ], [ 'elements/multiqueue.c', not gst_registry ], [ 'elements/selector.c', not gst_registry ], [ 'elements/streamiddemux.c', not gst_registry ],