Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gstreamer-plugins-good for openSUSE:Factory checked in at 2021-04-10 15:26:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old) and /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-good" Sat Apr 10 15:26:33 2021 rev:76 rq:883603 version:1.18.4 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes 2021-01-20 18:24:26.599353934 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.2401/gstreamer-plugins-good.changes 2021-04-10 15:27:16.566371312 +0200 @@ -1,0 +2,19 @@ +Tue Mar 30 08:55:20 UTC 2021 - Antonio Larrosa <alarr...@suse.com> + +- Update to version 1.18.4: + + matroskademux: header parsing fixes + + rpicamsrc: depend on posix threads and vchiq_arm to fix build + on raspios again + + wavenc: Fixed INFO chunk corruption, caused by odd sized data + not being padded + + wavpackdec: Add floating point format support to fix + distortions in some cases + + v4l2: recognize V4L2 bt601 colorimetry again + + v4l2videoenc: support resolution change stream encode + + v4l2h265codec: fix HEVC profile string issue + + v4l2object: Need keep same transfer as input caps + + v4l2videodec: Fix vp8 and vp9 streams can't play on board + with vendor bsp + + v4l2videodec: fix src side frame rate negotiation + +------------------------------------------------------------------- Old: ---- gst-plugins-good-1.18.3.tar.xz New: ---- gst-plugins-good-1.18.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-plugins-good.spec ++++++ --- /var/tmp/diff_new_pack.NrijM1/_old 2021-04-10 15:27:19.126374324 +0200 +++ /var/tmp/diff_new_pack.NrijM1/_new 2021-04-10 15:27:19.130374329 +0200 @@ -29,7 +29,7 @@ %define ENABLE_EXPERIMENTAL 1 Name: gstreamer-plugins-good -Version: 1.18.3 +Version: 1.18.4 Release: 0 Summary: GStreamer Streaming-Media Framework Plug-Ins License: LGPL-2.1-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.NrijM1/_old 2021-04-10 15:27:19.146374347 +0200 +++ /var/tmp/diff_new_pack.NrijM1/_new 2021-04-10 15:27:19.146374347 +0200 @@ -9,7 +9,7 @@ <!-- <param name="changesgenerate">enable</param> --> - <param name="revision">1.18.3</param> + <param name="revision">1.18.4</param> <param name="scm">git</param> </service> <service name="recompress" mode="disabled"> ++++++ gst-plugins-good-1.18.3.tar.xz -> gst-plugins-good-1.18.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/ChangeLog new/gst-plugins-good-1.18.4/ChangeLog --- old/gst-plugins-good-1.18.3/ChangeLog 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/ChangeLog 2021-03-15 18:48:29.000000000 +0100 @@ -1,3 +1,147 @@ +=== release 1.18.4 === + +2021-03-15 17:48:28 +0000 Tim-Philipp M??ller <t...@centricular.com> + + * ChangeLog: + * NEWS: + * RELEASE: + * gst-plugins-good.doap: + * meson.build: + Release 1.18.4 + +2021-03-04 13:05:19 +0200 Sebastian Dr??ge <sebast...@centricular.com> + + * gst/matroska/matroska-demux.c: + * gst/matroska/matroska-ids.h: + matroskademux: Fix extraction of multichannel WavPack + The old code had a couple of issues that all lead to potential memory + safety bugs. + - Use a constant for the Wavpack4Header size instead of using sizeof. + It's written out into the data and not from the struct and who knows + what special alignment/padding requirements some C compilers have. + - gst_buffer_set_size() does not realloc the buffer when setting a + bigger size than allocated, it only allows growing up to the maximum + allocated size. Instead use a GstAdapter to collect all the blocks + and take out everything at once in the end. + - Check that enough data is actually available in the input and + otherwise handle it an error in all cases instead of silently + ignoring it. + Among other things this fixes out of bounds writes because the code + assumed gst_buffer_set_size() can grow the buffer and simply wrote after + the end of the buffer. + Thanks to Natalie Silvanovich for reporting. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/859 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/903> + +2021-03-03 11:31:52 +0200 Sebastian Dr??ge <sebast...@centricular.com> + + * gst/matroska/matroska-demux.c: + matroskademux: Initialize track context out parameter to NULL before parsing + Various error return paths don't set it to NULL and callers are only + checking if the pointer is NULL. As it's allocated on the stack this + usually contains random stack memory, and more often than not the memory + of a previously parsed track. + This then causes all kinds of memory corruptions further down the line. + Thanks to Natalie Silvanovich for reporting. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/858 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/903> + +2021-01-18 15:54:43 +0100 Philipp Zabel <p.za...@pengutronix.de> + + * sys/v4l2/gstv4l2object.c: + v4l2object: handle GST_VIDEO_TRANSFER_BT601 + V4L2 makes no difference between the BT.601 and BT.709 transfer + functions [1], but GStreamer does since 1.18 [2]. + Adapt gst_v4l2_object_get_colorspace() and + gst_v4l2_object_set_format_full(). + [1] https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/colorspaces-details.html#colorspace-smpte-170m-v4l2-colorspace-smpte170m + [2] https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/724 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/900> + +2021-03-07 21:25:01 +0000 Vladimir Menshakov <vladimir.mensha...@gmail.com> + + * docs/gst_plugins_cache.json: + * ext/wavpack/gstwavpackdec.c: + * ext/wavpack/gstwavpackdec.h: + wavpackdec: Add floating point format support + This commit negotiate F32 audio format if MODE_FLOAT used in wavpack file. + Wavpack float mode is always in 32-bit IEEE format. + The following pipeline plays distorted audio if source file is encoded in float mode: + gst-launch-1.0 filesrc ... ! wavpackparse ! wavpackdec ! pulsesink + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/896> + +2021-03-01 14:32:40 +0800 Hou Qi <qi....@nxp.com> + + * sys/v4l2/gstv4l2videodec.c: + v4l2videodec: Do not expose profiles/levels in vp8/vp9 template caps + Vp8/vp9 supported profiles/levels are listed in decoder sink caps, but + there is no parser for these two formats and the demuxers also don't have + these information. It causes negotiation fail between demuxers and decoder + when check caps "accept = gst_caps_is_subset (caps, template_caps);". + To fix this, need to remove profiles/levels for vp8/vp9 formats in decoder + sink caps. + Fix #854 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/890> + +2021-02-24 13:25:43 +0100 Philipp Zabel <p.za...@pengutronix.de> + + * sys/v4l2/gstv4l2videodec.c: + v4l2videodec: fix src side frame rate negotiation + Negotiating v4l2h264dec ! v4l2h264enc transcoding pipelines fails in + case the encoder does not accept framerate=(fraction)0/1. + The acquired caps used for downstream negotiation are determined from + gst_v4l2_object_acquire_format(), which sets the GstVideoInfo::fps_n + and ::fps_d fields to 0. + To fix this, copy the frame rate from the sink side. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/884> + +2021-02-16 16:20:05 +0200 Jordan Petridis <jpetri...@gnome.org> + + * sys/rpicamsrc/meson.build: + rpicamsrc: depend on posix threads and vchiq_arm + Could only test on rpi 3b+ + Close #839 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/883> + +2021-02-16 22:20:17 +1100 Ashley Brighthope <ashle...@reddegrees.com> + + * gst/wavenc/gstwavenc.c: + wavenc: Fixed INFO chunk corruption, caused by odd sized data not being padded. Code style was updated. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/877> + +2021-02-04 13:43:17 +0800 Bing Song <bing.s...@nxp.com> + + * sys/v4l2/gstv4l2videoenc.c: + v4l2videoenc: support resolution change stream encode. + Resolution change stream transcoding will drain before send new video + frame buffer. Need encode video frame after process EOS. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/872> + +2021-01-14 01:12:06 +0800 Bing Song <bing.s...@nxp.com> + + * sys/v4l2/gstv4l2h265codec.c: + v4l2h265codec: fix HEVC profile string issue. + Keep HEVC profile compatible with other module. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/864> + +2020-12-15 10:41:40 +0800 Bing Song <bing.s...@nxp.com> + + * sys/v4l2/gstv4l2object.c: + * sys/v4l2/gstv4l2object.h: + v4l2object: Need keep same transfer as input caps. + GST_VIDEO_TRANSFER_BT2020_12 and GST_VIDEO_TRANSFER_BT2020_10 will + be mapped to V4L2_XFER_FUNC_709. Need check input caps when map + V4L2_XFER_FUNC_709 back to GST_VIDEO_TRANSFER_BT2020_12 and + GST_VIDEO_TRANSFER_BT2020_10 + Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/816 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/861> + +2021-01-14 02:17:10 +0000 Tim-Philipp M??ller <t...@centricular.com> + + * docs/gst_plugins_cache.json: + * meson.build: + Back to development + === release 1.18.3 === 2021-01-13 21:08:50 +0000 Tim-Philipp M??ller <t...@centricular.com> @@ -5,6 +149,7 @@ * ChangeLog: * NEWS: * RELEASE: + * docs/gst_plugins_cache.json: * gst-plugins-good.doap: * meson.build: Release 1.18.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/NEWS new/gst-plugins-good-1.18.4/NEWS --- old/gst-plugins-good-1.18.3/NEWS 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/NEWS 2021-03-15 18:48:29.000000000 +0100 @@ -2,13 +2,13 @@ GStreamer 1.18.0 was originally released on 8 September 2020. -The latest bug-fix release in the 1.18 series is 1.18.3 and was released -on 13 January 2021. +The latest bug-fix release in the 1.18 series is 1.18.4 and was released +on 15 March 2021. See https://gstreamer.freedesktop.org/releases/1.18/ for the latest version of this document. -Last updated: Wednesday 13 January 2021, 20:00 UTC (log) +Last updated: Monday 15 March 2021, 13:00 UTC (log) Introduction @@ -2717,6 +2717,168 @@ - List of Merge Requests applied in 1.18.3 - List of Issues fixed in 1.18.3 +1.18.4 + +The fourth 1.18 bug-fix release (1.18.4) was released on 15 March 2021. + +This release only contains bugfixes and security fixes and it should be +safe to update from 1.18.x. + +Highlighted bugfixes in 1.18.4 + +- important security fixes for ID3 tag reading, matroska and realmedia + parsing, and gst-libav audio decoding +- audiomixer, audioaggregator: input buffer handling fixes +- decodebin3: improve stream-selection message handling +- uridecodebin3: make ???caps??? property work +- wavenc: fix writing of INFO chunks in some cases +- v4l2: bt601 colorimetry, allow encoder resolution changes, fix + decoder frame rate negotiation +- decklinkvideosink: fix auto format detection, and fixes for 29.97fps + framerate output +- mpeg-2 video handling fixes when seeking +- avviddec: fix bufferpool negotiation and possible memory corruption + when changing resolution +- various stability, performance and reliability improvements +- memory leak fixes +- build fixes: rpicamsrc, qt overlay example, d3d11videosink on UWP + +gstreamer + +- info: Don???t leak log function user_data if the debug system is + compiled out +- task: Use SetThreadDescription() Win32 API for setting thread names, + which preserves thread names in dump files. +- buffer, memory: Mark info in map functions as caller-allocates and + pass allocation params as const pointers where possible +- clock: define AUTO_CLEANUP_FREE_FUNC for GstClockID + +gst-plugins-base + +- tag: id3v2: fix frame size check and potential invalid reads +- audio: Fix gst_audio_buffer_truncate() meta handling for + non-interleaved audio +- audioresample: respect buffer layout when draining +- audioaggregator: fix input_buffer ownership +- decodebin3: change stream selection message owner, so that the app + sends the stream-selection event to the right element +- rtspconnection: correct data_size when tunneled mode +- uridecodebin3: make caps property work +- video-converter: Don???t upsample invalid lines +- videodecoder: Fix racy critical when pool negotiation occurs during + flush +- video: Convert gst_video_info_to_caps() to take self as const ptr +- examples: added qt core dependency for qt overlay example + +gst-plugins-good + +- matroskademux: header parsing fixes +- rpicamsrc: depend on posix threads and vchiq_arm to fix build on + raspios again +- wavenc: Fixed INFO chunk corruption, caused by odd sized data not + being padded +- wavpackdec: Add floating point format support to fix distortions in + some cases +- v4l2: recognize V4L2 bt601 colorimetry again +- v4l2videoenc: support resolution change stream encode +- v4l2h265codec: fix HEVC profile string issue +- v4l2object: Need keep same transfer as input caps +- v4l2videodec: Fix vp8 and vp9 streams can???t play on board with + vendor bsp +- v4l2videodec: fix src side frame rate negotiation + +gst-plugins-bad + +- avwait: Don???t post messages with the mutex locked +- d3d11h264dec: Reconfigure decoder object on DPB size change and keep + track of actually configured DPB size +- dashsink: fix double unref of sinkpad caps +- decklinkvideosink: Use correct numerator for 29.97fps +- decklinkvideosink: fix auto format detection +- decklinksrc: Use a more accurate capture time +- d3d11videosink: Fix build error on UWP +- interlace: negotiation and buffer leak fixes +- mpegvideoparse: do not clip, so decoder receives data from keyframe + even if it???s before the segment start +- mpegtsparse: Fix switched DTS/PTS when set-timestamps=false +- nvh264sldec: Reopen decoder object if larger DPB size is required +- sdpsrc: fix double free if sdp is provided as string via the + property +- vulkan: Fix elements long name. + +gst-plugins-ugly + +- rmdemux: Make sure we have enough data available when parsing + audio/video packets + +gst-libav + +- avviddec: take the maximum of the height/coded_height +- viddec: don???t configure an incorrect buffer pool when receiving a + gap event +- audiodec: fix stack overflow in gst_ffmpeg_channel_layout_to_gst() + +gst-rtsp-server + +- rtspclientsink: fix deadlock on shutdown if no data has been + received yet +- rtspclientsink: fix leaks in unit tests +- rtsp-stream: avoid deadlock in send_func +- rtsp-client: cleanup transports during TEARDOWN + +gstreamer-vaapi + +- h264 encoder: append encoder exposure to aud +- postproc: Fix a problem of propose_allocation when passthrough +- glx: Iterate over FBConfig and select 8 bit color size + +gstreamer-sharp + +- no changes + +gst-omx + +- no changes + +gst-python + +- no changes + +gst-editing-services + +- group: Use proper group constructor + +gst-integration-testsuites + +- no changes + +gst-build + +- no changes + +Cerbero build tool and packaging changes in 1.18.4 + +- macOS: more BigSur fixes +- glib: Backport patch to set thread names on Windows 10 + +Contributors to 1.18.4 + +Alicia Boya Garc??a, Ashley Brighthope, Bing Song, Branko Subasic, Edward +Hervey, Guillaume Desmottes, Haihua Hu, He Junyan, Hou Qi, Jan Alexander +Steffens (heftig), Jeongki Kim, Jordan Petridis, Knobe, Kristofer +Bj??rkstr??m, Marijn Suijten, Matthew Waters, Paul Goulpi??, Philipp Zabel, +Rafa?? Dzi??giel, Sebastian Dr??ge, Seungha Yang, Staz M, St??phane Cerveau, +Thibault Saunier, Tim-Philipp M??ller, V??ctor Manuel J??quez Leal, Vivia +Nikolaidou, Vladimir Menshakov, + +??? 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.4 + +- List of Merge Requests applied in 1.18.4 +- List of Issues fixed in 1.18.4 + Schedule for 1.20 Our next major feature release will be 1.20, and 1.19 will be the @@ -2724,9 +2886,9 @@ development of 1.19/1.20 will happen in the git master branch. The plan for the 1.20 development cycle is yet to be confirmed, but it -is now expected that feature freeze will take place some time in -January/February 2021, with the first 1.20 stable release hopefully -around February/March 2021. +is now expected that feature freeze will take place some time in April +2021, with the first 1.20 stable release hopefully around April/May +2021. 1.20 will be backwards-compatible to the stable 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/gst-plugins-good-1.18.3/RELEASE new/gst-plugins-good-1.18.4/RELEASE --- old/gst-plugins-good-1.18.3/RELEASE 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/RELEASE 2021-03-15 18:48:29.000000000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-good 1.18.3. +This is GStreamer gst-plugins-good 1.18.4. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/docs/gst_plugins_cache.json new/gst-plugins-good-1.18.4/docs/gst_plugins_cache.json --- old/gst-plugins-good-1.18.3/docs/gst_plugins_cache.json 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/docs/gst_plugins_cache.json 2021-03-15 18:48:29.000000000 +0100 @@ -6595,7 +6595,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.18.3 FLV muxer", + "default": "GStreamer 1.18.4 FLV muxer", "mutable": "null", "readable": true, "type": "gchararray", @@ -6607,7 +6607,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.18.3 FLV muxer", + "default": "GStreamer 1.18.4 FLV muxer", "mutable": "null", "readable": true, "type": "gchararray", @@ -20636,7 +20636,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer/1.18.3", + "default": "GStreamer/1.18.4", "mutable": "null", "readable": true, "type": "gchararray", @@ -22593,7 +22593,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer souphttpsrc 1.18.3 ", + "default": "GStreamer souphttpsrc 1.18.4 ", "mutable": "null", "readable": true, "type": "gchararray", @@ -26817,7 +26817,7 @@ "presence": "always" }, "src": { - "caps": "audio/x-raw:\n format: S8\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\naudio/x-raw:\n format: S16LE\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\naudio/x-raw:\n format: S32LE\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\n", + "caps": "audio/x-raw:\n format: S8\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\naudio/x-raw:\n format: S16LE\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\naudio/x-raw:\n format: S32LE\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\naudio/x-raw:\n format: F32LE\n layout: interleaved\n channels: [ 1, 8 ]\n rate: [ 6000, 192000 ]\n", "direction": "src", "presence": "always" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/ext/wavpack/gstwavpackdec.c new/gst-plugins-good-1.18.4/ext/wavpack/gstwavpackdec.c --- old/gst-plugins-good-1.18.3/ext/wavpack/gstwavpackdec.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/ext/wavpack/gstwavpackdec.c 2021-03-15 18:48:29.000000000 +0100 @@ -82,6 +82,10 @@ "audio/x-raw, " "format = (string) " GST_AUDIO_NE (S32) ", " "layout = (string) interleaved, " + "channels = (int) [ 1, 8 ], " "rate = (int) [ 6000, 192000 ]; " + "audio/x-raw, " + "format = (string) " GST_AUDIO_NE (F32) ", " + "layout = (string) interleaved, " "channels = (int) [ 1, 8 ], " "rate = (int) [ 6000, 192000 ]") ); @@ -131,6 +135,7 @@ dec->channel_mask = 0; dec->sample_rate = 0; dec->depth = 0; + dec->mode_float = FALSE; } static void @@ -208,7 +213,9 @@ break; case 24: case 32: - fmt = _GST_AUDIO_FORMAT_NE (S32); + fmt = + dec->mode_float ? _GST_AUDIO_FORMAT_NE (F32) : + _GST_AUDIO_FORMAT_NE (S32); dec->width = 32; break; default: @@ -277,7 +284,8 @@ WavpackHeader wph; int32_t decoded, unpacked_size; gboolean format_changed; - gint width, depth, i, j, max; + gint width, depth, i, j, max, wavpack_mode; + gboolean mode_float; gint32 *dec_data = NULL; guint8 *out_data; GstMapInfo map, omap; @@ -323,10 +331,14 @@ g_assert (dec->context != NULL); + wavpack_mode = WavpackGetMode (dec->context); + mode_float = (wavpack_mode & MODE_FLOAT) == MODE_FLOAT; + format_changed = (dec->sample_rate != WavpackGetSampleRate (dec->context)) || (dec->channels != WavpackGetNumChannels (dec->context)) || (dec->depth != WavpackGetBytesPerSample (dec->context) * 8) || + (dec->mode_float != mode_float) || (dec->channel_mask != WavpackGetChannelMask (dec->context)); if (!gst_pad_has_current_caps (GST_AUDIO_DECODER_SRC_PAD (dec)) || @@ -336,6 +348,7 @@ dec->sample_rate = WavpackGetSampleRate (dec->context); dec->channels = WavpackGetNumChannels (dec->context); dec->depth = WavpackGetBytesPerSample (dec->context) * 8; + dec->mode_float = mode_float; channel_mask = WavpackGetChannelMask (dec->context); if (channel_mask == 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/ext/wavpack/gstwavpackdec.h new/gst-plugins-good-1.18.4/ext/wavpack/gstwavpackdec.h --- old/gst-plugins-good-1.18.3/ext/wavpack/gstwavpackdec.h 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/ext/wavpack/gstwavpackdec.h 2021-03-15 18:48:29.000000000 +0100 @@ -52,6 +52,7 @@ gint width; gint channels; gint channel_mask; + gboolean mode_float; gint channel_reorder_map[64]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/gst/matroska/matroska-demux.c new/gst-plugins-good-1.18.4/gst/matroska/matroska-demux.c --- old/gst-plugins-good-1.18.3/gst/matroska/matroska-demux.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/gst/matroska/matroska-demux.c 2021-03-15 18:48:29.000000000 +0100 @@ -692,6 +692,8 @@ DEBUG_ELEMENT_START (demux, ebml, "TrackEntry"); + *dest_context = NULL; + /* start with the master */ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) { DEBUG_ELEMENT_STOP (demux, ebml, "TrackEntry", ret); @@ -3849,6 +3851,12 @@ guint32 block_samples, tmp; gsize size = gst_buffer_get_size (*buf); + if (size < 4) { + GST_ERROR_OBJECT (element, "Too small wavpack buffer"); + gst_buffer_unmap (*buf, &map); + return GST_FLOW_ERROR; + } + gst_buffer_extract (*buf, 0, &tmp, sizeof (guint32)); block_samples = GUINT32_FROM_LE (tmp); /* we need to reconstruct the header of the wavpack block */ @@ -3856,10 +3864,10 @@ /* -20 because ck_size is the size of the wavpack block -8 * and lace_size is the size of the wavpack block + 12 * (the three guint32 of the header that already are in the buffer) */ - wvh.ck_size = size + sizeof (Wavpack4Header) - 20; + wvh.ck_size = size + WAVPACK4_HEADER_SIZE - 20; /* block_samples, flags and crc are already in the buffer */ - newbuf = gst_buffer_new_allocate (NULL, sizeof (Wavpack4Header) - 12, NULL); + newbuf = gst_buffer_new_allocate (NULL, WAVPACK4_HEADER_SIZE - 12, NULL); gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE); data = outmap.data; @@ -3884,9 +3892,11 @@ audiocontext->wvpk_block_index += block_samples; } else { guint8 *outdata = NULL; - guint outpos = 0; - gsize buf_size, size, out_size = 0; + gsize buf_size, size; guint32 block_samples, flags, crc, blocksize; + GstAdapter *adapter; + + adapter = gst_adapter_new (); gst_buffer_map (*buf, &map, GST_MAP_READ); buf_data = map.data; @@ -3895,6 +3905,7 @@ if (buf_size < 4) { GST_ERROR_OBJECT (element, "Too small wavpack buffer"); gst_buffer_unmap (*buf, &map); + g_object_unref (adapter); return GST_FLOW_ERROR; } @@ -3916,59 +3927,57 @@ data += 4; size -= 4; - if (blocksize == 0 || size < blocksize) - break; - - g_assert ((newbuf == NULL) == (outdata == NULL)); - - if (newbuf == NULL) { - out_size = sizeof (Wavpack4Header) + blocksize; - newbuf = gst_buffer_new_allocate (NULL, out_size, NULL); + if (blocksize == 0 || size < blocksize) { + GST_ERROR_OBJECT (element, "Too small wavpack buffer"); + gst_buffer_unmap (*buf, &map); + g_object_unref (adapter); + return GST_FLOW_ERROR; + } + + g_assert (newbuf == NULL); + + newbuf = + gst_buffer_new_allocate (NULL, WAVPACK4_HEADER_SIZE + blocksize, + NULL); + gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE); + outdata = outmap.data; + + outdata[0] = 'w'; + outdata[1] = 'v'; + outdata[2] = 'p'; + outdata[3] = 'k'; + outdata += 4; + + GST_WRITE_UINT32_LE (outdata, blocksize + WAVPACK4_HEADER_SIZE - 8); + GST_WRITE_UINT16_LE (outdata + 4, wvh.version); + GST_WRITE_UINT8 (outdata + 6, wvh.track_no); + GST_WRITE_UINT8 (outdata + 7, wvh.index_no); + GST_WRITE_UINT32_LE (outdata + 8, wvh.total_samples); + GST_WRITE_UINT32_LE (outdata + 12, wvh.block_index); + GST_WRITE_UINT32_LE (outdata + 16, block_samples); + GST_WRITE_UINT32_LE (outdata + 20, flags); + GST_WRITE_UINT32_LE (outdata + 24, crc); + outdata += 28; - gst_buffer_copy_into (newbuf, *buf, - GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS, 0, -1); + memcpy (outdata, data, blocksize); - outpos = 0; - gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE); - outdata = outmap.data; - } else { - gst_buffer_unmap (newbuf, &outmap); - out_size += sizeof (Wavpack4Header) + blocksize; - gst_buffer_set_size (newbuf, out_size); - gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE); - outdata = outmap.data; - } - - outdata[outpos] = 'w'; - outdata[outpos + 1] = 'v'; - outdata[outpos + 2] = 'p'; - outdata[outpos + 3] = 'k'; - outpos += 4; - - GST_WRITE_UINT32_LE (outdata + outpos, - blocksize + sizeof (Wavpack4Header) - 8); - GST_WRITE_UINT16_LE (outdata + outpos + 4, wvh.version); - GST_WRITE_UINT8 (outdata + outpos + 6, wvh.track_no); - GST_WRITE_UINT8 (outdata + outpos + 7, wvh.index_no); - GST_WRITE_UINT32_LE (outdata + outpos + 8, wvh.total_samples); - GST_WRITE_UINT32_LE (outdata + outpos + 12, wvh.block_index); - GST_WRITE_UINT32_LE (outdata + outpos + 16, block_samples); - GST_WRITE_UINT32_LE (outdata + outpos + 20, flags); - GST_WRITE_UINT32_LE (outdata + outpos + 24, crc); - outpos += 28; + gst_buffer_unmap (newbuf, &outmap); + gst_adapter_push (adapter, newbuf); + newbuf = NULL; - memmove (outdata + outpos, data, blocksize); - outpos += blocksize; data += blocksize; size -= blocksize; } gst_buffer_unmap (*buf, &map); - gst_buffer_unref (*buf); - if (newbuf) - gst_buffer_unmap (newbuf, &outmap); + newbuf = gst_adapter_take_buffer (adapter, gst_adapter_available (adapter)); + g_object_unref (adapter); + gst_buffer_copy_into (newbuf, *buf, + GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS, 0, -1); + gst_buffer_unref (*buf); *buf = newbuf; + audiocontext->wvpk_block_index += block_samples; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/gst/matroska/matroska-ids.h new/gst-plugins-good-1.18.4/gst/matroska/matroska-ids.h --- old/gst-plugins-good-1.18.3/gst/matroska/matroska-ids.h 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/gst/matroska/matroska-ids.h 2021-03-15 18:48:29.000000000 +0100 @@ -688,6 +688,8 @@ guint32 crc; /* crc for actual decoded data */ } Wavpack4Header; +#define WAVPACK4_HEADER_SIZE (32) + typedef enum { GST_MATROSKA_TRACK_ENCODING_SCOPE_FRAME = (1<<0), GST_MATROSKA_TRACK_ENCODING_SCOPE_CODEC_DATA = (1<<1), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/gst/wavenc/gstwavenc.c new/gst-plugins-good-1.18.4/gst/wavenc/gstwavenc.c --- old/gst-plugins-good-1.18.3/gst/wavenc/gstwavenc.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/gst/wavenc/gstwavenc.c 2021-03-15 18:48:29.000000000 +0100 @@ -546,6 +546,7 @@ 0, NULL} }; gint n; + size_t size; gchar *str = NULL; GstByteWriter *bw = data; for (n = 0; rifftags[n].fcc != 0; n++) { @@ -563,9 +564,15 @@ gst_tag_list_get_string (tags, tag, &str); } if (str) { + /* get string length including null termination */ + size = strlen (str) + 1; gst_byte_writer_put_uint32_le (bw, rifftags[n].fcc); - gst_byte_writer_put_uint32_le (bw, GST_ROUND_UP_2 (strlen (str))); - gst_byte_writer_put_string (bw, str); + gst_byte_writer_put_uint32_le (bw, GST_ROUND_UP_2 (size)); + gst_byte_writer_put_data (bw, (const guint8 *) str, size); + /* add padding if needed */ + if (GST_ROUND_UP_2 (size) > size) { + gst_byte_writer_put_uint8 (bw, 0); + } g_free (str); str = NULL; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/gst-plugins-good.doap new/gst-plugins-good-1.18.4/gst-plugins-good.doap --- old/gst-plugins-good-1.18.3/gst-plugins-good.doap 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/gst-plugins-good.doap 2021-03-15 18:48:29.000000000 +0100 @@ -34,6 +34,16 @@ <release> <Version> + <revision>1.18.4</revision> + <branch>1.18</branch> + <name></name> + <created>2021-03-15</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.18.4.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.18.3</revision> <branch>1.18</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/meson.build new/gst-plugins-good-1.18.4/meson.build --- old/gst-plugins-good-1.18.3/meson.build 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/meson.build 2021-03-15 18:48:29.000000000 +0100 @@ -1,5 +1,5 @@ project('gst-plugins-good', 'c', - version : '1.18.3', + version : '1.18.4', meson_version : '>= 0.48', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/sys/rpicamsrc/meson.build new/gst-plugins-good-1.18.4/sys/rpicamsrc/meson.build --- old/gst-plugins-good-1.18.3/sys/rpicamsrc/meson.build 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/sys/rpicamsrc/meson.build 2021-03-15 18:48:29.000000000 +0100 @@ -33,8 +33,11 @@ endif endif -mmal_deps = [] -foreach rpi_lib : ['mmal_core', 'mmal_util', 'mmal_vc_client', 'vcos', 'vchostif', 'bcm_host'] +thread_dep = dependency('threads') +rt_dep = cxx.find_library('rt', required : false) + +mmal_deps = [thread_dep, rt_dep] +foreach rpi_lib : ['mmal_core', 'mmal_util', 'mmal_vc_client', 'vcos', 'vchostif', 'vchiq_arm', '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' old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2h265codec.c new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2h265codec.c --- old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2h265codec.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2h265codec.c 2021-03-15 18:48:29.000000000 +0100 @@ -37,9 +37,9 @@ if (g_str_equal (profile, "main")) { v4l2_profile = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN; - } else if (g_str_equal (profile, "mainstillpicture")) { + } else if (g_str_equal (profile, "main-still-picture")) { v4l2_profile = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE; - } else if (g_str_equal (profile, "main10")) { + } else if (g_str_equal (profile, "main-10")) { v4l2_profile = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10; } else { GST_WARNING ("Unsupported profile string '%s'", profile); @@ -55,9 +55,9 @@ case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN: return "main"; case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE: - return "mainstillpicture"; + return "main-still-picture"; case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10: - return "main10"; + return "main-10"; default: GST_WARNING ("Unsupported V4L2 profile %i", v4l2_profile); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2object.c new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2object.c --- old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2object.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2object.c 2021-03-15 18:48:29.000000000 +0100 @@ -2024,8 +2024,8 @@ } static gboolean -gst_v4l2_object_get_colorspace (struct v4l2_format *fmt, - GstVideoColorimetry * cinfo) +gst_v4l2_object_get_colorspace (GstV4l2Object * v4l2object, + struct v4l2_format *fmt, GstVideoColorimetry * cinfo) { gboolean is_rgb = gst_v4l2_object_v4l2fourcc_is_rgb (fmt->fmt.pix.pixelformat); @@ -2052,7 +2052,7 @@ case V4L2_COLORSPACE_SMPTE170M: cinfo->range = GST_VIDEO_COLOR_RANGE_16_235; cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601; - cinfo->transfer = GST_VIDEO_TRANSFER_BT709; + cinfo->transfer = GST_VIDEO_TRANSFER_BT601; cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M; break; case V4L2_COLORSPACE_REC709: @@ -2181,8 +2181,13 @@ case V4L2_XFER_FUNC_709: if (colorspace == V4L2_COLORSPACE_BT2020 && fmt->fmt.pix.height >= 2160) cinfo->transfer = GST_VIDEO_TRANSFER_BT2020_12; + else if (colorspace == V4L2_COLORSPACE_SMPTE170M) + cinfo->transfer = GST_VIDEO_TRANSFER_BT601; else cinfo->transfer = GST_VIDEO_TRANSFER_BT709; + + if (v4l2object->transfer) + cinfo->transfer = v4l2object->transfer; break; case V4L2_XFER_FUNC_SRGB: cinfo->transfer = GST_VIDEO_TRANSFER_SRGB; @@ -2356,7 +2361,7 @@ /* step 1: get device default colorspace and insert it first as * it should be the preferred one */ if (gst_v4l2_object_try_fmt (v4l2object, &fmt) == 0) { - if (gst_v4l2_object_get_colorspace (&fmt, &cinfo)) + if (gst_v4l2_object_get_colorspace (v4l2object, &fmt, &cinfo)) gst_v4l2_object_fill_colorimetry_list (&list, &cinfo); } @@ -2384,7 +2389,7 @@ colorspace = fmt.fmt.pix.colorspace; if (colorspace == req_cspace) { - if (gst_v4l2_object_get_colorspace (&fmt, &cinfo)) + if (gst_v4l2_object_get_colorspace (v4l2object, &fmt, &cinfo)) gst_v4l2_object_fill_colorimetry_list (&list, &cinfo); } } @@ -3460,6 +3465,7 @@ gst_video_info_init (&info); gst_video_alignment_reset (&align); + v4l2object->transfer = GST_VIDEO_TRANSFER_UNKNOWN; if (!gst_v4l2_object_get_caps_info (v4l2object, caps, &fmtdesc, &info)) goto invalid_caps; @@ -3573,8 +3579,11 @@ case GST_VIDEO_TRANSFER_GAMMA10: transfer = V4L2_XFER_FUNC_NONE; break; + case GST_VIDEO_TRANSFER_BT601: case GST_VIDEO_TRANSFER_BT2020_12: + case GST_VIDEO_TRANSFER_BT2020_10: case GST_VIDEO_TRANSFER_BT709: + v4l2object->transfer = info.colorimetry.transfer; transfer = V4L2_XFER_FUNC_709; break; case GST_VIDEO_TRANSFER_SMPTE240M: @@ -3775,7 +3784,7 @@ goto invalid_field; } - if (gst_v4l2_object_get_colorspace (&format, &info.colorimetry)) { + if (gst_v4l2_object_get_colorspace (v4l2object, &format, &info.colorimetry)) { if (gst_structure_has_field (s, "colorimetry")) { if (!gst_v4l2_video_colorimetry_matches (&info.colorimetry, gst_structure_get_string (s, "colorimetry"))) @@ -4170,7 +4179,7 @@ gst_video_info_set_interlaced_format (info, format, interlace_mode, width, height); - gst_v4l2_object_get_colorspace (&fmt, &info->colorimetry); + gst_v4l2_object_get_colorspace (v4l2object, &fmt, &info->colorimetry); gst_v4l2_object_save_format (v4l2object, fmtdesc, &fmt, info, &align); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2object.h new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2object.h --- old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2object.h 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2object.h 2021-03-15 18:48:29.000000000 +0100 @@ -143,6 +143,7 @@ struct v4l2_format format; GstVideoInfo info; GstVideoAlignment align; + GstVideoTransferFunction transfer; /* Features */ gboolean need_video_meta; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2videodec.c new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2videodec.c --- old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2videodec.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2videodec.c 2021-03-15 18:48:29.000000000 +0100 @@ -682,6 +682,10 @@ if (!gst_v4l2_object_acquire_format (self->v4l2capture, &info)) goto not_negotiated; + /* gst_v4l2_object_acquire_format() does not set fps, copy from sink */ + info.fps_n = self->v4l2output->info.fps_n; + info.fps_d = self->v4l2output->info.fps_d; + /* Create caps from the acquired format, remove the format field */ acquired_caps = gst_video_info_to_caps (&info); GST_DEBUG_OBJECT (self, "Acquired caps: %" GST_PTR_FORMAT, acquired_caps); @@ -1210,7 +1214,8 @@ continue; } - if (cdata->codec != NULL) { + if (cdata->codec != NULL && cdata->codec != gst_v4l2_vp8_get_codec () + && cdata->codec != gst_v4l2_vp9_get_codec ()) { GValue value = G_VALUE_INIT; if (gst_v4l2_codec_probe_levels (cdata->codec, video_fd, &value)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2videoenc.c new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2videoenc.c --- old/gst-plugins-good-1.18.3/sys/v4l2/gstv4l2videoenc.c 2021-01-13 22:08:52.000000000 +0100 +++ new/gst-plugins-good-1.18.4/sys/v4l2/gstv4l2videoenc.c 2021-03-15 18:48:29.000000000 +0100 @@ -738,10 +738,13 @@ if (task_state == GST_TASK_STOPPED || task_state == GST_TASK_PAUSED) { GstBufferPool *pool = GST_BUFFER_POOL (self->v4l2output->pool); - /* It possible that the processing thread stopped due to an error */ + /* It is possible that the processing thread stopped due to an error or + * when the last buffer has been met during the draining process. */ if (self->output_flow != GST_FLOW_OK && - self->output_flow != GST_FLOW_FLUSHING) { - GST_DEBUG_OBJECT (self, "Processing loop stopped with error, leaving"); + self->output_flow != GST_FLOW_FLUSHING && + self->output_flow != GST_V4L2_FLOW_LAST_BUFFER) { + GST_DEBUG_OBJECT (self, "Processing loop stopped with error: %s, leaving", + gst_flow_get_name (self->output_flow)); ret = self->output_flow; goto drop; }