summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog174
-rw-r--r--NEWS191
-rw-r--r--RELEASE4
-rw-r--r--docs/plugins/gst_plugins_cache.json4
-rw-r--r--ext/assrender/gstassrender.c10
-rw-r--r--ext/soundtouch/gstpitch.cc10
-rw-r--r--ext/webrtc/gstwebrtcbin.c14
-rw-r--r--ext/zxing/gstzxing.cpp55
-rw-r--r--ext/zxing/meson.build2
-rw-r--r--gst-libs/gst/codecparsers/gstav1parser.h4
-rw-r--r--gst-libs/gst/codecs/gsth265decoder.c6
-rw-r--r--gst-plugins-bad.doap10
-rw-r--r--gst/interlace/gstinterlace.c12
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.c17
-rw-r--r--gst/mxf/mxfvanc.c16
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.c42
-rw-r--r--meson.build2
-rw-r--r--sys/magicleap/meson.build4
-rw-r--r--tests/check/elements/zxing.c33
19 files changed, 518 insertions, 92 deletions
diff --git a/ChangeLog b/ChangeLog
index d61aff1a4..8d036ba0f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,177 @@
+=== release 1.18.6 ===
+
+2022-02-02 15:07:37 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * gst-plugins-bad.doap:
+ * meson.build:
+ Release 1.18.6
+
+2022-01-27 17:56:29 +0100 Jakub Adam <jakub.adam@collabora.com>
+
+ * ext/webrtc/gstwebrtcbin.c:
+ webrtcbin: Chain up to parent constructed method
+ Failing to do so makes GstWebRTCBin invisible to the leaks tracer.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2570>
+
+2022-01-11 13:21:55 -0500 Dave Piché <dave.piche@motorolasolutions.com>
+
+ * ext/webrtc/gstwebrtcbin.c:
+ webrtc: fix log error message in function gst_webrtc_bin_set_local_description
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2569>
+
+2022-01-13 11:31:55 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/mxf/mxfvanc.c:
+ mxfdemux: don't error out if VANC track only contains packets we don't handle
+ If the VANC track does contain packets, but we skip over all packets, just
+ treat it the same as if there hadn't been any packets at all and send a
+ GAP event instead of erroring out with "Failed to handle essence element".
+ We would error out because when we reach the end of the loop without having
+ found a closed caption packet the flow return variable is still FLOW_ERROR
+ which is what it has been initialised to.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2568>
+
+2022-01-10 15:24:13 +0800 Mengkejiergeli Ba <mengkejiergeli.ba@intel.com>
+
+ * gst-libs/gst/codecparsers/gstav1parser.h:
+ av1parser: Fix data type of film grain param
+ Fix cb_offset and cr_offset data type from guint8 to guint16. According
+ to spec, cb_offset and cr_offset are 9 bit long, while guint8 can cause
+ interger overflow, and thus change to guint16.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2567>
+
+2021-12-29 21:29:02 +0100 Rafał Dzięgiel <rafostar.github@gmail.com>
+
+ * ext/assrender/gstassrender.c:
+ assrender: Support RFC8081 mime types
+ Old "application/*" are now as per RFC8081 deprecated in favor of
+ new "font/*" mime types. Some new encoders are already using the
+ updated mime types. We need to also add them to the support list
+ in order for assrender to correctly identify them as fonts.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2566>
+
+2021-01-20 12:04:48 +0100 Rafał Dzięgiel <rafostar.github@gmail.com>
+
+ * ext/assrender/gstassrender.c:
+ assrender: Add "application/vnd.ms-opentype" mimetype detection
+ The "application/vnd.ms-opentype" mimetype is commonly used in many fonts attached in the matroska videos.
+ Assrender should treat it as compatible without the need of parsing the file extension.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2566>
+
+2021-12-29 21:28:56 +0100 Rafał Dzięgiel <rafostar.github@gmail.com>
+
+ * ext/assrender/gstassrender.c:
+ assrender: Handle ".ttc" attachment extension
+ TTC stands for "TrueType Collection" file. We can pass it
+ into libass as any other attachment. Add it to the supported
+ extensions list, so the fonts it contains will be used.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2566>
+
+2021-12-11 11:33:39 -0300 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/plugins/gst_plugins_cache.json:
+ * ext/soundtouch/gstpitch.cc:
+ pitch: Specify layout as required for negotiation
+ There are cases where it might negotiate 'non-interleaved' while it
+ is wrong.
+ ```
+ gst-launch-1.0 audiotestsrc ! "audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved" ! audioconvert ! audioresample ! pitch tempo=1.2 ! audioconvert ! "audio/x-raw,format=S16LE" ! fakesink
+ Setting pipeline to PAUSED ...
+ Pipeline is PREROLLING ...
+ (gst-launch-1.0:3029628): GStreamer-Audio-CRITICAL **: 11:42:22.477: gst_audio_buffer_map: assertion '(!meta && info->layout == GST_AUDIO_LAYOUT_INTERLEAVED) || (meta && info->layout == meta->info.layout)' failed
+ ERROR: from element /GstPipeline:pipeline0/GstAudioConvert:audioconvert1: The stream is in the wrong format.
+ Additional debug info:
+ ../subprojects/gst-plugins-base/gst/audioconvert/gstaudioconvert.c(876): gst_audio_convert_transform (): /GstPipeline:pipeline0/GstAudioConvert:audioconvert1:
+ failed to map input buffer
+ ERROR: pipeline doesn't want to preroll.
+ ERROR: from element /GstPipeline:pipeline0/GstAudioTestSrc:audiotestsrc0: Internal data stream error.
+ Setting pipeline to NULL ...
+ Additional debug info:
+ ../subprojects/gstreamer/libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstAudioTestSrc:audiotestsrc0:
+ streaming stopped, reason error (-5)
+ ERROR: pipeline doesn't want to preroll.
+ Freeing pipeline ...
+ ```
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2565>
+
+2021-11-05 13:12:14 +0100 Antonio Ospite <antonio.ospite@collabora.com>
+
+ * sys/magicleap/meson.build:
+ magicleap: update lumin_rt libraries names to the latest official version
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2561>
+
+2021-10-30 01:41:51 +0900 Seungha Yang <seungha@centricular.com>
+
+ * gst-libs/gst/codecs/gsth265decoder.c:
+ codecs: h265decoder: Fix per-slice leak
+ As documented, slice header parsed via gst_h265_parser_parse_slice_hdr()
+ should be cleared, otherwise it would result in memory leak.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2559>
+
+2021-10-28 17:41:54 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ mpeg4videoparse: fix criticals trying to insert configs that don't exist yet
+ With mpeg4videoparse drop=false config-interval=N|-1 we might be
+ trying to insert a config before we have actually received one,
+ in which case we'll try to map a NULL buffer which will generate
+ lots of criticals.
+ Fixes #855
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2558>
+
+2021-09-23 19:30:32 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/webrtc/gstwebrtcbin.c:
+ webrtcbin: Always set SINK/SRC flags
+ webrtcbin can act as a sink/source depending on the SDP later. Without
+ setting this here already, surrounding bins might not notice this and
+ the pipeline configuration might become inconsistent, e.g. with regards
+ to latency.
+ See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/737
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2556>
+
+2021-08-16 18:15:42 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: memcmp potentially seen_before data
+ Theoretically the version number is incremented every time there's a new
+ section, but in a world of streaming we can't easily make that
+ assumption.
+ An example of a broken use case is when we're cat-ing two mpeg-ts files
+ together, which is equivalent of capturing a DVB stream while switching
+ channels. A set-top box would know that we switched the channels and
+ reset the demuxer, but in practice this might not happen.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2555>
+
+2021-02-25 14:09:50 +0100 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/zxing/gstzxing.cpp:
+ * ext/zxing/meson.build:
+ * tests/check/elements/zxing.c:
+ zxing: update to support version 1.1.1
+ Support new API in 1.1.1
+ Update the supported input video format.
+ Update tests to use parse_launch
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2554>
+
+2021-10-21 00:31:24 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * gst/interlace/gstinterlace.c:
+ interlace: Reset after changing state to READY
+ Trying to reset before the pads have been deactivated races with the
+ streaming thread. There was also a buggy buffer clear leaving a dangling
+ `stored_frame` pointer around. Use `gst_interlace_reset` so this happens
+ properly.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2553>
+
+2021-09-09 00:12:51 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
=== release 1.18.5 ===
2021-09-08 20:03:37 +0100 Tim-Philipp Müller <tim@centricular.com>
diff --git a/NEWS b/NEWS
index 17f17457b..d46aab467 100644
--- a/NEWS
+++ b/NEWS
@@ -2,13 +2,13 @@ GStreamer 1.18 Release Notes
GStreamer 1.18.0 was originally released on 8 September 2020.
-The latest bug-fix release in the 1.18 series is 1.18.5 and was released
-on 8 September 2021.
+The latest bug-fix release in the 1.18 series is 1.18.6 and was released
+on 2 February 2022.
See https://gstreamer.freedesktop.org/releases/1.18/ for the latest
version of this document.
-Last updated: Wednesday 8 September 2021, 11:00 UTC (log)
+Last updated: Wednesday 2 February 2022, 11:30 UTC (log)
Introduction
@@ -2103,9 +2103,8 @@ Possibly Breaking Changes
Known Issues
- GStreamer 1.18 versions <= 1.18.4 would fail to build on Linux with
- Meson 0.58 due to an issue with the include directories. Either
- apply the patch or build with an older Meson version (<= 0.57) until
- there is a GStreamer 1.18.5 release that includes the fix.
+ Meson 0.58 due to an issue with the include directories.
+ GStreamer >= 1.18.5 includes a fix for this.
Contributors
@@ -3183,16 +3182,180 @@ List of merge requests and issues fixed in 1.18.5
- List of Merge Requests applied in 1.18.5
- List of Issues fixed in 1.18.5
-Schedule for 1.20
+1.18.6
+
+The sixth 1.18 bug-fix release (1.18.6) was released on 2 February 2022.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.18.x.
+
+Highlighted bugfixes in 1.18.6
+
+- tagdemux: Fix crash when presented with malformed files (security
+ fix)
+- video-converter: Fix broken gamma remap with high bitdepth YUV
+ output
+- shout2send: Fix issues with libshout >= 2.4.2
+- mxfdemux: fix regression with VANC tracks that only contains packet
+ types we don’t handle
+- Better plugin loading error reporting on Windows
+- Fixes for deprecations in Python 3.10
+- build fixes, memory leak fixes, reliability fixes
+- security fixes
+
+gstreamer
+
+- gstplugin: Fix for UWP build
+- gstplugin: Better warnings on plugin load failure on Windows
+- gst-ptp-helper: Do not disable multicast loopback
+- concat: fix qos event handling
+- pluginfeature: Fix object leak
+- baseparse: fix invalid avg_bitrate after reset
+- multiqueue: Fix query unref race on flush
+- gst: Initialize optional event/message fields when parsing
+- bitwriter: Fix the trailing bits lost when getting its data.
+- multiqueue: never consider a queue that is not waiting
+- input-selector: Use proper segments when cleaning cached buffers
+
+gst-plugins-base
+
+- tagdemux: Fix crash when presented with malformed files (security
+ fix)
+- videoencoder: make sure the buffer is writable before modifying
+ metadata
+- video-converter: Fix for broken gamma remap with high bitdepth YUV
+ output
+- sdpmessage: fix mapping single char fmtp params
+- oggdemux: fix a race in push mode when performing the duration seek
+- uridecodebin: Fix critical warnings
+- audio-converter: Fix resampling when there’s nothing to output
+- tcp: fix build on Solaris
+- uridecodebin3: Nullify current item after all play items are freed.
+- audio-resampler: Fix segfault when we can’t output any frames
+- urisourcebin: Handle sources with dynamic pads and pads already
+ present
+- playbin2/3: autoplug/caps: don’t expand caps to ANY
+- uridecodebin3/urisourcebin: Reusability fixes
+- rtspconnection: Only reset timeout when socket is unused
+- gstvideoaggregator.c: fix build with gcc 4.8
+
+gst-plugins-good
+
+- rtspsrc: Fix critical while serializing timeout element message
+- multifilesrc: fix caps leak
+- shout2: Add compatibility for libshout >= 2.4.2 shout_open return
+ values
+- v4l2: Update fmt if padded height is greater than fmt height
+- v4l2bufferpool: set video alignment of video meta
+- qtmux: fix deadlock in gst_qt_mux_prepare_moov_recovery
+- matroska: Add support for muxing/demuxing ffv1
+- qtdemux: Try to build AAC codec-data whenever it’s possible
+
+gst-plugins-bad
+
+- interlace: Fix a double-unref on shutdown
+- webrtcbin: Chain up to parent constructed method
+- webrtc: fix log error message in function
+ gst_webrtc_bin_set_local_description
+- mxfdemux: don’t error out if VANC track only contains packets we
+ don’t handle
+- av1parser: Fix data type of film grain param
+- assrender: Support RFC8081 mime types
+- pitch: Specify layout as required for negotiation
+- magicleap: update lumin_rt libraries names to the latest official
+ version
+- codecs: h265decoder: Fix per-slice leak
+- mpeg4videoparse: fix criticals trying to insert configs that don’t
+ exist yet
+- webrtcbin: Always set SINK/SRC flags
+- mpegtspacketizer: memcmp potentially seen_before data
+- zxing: update to support version 1.1.1
+
+gst-plugins-ugly
+
+- No changes
+
+gst-libav
+
+- avcodecmap: Add support for GBRA_10LE/BE
+
+gst-rtsp-server
+
+- rtsp-stream: fix get_rates raciness
+- rtsp-media: Only unprepare a media if it was not already unpreparing
+ anyway
+- rtsp-media: Unprepare suspended medias too
+- rtsp-client: make sure sessmedia will not get freed while used
+- rtsp-media: Also mark receive-only (RECORD) medias as prepared when
+ unsuspending
+- rtsp-session: Don’t unref medias twice if it is removed inside…
+- examples: Fix leak in appsrc2 example
+
+gstreamer-vaapi
+
+- libs: video-format: Check if formats map is not NULL
+- vaapidecode: Autogenerate caps template
+- vaapipostproc: copy over metadata also when using system allocated
+ buffer
+
+gst-python
+
+- Avoid treating float as int (fix for Python 3.10)
+
+gst-editing-services
+
+- meson: Remove duplicate definition of ‘examples’ option
+
+gst-devtools
-Our next major feature release will be 1.20, and 1.19 will be the
-unstable development version leading up to the stable 1.20 release. The
-development of 1.19/1.20 will happen in the git master branch.
+- No changes
+
+gst-integration-testsuites
+
+- No changes
+
+gst-build
+
+- env: Fix deprecations from python 3.10
+- Various fixes for macOS
+- update FFmpeg wrap to 4.3.3
+
+Cerbero build tool and packaging changes in 1.18.6
+
+- Some fixes for Fedora 34
+- cerbero: Backport fix for removed loop param of PriorityQueue()
+- cerbero: Fix support for Fedora 35
+- Add support for Visual Studio 2022
+- openssl.recipe: Fix crash on iOS TestFlight
+- UnixBootstrapper: remove sudo as root user
+- bzip2.recipe: bump version to 1.0.8
+- openssl.recipe: upgrade to version 1.1.1l
+
+Contributors to 1.18.6
+
+Antonio Ospite, Célestin Marot, Dave Piché, Erlend Eriksen, Fabrice
+Fontaine, Guillaume Desmottes, Haihua Hu, He Junyan, Jakub Adam, Jan
+Alexander Steffens (heftig), Jan Schmidt, Jeremy Cline, Jordan Petridis,
+Mathieu Duponchelle, Matthew Waters, Mengkejiergeli Ba, Michael Gruner,
+Nirbheek Chauhan, Ognyan Tonchev, Pascal Hache, Rafał Dzięgiel,
+Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Teng En Ung,Thibault
+Saunier, Thomas Klausner, Tim-Philipp Müller, Tobias Reineke, Tobias
+Ronge, Tomasz Andrzejak, Trung Do, Víctor Manuel Jáquez Leal, Vivia
+Nikolaidou,
+
+… 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.6
+
+- List of Merge Requests applied in 1.18.6
+- List of Issues fixed in 1.18.6
+
+Schedule for 1.20
-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
-September/October 2021, with the first 1.20 stable release hopefully
-towards the end of October 2021.
+Our next major feature release will be 1.20, and will be released in
+early February 2022. You can track its progress on the 1.20 Release
+Notes page.
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 --git a/RELEASE b/RELEASE
index acea2f83b..dbce1ef2b 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-bad 1.18.5.
+This is GStreamer gst-plugins-bad 1.18.6.
The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!
@@ -82,7 +82,7 @@ for more details.
For help and support, please subscribe to and send questions to the
gstreamer-devel mailing list (see below for details).
-There is also a #gstreamer IRC channel on the Freenode IRC network.
+There is also a #gstreamer IRC channel on the OFTC IRC network.
==== Developers ====
diff --git a/docs/plugins/gst_plugins_cache.json b/docs/plugins/gst_plugins_cache.json
index 78d899437..46f747c82 100644
--- a/docs/plugins/gst_plugins_cache.json
+++ b/docs/plugins/gst_plugins_cache.json
@@ -217938,12 +217938,12 @@
"long-name": "Pitch controller",
"pad-templates": {
"sink": {
- "caps": "audio/x-raw:\n format: F32LE\n rate: [ 8000, 2147483647 ]\n channels: [ 1, 2147483647 ]\n",
+ "caps": "audio/x-raw:\n format: F32LE\n rate: [ 8000, 2147483647 ]\n channels: [ 1, 2147483647 ]\n layout: interleaved\n",
"direction": "sink",
"presence": "always"
},
"src": {
- "caps": "audio/x-raw:\n format: F32LE\n rate: [ 8000, 2147483647 ]\n channels: [ 1, 2147483647 ]\n",
+ "caps": "audio/x-raw:\n format: F32LE\n rate: [ 8000, 2147483647 ]\n channels: [ 1, 2147483647 ]\n layout: interleaved\n",
"direction": "src",
"presence": "always"
}
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
index e6d31985b..8f8faa1a9 100644
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -1546,11 +1546,17 @@ gst_ass_render_handle_tag_sample (GstAssRender * render, GstSample * sample)
static const gchar *mimetypes[] = {
"application/x-font-ttf",
"application/x-font-otf",
- "application/x-truetype-font"
+ "application/x-truetype-font",
+ "application/vnd.ms-opentype",
+ "font/ttf",
+ "font/otf",
+ "font/sfnt",
+ "font/collection"
};
static const gchar *extensions[] = {
".otf",
- ".ttf"
+ ".ttf",
+ ".ttc"
};
GstBuffer *buf;
diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc
index 3853802a0..c345286bb 100644
--- a/ext/soundtouch/gstpitch.cc
+++ b/ext/soundtouch/gstpitch.cc
@@ -73,13 +73,15 @@ enum
"audio/x-raw, " \
"format = (string) " GST_AUDIO_NE (F32) ", " \
"rate = (int) [ 8000, MAX ], " \
- "channels = (int) [ 1, MAX ]"
+ "channels = (int) [ 1, MAX ], " \
+ "layout = (string) interleaved"
#elif defined(SOUNDTOUCH_INTEGER_SAMPLES)
#define SUPPORTED_CAPS \
"audio/x-raw, " \
"format = (string) " GST_AUDIO_NE (S16) ", " \
"rate = (int) [ 8000, MAX ], " \
- "channels = (int) [ 1, MAX ]"
+ "channels = (int) [ 1, MAX ]", \
+ "layout = (string) interleaved"
#else
#error "Only integer or float samples are supported"
#endif
@@ -459,8 +461,8 @@ gst_pitch_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
return res;
}
-/* generic convert function based on caps, no rate
- * used here
+/* generic convert function based on caps, no rate
+ * used here
*/
static gboolean
gst_pitch_convert (GstPitch * pitch,
diff --git a/ext/webrtc/gstwebrtcbin.c b/ext/webrtc/gstwebrtcbin.c
index f1c8b7914..85435303b 100644
--- a/ext/webrtc/gstwebrtcbin.c
+++ b/ext/webrtc/gstwebrtcbin.c
@@ -4754,7 +4754,7 @@ gst_webrtc_bin_set_local_description (GstWebRTCBin * webrtc,
(GDestroyNotify) _free_set_description_data, promise)) {
GError *error =
g_error_new (GST_WEBRTC_BIN_ERROR, GST_WEBRTC_BIN_ERROR_CLOSED,
- "Could not set remote description. webrtcbin is closed");
+ "Could not set local description. webrtcbin is closed");
GstStructure *s =
gst_structure_new ("application/x-gstwebrtcbin-promise-error",
"error", G_TYPE_ERROR, error, NULL);
@@ -6012,6 +6012,8 @@ gst_webrtc_bin_constructed (GObject * object)
(GstWebRTCIceOnCandidateFunc) _on_local_ice_candidate_cb, webrtc, NULL);
g_free (name);
+
+ G_OBJECT_CLASS (parent_class)->constructed (object);
}
static void
@@ -6568,6 +6570,16 @@ _transport_free (GObject * object)
static void
gst_webrtc_bin_init (GstWebRTCBin * webrtc)
{
+ /* Set SINK/SRC flags as webrtcbin can act as one depending on the
+ * SDP later. Without setting this here already, surrounding bins might not
+ * notice this and the pipeline configuration might become inconsistent,
+ * e.g. with regards to latency.
+ * See: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/737
+ */
+ gst_bin_set_suppressed_flags (GST_BIN_CAST (webrtc),
+ GST_ELEMENT_FLAG_SINK | GST_ELEMENT_FLAG_SOURCE);
+ GST_OBJECT_FLAG_SET (webrtc, GST_ELEMENT_FLAG_SINK | GST_ELEMENT_FLAG_SOURCE);
+
webrtc->priv = gst_webrtc_bin_get_instance_private (webrtc);
g_mutex_init (PC_GET_LOCK (webrtc));
g_cond_init (PC_GET_COND (webrtc));
diff --git a/ext/zxing/gstzxing.cpp b/ext/zxing/gstzxing.cpp
index 760f8f7af..780683402 100644
--- a/ext/zxing/gstzxing.cpp
+++ b/ext/zxing/gstzxing.cpp
@@ -36,6 +36,9 @@
* * #GstSample `frame`: the frame in which the barcode message was detected, if
* the .#GstZXing:attach-frame property was set to %TRUE (Since 1.18)
*
+ * This element is based on the c++ implementation of zxing which can found
+ * at https://github.com/nu-book/zxing-cpp.
+ *
* ## Example launch lines
* |[
* gst-launch-1.0 -m v4l2src ! videoconvert ! zxing ! videoconvert ! xvimagesink
@@ -137,9 +140,8 @@ gst_barcode_format_get_type (void)
return barcode_format_type;
}
-
#define ZXING_YUV_CAPS \
- "{ Y800, I420, YV12, NV12, NV21, Y41B, Y42B, YUV9, YVU9 }"
+ "{ARGB, xRGB, Y444, Y42B, I420, Y41B, YUV9, YV12}"
static GstStaticPadTemplate gst_zxing_src_template =
@@ -171,13 +173,16 @@ struct _GstZXing
gboolean attach_frame;
gboolean rotate;
gboolean faster;
- guint format;
+ ImageFormat image_format;
+ guint barcode_format;
};
static void gst_zxing_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_zxing_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
+static gboolean gst_zxing_set_info (GstVideoFilter * vfilter, GstCaps * in,
+ GstVideoInfo * in_info, GstCaps * out, GstVideoInfo * out_info);
static GstFlowReturn gst_zxing_transform_frame_ip (GstVideoFilter * vfilter,
GstVideoFrame * frame);
@@ -239,6 +244,8 @@ gst_zxing_class_init (GstZXingClass * g_class)
vfilter_class->transform_frame_ip =
GST_DEBUG_FUNCPTR (gst_zxing_transform_frame_ip);
+ vfilter_class->set_info =
+ GST_DEBUG_FUNCPTR (gst_zxing_set_info);
}
static void
@@ -248,7 +255,8 @@ gst_zxing_init (GstZXing * zxing)
zxing->attach_frame = DEFAULT_ATTACH_FRAME;
zxing->rotate = DEFAULT_TRY_ROTATE;
zxing->faster = DEFAULT_TRY_FASTER;
- zxing->format = BARCODE_FORMAT_ALL;
+ zxing->image_format = ImageFormat::None;
+ zxing->barcode_format = BARCODE_FORMAT_ALL;
}
static void
@@ -274,7 +282,7 @@ gst_zxing_set_property (GObject * object, guint prop_id, const GValue * value,
zxing->faster = g_value_get_boolean (value);
break;
case PROP_FORMAT:
- zxing->format = g_value_get_enum (value);
+ zxing->barcode_format = g_value_get_enum (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -305,7 +313,7 @@ gst_zxing_get_property (GObject * object, guint prop_id, GValue * value,
g_value_set_boolean (value, zxing->faster);
break;
case PROP_FORMAT:
- g_value_set_enum (value, zxing->format);
+ g_value_set_enum (value, zxing->barcode_format);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -313,12 +321,42 @@ gst_zxing_get_property (GObject * object, guint prop_id, GValue * value,
}
}
+static gboolean
+gst_zxing_set_info (GstVideoFilter * vfilter, GstCaps * in,
+ GstVideoInfo * in_info, GstCaps * out, GstVideoInfo * out_info)
+{
+ GstZXing *zxing = GST_ZXING (vfilter);
+ switch (in_info->finfo->format) {
+ case GST_VIDEO_FORMAT_ARGB:
+ case GST_VIDEO_FORMAT_xRGB:
+ zxing->image_format = ImageFormat::XRGB;
+ break;
+ case GST_VIDEO_FORMAT_Y444:
+ case GST_VIDEO_FORMAT_Y42B:
+ case GST_VIDEO_FORMAT_I420:
+ case GST_VIDEO_FORMAT_Y41B:
+ case GST_VIDEO_FORMAT_YUV9:
+ case GST_VIDEO_FORMAT_YV12:
+ zxing->image_format = ImageFormat::Lum;
+ break;
+ default:
+ zxing->image_format = ImageFormat::None;
+ GST_WARNING_OBJECT (zxing, "This format is not supported %s", gst_video_format_to_string(in_info->finfo->format));
+ }
+ return TRUE;
+}
+
static GstFlowReturn
gst_zxing_transform_frame_ip (GstVideoFilter * vfilter, GstVideoFrame * frame)
{
GstZXing *zxing = GST_ZXING (vfilter);
gpointer data;
gint height, width;
+ DecodeHints hints;
+
+ hints.setTryRotate(zxing->rotate);
+ hints.setTryHarder(!zxing->faster);
+ hints.setFormats(BarcodeFormatFromString (barcode_formats[zxing->barcode_format].value_name));
/* all formats we support start with an 8-bit Y plane. zxing doesn't need
* to know about the chroma plane(s) */
@@ -326,10 +364,7 @@ gst_zxing_transform_frame_ip (GstVideoFilter * vfilter, GstVideoFrame * frame)
width = GST_VIDEO_FRAME_WIDTH (frame);
height = GST_VIDEO_FRAME_HEIGHT (frame);
- /*Init a grayscale source */
- auto result = ReadBarcode (width, height, (unsigned char *) data, width,
- { BarcodeFormatFromString (barcode_formats[zxing->format].value_name) },
- zxing->rotate, !zxing->faster);
+ auto result = ReadBarcode ({(unsigned char *)data, width, height, zxing->image_format}, hints);
if (result.isValid ()) {
GST_DEBUG_OBJECT (zxing, "Symbol found. Text: %s Format: %s",
TextUtfEncoding::ToUtf8 (result.text ()).c_str (),
diff --git a/ext/zxing/meson.build b/ext/zxing/meson.build
index 81a7ee3f9..c70fa1149 100644
--- a/ext/zxing/meson.build
+++ b/ext/zxing/meson.build
@@ -2,7 +2,7 @@ zxing_sources = [
'gstzxing.cpp',
'gstzxingplugin.c',
]
-zxing_dep = dependency('zxing', version : '>= 0.9', required : get_option('zxing'))
+zxing_dep = dependency('zxing', version : '>= 1.1.1', required : get_option('zxing'))
if zxing_dep.found()
gstzxing = library('gstzxing',
zxing_sources,
diff --git a/gst-libs/gst/codecparsers/gstav1parser.h b/gst-libs/gst/codecparsers/gstav1parser.h
index bdbe3e11a..4b49a356e 100644
--- a/gst-libs/gst/codecparsers/gstav1parser.h
+++ b/gst-libs/gst/codecparsers/gstav1parser.h
@@ -1370,10 +1370,10 @@ struct _GstAV1FilmGrainParams {
guint8 grain_scale_shift;
guint8 cb_mult;
guint8 cb_luma_mult;
- guint8 cb_offset;
+ guint16 cb_offset;
guint8 cr_mult;
guint8 cr_luma_mult;
- guint8 cr_offset;
+ guint16 cr_offset;
gboolean overlap_flag;
gboolean clip_to_restricted_range;
};
diff --git a/gst-libs/gst/codecs/gsth265decoder.c b/gst-libs/gst/codecs/gsth265decoder.c
index 033d9f26b..86b27e4d8 100644
--- a/gst-libs/gst/codecs/gsth265decoder.c
+++ b/gst-libs/gst/codecs/gsth265decoder.c
@@ -380,6 +380,12 @@ gst_h265_decoder_parse_slice (GstH265Decoder * self, GstH265NalUnit * nalu,
return FALSE;
}
+ /* NOTE: gst_h265_parser_parse_slice_hdr() allocates array
+ * GstH265SliceHdr::entry_point_offset_minus1 but we don't use it
+ * in this h265decoder baseclass at the moment
+ */
+ gst_h265_slice_hdr_free (&priv->current_slice.header);
+
priv->current_slice.nalu = *nalu;
if (!gst_h265_decoder_preprocess_slice (self, &priv->current_slice))
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index dcb2a1ee5..cf449930c 100644
--- a/gst-plugins-bad.doap
+++ b/gst-plugins-bad.doap
@@ -35,6 +35,16 @@ real live maintainer, or some actual wide use.
<release>
<Version>
+ <revision>1.18.6</revision>
+ <branch>1.18</branch>
+ <name></name>
+ <created>2022-02-02</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.18.6.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.18.5</revision>
<branch>1.18</branch>
<name></name>
diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c
index bdf132f79..054c0ed56 100644
--- a/gst/interlace/gstinterlace.c
+++ b/gst/interlace/gstinterlace.c
@@ -1485,23 +1485,23 @@ static GstStateChangeReturn
gst_interlace_change_state (GstElement * element, GstStateChange transition)
{
GstInterlace *interlace = GST_INTERLACE (element);
+ GstStateChangeReturn ret;
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
g_mutex_lock (&interlace->lock);
interlace->src_fps_n = 0;
- if (interlace->stored_frame) {
- gst_buffer_unref (interlace->stored_frame);
- }
g_mutex_unlock (&interlace->lock);
- /* why? */
- //gst_interlace_reset (interlace);
+
+ gst_interlace_reset (interlace);
break;
default:
break;
}
- return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ return ret;
}
static gboolean
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index 91df87f90..21d10e7d2 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -154,7 +154,7 @@ find_subtable (GSList * subtables, guint8 table_id, guint16 subtable_extension)
static gboolean
seen_section_before (MpegTSPacketizerStream * stream, guint8 table_id,
guint16 subtable_extension, guint8 version_number, guint8 section_number,
- guint8 last_section_number)
+ guint8 last_section_number, guint8 * data_start, gsize to_read)
{
MpegTSPacketizerStreamSubtable *subtable;
@@ -175,7 +175,17 @@ seen_section_before (MpegTSPacketizerStream * stream, guint8 table_id,
return FALSE;
}
/* Finally return whether we saw that section or not */
- return MPEGTS_BIT_IS_SET (subtable->seen_section, section_number);
+ if (!MPEGTS_BIT_IS_SET (subtable->seen_section, section_number)) {
+ GST_DEBUG ("Different section_number");
+ return FALSE;
+ }
+
+ if (stream->section_data) {
+ /* Everything else is the same, fall back to memcmp */
+ return (memcmp (stream->section_data, data_start, to_read) != 0);
+ }
+
+ return FALSE;
}
static MpegTSPacketizerStreamSubtable *
@@ -1189,7 +1199,8 @@ section_start:
* * same section_number was seen
*/
if (seen_section_before (stream, table_id, subtable_extension,
- version_number, section_number, last_section_number)) {
+ version_number, section_number, last_section_number, data_start,
+ to_read)) {
GST_DEBUG
("PID 0x%04x Already processed table_id:0x%02x subtable_extension:0x%04x, version_number:%d, section_number:%d",
packet->pid, table_id, subtable_extension, version_number,
diff --git a/gst/mxf/mxfvanc.c b/gst/mxf/mxfvanc.c
index f9342465f..d2530e09a 100644
--- a/gst/mxf/mxfvanc.c
+++ b/gst/mxf/mxfvanc.c
@@ -138,12 +138,9 @@ mxf_vanc_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
*
* The same scheme can be used for ANC packets.
*/
-
- *outbuf = gst_buffer_new ();
- GST_BUFFER_FLAG_SET (*outbuf, GST_BUFFER_FLAG_GAP);
- ret = GST_FLOW_OK;
- goto out;
+ goto no_data;
}
+
for (i = 0; i < num_packets; i++) {
G_GNUC_UNUSED guint16 line_num;
G_GNUC_UNUSED guint8 wrapping_type;
@@ -190,6 +187,7 @@ mxf_vanc_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
/* Not S334 EIA-708 */
if (did != 0x61 && sdid != 0x01) {
+ GST_TRACE ("Skipping VANC data with DID/SDID 0x%02X/0x%02X", did, sdid);
if (!gst_byte_reader_skip (&reader, array_count * array_item_size - 2))
goto out;
continue;
@@ -215,6 +213,14 @@ mxf_vanc_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
gst_buffer_unref (buffer);
return GST_FLOW_OK;
}
+
+no_data:
+
+ /* No packets or we skipped over all packets */
+ *outbuf = gst_buffer_new ();
+ GST_BUFFER_FLAG_SET (*outbuf, GST_BUFFER_FLAG_GAP);
+ ret = GST_FLOW_OK;
+
out:
gst_buffer_unmap (buffer, &map);
gst_buffer_unref (buffer);
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index 53dddd4ae..50413d0e0 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -793,26 +793,30 @@ gst_mpeg4vparse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
/* we need to send config now first */
GST_INFO_OBJECT (parse, "inserting config in stream");
- gst_buffer_map (mp4vparse->config, &cmap, GST_MAP_READ);
- diffconf = (gst_buffer_get_size (buffer) < cmap.size)
- || gst_buffer_memcmp (buffer, 0, cmap.data, cmap.size);
- csize = cmap.size;
- gst_buffer_unmap (mp4vparse->config, &cmap);
-
- /* avoid inserting duplicate config */
- if (diffconf) {
- GstBuffer *superbuf;
-
- /* insert header */
- superbuf =
- gst_buffer_append (gst_buffer_ref (mp4vparse->config),
- gst_buffer_ref (buffer));
- gst_buffer_copy_into (superbuf, buffer, GST_BUFFER_COPY_METADATA, 0,
- csize);
- gst_buffer_replace (&frame->out_buffer, superbuf);
- gst_buffer_unref (superbuf);
+ if (mp4vparse->config != NULL
+ && gst_buffer_map (mp4vparse->config, &cmap, GST_MAP_READ)) {
+ diffconf = (gst_buffer_get_size (buffer) < cmap.size)
+ || gst_buffer_memcmp (buffer, 0, cmap.data, cmap.size);
+ csize = cmap.size;
+ gst_buffer_unmap (mp4vparse->config, &cmap);
+
+ /* avoid inserting duplicate config */
+ if (diffconf) {
+ GstBuffer *superbuf;
+
+ /* insert header */
+ superbuf =
+ gst_buffer_append (gst_buffer_ref (mp4vparse->config),
+ gst_buffer_ref (buffer));
+ gst_buffer_copy_into (superbuf, buffer, GST_BUFFER_COPY_METADATA, 0,
+ csize);
+ gst_buffer_replace (&frame->out_buffer, superbuf);
+ gst_buffer_unref (superbuf);
+ } else {
+ GST_INFO_OBJECT (parse, "... but avoiding duplication");
+ }
} else {
- GST_INFO_OBJECT (parse, "... but avoiding duplication");
+ GST_WARNING_OBJECT (parse, "No config received yet");
}
if (G_UNLIKELY (timestamp != -1)) {
diff --git a/meson.build b/meson.build
index d43229f61..1c734ab12 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('gst-plugins-bad', 'c', 'cpp',
- version : '1.18.5',
+ version : '1.18.6.1',
meson_version : '>= 0.49',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])
diff --git a/sys/magicleap/meson.build b/sys/magicleap/meson.build
index ae21370b9..84bedc1bf 100644
--- a/sys/magicleap/meson.build
+++ b/sys/magicleap/meson.build
@@ -5,8 +5,8 @@ magicleap_sources = [
]
libmlaudio_dep = cc.find_library('ml_audio', required : get_option('magicleap'))
-liblumin_core_dep = cc.find_library('lumin_rt_core_1_5', required : get_option('magicleap'))
-liblumin_app_dep = cc.find_library('lumin_rt_app_1_5', required : get_option('magicleap'))
+liblumin_core_dep = cc.find_library('lumin_rt_core_1_7', required : get_option('magicleap'))
+liblumin_app_dep = cc.find_library('lumin_rt_app_1_7', required : get_option('magicleap'))
if libmlaudio_dep.found()
gstmagicleap = library('gstmagicleap',
diff --git a/tests/check/elements/zxing.c b/tests/check/elements/zxing.c
index 91f272425..d3aaaa7fb 100644
--- a/tests/check/elements/zxing.c
+++ b/tests/check/elements/zxing.c
@@ -21,27 +21,24 @@
#include <gst/check/gstcheck.h>
static GstElement *
-setup_pipeline (void)
+setup_pipeline (const gchar * in_format)
{
- GstElement *pipeline, *src, *dec, *csp, *zxing, *sink;
+ GstElement *pipeline;
gchar *path;
-
- pipeline = gst_pipeline_new ("pipeline");
-
- src = gst_element_factory_make ("filesrc", NULL);
- /* Test file must have size < 4096 otherwise pngparse will be necessary before pngdec. */
- dec = gst_element_factory_make ("pngdec", NULL);
- csp = gst_element_factory_make ("videoconvert", NULL);
- zxing = gst_element_factory_make ("zxing", "zxing");
- sink = gst_element_factory_make ("fakesink", NULL);
+ gchar *pipeline_str;
path = g_build_filename (GST_TEST_FILES_PATH, "barcode.png", NULL);
GST_LOG ("reading file '%s'", path);
- g_object_set (src, "location", path, NULL);
- g_free (path);
- gst_bin_add_many (GST_BIN (pipeline), src, dec, csp, zxing, sink, NULL);
- fail_unless (gst_element_link_many (src, dec, csp, zxing, sink, NULL));
+ pipeline_str =
+ g_strdup_printf ("filesrc location=%s ! "
+ "pngdec ! videoconvert ! video/x-raw,format=%s ! zxing name=zxing"
+ " ! fakesink", path, in_format);
+ GST_LOG ("Running pipeline: %s", pipeline_str);
+ pipeline = gst_parse_launch (pipeline_str, NULL);
+ fail_unless (pipeline != NULL);
+ g_free (pipeline_str);
+ g_free (path);
return pipeline;
}
@@ -83,7 +80,7 @@ GST_START_TEST (test_still_image)
GstElement *pipeline;
const gchar *type, *symbol;
- pipeline = setup_pipeline ();
+ pipeline = setup_pipeline ("ARGB");
fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
GST_STATE_CHANGE_ASYNC);
@@ -101,7 +98,7 @@ GST_START_TEST (test_still_image)
fail_unless (gst_structure_has_field (s, "type"));
fail_unless (gst_structure_has_field (s, "symbol"));
type = gst_structure_get_string (s, "type");
- fail_unless_equals_string (type, "EAN_13");
+ fail_unless_equals_string (type, "EAN-13");
symbol = gst_structure_get_string (s, "symbol");
fail_unless_equals_string (symbol, "9876543210128");
@@ -123,7 +120,7 @@ GST_START_TEST (test_still_image_with_sample)
GstElement *pipeline;
GstSample *sample;
- pipeline = setup_pipeline ();
+ pipeline = setup_pipeline ("ARGB");
gst_child_proxy_set ((GstChildProxy *) pipeline, "zxing::attach-frame", TRUE,
NULL);