From 6fa03dd1515ff980f3d06e4c0b92555d47b34c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 1 Jun 2021 00:07:53 +0100 Subject: Release 1.19.1 --- ChangeLog | 1980 +++++++++++++++++++++++++++++++++++++++++++++++++++++ NEWS | 2056 ++------------------------------------------------------ README | 2 +- RELEASE | 15 +- gstreamer.doap | 10 + meson.build | 2 +- 6 files changed, 2072 insertions(+), 1993 deletions(-) diff --git a/ChangeLog b/ChangeLog index 06f2e84490..3fb5a93764 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,1987 @@ +=== release 1.19.1 === + +2021-06-01 00:07:53 +0100 Tim-Philipp Müller + + * ChangeLog: + * NEWS: + * README: + * RELEASE: + * gstreamer.doap: + * meson.build: + Release 1.19.1 + +2021-05-27 16:01:17 -0500 tyler-aicradle + + * gst/gstsystemclock.c: + systemclock: fall back to g_get_monotonic_time + This allows us to cover the case where we're on some unknown system that + doesn't have a known native precision monotonic time source. Sadly this + reintroduces some of the complexity removed in previous commits. + Part-of: + +2021-05-27 09:44:29 -0500 tyler-aicradle + + * gst/gstsystemclock.c: + systemclock: reorg real and mono time functions for macOS and win32 + This simplifies the pre-processor checks a little to make it easier to + follow the code. + Part-of: + +2021-05-26 14:55:55 -0500 tyler-aicradle + + * gst/gstsystemclock.c: + systemclock: Use g_get_real_time on Windows and macOS for realtime clock + These targets previously were unable to produce wall clock times when + using GstSystemClock, this change makes it possible. + Part-of: + +2021-05-26 12:55:42 -0500 tyler-aicradle + + * gst/gstsystemclock.c: + systemclock: Reorganize defined checks for parts of GstSystemClock + The gst_system_clock_get_internal_time and + gst_system_clock_get_resolution functions had some nested defined checks + making this code somewhat harder to reason about and much harder to + change. The logical meaning of the checks has changed but the actual + code coming out of the pre-processor should not have changed + significantly. The main logical change was flattening the checks for + existence of posix timing functionality, from what I can tell these + functions aren't available on Windows where they were trying to be + included. I have checked the Linux and macOS output and they are + functionally unchanged. + Part-of: + +2021-05-24 18:27:08 +0100 Tim-Philipp Müller + + * gst/gstbuffer.c: + * gst/gstbuffer.h: + * tests/check/gst/gstbuffer.c: + buffer: rename new gst_buffer_new_copy() to gst_buffer_new_memdup() + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/826 + Part-of: + +2021-05-22 19:32:55 +0100 Tim-Philipp Müller + + * gst/gstbuffer.c: + * gst/gstbuffer.h: + * tests/check/gst/gstbuffer.c: + buffer: add gst_buffer_new_copy() convenience function + More convenient and discoverable variant of the fairly widely-used + gst_buffer_new_wrapped(g_memdup(data,size),size). + Part-of: + +2021-05-16 02:10:55 +0100 Tim-Philipp Müller + + * docs/random/API: + * docs/random/LICENSE: + * docs/random/TODO-pre-0.9: + * docs/random/autoplug1: + * docs/random/autoplug2: + * docs/random/bbb/streamselection: + * docs/random/bbb/subtitles: + * docs/random/buffers: + * docs/random/caps: + * docs/random/caps.dia: + * docs/random/caps2: + * docs/random/classes.dia: + * docs/random/ds/0.9-planning: + * docs/random/ds/buffer_locking: + * docs/random/ds/bufferpools: + * docs/random/ds/categories: + * docs/random/ds/element-checklist: + * docs/random/ds/registry: + * docs/random/ds/roadmap: + * docs/random/ensonic/audiobaseclasses.txt: + * docs/random/ensonic/dparams.txt: + * docs/random/ensonic/draft-registry-change-hooks.txt: + * docs/random/ensonic/dynlink.txt: + * docs/random/ensonic/interfaces.txt: + * docs/random/ensonic/lazycaps.txt: + * docs/random/ensonic/logging.txt: + * docs/random/ensonic/media-device-daemon.txt: + * docs/random/ensonic/plugindocs.txt: + * docs/random/ensonic/receipies.txt: + * docs/random/eos: + * docs/random/error: + * docs/random/example: + * docs/random/hierarchy: + * docs/random/interfaces: + * docs/random/metadata: + * docs/random/mutability: + * docs/random/negotiation: + * docs/random/omega/EOS/chain-walkthrough: + * docs/random/omega/IDEAS: + * docs/random/omega/TODO-0.1.0: + * docs/random/omega/TYPE_FOURCC: + * docs/random/omega/build/TODO: + * docs/random/omega/caps2: + * docs/random/omega/caps3: + * docs/random/omega/debug-commit: + * docs/random/omega/eos.old: + * docs/random/omega/filterfactory: + * docs/random/omega/output_policies: + * docs/random/omega/pad-negotiation: + * docs/random/omega/padtemplates: + * docs/random/omega/plan-generation: + * docs/random/omega/sched-case: + * docs/random/omega/sched-commit1: + * docs/random/omega/sched/chains: + * docs/random/omega/sched/walkthrough-72: + * docs/random/omega/sched2: + * docs/random/omega/scheduling: + * docs/random/omega/testing/Makefile: + * docs/random/omega/testing/framework: + * docs/random/omega/testing/gstobject.c: + * docs/random/omega/testing/gstobject.txt: + * docs/random/omega/type-properties: + * docs/random/phonon-gst: + * docs/random/plugins: + * docs/random/plugins.dia: + * docs/random/porting-to-0.11.txt: + * docs/random/queue: + * docs/random/richardb/syncmail: + * docs/random/rtp: + * docs/random/signal: + * docs/random/sources: + * docs/random/status-0.11-14-jun-2011.txt: + * docs/random/styleguide: + * docs/random/testing/syntax: + * docs/random/thaytan/opengl: + * docs/random/thaytan/video-overlays: + * docs/random/thomasvs/0.10: + * docs/random/thomasvs/0.4.0: + * docs/random/thomasvs/TODO: + * docs/random/thomasvs/docreview: + * docs/random/thomasvs/features: + * docs/random/thomasvs/guadec-4: + * docs/random/thomasvs/pthread: + * docs/random/thomasvs/pwg: + * docs/random/thomasvs/registry: + * docs/random/types: + * docs/random/types2: + * docs/random/types3: + * docs/random/use-cases-0.11.txt: + * docs/random/usecases: + * docs/random/vis-transform: + * docs/random/wingo/porting-plugins-to-0.9: + * docs/random/wingo/threadsafe-properties: + * docs/random/wingo/without-factories: + * docs/random/zaheerm/dvb-interface.txt: + docs: random: clean up outdated documents + Most of these are only of historical interest, and for that it's + fine if they're maintained in the git history. They're confusing + for anyone stumbling across them expecting documentation relating + to current versions of GStreamer. + Part-of: + +2021-05-11 21:16:01 +0200 Mathieu Duponchelle + + * plugins/elements/gstconcat.c: + concat: adjust running time offsets on events + When concat adjusts the base of the segments it forwards + downstream, it needs to also adjust the running time offsets, + as GstPad does when an offset is set by the application on a pad. + Part-of: + +2021-05-05 15:45:40 -0400 Nicolas Dufresne + + * libs/gst/base/gstaggregator.c: + * libs/gst/base/gstbaseparse.c: + * libs/gst/base/gstbaseparse.h: + * libs/gst/base/gstbasesink.c: + * libs/gst/base/gstbasesink.h: + * libs/gst/base/gstbasesrc.c: + * libs/gst/base/gstbasesrc.h: + * libs/gst/base/gstbasetransform.c: + doc: base: Fix reference to virtual function + The hotdoc syntax is #ClassName::function, but the code was using + without anything before. + Part-of: + +2021-05-06 13:03:15 -0400 Doug Nazar + + * libs/gst/check/gstcheck.c: + * libs/gst/check/libcheck/check.c: + * libs/gst/check/libcheck/check_run.c: + * libs/gst/check/libcheck/meson.build: + gstcheck: Ensure unused threadpool threads are stopped + Ensures that all unused threads are exited before the atexit() + handlers run. + This prevents a race with any thread that used the OpenSSL library + between it's thread cleanup routine and it's atexit() cleanup routine + which can cause a SIGSEGV. + Part-of: + +2021-05-11 19:02:28 +0200 Mathieu Duponchelle + + * plugins/elements/gstconcat.c: + concat: fix locking in SEGMENT event handler + concat->current_start_offset needs the lock taken for safe access, + as it can be accessed from outside of the streaming thread, eg + in release_pad. + An early break is also added for an error case. + Part-of: + +2021-05-06 23:02:35 -0400 Doug Nazar + + * plugins/elements/gstsparsefile.c: + sparsefile: Fix sparsefile on Win32 + When switching between read/write a fseek() or fflush() is required. + Part-of: + +2021-05-06 23:00:57 -0400 Doug Nazar + + * plugins/elements/gstdownloadbuffer.c: + downloadbuffer: close file before trying to remove + On Windows, the file handles must be closed before you can delete a file. + Also, it would cause an error if you try to close an already closed handle. + Part-of: + +2021-05-06 23:00:07 -0400 Doug Nazar + + * plugins/elements/gstdownloadbuffer.c: + downloadbuffer: return flow error on read error + Part-of: + +2021-05-06 22:20:57 +0300 Nikolay Sivov + + * gst/gstutils.c: + gstutils: Fix typo in the comment. + Part-of: + +2021-05-06 12:54:46 +0200 Jan Alexander Steffens (heftig) + + * plugins/elements/gstmultiqueue.c: + multiqueue: Ensure peer pad exists when iterating internal links + The pads can be NULL when we're racing with pad removal, e.g. when the + pads get removed between `gst_pad_iterate_internal_links` acquiring the + parent element and `gst_multi_queue_iterate_internal_links` locking the + multiqueue. + Part-of: + +2021-04-02 19:48:26 -0400 Chris White + + * gst/gstchildproxy.c: + gst_child_proxy_get_property: accept G_VALUE_INIT + gst_child_proxy_get_property() can now take a value initialized to + G_VALUE_INIT. This parallels the corresponding change in + g_object_get_property(), GLib 2.60+. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/724#note_738531 + Part-of: + +2021-04-22 17:53:44 +0200 François Laignel + + * gst/gstelement.c: + * gst/gstelement.h: + * gst/gstpadtemplate.c: + * gst/gstutils.c: + * libs/gst/check/gstcheck.c: + * libs/gst/check/gstharness.c: + * tests/check/elements/concat.c: + * tests/check/elements/funnel.c: + * tests/check/elements/multiqueue.c: + * tests/check/elements/selector.c: + * tests/check/elements/tee.c: + * tests/check/gst/gstelement.c: + * tests/check/gst/gstutils.c: + * tests/check/libs/aggregator.c: + * tests/check/libs/collectpads.c: + * tests/examples/streamiddemux/streamiddemux-stream.c: + Introduce gst_element_request_pad_simple + The name `gst_element_get_request_pad()` is confusing to people + learning GStreamer. `gst_element_request_pad_simple()` aims at + providing the exact same functionality, while making it more + explicit it is a simplified `gst_element_request_pad()`. + `gst_element_request_pad_simple()` is consistent with other + functions such as `gst_element_seek_simple`. + This commit deprecates `gst_element_get_request_pad()` so that a + compilation warning is emitted when used and incite developers + to use the more explicit `gst_element_request_pad_simple()`. + See also https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/743#note_886586 + Part-of: + +2021-04-20 23:54:52 -0400 Doug Nazar + + * libs/gst/check/gstharness.c: + harness: Fix object used to log caps warning. + Part-of: + +2021-04-16 11:14:31 +0200 Miguel Paris + + * gst/gstpad.c: + pad: clear probes holding mutex + Protect clearing probes against concurrent modification which might happen + due to dispose does NOT guarantee that the object is not used anymore, as + it could be referenced again and so being continued used. + So, as in the rest of places where probes hook list is used, on dispose + it should be accessed holding the mutex "GST_OBJECT_LOCK (pad);" as + GHookList is not thread-safe. + Part-of: + +2021-04-16 11:36:33 +0200 Edward Hervey + + * plugins/elements/gstqueue2.c: + queue2: Refuse all serialized queries when posting buffering messages + When posting buffering messages there are no safe places or timing to avoid + deadlocks. + Previously the code was trying to be "smart" by only forwarding serialized + queries if the queue was empty ... but that could happen when queue2 hadn't yet + posted a 100% buffering message. Meaning the pipeline might be paused and + pushing a serialized query downstream might never complete. + Therefore let's completely disable forwarding of serialized queries when + `queue2` is used as a buffering element (meaning `ALLOCATION` and `DRAIN` + queries). + Part-of: + +2021-04-11 08:23:27 -0400 Doug Nazar + + * tests/check/gst/gstpad.c: + tests: Remove invalid buffer test in test_get_allowed_caps. + Passing a non-GObject pointer causes SIGSEGV on certain architectures. + Part-of: + +2021-04-11 10:24:01 -0400 Doug Nazar + + * plugins/tracers/gstleaks.c: + leaks: Fix SIGSEGV detecting object type. + G_IS_OBJECT & GST_IS_OBJECT work by following pointers which is unsafe + on certain architectures. GstMiniObject detection however does a lookup + to see if it's a valid type derived from G_TYPE_BOXED. + Part-of: + +2021-04-10 10:46:28 -0400 Chris White + + * gst/gstallocator.c: + * gst/gstallocator.h: + allocator: add gst_allocation_params_new() + This permits creating GstAllocationParams instances on the heap, which + is useful for language bindings that can handle GBoxed types. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/683 + Part-of: + +2021-04-07 04:46:23 -0400 Doug Nazar + + * plugins/elements/gstclocksync.c: + clocksync: Fix providing system clock by default + clocksync defaults to sync=true so should advertise it by default. + Part-of: + +2020-10-10 19:09:03 +0000 Jose Quaresma + + * gst/gstpluginloader.c: + gstpluginloader: when env var is set do not fall through to system plugin scanner + If we set a custom GST_PLUGIN_SCANNER env var, then we probably want to use that and only that. + Falling through to the one installed on the system is problamatic in cross-compilation + environemnts, regardless of whether one pointed to by the env var succeeded or failed. + taken from: + http://cgit.openembedded.org/openembedded-core/commit/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch?id=0db7ba34ca41b107042306d13a6f0162885c123b + Part-of: + +2021-03-19 13:46:13 +0100 Jan Alexander Steffens (heftig) + + * tools/gst-inspect-1.0.1: + * tools/gst-inspect.c: + gst-inspect: Allow overriding DEFAULT_LESS_OPTS with GST_LESS + Part-of: + +2021-04-06 20:56:55 +0300 Sebastian Dröge + + * libs/gst/base/gstaggregator.c: + * tests/check/libs/aggregator.c: + aggregator: Release pads' peeked buffer when removing the pad or finalizing it + The peeked buffer was always reset after calling ::aggregate() but under + no other circumstances. If a pad was removed after peeking and before + ::aggregate() returned then the peeked buffer would be leaked. + This can easily happen if pads are removed from the aggregator from a + pad probe downstream of the source pad but still in the source pad's + streaming thread. + Part-of: + +2021-03-30 20:24:07 -0400 Chris White + + * gst/gstcapsfeatures.c: + * gst/gstcapsfeatures.h: + caps: Add gst_caps_features_new_single() + For use with a single feature now that gst_caps_features_new() is + G_GNUC_NULL_TERMINATED. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/774#note_855357 + Part-of: + +2021-03-27 17:10:06 -0400 Chris White + + * gst/gsttypefind.c: + * gst/gsttypefind.h: + typefind: add gst_type_find_suggest_empty_simple() + For cases where you only need a media type and no other fields. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/774#note_848664 + Part-of: + +2021-03-18 19:06:20 -0400 Chris White + + * gst/gstcapsfeatures.h: + * gst/gstelement.c: + * gst/gstelement.h: + * gst/gsttaglist.h: + * gst/gsttracerrecord.c: + * gst/gsttracerrecord.h: + * gst/gsttypefind.h: + * libs/gst/check/gstharness.h: + gst: Add missing G_GNUC_NULL_TERMINATED markers + Functions that require NULL as their last vararg are marked so the + compiler can warn on missing NULL. + Also, document the NULL terminator for gst_make_element_message_details() + and gst_tracer_record_new(). + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/669 + Part-of: + +2021-03-31 21:13:45 +0200 Pieter Willem Jordaan + + * gst/gstsystemclock.c: + systemclock: Fix deadlock on clock_nanosleep + Always use the monotonic clock's diff and end time for clock_nanosleep to have predictable behaviour even with other clock types. + Part-of: + +2021-03-26 21:00:54 +0000 Jason Carrete + + * tools/gst-launch-1.0.1: + Update gst-launch-1.0.1 + Fixed a small typo in the gst-launch-1.0 man page + Part-of: + +2021-03-19 10:33:13 +0200 Sebastian Dröge + + * gst/gstbin.c: + bin: Don't special-case G_SIGNAL_RUN_CLEANUP stage in latency signal accumulator + This signal don't run the class handler in the CLEANUP stage. + Part-of: + +2019-08-11 19:13:57 -0400 Aaron Boxer + + * gst/gst.c: + * tests/check/gst/gst.c: + gst: enforce gst_deinit one call per process + unit tests do not need to call deinit as it is already called in exit handler + Part-of: + +2019-08-11 14:20:42 -0400 Aaron Boxer + + * gst/gst.c: + gst: disable indent for parse_goption_arg + Part-of: + +2021-03-17 16:39:30 +0100 Stéphane Cerveau + + * gst/gstdeviceprovider.h: + device provider: add custom register macro + This macro allows to register a device provider with + a custom function which gives more flexibility when + registering it (see v4l2 register). + Part-of: + +2021-03-18 14:46:15 +1100 Matthew Waters + + * gst/gstatomicqueue.c: + * gst/gstbuffer.c: + * gst/gstchildproxy.c: + * gst/gstdeviceprovider.c: + * gst/gstelement.c: + * gst/gstinfo.c: + * gst/gstparamspecs.c: + * gst/gstpluginloader.c: + * gst/gstpoll.c: + * gst/gstpreset.c: + * gst/gstpromise.c: + * gst/gstprotection.c: + * gst/gsttask.c: + * gst/gsturi.c: + * gst/gstvalue.c: + * libs/gst/base/gstaggregator.c: + * libs/gst/base/gstbaseparse.c: + * libs/gst/base/gstbasesink.c: + * libs/gst/base/gstbasesrc.c: + * libs/gst/base/gstbasetransform.c: + * libs/gst/base/gstflowcombiner.c: + * libs/gst/check/gstconsistencychecker.c: + * libs/gst/check/gstharness.c: + * libs/gst/controller/gsttimedvaluecontrolsource.c: + * libs/gst/net/gstnetaddressmeta.c: + * libs/gst/net/gstnetcontrolmessagemeta.c: + * plugins/elements/gstmultiqueue.c: + * plugins/elements/gstqueue2.h: + * plugins/elements/gstvalve.h: + * tests/check/gst/gstcontroller.c: + * tests/check/gst/gstmeta.c: + * tests/check/gst/gstminiobject.c: + * tests/check/gst/gstobject.c: + * tests/check/gst/gstpreset.c: + * tests/check/gst/gstprotection.c: + * tests/check/gst/gstvalue.c: + * tests/check/libs/controller.c: + * tests/examples/controller/control-sources.c: + gst: don't use volatile to mean atomic + volatile is not sufficient to provide atomic guarantees and real atomics + should be used instead. GCC 11 has started warning about using volatile + with atomic operations. + https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719 + Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868 + Part-of: + +2020-11-18 22:32:30 +0900 Seungha Yang + + * docs/plugins/gst_plugins_cache.json: + * plugins/elements/gstclocksync.c: + * plugins/elements/gstclocksync.h: + * tests/check/elements/clocksync.c: + clocksync: Add a new property "sync-to-first" for automatic ts-offset setup + Add a new property so that clocksync can setup "ts-offset" value + based on the first buffer and pipeline's running time when the + first arrived. Newly update "ts-offset" in this case would be + a value that allows outputting the first buffer without clock waiting. + Part-of: + +2021-03-16 19:02:06 -0400 Olivier Crête + + * libs/gst/base/gstaggregator.c: + aggregator: Release the SRC lock while querying latency + This is required because the query could be intercepted and the + application could send any other requests to the element from this + thread. + Part-of: + +2021-03-17 14:06:51 +0100 Mathieu Duponchelle + + * gst/gstvalue.c: + value: fix parsing of explicit value casts + Since acdb4ce03d525a18f6c351a040b8446c7bbd98bd , parsing of the + value for a property can use the pspec to determine what type + a value should be casted to. + However, this broke the case where the value is explicitly casted + to a type (eg <(float) 0.0>). In that situation, we want to respect + the casting decision, and only use the pspec to perform "implicit" + casts. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/881 + Part-of: + +2021-03-11 15:41:16 +0100 Guillaume Desmottes + + * gst/gstclock.h: + clock: define AUTO_CLEANUP_FREE_FUNC for GstClockID + GstClockID is secretly a gpointer so we can't use g_autoptr(), + instead user can do: + g_auto (GstClockID) clock_id = 0; + Part-of: + +2021-03-08 10:27:15 +0100 Stéphane Cerveau + + * gst/gstelement.h: + element: remove useless ret test + The ret test is unrelevant and confusing. + We dont want the code to fail and the register + to succeed by example. + In the case of a conditional element_init, + the element should be defined with + GST_ELEMENT_REGISTER_DEFINE_CUSTOM instead + of GST_ELEMENT_REGISTER_DEFINE_WITH_CODE. + Part-of: + +2021-02-26 10:47:38 +0100 Stéphane Cerveau + + * data/bash-completion/completions/gst-inspect-1.0: + * data/bash-completion/completions/gst-launch-1.0: + * data/bash-completion/helpers/gst.in: + bash-completion: various bash fixes + -d tests the folder which is existing but with .in file, so I prefered + the -f to test if the gst file was available which is not the case, so + it fallbacks on the pkg-config + Part-of: + +2021-02-26 10:01:56 +0100 Stéphane Cerveau + + * gst/meson.build: + * meson.build: + meson: add uninstalled var for bash-completion + Part-of: + +2021-02-24 13:03:47 +0100 Guillaume Desmottes + + * gst/gstminiobject.c: + * gst/gstminiobject.h: + miniobject: add GST_TYPE_MINI_OBJECT + Part-of: + +2021-02-17 18:35:33 +0100 Mathieu Duponchelle + + * gst/gstdebugutils.c: + * gst/gstdebugutils.h: + docs: standardize debugutils documentation + * add a SECTION comment + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-16 16:18:08 +0100 Mathieu Duponchelle + + * gst/gstcontrolsource.h: + * gst/gstdatetime.c: + * gst/gstdatetime.h: + docs: standardize GstControlSource, GstDateTime documentation + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-01-21 02:04:25 +0100 Mathieu Duponchelle + + * libs/gst/base/gstbaseparse.c: + Revert "baseparse: always use incoming DTS" + This reverts commit fc5cd9591a3fe09458342cfedfff88d57bc330c7. + +2021-02-15 15:06:46 +0100 Mathieu Duponchelle + + * gst/gstcontext.c: + * gst/gstcontrolbinding.c: + * gst/gstcontrolbinding.h: + docs: standardize GstContext, GstControlBinding documentation + * Document virtual methods in standalone comments, in order to properly + annotate them + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Mark GstControlBinding ABI field as private + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-12 17:50:21 +0100 Mathieu Duponchelle + + * gst/gstclock.c: + * gst/gstclock.h: + docs: standardize GstClock documentation + * Don't mention explicitly that API is MT safe, this implies that + other API is not. GStreamer API is assumed to be MT safe, thread + safety should only be explicitly mentioned when API is *not* MT safe + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Document virtual methods in standalone comments, so that parameters + can be documented. This is not critical here, as parameters do not + need annotations / specific documentation, but serves as an up to + date example + * Document enumeration members in standalone comments, so that their + Since tag is accounted for by gobject-introspection + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-15 09:54:51 +0100 Stéphane Cerveau + + * gst/gstelement.h: + features: remove extra G_BEGIN_DECLS/G_END_DECLS + _GST_ELEMENT_REGISTER_DEFINE_BEGIN + _GST_ELEMENT_REGISTER_DEFINE_END was introducing + an extra extern "C" in case of c++ build. + Add missing ";" in GST_ELEMENT_REGISTER_DECLARE + Part-of: + +2021-02-11 16:04:01 +0100 Mathieu Duponchelle + + * gst/gstcapsfeatures.c: + * gst/gstchildproxy.c: + * gst/gstchildproxy.h: + docs: standardize GstCapsFeatures, GstChildProxy documentation + * Don't mention explicitly that API is MT safe, this implies that + other API is not. GStreamer API is assumed to be MT safe, thread + safety should only be explicitly mentioned when API is *not* MT safe + * Document virtual methods in standalone comments, in order to properly + annotate them + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-10 14:19:18 +0100 Mathieu Duponchelle + + * gst/gstcaps.c: + * gst/gstcaps.h: + docs: standardize GstCaps documentation + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Reword the warnings for caps nestability in light of the 1.20 + improvements + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-10 04:14:48 +1100 Jan Schmidt + + * tests/check/gst/gstpad.c: + tests: Add disjoint pad probe removal test. + Add a test that removing a blocking probe on events when there + is a different blocking probe on buffers releases the data flow. + Part-of: + +2021-02-06 03:58:54 +1100 Jan Schmidt + + * gst/gstpad.h: + pad: Improve the documentation for GstPadProbeReturn. + Explain that GST_PAD_PROBE_PASS will pass data even if there is + another pad probe that says to block, and that GST_PAD_PROBE_REMOVE + passes data and potentially unblocks the pad. + Part-of: + +2021-02-06 03:41:23 +1100 Jan Schmidt + + * gst/gstpad.c: + pad: Fix for multiple blocking probes interaction. + Change the way the marshalled flag in the internal ProbeMarshall state + is handled when iterating over pad probes so that it only counts + probes that still exist and would be called when retrying. + This improves the way that removing a blocking probe works when + there are multiple blocking probes for different conditions (data vs + events for example). + As a side-effect, probes aren't put into the the called_probes array + unless they actually match the current probe type and would be called, + potentially reducing the number of hooks that get stored in the + called_probes array, and the cost of the looping check on retries. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/658 + Part-of: + +2021-02-09 15:30:50 +0100 Mathieu Duponchelle + + * gst/gstbus.c: + * gst/gstbus.h: + docs: standardize GstBus documentation + * Don't mention explicitly that API is MT safe, this implies that + other API is not. GStreamer API is assumed to be MT safe, thread + safety should only be explicitly mentioned when API is *not* MT safe + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Document virtual methods and the class structure + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-08 15:17:05 +0100 Mathieu Duponchelle + + * gst/gstbufferpool.c: + * gst/gstbufferpool.h: + docs: standardize GstBufferPool documentation + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Document virtual methods in standalone comments, so that parameters + can be documented. This is functionally useful here, as parameters + require annotations, and should make the class more usable by + bindings. + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-08 14:31:09 +0100 Mathieu Duponchelle + + * gst/gstbufferlist.c: + * gst/gstbufferlist.h: + docs: standardize GstBufferList documentation + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-08 13:53:51 +0100 Mathieu Duponchelle + + * gst/gstbuffer.h: + docs: fix GST_BUFFER_COPY_DEEP comment title + Part-of: + +2021-02-05 14:55:37 +0100 Mathieu Duponchelle + + * gst/gstbuffer.c: + * gst/gstbuffer.h: + * gst/gstprotection.c: + docs: standardize GstBuffer documentation + * Don't mention explicitly that API is MT safe, this implies that + other API is not. GStreamer API is assumed to be MT safe, thread + safety should only be explicitly mentioned when API is *not* MT safe + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Document enumeration members in standalone comments, so that their + Since tag is accounted for by gobject-introspection + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-04 16:15:39 +0100 Mathieu Duponchelle + + * gst/gstbin.c: + * gst/gstbin.h: + * gst/gstutils.c: + docs: standardize GstBin documentation + * Don't mention explicitly that API is MT safe, this implies that + other API is not. GStreamer API is assumed to be MT safe, thread + safety should only be explicitly mentioned when API is *not* MT safe + * Don't repeat what annotations are stating with respect to ownership + transfer, nullability + * Document virtual methods in standalone comments, so that parameters + can be documented. This is not critical here, as parameters do not + need annotations / specific documentation, but serves as an up to + date example + * Document enumeration members in standalone comments, so that their + Since tag is accounted for by gobject-introspection + * Misc cleanup / typo fixes / addition of links + Part-of: + +2021-02-04 15:18:04 +0100 Mathieu Duponchelle + + * gst/gstbin.c: + docs: reformat and cleanup GstBin SECTION comment + Part-of: + +2021-02-02 16:41:28 +0100 Mathieu Duponchelle + + * gst/gstallocator.c: + docs: clean up GstAllocator documentation + In particular, there is no need to explicitly mention free + functions / ownership transfers, this should be obvious from + the annotations. + Part-of: + +2021-02-02 16:34:03 +0100 Mathieu Duponchelle + + * gst/gstallocator.c: + docs: sort GstAllocator doc so that GstAllocator appears first + The default ordering is alphabetical, causing GstAllocationParams + to appear first in the page if left auto-sorted + Part-of: + +2021-02-02 16:19:46 +0100 Mathieu Duponchelle + + * gst/gst.c: + * gst/gst.h: + docs: cleanup gst.c documentation + Part-of: + +2021-01-29 23:07:34 +0900 Seungha Yang + + * plugins/elements/gstfilesink.c: + * plugins/elements/gstfilesrc.c: + filesrc/filesink: Use g_open/g_fopen and g_close instead of ours + There should be no more cross-CRT issue on Windows since we bumped + MinGW toolchain + Part-of: + +2021-01-31 12:12:09 +0200 Sebastian Dröge + + * gst/gstinfo.c: + info: Don't leak log function user_data if the debug system is compiled out + Part-of: + +2021-01-25 22:51:33 +0100 Aleksandr Slobodeniuk + + * gst/gstvalue.h: + gstvalue: fix compilation warning in "holds" macros + GST_VALUE_HOLDS_... macros may cause -Waddress warning + on gcc if GValue is allocated on stack: + gstvalue.h:145:46: warning: the comparison will always + evaluate as ‘true’ for the address of ‘v’ will never + be NULL [-Waddress] + #define GST_VALUE_HOLDS_CAPS(x) ((x) != NULL && + G_VALUE_TYPE(x) == _gst_caps_type) + Fixes #653 + Part-of: + +2020-12-24 14:06:29 -0500 Chris White + + * tests/check/gst/gststructure.c: + structure: add tests of deserializing strings with escapes + Shows the issue described in + + Part-of: + +2019-10-28 18:06:14 +0000 Henry Wilkes + + * gst/gstvalue.c: + gstvalue: preserve parse behaviour with warning + Preserve the previous behaviour where: + name, val="5"; + passed to gst_structure_from_string would have resulted in an int value, + rather than a string, despite the quote marks. + This will be changed to being interpreted as a string in the future, but + for the time being we will issue a warning about this to give users time + to fix their code to no longer rely on this bug. + Part-of: + +2019-10-23 12:48:32 +0100 Henry Wilkes + + * gst/gstvalue.c: + * tests/check/gst/gstvalue.c: + gstvalue: make gst_string_unwrap less strict + Allow a string in gst_string_unwrap to include unescaped characters that + are not in GST_STRING_IS_ASCII. This extra leniency allows + gst_structure_from_string to, e.g., receive + name, val=(string)"string with space"; + Note that many gst tests, and potentially users, exploited this behaviour + by giving + name, val="string with space"; + i.e. without the (string) type specifier. This was allowed before + because, without a type specifier, the string was passed to + _priv_gst_value_parse_string with unescape set to TRUE, *rather* than + being sent to gst_string_unwrap. This caused a difference in behaviour + between strings that are or are not preceded by (string). E.g. + name, val=(string)"string with space"; + would fail, whilst + name, val="string with space"; + would not. And + name, val=(string)"\316\261"; + would produce a val="α", whereas + name, val=(string)"\316\261"; + would produce a val="316261" (a bug). + The current behaviour is to treat both of these cases the same, which is + desirable. But in order to not break potentially common usage of this + discrepancy (it was in our own tests), the best option is to make string + parsing less strict in general. + New behaviour would be for + name, val=(string)"string with space"; + to pass and give val="string with space", and + name, val="\316\261"; + would produce a val="α". + Also changed deserializing string test to expect successes where + previously a failure was expected. + In a similar way, this also effected the deserializing of GstStructure, + GstCaps, GstTagList and GstCapsFeatures. So, now + name, val=(structure)"sub-name, sub-val=(string)\"a: \\316\\261\";"; + will also pass and give sub-val="a: α". Note that the quote marks + and backslash still need to be escaped for the sub-structure, but other + characters need not be. + Part-of: + +2019-10-18 23:11:44 +0100 Henry Wilkes + + * tests/check/gst/gstvalue.c: + value: add serialize-deserialize tests + Added tests to ensure that the gst_value_deserialize reverses + gst_value_serialize. + Part-of: + +2019-10-18 13:00:33 +0100 Henry Wilkes + + * gst/gstvalue.c: + * tests/check/gst/gstvalue.c: + structure: don't unescape values before deserializing + No longer call _priv_gst_value_parse_string with unescape set to TRUE + before passing a value to gst_value_deserialize in + _priv_gst_value_parse_value. This latter function is called by + gst_structure_from_string and gst_caps_from_string. + When gst_structure_to_string and gst_caps_to_string are called, no + escaping is performed after calling gst_value_serialize. Therefore, by + unescaping the value string, we were introducing an additional operation + that was not performed by the original *_to_string functions. In + particular, this has meant that the derialization functions for many + non-basic types are incomplete reverses of the corresponding + serialization function (i.e., if you pipe the output of the + serialization function into the deserialization function it could fail) + because they have to compensate for this additional escaping operation, + when really this should be the domain of the deserialization functions + instead. + Correspondingly changed a few deserialization functions. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/452 + Part-of: + +2021-01-15 01:16:34 +0900 Seungha Yang + + * gst/gsttask.c: + task: Use SetThreadDescription Win32 API for setting thread name + Since Windows 10 1607, we can make use of SetThreadDescription() API + for setting thread name. Unlike previously used exception based + method, this API will preserve configured thread name on dump file. + Part-of: + +2021-01-14 15:50:05 +0100 Jan Alexander Steffens (heftig) + + * tests/check/gst/gstsystemclock.c: + tests: systemclock: Stop all stress threads before joining them + This reduces the chance of the main thread getting starved while trying + to shut down the test, potentially causing a timeout. + Even on an idle 96-processor system this reduces the duration of the + systemclock tests from ~8s to ~3s. + Part-of: + +2021-01-14 10:18:51 +0100 Marijn Suijten + + * gst/gstmemory.c: + gstmemory: Mark memory_map @info as `caller-allocates` + Part-of: + +2021-01-14 10:20:41 +0100 Marijn Suijten + + * gst/gstbuffer.c: + gstbuffer: Mark buffer_map* @info as `caller-allocates` + Part-of: + +2021-01-07 09:53:41 +0100 Marijn Suijten + + * libs/gst/base/gstaggregator.c: + * libs/gst/base/gstbasesrc.c: + * libs/gst/base/gstbasetransform.c: + gst,base: Take GstAllocationParams parameter by const ptr + This parameter is only informational and should not be modified. Enforce + this at compile-time and to get the right signature in G-IR. + Part-of: + +2021-01-13 03:01:57 +0900 Seungha Yang + + * gst/gsturi.h: + uri: Remove leftover documentation + Follow-up from https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/728 + Part-of: + +2021-01-08 20:23:23 +0900 Seungha Yang + + * gst/gstbuffer.c: + * gst/gstbuffer.h: + * gst/gstbufferlist.c: + * gst/gstbufferlist.h: + * gst/gstcaps.c: + * gst/gstcaps.h: + * gst/gstcontext.c: + * gst/gstcontext.h: + * gst/gstevent.c: + * gst/gstevent.h: + * gst/gstmemory.c: + * gst/gstmemory.h: + * gst/gstmessage.c: + * gst/gstmessage.h: + * gst/gstpromise.c: + * gst/gstpromise.h: + * gst/gstquery.c: + * gst/gstquery.h: + * gst/gstsample.c: + * gst/gstsample.h: + * gst/gsttaglist.c: + * gst/gsttaglist.h: + * gst/gsturi.c: + * gst/gsturi.h: + * gst/meson.build: + gst: Add non-inline methods for bindings to able to use core APIs + Provide non-inline version of refcounting APIs so that it can be + consumed by bindings + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer-sharp/-/issues/46 + Part-of: + +2021-01-07 11:04:48 +0000 Philippe Normand + + * docs/plugins/gst_plugins_cache.json: + * plugins/elements/gstconcat.c: + concat: Fix active-pad property doc typo + Part-of: + +2020-12-24 00:40:33 +0700 Dmitry Samoylov + + * gst/gstvalue.c: + gst: Fix doc comments + Part-of: + +2020-10-23 17:44:10 +0200 Michael Tretter + + * gst/gstpipeline.c: + pipeline: clarify that applications should handle bus messages + The pipeline posts messages on the bus even if an application does not + handle the messages. This is expected behavior but may leak messages if + the messages are not handled. + Clarify the documentation. + Part-of: + +2020-12-12 22:28:46 +0000 Fredrik Pålsson + + * gst/gstbus.c: + gstbus: change log level of repeated messages from INFO to DEBUG + Part-of: + +2020-12-11 16:01:27 +0100 Jakub Adam + + * libs/gst/check/gstharness.c: + harness: don't use GST_DEBUG_OBJECT with GstHarness + GstHarness is not a GObject. Fixes assert on recently added check in + gst_debug_log_valist() if GST_ENABLE_EXTRA_CHECKS is enabled. + Part-of: + +2020-12-10 15:48:32 -0300 Thibault Saunier + + * gst/gstbus.c: + * tests/check/gst/gstbus.c: + bus: Ensure that only one GSource can be attached to the bus + Until now we were enforcing that only 1 signal GSource was attached + the bus but we could attach as many GSource with `gst_bus_create_watch` + as we wanted... but in the end only 1 GSource will ever be dispatched for + a given `GstMessage` leading to totally broken behavior. + Part-of: + +2020-12-10 15:05:31 -0300 Thibault Saunier + + * gst/gstbus.c: + bus: Do not override source->prepare + Since GLib 2.36 we do not need it. + Part-of: + +2020-12-10 14:08:53 -0500 Nicolas Dufresne + + gir: Fix parser warning due to empty line + The GIR parser does not want any empty line after the function or macro + name line. + Fixes the following warning: + [309/4246] Generating Gst-1.0.gir with a custom command + ../subprojects/gstreamer/gst/gstelement.h:57: Warning: Gst: "@element" parameter unexpected at this location: + * @element: The element name in lower case, with words separated by '_'. + ^ + ../subprojects/gstreamer/gst/gstelement.h:84: Warning: Gst: "@e" parameter unexpected at this location: + * @e: The element name in lower case, with words separated by '_'. + ^ + ../subprojects/gstreamer/gst/gstelement.h:106: Warning: Gst: "@e" parameter unexpected at this location: + * @e: The element name in lower case, with words separated by '_'. + ^ + ../subprojects/gstreamer/gst/gstdeviceprovider.h:32: Warning: Gst: "@d_p" parameter unexpected at this location: + * @d_p: The device provider name in lower case, with words separated by '_'. + ^ + ../subprojects/gstreamer/gst/gstdynamictypefactory.h:28: Warning: Gst: "@t_n" parameter unexpected at this location: + * @t_n: The dynamic type name in lower case, with words separated by '_'. + ^ + ../subprojects/gstreamer/gst/gsttypefind.h:34: Warning: Gst: "@type_find" parameter unexpected at this location: + * @type_find: The type find name in lower case, with words separated by '_'. + ^ + ../subprojects/gstreamer/gst/gsttypefind.h:61: Warning: Gst: "@t_f" parameter unexpected at this location: + * @t_f: The type find name in lower case, with words separated by '_'. + ^ + Part-of: + +2020-12-10 09:57:37 -0300 Thibault Saunier + + * gst/gststructure.c: + * tests/check/gst/gststructure.c: + structure: Handle trailing comas in serialized structs + Part-of: + +2020-10-06 14:26:30 +0200 Stéphane Cerveau + + * plugins/elements/gstcapsfilter.c: + * plugins/elements/gstclocksync.c: + * plugins/elements/gstconcat.c: + * plugins/elements/gstcoreelementselements.h: + * plugins/elements/gstcoreelementsplugin.c: + * plugins/elements/gstdataurisrc.c: + * plugins/elements/gstdownloadbuffer.c: + * plugins/elements/gstelements.c: + * plugins/elements/gstfakesink.c: + * plugins/elements/gstfakesrc.c: + * plugins/elements/gstfdsink.c: + * plugins/elements/gstfdsrc.c: + * plugins/elements/gstfilesink.c: + * plugins/elements/gstfilesrc.c: + * plugins/elements/gstfunnel.c: + * plugins/elements/gstidentity.c: + * plugins/elements/gstinputselector.c: + * plugins/elements/gstmultiqueue.c: + * plugins/elements/gstoutputselector.c: + * plugins/elements/gstqueue.c: + * plugins/elements/gstqueue2.c: + * plugins/elements/gststreamiddemux.c: + * plugins/elements/gsttee.c: + * plugins/elements/gsttypefindelement.c: + * plugins/elements/gstvalve.c: + * plugins/elements/meson.build: + coreelements: allow per features registration + Split plugin into features including + dynamic types which can be indiviually + registered during a static build. + More details here: + https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199 + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661 + Part-of: + +2020-12-01 12:46:19 +0100 Stéphane Cerveau + + * gst/gstdynamictypefactory.h: + dynamic type: add convenience macros to register + This macros will help to register a dynamic type + apart from a given plugin such as in a static build + of gstreamer where libgstreamer-full is generated. + Part-of: + +2020-11-30 11:51:59 +0100 Stéphane Cerveau + + * gst/gsttypefind.h: + type find: add convenience macros to register + This macros will help to register a device provider + apart from a given plugin such as in a static build + of gstreamer where libgstreamer-full is generated. + Part-of: + +2020-11-27 17:33:33 +0100 Stéphane Cerveau + + * gst/gstdeviceprovider.h: + * tests/check/gst/gstdevice.c: + device provider: add convenience macros to register + This macros will help to register a device provider + apart from a given plugin such as in a static build + of gstreamer where libgstreamer-full is generated. + Part-of: + +2020-08-31 14:05:49 -0400 Julian Bouzas + + * gst/gstelement.h: + element: add convenience macros to register + Define separate macros to define an element + apart from the plugin itself. + These macros will help to register + elements a part from a plugin. + By example in the case of a gstreamer static build + producing the libgstreamer-full library. + More details here: + https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199 + Part-of: + +2020-12-01 17:17:30 +0100 Stéphane Cerveau + + * tools/gst-inspect.c: + gst-inspect: add an option to sort plugins + with the option --sort, the output is sort by default + with alphabetical order with plugins and features. + Part-of: + +2020-12-07 12:23:15 +0200 Sebastian Dröge + + * tests/check/gst/gstdatetime.c: + datetime: Update tests for returning NULL instead of g_return_val_if_fail() in error cases + Part-of: + +2020-11-25 14:02:23 +0200 Sebastian Dröge + + * gst/gstdatetime.c: + datetime: Make use of new g_time_zone_new_identifier() that properly handles errors + g_time_zone_new() returns UTC if it fails to parse the timezone + identifier, which is rather suboptimal and causes wrong datetimes to be + created silently. + Part-of: + +2020-11-25 14:00:45 +0200 Sebastian Dröge + + * gst/gstdatetime.c: + datetime: Clean up all constructors to fail gracefully if invalid dates/times are provided + And also don't crash dereferencing a NULL pointer if the GDateTime + functions return NULL. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/632 + Part-of: + +2020-11-25 13:36:19 +0200 Sebastian Dröge + + * gst/gstdatetime.c: + datetime: Change getters to return specific invalid values if the value is not set + This is more bindings friendly than requiring a special function to be + called beforehand or getting an assertion instead, and should also + simplify some usage. + Part-of: + +2020-11-25 13:35:57 +0200 Sebastian Dröge + + * gst/gstdatetime.c: + datetime: Improve documentation a bit to explain when NULL is returned + Part-of: + +2020-07-14 22:36:36 -0400 Thibault Saunier + + * gst/gst_private.h: + * gst/gstcaps.c: + * gst/gstcaps.h: + * gst/gststructure.c: + * gst/gststructure.h: + * hooks/pre-commit.hook: + * tests/check/gst/capslist.h: + * tests/check/gst/gstcaps.c: + * tests/check/gst/gststructure.c: + gst: Add new structure/caps/_to_string using the brackets for nesting + This adds `gst_structure_serialize` and `gst_caps_serialize` which use + the newly introduced bracket delimiters for nested structures. + Part-of: + +2020-06-17 09:31:18 -0400 Thibault Saunier + + * gst/gstvalue.c: + value: Cleanup on range parsing failures + Part-of: + +2020-06-16 00:07:51 -0400 Thibault Saunier + + * gst/gst_private.h: + * gst/gstcaps.c: + * gst/gststructure.c: + * gst/gstvalue.c: + * tests/check/gst/gstvalue.c: + structure: Add support for brackets as nested structures/caps specifiers + This introduces a more human friendly syntax to specify nested + structures It does so by using 2 different markers for opening and + closing them instead of abusing quotes which lead to requiring an insane + amount of escaping to match nesting levels. + The brackets (`[` and `]`) have been chosen as they avoid complex + constructions with curly brackets (or lower/higher than signs) where you + could have structures embedded inside arrays (which also use curly + brackets), ie. `s, array=(structure){{struct}}` should be parsed as an + array of structures, but the cast seems to imply something different. We + do not have this issue with brackets as they are currently used for + ranges, which can only be casted to numeric types. + This commit does not make use of that new syntax for serialization as + that would break backward compatibility, so it is basically a 'sugar' + syntax for humans. A notice has been explicitly made in the + documentation to let the user know about it. + Part-of: + +2020-12-03 19:22:43 +0100 Marijn Suijten + + * libs/gst/check/gsttestclock.c: + check: gst_test_clock_process_next_clock_id returns nullable + It is possible there are no more pending clocks in the chain, in which + case this function returns null. + See also tests like test_single_shot_async_future that validate NULL + returns. + Part-of: + +2020-12-01 19:17:05 +0000 Jose Quaresma + + * meson_options.txt: + meson: gtk_doc is not supported anymore + Part-of: + +2020-12-02 09:22:35 +0200 Sebastian Dröge + + * gst/gststreams.c: + streams: gst_stream_type_get_name() is not nullable + It takes an enum and only the defined values are valid to pass in here + as it's not extensible from the outside. + Add a g_return_val_if_reached() for the unreachable case and return + "invalid". + Part-of: + +2020-12-02 09:35:26 +0200 Sebastian Dröge + + * gst/gstinfo.c: + info: Warn if logging with a non-GObject object if GST_ENABLE_EXTRA_CHECKS is enabled + Part-of: + +2020-11-20 14:55:17 +0000 Tim-Philipp Müller + + * gst/gsttaskpool.c: + taskpool: fix docs warnings + gsttaskpool.c:507: Warning: Gst: gst_shared_task_pool_get_max_threads: unknown parameter 'max_threads' in documentation comment + Part-of: + +2020-11-10 21:39:13 +1000 Jonathan Matthew + + * plugins/elements/gsttypefindelement.c: + * plugins/elements/gsttypefindelement.h: + typefind: copy seqnum to new segment event + Fixes: #635 + Part-of: + +2020-10-30 16:58:52 +0100 Edward Hervey + + * gst/gstsystemclock.c: + * meson.build: + systemclock: Use clock_nanosleep for higher accuracy + The various wait implementation have a latency ranging from 50 to 500+ + microseconds. While this is not a major issue when dealing with a low number of + waits per second (for ex: video), it does introduce a non-negligeable jitter for + synchronization of higher packet rate systems. + The `clock_nanosleep` syscall does offer a lower-latency waiting system but is + unfortunately blocking, so we don't want to use it in all scenarios nor for too + long. + This patch makes GstSystemClock use clock_nanosleep (if available) as such: + * Any wait below 500us uses it + * Any wait below 2ms will first use the regular waiting system and then + clock_nanosleep + # modified: gst/gstsystemclock.c + Part-of: + +2020-11-03 02:43:26 +0100 Mathieu Duponchelle + + * gst/gsttaskpool.c: + * gst/gsttaskpool.h: + * tests/check/gst/gsttask.c: + taskpool: expose new "shared" task pool implementation + While the default implementation will spawn a thread per new + pushed task, this new implementation instead spawns a maximum + number of threads, then queues new tasks on existing threads. + The thread that the new task will be queued on is picked in + a pretty naive fashion, by simply popping the first thread + from a queue and pushing it back to the tail, but this is + an implementation detail and can always be sophisticated + in the future if the need arises. + Part-of: + +2020-11-03 02:41:31 +0100 Mathieu Duponchelle + + * gst/gsttaskpool.c: + * gst/gsttaskpool.h: + taskpool: expose dispose_handle() API + This is useful when the subclass does return a non-NULL pointer + in push(), and the user doesn't want to call join() + Part-of: + +2020-11-03 02:39:37 +0100 Mathieu Duponchelle + + * gst/gsttaskpool.c: + taskpool: improve join() documentation + Part-of: + +2020-11-03 02:33:32 +0100 Mathieu Duponchelle + + * gst/gsttaskpool.c: + taskpool: modify transfer annotations for push() and join() + While the default implementation passes NULL around as the + task handle, other implementations can only provide a safe + API by having that handle map to a refcounted opaque type. + While what's passed around is a gpointer, a valid transfer + type annotation has informative value. + Part-of: + +2020-10-17 12:34:20 +0300 Sebastian Dröge + + * gst/gstbufferpool.c: + * gst/gstdatetime.c: + * gst/gstdeviceprovider.c: + * gst/gstelement.c: + * gst/gstparse.c: + * gst/gstplugin.c: + * gst/gstregistry.c: + * gst/gststreamcollection.c: + * gst/gsttypefind.c: + * gst/gsttypefindfactory.c: + * gst/gsturi.c: + * gst/gstutils.c: + * libs/gst/base/gstaggregator.c: + * libs/gst/base/gstbasesrc.c: + * libs/gst/base/gstbasetransform.c: + Add some missing nullable annotations + Part-of: + +2020-11-04 18:37:32 +0530 Nirbheek Chauhan + + * meson.build: + meson: Enable some MSVC warnings for parity with GCC/Clang + This makes it easier to do development with MSVC by making it warn + on common issues that GCC/Clang error out for in our CI configuration. + Continuation from https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/223 + Part-of: + +2020-11-02 17:43:42 +0800 Bing Song + + * plugins/elements/gstclocksync.c: + * plugins/elements/gstidentity.c: + identity/clocksync: Also provide system clock if sync=false + identity should provide when sync=true. Don't provide when sync=false. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/630 + Part-of: + +2020-11-03 22:39:54 +1000 Jonathan Matthew + + * plugins/elements/gstqueue2.c: + queue2: Fix modes in scheduling query handling + Create a new query to send upstream and copy the flags across from it, + rather than reusing the same query, as this allows us to prevent use + of pull mode when we don't have a download file. + Fixes: #629 + Part-of: + +2020-11-03 22:58:26 -0800 Khem Raj + + * gst/gst_private.h: + gst_private.h: increse padding in struct _GstClockEntryImpl + When compiling for 32bit architectures with 64bit time_t e.g. riscv32, + the static assert that the GstClockEntryImpl smaller or + equal to the struct _GstClockEntryImpl triggered. + (they were 12bytes off). + To fix this, the padding is increased by 8 bytes (on 32bit). + Part-of: + +2020-10-31 15:10:23 -0400 Chris White + + * gst/gstinfo.c: + gstinfo: colorize PIDs in log messages + The PIDs on log lines were supposed to be colorized before, but the + escape sequence was incorrect. With this change, the code uses the + correct sequence to colorize those PIDs. E.g., instead of `\033[334m` + (incorrect), use `\033[34m` (correct). + This makes the log messages easier to read. It also reduces the chance + that a buggy terminal will choke on the invalid escape sequence. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/624 + Part-of: + +2020-10-30 23:46:07 +1100 Jan Schmidt + + * libs/gst/check/gstharness.c: + * tests/check/libs/gstharness.c: + harness: Handle element not being set cleanly. + If a harness is created with gst_harness_new_empty(), there + might not be an internal element to unref on cleanup. + Part-of: + +2020-10-30 00:45:42 +1100 Jan Schmidt + + * gst/gstbin.c: + * tests/check/gst/gstbin.c: + bin: When removing a sink, check if the EOS status changed. + Removing a sink that hasn't posted EOS might change the bin itself + to EOS if it's the last remaining non-EOSed sink. + Part-of: + +2020-10-26 23:17:59 +0100 Mathieu Duponchelle + + * libs/gst/base/gstbaseparse.c: + baseparse: always use incoming DTS + When parsing interlaced video streams, ignoring incoming DTS could + cause the parser to end up with PTS < DTS output buffers, for example + when increasing next_dts using the duration of the last pushed + buffer. + Part-of: + +2020-10-21 09:43:43 +0100 Philippe Normand + + * gst/gstdevicemonitor.c: + * gst/gstdeviceprovider.c: + * gst/gstdeviceprovider.h: + * tests/check/gst/gstdevice.c: + devicemonitor: Stop only the already started providers + If a device provider fails to start (for instance the pulseaudio provider unable + to connect to the PulseAudio daemon) then the monitor should not keep track of + it in its `started` providers list. Otherwise a false positive critical warning + would be raised. + This patch also switches the started_count type from bool to int, for + consistency. This is a counter, after all. + API: gst_device_provider_is_started + Part-of: + +2020-10-21 17:24:01 +0900 Seungha Yang + + * plugins/elements/gstfilesrc.c: + filesrc: Use *Ex Win32 method for UWP + non-*Ex methods are not allowed for UWP + Part-of: + +2020-09-02 17:01:42 +0300 Sebastian Dröge + + * plugins/elements/gstfilesrc.c: + filesrc: Don't use fstat() on Windows but use specific Windows APIs + fstat() fails on Windows in various situations if the file metadata has + invalid values, and we only care about getting attributes and the file + size. + Part-of: + +2020-09-02 17:01:35 +0300 Sebastian Dröge + + * plugins/elements/gstfilesrc.c: + filesrc: Remove unused #define on Windows + Part-of: + +2020-10-16 10:22:04 -0400 Xavier Claessens + + * libs/gst/check/meson.build: + pkgconfig: Fix missing libcheck dependencies in gstreamer-check-1.0 + Part-of: + +2020-10-16 10:39:08 -0400 Nicolas Dufresne + + * libs/gst/base/gstaggregator.c: + aggregator: Include min-upstream-latency in buffering time + While we can fixe the upstream latency using the min-upstream-latency, we + are now forced to use queues (hence more thread) in order to store the pending + data whenever we have an upstream source that has lower latency. + This fixes the issue by allowing to buffer the fixed upstream latency. This is + particularly handy on single core systems were having too many threads can + cause serious performance issues. + Part-of: + +2017-09-08 19:59:27 -0400 Olivier Crête + + * docs/plugins/gst_plugins_cache.json: + * plugins/elements/gstidentity.c: + * plugins/elements/gstidentity.h: + identity: Add a stats property + This is inspired by the stats on rtpjitterbuffer, it's useful + to be able to get some simple stats out of the pipeline without having + to write yet another pad probe. + Part-of: + +2019-07-03 09:29:26 +0200 Stéphane Cerveau + + * gst/gstiterator.c: + * meson.build: + * tests/misc/netclock-replay.c: + * tools/gst-inspect.c: + meson: update glib minimum version to 2.56 + In order to support the symbol g_enum_to_string in various + project using GStreamer ( gst-validate etc.), the glib minimum + version should be 2.56.0. + Remove compat code as glib requirement + is now > 2.56 + Version used by Ubuntu 18.04 LTS + Part-of: + +2020-10-13 01:19:47 +0200 Mathieu Duponchelle + + * 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: + +2018-10-27 13:01:02 -0400 Xavier Claessens + + * gst/meson.build: + * libs/gst/base/meson.build: + * libs/gst/check/meson.build: + * libs/gst/controller/meson.build: + * libs/gst/net/meson.build: + * meson.build: + * pkgconfig/gstreamer-base-uninstalled.pc.in: + * pkgconfig/gstreamer-base.pc.in: + * pkgconfig/gstreamer-check-uninstalled.pc.in: + * pkgconfig/gstreamer-check.pc.in: + * pkgconfig/gstreamer-controller-uninstalled.pc.in: + * pkgconfig/gstreamer-controller.pc.in: + * pkgconfig/gstreamer-net-uninstalled.pc.in: + * pkgconfig/gstreamer-net.pc.in: + * pkgconfig/gstreamer-uninstalled.pc.in: + * pkgconfig/gstreamer.pc.in: + * pkgconfig/meson.build: + Meson: Use pkg-config generator + Part-of: + +2020-10-10 00:53:42 +0900 Seungha Yang + + * meson.build: + meson: Disallow DbgHelp for UWP build + Most symbols in DbgHelp.h are not allowed for UWP + Part-of: + +2020-08-14 16:38:26 +0100 Tim-Philipp Müller + + * gst/gst_private.h: + * gst/gstinfo.c: + * meson.build: + Remove unused valgrind detection + Having this just to log a debug message in case we're + running inside valgrind doesn't seem very useful, and + the code that used to use this no longer exists it seems. + Part-of: + +2020-10-07 03:49:33 +0900 Seungha Yang + + * gst/gstinfo.c: + info: Fix build on Windows ARM64 device + gstinfo.c(3086): error C2094: label 'done' was undefined + Part-of: + +2020-10-09 12:13:15 +1100 Matthew Waters + + * 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: + +2020-10-08 13:37:41 +0200 Jan Alexander Steffens (heftig) + + * 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: + +2020-09-04 20:47:18 -0400 Xavier Claessens + + * gst/gst.c: + gst_init: Call gst_init_static_plugins() when available + When doing a static build, gstreamer-full-1.0 defines that symbol to + register static plugins. Cerbero's Android build will be updated to + implement that symbol too. + Part-of: + +2020-09-17 20:44:43 +0200 Mathieu Duponchelle + + * gst/gst_private.h: + * gst/gststructure.c: + * gst/gstutils.c: + * gst/gstvalue.c: + * gst/gstvalue.h: + * gst/parse/grammar.y.in: + * tests/check/gst/gstvalue.c: + gstvalue: expose gst_value_deserialize_with_pspec() + Typing hints can only be passed to gst_value_deserialize() + through the type of the passed-in value. This means deserialization + can only target the desired type for the top-level elements, + making it for example impossible to deserialize an array of + flags to the expected type. + This commit exposes a new function, gst_value_deserialize_full(), + that takes an optional pspec as the extra parameter, and updates + the deserialization code to pass around that pspec, or the + element_spec when recursively parsing the elements of a list-type + value. + This allows for example passing arrays of flags through the + command line or gst_util_set_object_arg, eg: + foo="" + Part-of: + +2020-09-15 21:07:27 +0900 Seungha Yang + + * 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: + +2020-09-30 11:56:40 +1000 Matthew Waters + + * 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: + +2020-09-26 09:11:40 +0200 Víctor Manuel Jáquez Leal + + * gst/gstpadtemplate.c: + padtemplate: add missing annotation + Adds missing "transfer full" annotation for caps parameter in + gst_pad_template_set_documentation_caps() + Part-of: + +2020-09-26 09:09:48 +0200 Víctor Manuel Jáquez Leal + + * gst/gstmemory.h: + memory: fix documentation to display in html + Commit e9c99c05 added a deprecation message, but this message is not + displayed in the html page since the format was not correct. + Part-of: + +2020-09-01 23:03:18 +0200 Mathieu Duponchelle + + * gst/gst.c: + * gst/gst_private.h: + * gst/gstbuffer.c: + * gst/gstbuffer.h: + * gst/gstmeta.c: + * gst/gstmeta.h: + * tests/check/gst/gstmeta.c: + meta: expose API to register and create custom meta + Custom meta is backed by a GstStructure, and does not require + that users of the API expose their GstMeta implementation as + public API for other components to make use of it. + In addition, it provides a simpler interface by ignoring the + impl vs. api distinction that the regular API exposes. + This new API is meant to be the meta counterpart to custom events + and messages, and to be more convenient than the lower-level API + when the absolute best performance isn't a requirement. + Part-of: + +2017-07-11 18:54:05 -0400 Olivier Crête + + * gst/gstmemory.h: + memory: Deprecate GST_MEMORY_FLAG_NO_SHARE + This flag always causes problems as it prevents subbuffering, + instead one should create a custom GstAllocator to pool the GstMemory objects + and not rely on the lifetime of the GstBuffer object they were originally + attached to. + https://bugzilla.gnome.org/show_bug.cgi?id=757254 + Part-of: + +2020-09-16 02:16:52 +0200 Mathieu Duponchelle + + * 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: + +2020-07-06 14:55:38 -0400 Olivier Crête + + * gst/gstdeviceprovider.c: + * gst/gstdeviceprovider.h: + deviceprovider: Returns non-floating devices from gst_device_provider_probe + This should make the API usage more consistent. Also document that the subclasses + should just return the devices as floating. + Part-of: + +2020-07-31 16:02:03 +1000 Matthew Waters + + * libs/gst/base/gstaggregator.c: + aggregator: don't fail all sink pads when a caps event fails negotiation + If one pad returns not-negotiated from a caps event, then all other sink + pads were returning not-negotiated. + In our case, we can't reliably easily fail at all so just remove that + code. + Part-of: + +2020-07-31 01:10:27 +1000 Matthew Waters + + * libs/gst/base/gstbaseparse.c: + * tests/check/libs/baseparse.c: + baseparse: prefer upstream caps rather than overriding + e.g. h264parse ! video/x-h264,stream-format=avc receives the following: + - caps: video/x-raw,stream-format=byte-stream + - gap event: baseparse tries to choose some default caps but would + override the downstream chosen caps field with upstreams value. + Part-of: + +2020-09-18 09:59:03 +0300 Sebastian Dröge + + * 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: + +2020-09-15 06:35:34 +0900 Seungha Yang + + * tests/check/elements/leaks.c: + tests: leaks: Allow null tracer string if there's no available stack trace + In case that no available stack tracer, leak tracer will set + null string value for `trace` field. I would likely happen + on Windows. + Part-of: + +2020-09-15 04:24:20 +0900 Seungha Yang + + * tests/check/gst/gstelement.c: + tests: element: Don't run too many loop + g_thread_yield() doesn't ensure thread switching actually. + It would result to adding so many pads. Depending on system, + timeout might happen then. + Part-of: + +2020-09-15 00:54:58 +0900 Seungha Yang + + * tests/check/pipelines/seek.c: + tests: seek: Don't use too strict timeout for validation + Expected segment-done message might not be seen within expected + time if system is not powerful enough. + Part-of: + +2020-09-11 02:59:51 +0900 Seungha Yang + + * plugins/elements/gstvalve.c: + valve: Fix MSVC compile warning + gstvalve.c(285) : warning C4715: 'gst_valve_event_needs_dropping': + not all control paths return a value + Part-of: + +2020-07-01 19:15:42 +0300 Sebastian Dröge + + * gst/gstevent.c: + * gst/gstevent.h: + * gst/gstquark.c: + * gst/gstquark.h: + event: Add optional flags to the GAP event + This allows to signal the reason for the gap, for example missing data + like packet loss. + Based on a patch by Mikhail Fludkov + Part-of: + +2020-09-10 14:17:26 +0300 Sebastian Dröge + + * libs/gst/check/gstharness.c: + * libs/gst/check/gstharness.h: + harness: Add gst_harness_set_live() + By default each harness returns is_live=TRUE in latency queries. This is + often not desired and can now be overridden. + Part-of: + +2020-08-19 21:17:31 +0300 Sebastian Dröge + + * libs/gst/base/gstaggregator.c: + aggregator: Reset latency values in start() + Some base classes like videoaggregator try retrieving the latency during + construction, which causes the latency values to be set already until + reconfiguration happens. + By resetting them the same way as in stop() we ensure that we always + start cleanly. + Part-of: + +2020-09-08 12:45:42 +0100 Tom Schoonjans + + * libs/gst/helpers/ptp_helper_post_install.sh: + ptp_helper_post_install.sh: deal with none + Part-of: + +2020-09-09 01:23:11 +0800 Xℹ Ruoyao + + * tests/check/meson.build: + skip elements/leak.c if tracer is not available + Part-of: + +2020-08-20 11:09:11 +0300 Sebastian Dröge + + * 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: + +2020-08-24 11:59:51 +0300 Sebastian Dröge + + * 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: + +2020-08-14 11:40:30 +0300 Sebastian Dröge + + * docs/plugins/gst_plugins_cache.json: + * plugins/elements/gstvalve.c: + * plugins/elements/gstvalve.h: + valve: Add modes to forward sticky events when dropping and to convert buffers into gap events + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/587 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/84 + Part-of: + +2020-09-01 00:26:31 +0200 Mathieu Duponchelle + + * 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: + +2020-09-08 13:40:25 +0300 Sebastian Dröge + + * libs/gst/helpers/meson.build: + ptp: Also handle gnu/kfreebsd + Part-of: + +2020-09-08 17:30:27 +0100 Tim-Philipp Müller + + * .gitlab-ci.yml: + ci: include template from gst-ci master branch again + +2020-09-08 16:58:20 +0100 Tim-Philipp Müller + + * meson.build: + Back to development + === release 1.18.0 === 2020-09-08 00:01:33 +0100 Tim-Philipp Müller + * .gitlab-ci.yml: * ChangeLog: * NEWS: * README: diff --git a/NEWS b/NEWS index dba9c7c471..cc6c3b4a8e 100644 --- a/NEWS +++ b/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.18 Release Notes +GStreamer 1.20 Release Notes -GStreamer 1.18.0 was originally released on 7 September 2020. +GStreamer 1.20 has not been released yet. It is scheduled for release +around July 2021. -See https://gstreamer.freedesktop.org/releases/1.18/ for the latest +1.19.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.20, and +1.19.1 is the current development release in that series + +It is expected that feature freeze will be around June/July 2021, +followed by several 1.19 pre-releases and the new 1.20 stable release +around July 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. + +See https://gstreamer.freedesktop.org/releases/1.20/ for the latest version of this document. -Last updated: Monday 7 September 2020, 10:30 UTC (log) +Last updated: Sunday 30 May 2021, 16:00 UTC (log) Introduction @@ -18,1639 +30,87 @@ fixes and other improvements. Highlights -- GstTranscoder: new high level API for applications to transcode - media files from one format to another - -- High Dynamic Range (HDR) video information representation and - signalling enhancements - -- Instant playback rate change support - -- Active Format Description (AFD) and Bar Data support - -- ONVIF trick modes support in both GStreamer RTSP server and client - -- Hardware-accelerated video decoding on Windows via DXVA2 / - Direct3D11 - -- Microsoft Media Foundation plugin for video capture and - hardware-accelerated video encoding on Windows - -- 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 - sequence of jpeg or png images - -- dashsink: Add new sink to produce DASH content - -- dvbsubenc: DVB Subtitle encoder element - -- TV broadcast compliant MPEG-TS muxing with constant bitrate muxing - and SCTE-35 support - -- rtmp2: new RTMP client source and sink element implementation - -- svthevcenc: new SVT-HEVC-based H.265 video encoder - -- vaapioverlay compositor element using VA-API - -- rtpmanager support for Google’s Transport-Wide Congestion Control - (twcc) RTP extension - -- splitmuxsink and splitmuxsrc gained support for auxiliary video - streams - -- 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 - -- 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 - -- RTSP Server TCP interleaved backpressure handling improvements as - well as support for Scale/Speed headers - -- GStreamer Editing Services gained support for nested timelines, - per-clip speed rate control and the OpenTimelineIO format. - -- Autotools build system has been removed in favour of Meson +- this section will be completed in due course Major new features and changes Noteworthy new features and API -Instant playback rate changes - -Changing the playback rate as quickly as possible so far always required -a flushing seek. This generally works, but has the disadvantage of -flushing all data from the playback pipeline and requiring the demuxer -or parser to do a full-blown seek including resetting its internal state -and resetting the position of the data source. It might also require -considerable decoding effort to get to the right position to resume -playback from at the higher rate. - -This release adds a new mechanism to achieve quasi-instant rate changes -in certain playback pipelines without interrupting the flow of data in -the pipeline. This is activated by sending a seek with the -GST_SEEK_FLAG_INSTANT_RATE_CHANGE flag and start_type = stop_type = -GST_SEEK_TYPE_NONE. This flag does not work for all pipelines, in which -case it is necessary to fall back to sending a full flushing seek to -change the playback rate. When using this flag, the seek event is only -allowed to change the current rate and can modify the trickmode flags -(e.g. keyframe only or not), but it is not possible to change the -current playback position, playback direction or do a flush. - -This is particularly useful for streaming use cases like HLS or DASH -where the streaming download should not be interrupted when changing -rate. - -Instant rate changing is handled in the pipeline in a specific sequence -which is detailed in the seeking design docs. Most elements don’t need -to worry about this, only elements that sync to the clock need some -special handling which is implemented in the GstBaseSink base class, so -should be taken care of automatically in most normal playback pipelines -and sink elements. - -See Jan’s GStreamer Conference 2019 talk “Changing Playback Rate -Instantly” for more information. - -You can try this feature by passing the -i command line option to -gst-play-1.0. It is supported at least by qtdemux, tsdemux, hlsdemux, -and dashdemux. - -Google Transport-Wide Congestion Control - -rtpmanager now supports the parsing and generating of RTCP messages for -the Google Transport-Wide Congestion Control RTP Extension, as described -in: -https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01. - -This “just” provides the required plumbing/infrastructure, it does not -actually make effect any actual congestion control on the sender side, -but rather provides information for applications to use to make such -decisions. - -See Håvard’s “Google Transport-Wide Congestion Control” talk for more -information about this feature. - -GstTranscoder: a new high-level transcoding API for applications - -The new GstTranscoder library, along with transcodebin and -uritranscodebin elements, provides high level API for applications to -transcode media files from one format to another. Watch Thibault’s talk -“GstTranscoder: A High Level API to Quickly Implement Transcoding -Capabilities in your Applications” for more information. - -This also comes with a gst-transcoder-1.0 command line utility to -transcode one URI into another URI based on the specified encoding -profile. - -Active Format Description (AFD) and Bar Data support - -The GstVideo Ancillary Data API has gained support for Active Format -Description (AFD) and Bar data. - -This includes various two new buffer metas: GstVideoAFDMeta and -GstVideoBarMeta. - -GStreamer now also parses and extracts AFD/Bar data in the h264/h265 -video parsers, and supports both capturing them and outputting them in -the decklink elements. See Aaron’s lightning talk at the GStreamer -Conference for more background. - -ONVIF trick modes support in both GStreamer RTSP server and client - -- Support for the various trick modes described in section 6 of the - ONVIF streaming spec has been implemented in both gst-rtsp-server - and rtspsrc. -- Various new properties in rtspsrc must be set to take advantage of - the ONVIF support -- Examples are available here: test-onvif-server.c and - test-onvif-client.c -- Watch Mathieu Duponchelle’s talk “Implementing a Trickmode Player - with ONVIF, RTSP and GStreamer” for more information and a live - demo. - -GStreamer Codecs library with decoder base classes - -This introduces a new library in gst-plugins-bad which contains a set of -base classes that handle bitstream parsing and state tracking for the -purpose of decoding different codecs. Currently H264, H265, VP8 and VP9 -are supported. These bases classes are meant primarily for internal use -in GStreamer and are used in various decoder elements in connection with -low level decoding APIs like DXVA, NVDEC, VAAPI and V4L2 State Less -decoders. The new library is named gstreamer-codecs-1.0 / -libgstcodecs-1.0 and is not yet guaranteed to be API stable across major -versions. - -MPEG-TS muxing improvements - -The GStreamer MPEG-TS muxer has seen major improvements on various -fronts in this cycle: - -- It has been ported to the GstAggregator base class which means it - can work in defined-latency mode with live input sources and - continue streaming if one of the inputs stops producing data. - -- atscmux, a new ATSC-specific tsmux subclass - -- Constant Bit Rate (CBR) muxing support via the new bitrate property - which allows setting the target bitrate in bps. If this is set the - muxer will insert null packets as padding to achieve the desired - multiplex-wide constant bitrate. - -- compliance fixes for TV broadcasting use cases (esp. ATSC). See - Jan’s talk “TV Broadcast compliant MPEG-TS” for details. - -- Streams can now be added and removed at runtime: Until now, any - streams in tsmux had to be present when the element started - outputting its first buffer. Now they can appear at any point during - the stream, or even disappear and reappear later using the same PID. - -- new pcr-interval property allows applications to configure the - desired interval instead of hardcoding it - -- basic SCTE-35 support. This is enabled by setting the scte-35-pid - property on the muxer. Sending SCTE-35 commands is then done by - creating the appropriate SCTE-35 GstMpegtsSection and sending them - on the muxer. - -- MPEG-2 AAC handling improvements +- this section will be filled in in due course New elements -- New qmlgloverlay element for rendering a QtQuick scene over the top - of a video stream. qmlgloverlay requires that Qt support adopting an - external OpenGL context and is known to work on X11 and Windows. - Wayland is known not to work due to limitations within Qt. Check out - the example to see how it works. - -- The clocksync element is a generic element that can be placed in a - pipeline to synchronise passing buffers to the clock at that point. - This is similar to identity sync=true, but because it isn’t - GstBaseTransform-based, it can process GstBufferLists without - breaking them into separate GstBuffers. It is also more discoverable - than the identity option. Note that you do not need to insert this - element into your pipeline to make GStreamer sync to the pipeline - clock, this is usually handled automatically by the elements in the - pipeline (sources and sinks mostly). This element is useful to feed - non-live input such as local files into elements that expect live - input such as webrtcbin.` - -- New imagesequencesrc element to easily create a video stream from a - sequence of JPEG or PNG images (or any other encoding where the type - can be detected), basically a multifilesrc made specifically for - image sequences. - -- rpicamsrc element for capturing raw or encoded video (H.264, MJPEG) - from the Raspberry Pi camera. This works much like the popular - raspivid command line utility but outputs data nicely timestamped - and formatted in order to integrate nicely with other GStreamer - elements. Also comes with a device provider so applications can - discover the camera if available. - -- aatv and cacatv video filters that transform video ASCII art style - -- avtp: new Audio Video Transport Protocol (AVTP) plugin for Linux. - See Andre Guedes’ talk “Audio/Video Bridging (AVB) support in - GStreamer” for more details. - -- clockselect: a pipeline element that enables clock selection/forcing - via gst-launch pipeline syntax. - -- dashsink: Add new sink to produce DASH content. See Stéphane’s talk - or blog post for details. - -- dvbsubenc: a DVB subtitle encoder element - -- microdns: a libmicrodns-based mdns device provider to discover RTSP - cameras on the local network - -- mlaudiosink: new audio sink element for the Magic Leap platform, - accompanied by an MLSDK implementation in the amc plugin - -- msdkvp9enc: VP9 encoder element for the Intel MediaSDK - -- rist: new plugin implementing support for the Video Services Forum’s - Reliable Internet Stream Transport (RIST) TR-06-1 Simple Profile. - See Nicolas’ blog post “GStreamer support for the RIST - Specification” for more details. - -- rtmp2: new RTMP client source and sink elements with fully - asynchronous network operations, better robustness and additional - features such as handling ping and stats messages, and adobe-style - authentication. The new rtmp2src and rtmp2sink elements should be - API-compatible with the old rtmpsrc / rtmpsink elements and should - work as drop-in replacements. - -- new RTP source and sink elements to easily set up RTP streaming via - rtp:// URIs: The rtpsink and rtpsrc elements add an URI interface so - that streams can be decoded with decodebin using rtp:// URIs. These - can be used as follows: ``` gst-launch-1.0 videotestsrc ! x264enc ! - rtph264pay config-interval=3 ! rtpsink uri=rtp://239.1.1.1:1234 - - gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=1 - ! rtpsink uri=rtp://239.1.2.3:5000 gst-launch-1.0 rtpsrc - uri=rtp://239.1.2.3:5000?encoding-name=H264 ! rtph264depay ! - avdec_h264 ! videoconvert ! xvimagesink - - gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay - config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 gst-launch-1.0 - rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=MP4V-ES ! rtpmp4vdepay - ! avdec_mpeg4 ! videoconvert ! xvimagesink ``` - -- svthevcenc: new SVT-HEVC-based H.265 video encoder - -- switchbin: new helper element which chooses between a set of - processing chains (paths) based on input caps, and changes the - active chain if new caps arrive. Paths are child objects, which are - accessed by the GstChildProxy interface. See the switchbin - documentation for a usage example. - -- vah264dec: new experimental va plugin with an element for H.264 - decoding with VA-API using GStreamer’s new stateless decoder - infrastructure (see Linux section below). - -- v4l2codecs: introduce an V4L2 CODECs Accelerator supporting the new - CODECs uAPI in the Linux kernel (see Linux section below) - -- zxing new plugin to detect QR codes and barcodes, based on libzxing - -- also see the Rust plugins section below which contains plenty of new - exciting plugins written in Rust! +- this section will be filled in in due course New element features and additions -GStreamer core - -- filesink: Add a new “full” buffer mode. Previously the default and - full modes were the same. Now the default mode is like before: it - accumulates all buffers in a buffer list until the threshold is - reached and then writes them all out, potentially in multiple - writes. The new full mode works by always copying memory to a single - memory area and writing everything out with a single write once the - threshold is reached. - -- multiqueue: Add stats property and - current-level-{buffers, bytes, time} pad properties to query the - current levels of the corresponding internal queue. - -Plugins Base - -- alsa: implement a device provider - -- alsasrc: added use-driver-timestamp property to force use of - pipeline timestamps (and disable driver timestamps) if so desired - -- audioconvert: fix changing the mix-matrix property at runtime - -- appsrc: added support for segment forwarding or custom GstSegments - via GstSample, enabled via the handle-segment-change property. This - only works for segments in TIME format for now. - -- compositor: various performance optimisations, checkerboard drawing - fixes, and support for VUYA format - -- encodebin: Fix and refactor smart encoding; ensure that a single - segment is pushed into encoders; improve force-key-unit event - handling. - -- opusenc: Add low delay option (audio-type=restricted-lowdelay) to - disable the SILK layer and achieve only 5ms delay. - -- opusdec: add stats property to retrieve various decoder statistics. - -- uridecodebin3: Let decodebin3 do its stream selection if no one - answers - -- decodebin3: Avoid overriding explicit user selection of streams - -- playbin: add flag to force use of software decoders over any - hardware decoders that might also be available - -- playbin3, playbin: propagate sink context - -- rawvideoparse: Fix tiling support, allow setting colorimetry - -- subparse: output plain utf8 text instead of pango-markup formatted - text if downstream requires it, useful for interop with elements - that only accept utf8-formatted subtitles such as muxers or closed - caption converters. - -- tcpserversrc, tcpclientsrc: add stats property with TCP connection - stats (some are only available on Linux though) - -- timeoverlay: add show-times-as-dates, datetime-format and - datetime-epoch properties to display times with dates - -- videorate: Fix changing rate property during playback; reverse - playback fixes; update QoS events taking into account our rate - -- videoscale: pass through and transform size sensitive metas instead - of just dropping them - -Plugins Good - -- avidemux can handle H.265 video now. Our advice remains to - immediately cease all contact and communication with anyone who - hands you H.265 video in an AVI container, however. - -- avimux: Add support for S24LE and S32LE raw audio and v210 raw video - formats; support more than 2 channels of raw audio. - -- souphttpsrc: disable session sharing and cookie jar when the cookies - property is set; correctly handle seeks past the end of the content - -- deinterlace: new YADIF deinterlace method which should provide - better quality than the existing methods and is LGPL licensed; - alternate fields are supported as input to the deinterlacer as well - now, and there were also fixes for switching the deinterlace mode on - the fly. - -- flvmux: in streamable mode allow adding new pads even if the initial - header has already been written. Old clients will only process the - initial stream, new clients will get a header with the new streams. - The skip-backwards-streams property can be used to force flvmux to - skip and drop a few buffers rather than produce timestamps that go - backward and confuse librtmp-based clients. There’s also better - handling for timestamp rollover when streaming for a long time. - -- imagefreeze: Add live mode, which can be enabled via the new is-live - property. In this mode frames will only be output in PLAYING state - according to the negotiated framerate, skipping frames if the output - can’t keep up (e.g. because it’s blocked downstream). This makes it - possible to actually use imagefreeze in live pipelines without - having to manually ensure somehow that it starts outputting at the - current running time and without still risking to fall behind - without recovery. - -- matroskademux, qtdemux: Provide audio lead-in for some lossy formats - when doing accurate seeks, to make sure we can actually decode - samples at the desired position. This is especially important for - non-linear audio/video editing use-cases. - -- matroskademux, matroskamux: Handle interlaced field order (tff, bff) - -- matroskamux: - - - new offset-to-zero property to offset all streams to start at - zero. This takes the timestamp of the earliest stream and - offsets it so that it starts at 0. Some software (VLC, - ffmpeg-based) does not properly handle Matroska files that start - at timestamps much bigger than zero, which could happen with - live streams. - - added a creation-time property to explicitly set the creation - time to write into the file headers. Useful when remuxing, for - example, but also for live feeds where the DateUTC header can be - set a UTC timestamp corresponding to the beginning of the file. - - the muxer now also always waits for caps on sparse streams, and - warns if caps arrive after the header has already been sent, - otherwise the subtitle track might be silently absent in the - final file. This might affect applications that send sparse data - into matroskamux via an appsrc element, which will usually not - send out the initial caps before it sends out the first buffer. - -- pulseaudio: device provider improvements: fix discovery of - newly-added devices and hide the alsa device provider if we provide - alsa devices - -- qtdemux: raw audio handling improvements, support for AC4 audio, and - key-units trickmode interval support - -- qtmux: - - - was ported to the GstAggregator base class which allows for - better handling of live inputs, but might entail minor - behavioural changes for sparse inputs if inputs are not live. - - has also gained a force-create-timecode-trak property to create - a timecode trak in non-mov flavors, which may not be supported - by Apple but is supported by other software such as Final Cut - Pro X - - also a force-chunks property to force the creation of chunks - even in single-stream files, which is required for Apple ProRes - certification. - - also supports 8k resolutions in prefill mode with ProRes. - -- rtpbin gained a request-jitterbuffer signal which allows - applications to plug in their own jitterbuffer implementation such - as the threadsharing jitterbuffer from the Rust plugins, for - example. - -- rtprtxsend: add clock-rate-map property to allow generic RTP input - caps without a clock-rate whilst still supporting the max-size-time - property for bundled streams. - -- rtpssrcdemux: introduce max-streams property to guard against - attacks where the sender changes SSRC for every RTP packet. - -- rtph264pay, rtph264pay: implement STAP-A and various aggregation - modes controled by the new aggegrate-mode property: none to not - aggregate NAL units (as before), zero-latency to aggregate NAL units - until a VCL or suffix unit is included, or max to aggregate all NAL - units with the same timestamp (which adds one frame of latency). The - default has been kept at none for backwards compatibility reasons - and because various RTP/RTSP implementions don’t handle aggregation - well. For WebRTC use cases this should be set to zero-latency, - however. - -- rtpmp4vpay: add support for config-interval=-1 to resend headers - with each IDR keyframe, like other video payloaders. - -- rtpvp8depay: Add wait-for-keyframe property for waiting until the - next keyframe after packet loss. Useful if the video stream was not - encoded with error resilience enabled, in which case packet loss - tends to cause very bad artefacts when decoding, and waiting for the - next keyframe instead improves user experience considerably. - -- splitmuxsink and splitmuxsrc can now handle auxiliary video streams - in addition to the primary video stream. The primary video stream is - still used to select fragment cut points at keyframe boundaries. - Auxilliary video streams may be broken up at any packet - so - fragments may not start with a keyframe for those streams. - -- splitmuxsink: - - - new muxer-preset and sink-preset properties for setting - muxer/sink presets - - a new start-index property to set the initial fragment id - - and a new muxer-pad-map property which explicitly maps - splitmuxsink pads to the muxer pads they should connect to, - overriding the implicit logic that tries to match pads but - yields arbitrary names. - - Also includes the actual sink element in the fragment-opened and - fragment-closed element messages now, which is especially useful - for sinks without a location property or when finalisation of - the fragments is done asynchronously. - -- videocrop: add support for Y444, Y41B and Y42B pixel formats - -- vp8enc, vp9enc: change default value of VP8E_SET_STATIC_THRESHOLD - from 0 to 1 which matches what Google WebRTC does and results in - lower CPU usage; also added a new bit-per-pixel property to select a - better default bitrate - -- v4l2: add support for ABGR, xBGR, RGBA, and RGBx formats and for - handling interlaced video in alternate fields interlace mode (one - field per buffer instead of one frame per picture with both fields - interleaved) - -- v4l2: Profile and level probing support for H264, H265, MPEG-4, - MPEG-2, VP8, and VP9 video encoders and decoders - -Plugins Ugly - -- asfdemux: extract more metadata: disc number and disc count - -- x264enc: - - - respect YouTube bitrate recommendation when user sets the - YouTube profile preset - - separate high-10 video formats from 8-bit formats to improve - depth negotiation and only advertise suitable input raw formats - for the desired output depth - - forward downstream colorimetry and chroma-site restrictions to - upstream elements - - support more color primaries/mappings - -Plugins Bad - -- av1enc: add threads, row-mt and tile-{columns,rows} properties for - this AOMedia AV1 encoder - -- ccconverter: implement support for CDP framerate conversions - -- ccextractor: Add remove-caption-meta property to remove caption - metas from the outgoing video buffers - -- decklink: add support for 2K DCI video modes, widescreen NTSC/PAL, - and for parsing/outputting AFD/Bar data. Also implement a simple - device provider for Decklink devices. - -- dtlsrtpenc: add rtp-sync property which synchronises RTP streams to - the pipeline clock before passing them to funnel for merging with - RTCP. - -- fdkaac: also decode MPEG-2 AAC; encoder now supports more - multichannel/surround sound layouts - -- hlssink2: add action signals for custom playlist/fragment handling: - Instead of always going through the file system API we allow the - application to modify the behaviour. For the playlist itself and - fragments, the application can provide a GOutputStream. In addition - the sink notifies the application whenever a fragment can be - deleted. - -- interlace: can now output data in alternate fields mode; added field - switching mode for 2:2 field pattern - -- iqa: Add a mode property to enable strict mode that checks that all - the input streams have the exact same number of frames; also - implement the child proxy interface - -- mpeg2enc: add disable-encode-retries property for lower CPU usage - -- mpeg4videoparse: allow re-sending codec config at IDR via - config-interval=-1 - -- mpegtsparse: new alignment property to determine number of TS - packets per output buffer, useful for feeding an MPEG-TS stream for - sending via udpsink. This can be used in combination with the - split-on-rai property that makes sure to start a new output buffer - for any TS packet with the Random Access Indicator set. Also set - delta unit buffer flag on non-random-access buffers. - -- mpegdemux: add an ignore-scr property to ignore the SCR in - non-compliant MPEG-PS streams with a broken SCR, which will work as - long as PTS/DTS in the PES header is consistently increasing. - -- tsdemux: - - - add an ignore-pcr property to ignore MPEG-TS streams with broken - PCR streams on which we can’t reliably recover correct - timestamps. - - new latency property to allow applications to lower the - advertised worst-case latency of 700ms if they know their - streams support this (must have timestamps in higher frequency - than required by the spec) - - support for AC4 audio - -- msdk - Intel Media SDK plugin for hardware-accelerated video - decoding and encoding on Windows and Linux: - - - mappings for more video formats: Y210, Y410, P012_LE, Y212_LE - - encoders now support bitrate changes and input format changes in - playing state - - msdkh264enc, msdkh265enc: add support for CEA708 closed caption - insertion - - msdkh264enc, msdkh265enc: set Region of Interest (ROI) region - from ROI metas - - msdkh264enc, msdkh265enc: new tune property to enable low-power - mode - - msdkh265enc: add support 12-bit 4:2:0 encoding and 8-bit 4:2:2 - encoding and VUYA, Y210, and Y410 as input formats - - msdkh265enc: add support for screen content coding extension - - msdkh265dec: add support for main-12/main-12-intra, - main-422-10/main-422-10-intra 10bit, - main-422-10/main-422-10-intra 8bit, - main-422-12/main-422-12-intra, main-444-10/main-444-10-intra, - main-444-12/main-444-12-intra, and main-444 profiles - - msdkvp9dec: add support for 12-bit 4:4:4 - - msdkvpp: add support for Y410 and Y210 formats, cropping via - properties, and a new video-direction property. - -- mxf: Add support for CEA-708 CDP from S436 essence tracks. mxfdemux - can now handle Apple ProRes - -- nvdec: add H264 + H265 stateless codec implementation nvh264sldec - and nvh265sldec with fewer features but improved latency. You can - set the environment variable GST_USE_NV_STATELESS_CODEC=h264 to use - the stateless decoder variant as nvh264dec instead of the “normal” - NVDEC decoder implementation. - -- nvdec: add support for 12-bit 4:4:4/4:2:0 and 10-bit 4:2:0 decoding - -- nvenc: - - - add more rate-control options, support for B-frame encoding (if - device supports it), an aud property to toggle Access Unit - Delimiter insertion, and qp-{min,max,const}-{i,p,b} properties. - - the weighted-pred property enables weighted prediction. - - support for more input formats, namely 8-bit and 10-bit RGB - formats (BGRA, RGBA, RGB10A2, BGR10A2) and YV12 and VUYA. - - on-the-fly resolution changes are now supported as well. - - in case there are multiple GPUs on the system, there are also - per-GPU elements registered now, since different devices will - have different capabilities. - - nvh265enc can now support 10-bit YUV 4:4:4 encoding and 8-bit - 4:4:4 / 10-bit 4:2:0 formats up to 8K resolution (with some - devices). In case of HDR content HDR related SEI nals will be - inserted automatically. - -- openjpeg: enable multi-threaded decoding and add support for - sub-frame encoding (for lower latency) - -- rtponviftimestamp: add opt-out “drop-out-of-segment” property - -- spanplc: new stats property - -- srt: add support for IPv6 and for using hostnames instead of IP - addresses; add streamid property, but also allow passing the id via - the stream URI; add wait-for-connection property to srtsink - -- timecodestamper: this element was rewritten with an updated API - (properties); it has gained many new properties, seeking support and - support for linear timecode (LTC) from an audio stream. - -- uvch264src now comes with a device provider to advertise available - camera sources that support this interface (mostly Logitech C920s) - -- wpe: Add software rendering support and support for mouse scroll - events - -- x265enc: support more 8/10/12 bits 4:2:0, 4:2:2 and 4:4:4 profiles; - add support for mastering display info and content light level - encoding SEIs - -gst-libav - -- Add mapping for SpeedHQ video codec used by NDI - -- Add mapping for aptX and aptX-HD - -- avivf_mux: support VP9 and AV1 - -- avvidenc: shift output buffer timestamps and output segment by 1h - just like x264enc does, to allow for negative DTS. - -- avviddec: Limit default number of decoder threads on systems with - more than 16 cores, as the number of threads used in avdec has a - direct impact on the latency of the decoder, which is of as many - frames as threads, so a large numbers of threads can make for - latency levels that can be problematic in some applications. - -- avviddec: Add thread-type property that allows applications to - specify the preferred multithreading method (auto, frame, slice). - Note that thread-type=frame may introduce additional latency - especially in live pipelines, since it introduces a decoding delay - of number of thread frames. +- this section will be filled in in due course Plugin and library moves -- There were no plugin moves or library moves in this cycle. +- this section will be filled in in due course -- The rpicamsrc element was moved into -good from an external - repository on github. +- There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The yadif video deinterlacing plugin from gst-plugins-bad, which was - one of the few GPL licensed plugins, has been removed in favour of - deinterlace method=yadif. - -- The avdec_cdgraphics CD Graphics video decoder element from - gst-libav was never usable in GStreamer and we now have a cdgdec - element written in Rust in gst-plugins-rs to replace it. - -- The VDPAU plugin has been unmaintained and unsupported for a very - long time and does not have the feature set we expect from - hardware-accelerated video decoders. It’s been superseded by the - nvcodec plugin leveraging NVIDIA’s NVDEC API. +- this section will be filled in in due course Miscellaneous API additions -GStreamer core - -- gst_task_resume(): This new API allows resuming a task if it was - paused, while leaving it in stopped state if it was stopped or not - started yet. This can be useful for callback-based driver workflows, - where you basically want to pause and resume the task when buffers - are notified while avoiding the race with a gst_task_stop() coming - from another thread. - -- info: add printf extensions GST_TIMEP_FORMAT and GST_STIMEP_FORMAT - for printing GstClockTime/GstClockTimeDiff pointers, which is much - more convenient to use in debug log statements than the usual - GST_TIME_FORMAT-followed-by-GST_TIME_ARGS dance. Also add an - explicit GST_STACK_TRACE_SHOW_NONE enum value. - -- gst_element_get_current_clock_time() and - gst_element_get_current_running_time(): new helper functions for - getting an element clock’s time, and the clock time minus base time, - respectively. Useful when adding additional input branches to - elements such as compositor, audiomixer, flvmux, interleave or - input-selector to determine initial pad offsets and such. - -- seeking: Add GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED to just skip - B-frames during trick mode, showing both keyframes + P-frame, and - add support for it in h264parse and h265parse. - -- elementfactory: add GST_ELEMENT_FACTORY_TYPE_HARDWARE to allow - elements to advertise that they are hardware-based or interact with - hardware. This has multiple applications: - - - it makes it possible to easily differentiate hardware and - software based element implementations such as audio or video - encoders and decoders. This is useful in order to force the use - of software decoders for specific use cases, or to check if a - selected decoder is actually hardware-accelerated or not. - - elements interacting with hardware and their respective drivers - typically don’t know the actually supported capabilities until - the element is set into at least READY state and can open a - device handle and probe the hardware. - -- gst_uri_from_string_escaped(): identical to gst_uri_from_string() - except that the userinfo and fragment components of the URI will not - be unescaped while parsing. This is needed for correctly parsing - usernames or passwords with : in them . - -- paramspecs: new GstParamSpec flag GST_PARAM_CONDITIONALLY_AVAILABLE - to indicate that a property might not always exist. - -- gst_bin_iterate_all_by_element_factory_name() finds elements in a - bin by factory name - -- pad: gst_pad_get_single_internal_link() is a new convenience - function to return the single internal link of a pad, which is - useful e.g. to retrieve the output pad of a new multiqueue request - pad. - -- datetime: Add constructors to create datetimes with timestamps in - microseconds, gst_date_time_new_from_unix_epoch_local_time_usecs() - and gst_date_time_new_from_unix_epoch_utc_usecs(). - -- gst_debug_log_get_lines() gets debug log lines formatted in the same - way the default log handler would print them - -- GstSystemClock: Add GST_CLOCK_TYPE_TAI as GStreamer abstraction for - CLOCK_TAI, to support transmission offloading features where network - packets are timestamped with the time they are deemed to be actually - transmitted. Useful in combination with the new AVTP plugin. - -- miscellaneous utility functions: gst_clear_uri(), - gst_structure_take(). - -- harness: Added gst_harness_pull_until_eos() - -- GstBaseSrc: - - - gst_base_src_new_segment() allows subclasses to update the - segment to be used at runtime from the ::create() function. This - deprecates gst_base_src_new_seamless_segment() - - gst_base_src_negotiate() allows subclasses to trigger format - renegotiation at runtime from inside the ::create() or ::alloc() - function - -- GstBaseSink: new stats property and gst_base_sink_get_stats() method - to retrieve various statistics such as average frame rate and - dropped/rendered buffers. - -- GstBaseTransform: gst_base_transform_reconfigure() is now public - API, useful for subclasses that need to completely re-implement the - ::submit_input_buffer() virtual method - -- GstAggregator: - - - gst_aggregator_update_segment() allows subclasses to update the - output segment at runtime. Subclasses should use this function - rather than push a segment event onto the source pad directly. - - new sample selection API: - - subclasses should now call gst_aggregator_selected_samples() - from their ::aggregate() implementation to signal that they - have selected the next samples they will aggregate - - GstAggregator will then emit the samples-selected signal - where handlers can then look up samples per pad via - gst_aggregator_peek_next_sample(). - - This is useful for example to atomically update input pad - properties in mixer subclasses such as compositor. - Applications can now update properties with precise control - of when these changes will take effect, and for which input - buffer(s). - - gst_aggregator_finish_buffer_list() allows subclasses to push - out a buffer list, improving efficiency in some cases. - - a ::negotiate() virtual method was added, for consistency with - other base classes and to allow subclasses to completely - override the negotiation behaviour. - - the new ::sink_event_pre_queue() and ::sink_query_pre_queue() - virtual methods allow subclasses to intercept or handle - serialized events and queries before they’re queued up - internally. - -GStreamer Plugins Base Libraries - -Audio library - -- audioaggregator, audiomixer: new output-buffer-duration-fraction - property which allows use cases such as keeping the buffers output - by compositor on one branch and audiomixer on another perfectly - aligned, by requiring the compositor to output a n/d frame rate, and - setting output-buffer-duration-fraction to d/n on the audiomixer. - -- GstAudioDecoder: new max-errors property so applications can - configure at what point the decoder should error out, or tell it to - just keep going - -- gst_audio_make_raw_caps() and gst_audio_formats_raw() are - bindings-friendly versions of the GST_AUDIO_CAPS_MAKE() C macro. - -- gst_audio_info_from_caps() now handles encoded audio formats as well - -PbUtils library - -- GstEncodingProfile: - - Do not restrict number of similar profiles in a container - - add GstValue serialization function -- codec utils now support more H.264/H.265 profiles/levels and have - improved extension handling - -RTP library - -- rtpbasepayloader: Add scale-rtptime property for scaling RTP - timestamp according to the segment rate (equivalent to RTSP speed - parameter). This is useful for ONVIF trickmodes via RTSP. - -- rtpbasepayload: add experimental property for embedding twcc - sequencenumbers for Transport-Wide Congestion Control (gated behind - the GST_RTP_ENABLE_EXPERIMENTAL_TWCC_PROPERTY environment - variable) - more generic API for enabling this is expected to land - in the next development cycle. - -- rtcpbuffer: add RTPFB_TYPE_TWCC for Transport-Wide Congestion - Control - -- rtpbuffer: add - gst_rtp_buffer_get_extension_onebyte_header_from_bytes()``, so that one can parse theGBytes` - returned by gst_rtp_buffer_get_extension_bytes() - -- rtpbasedepayload: Add max-reorder property to make the - previously-hardcoded value when to consider a sender to have - restarted configurable. In some scenarios it’s particularly useful - to set max-reorder=0 to disable the behaviour that the depayloader - will drop packets: when max-reorder is set to 0 all - reordered/duplicate packets are considered coming from a restarted - sender. - -RTSP library - -- add gst_rtsp_url_get_request_uri_with_control() to create request - uri combined with control url - -- GstRTSPConnection: add the possibility to limit the Content-Length - for RTSP messages via - gst_rtsp_connection_set_content_length_limit(). The same - functionality is also exposed in gst-rtsp-server. - -SDP library - -- add support for parsing the extmap attribute from caps and storing - inside caps The extmap attribute allows mapping RTP extension header - IDs to well-known RTP extension header specifications. See RFC8285 - for details. - -Tags library - -- update to latest iso-code and support more languages - -- add tags for acoustid id & acoustid fingerprint, plus MusicBrainz ID - handling fixes - -Video library - -- High Dynamic Range (HDR) video information representation and - signalling enhancements: - - - New APIs for HDR video information representation and - signalling: - - GstVideoMasteringDisplayInfo: display color volume info as - per SMPTE ST 2086 - - GstVideoContentLightLevel: content light level specified in - CEA-861.3, Appendix A. - - plus functions to serialise/deserialise and add them to or - parse them from caps - - gst_video_color_{matrix,primaries,transfer}_{to,from}_iso(): - new utilility functions for conversion from/to ISO/IEC - 23001-8 - - add ARIB STD-B67 transfer chracteristic function - - add SMPTE ST 2084 support and BT 2100 colorimetry - - define bt2020-10 transfer characteristics for clarity: - bt707, bt2020-10, and bt2020-12 transfer characteristics are - functionally identical but have their own unique values in - the specification. - - h264parse, h265parse: Parse mastering display info and content - light level from SEIs. - - matroskademux: parse HDR metadata - - matroskamux: Write MasteringMetadata and Max{CLL,FALL}. Enable - muxing with HDR meta data if upstream provided it - - avviddec: Extract HDR information if any and map bt2020-10, PQ - and HLG transfer functions - -- added bt601 transfer function (for completeness) - -- support for more pixel formats: - - - Y412 (packed 12 bits 4:4:4:4) - - Y212 (packed 12 bits 4:2:2) - - P012 (semi-planar 4:2:0) - - P016_{LE,BE} (semi-planar 16 bits 4:2:0) - - Y444_16{LE,BE} (planar 16 bits 4:4:4) - - RGB10A2_LE (packed 10-bit RGB with 2-bit alpha channel) - - NV12_32L32 (NV12 with 32x32 tiles in linear order) - - NV12_4L4 (NV12 with 4x4 tiles in linear order) - -- GstVideoDecoder: - - - new max-errors property so applications can configure at what - point the decoder should error out, or tell it to just keep - going - - - new qos property to disable dropping frames because of QoS, and - post QoS messages on the bus when dropping frames. This is - useful for example in a scenario where the decoded video is - tee-ed off to go into a live sink that syncs to the clock in one - branch, and an encoding and save to file pipeline in the other - branch. In that case one wouldn’t want QoS events from the video - sink make the decoder drop frames because that would also leave - gaps in the encoding branch then. - -- GstVideoEncoder: - - - gst_video_encoder_finish_subframe() is new API to push out - subframes (e.g. slices), so encoders can split the encoding into - subframes, which can be useful to reduce the overall end-to-end - latency as we no longer need to wait for the full frame to be - encoded to start decoding or sending out the data. - - new min-force-key-unit-interval property allows configuring the - minimum interval between force-key-unit requests and prevents a - big bitrate increase if a lot of key-units are requested in a - short period of time (as might happen in live streaming RTP - pipelines when packet loss is detected). - - various force-key-unit event handling fixes - -- GstVideoAggregator, compositor, glvideomixer: expose - max-last-buffer-repeat property on pads. This can be used to have a - compositor display either the background or a stream on a lower - zorder after a live input stream freezes for a certain amount of - time, for example because of network issues. - -- gst_video_format_info_component() is new API to find out which - components are packed into a given plane, which is useful to prevent - us from assuming a 1-1 mapping between planes and components. - -- gst_video_make_raw_caps() and gst_video_formats_raw() are - bindings-friendly versions of the GST_VIDEO_CAPS_MAKE() C macro. - -- video-blend: Add support for blending on top of 16 bit per component - formats, which makes sure we can support every currently supported - raw video format for blending subtitles or logos on top of video. - -- GST_VIDEO_BUFFER_IS_TOP_FIELD() and - GST_VIDEO_BUFFER_IS_BOTTOM_FIELD() convenience macros to check - whether the video buffer contains only the top field or bottom field - of an interlaced picture. - -- GstVideoMeta now includes an alignment field with the - GstVideoAlignment so buffer producers can explicitly specify the - exact geometry of the planes, allowing users to easily know the - padded size and height of each plane. Default values will be used if - this is not set. - - Use gst_video_meta_set_alignment() to set the alignment and - gst_video_meta_get_plane_size() or gst_video_meta_get_plane_height() - to compute the plane sizes or plane heights based on the information - in the video meta. - -- gst_video_info_align_full() works like gst_video_info_align() but - also retrieves the plane sizes. - -MPEG-TS library - -- support for SCTE-35 sections - -- extend support for ATSC tables: - - - System Time Table (STT) - - Master Guide Table (MGT) - - Rating Region Table (RRT) +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -As always there have been many performance and memory usage improvements -across all components and modules. Some of them have already been -mentioned elsewhere so won’t be repeated here. - -The following list is only a small snapshot of some of the more -interesting optimisations that haven’t been mentioned in other contexts -yet: - -- caps negotiation, structure and GValue performance optimizations - -- systemclock: clock waiting performance improvements (moved from - GstPoll to GCond for waiting), especially on Windows. - -- rtpsession: add support for buffer lists on the recv path for better - performance with higher packet rate streams. - -- rtpjitterbuffer: internal timer handling has been rewritten for - better performance, see Nicolas’ talk “Revisiting RTP Jitter Buffer - Timers” for more details. - -- H.264/H.265 parsers and RTP payloaders/depayloaders have been - optimised for latency to make sure data is processed and pushed out - as quickly as possible - -- video-scaler: correctness and performance improvements, esp. for - interlaced formats and GBRA - -- GstVideoEncoder has gained new API to push out subframes - (e.g. slices), so encoders can split the encoding into subframes, - which can be useful to reduce the overall end-to-end latency as we - no longer need to wait for the full frame to be encoded to start - decoding or sending out the data. - - This is complemented by the new GST_VIDEO_BUFFER_FLAG_MARKER which - is a video-specific buffer flag to mark the end of a video frame, so - elements can know that they have received all data for a frame - without waiting for the beginning of the next frame. This is similar - to how the RTP marker flag is used in many RTP video mappings. - - The video encoder base class now also releases the internal stream - lock before pushing out data, so as to not block the input side of - things from processing more data in the meantime. +- this section will be filled in in due course Miscellaneous other changes and enhancements -- it is now possible to modify the initial rank of plugin features - without modifying the source code or writing code to do so - programmatically via the GST_PLUGIN_FEATURE_RANK environment - variable. Users can adjust the rank of plugin(s) by passing a - comma-separated list of feature:rank pairs where rank can be a - numerical value or one of NONE, MARGINAL, SECONDARY, PRIMARY, and - MAX. Example: GST_PLUGIN_FEATURE_RANK=myh264dec:MAX,avdec_h264:NONE - sets the rank of the myh264dec element feature to the maximum and - that of avdec_h264 to 0 (none), thus ensuring that myh264dec is - prefered as H264 decoder in an autoplugging context. - -- GstDeviceProvider now does a static probe on start as fallback for - providers that don’t support dynamic probing to make things easier - for users - -WebRTC - -- webrtcbin now contains initial support for renegotiation involving - stream addition and removal. There are a number of caveats to this - initial renegotiation support and many complex scenarios are known - to require some work. - -- webrtcbin now exposes the internal ICE object for advanced - configuration options. Using the internal ICE object, it is possible - to toggle UDP or TCP connection usage as well as provide local - network addresses. - -- Fix a number of call flows within webrtcbin’s GstPromise handling - where a promise was never replied to. This has been fixed and now a - promise will always receive a reply. - -- webrtcbin now exposes a latency property for configuring the - internal rtpjitterbuffer latency and buffering when receiving - streams. - -- webrtcbin now only synchronises the RTP part of a stream, allowing - RTCP messages to skip synchronisation entirely. - -- Fixed most of the webrtcbin state properties (connection-state, - ice-connection-state, signaling-state, but not ice-gathering-state - as that requires newer API in libnice and will be fixed in the next - release series) to advance through the state values correctly. Also - implemented DTLS connection states in the DTLS elements so that - peer-connection-state is not always new. - -- webrtcbin now accounts for the a=ice-lite attribute in a remote SDP - offer and will configure the internal ICE implementation - accordingly. - -- webrtcbin will now resolve .local candidate addresses using the - system DNS resolver. .local candidate addresses are now produced by - web browsers to help protect the privacy of users. - -- webrtcbin will now add candidates found in the SDP to the internal - ICE agent. This was previously unsupported and required using the - add-ice-candidate signal manually from the application. - -- webrtcbin will now correctly parse a TURN URI that contains a - username or password with a : in it. - -- The GStreamer WebRTC library gained a GstWebRTCDataChannel object - roughly matching the interface exposed by the WebRTC specification - to allow for easier binding generation and use of data channels. - -OpenGL integration - -GStreamer OpenGL bindings/build related changes - -- The GStreamer OpenGL library (libgstgl) now ships pkg-config files - for platform-specific API where libgstgl provides a public - integration interface and a pkg-config file for a dependency on the - detected OpenGL headers. The new list of pkg-config files in - addition to the original gstreamer-gl-1.0 are gstreamer-gl-x11-1.0, - gstreamer-gl-wayland-1.0, gstreamer-gl-egl-1.0, and - gstreamer-gl-prototypes-1.0 (for OpenGL headers when including - gst/gl/gstglfuncs.h). - -- GStreamer OpenGL now ships some platform-specific introspection data - for platforms that have a public interface. This should allow for - easier integration with bindings involving platform specific - functionality. The new introspection data files are named - GstGLX11-1.0, GstGLWayland-1.0, and GstGLEGL-1.0. - -GStreamer OpenGL Features - -- The iOS implementation no longer accesses UIKit objects off the main - thread fixing a loud warning message when used in iOS applications. - -- Support for mouse and keyboard handling using the GstNavigation - interface was added for the wayland implementation complementing the - already existing support for the X11 and Windows implementations. - -- A new helper base class for source elements, GstGLBaseSrc is - provided to ease writing source elements producing OpenGL video - frames. - -- Support for some more 12-bit and 16-bit video formats (Y412_LE, - Y412_BE, Y212_LE, Y212_BE, P012_LE, P012_BE, P016, NV16, NV61) was - added to glcolorconvert. - -- glupload can now import dma-buf’s into external-oes textures. - -- A new display type for EGLDevice-based systems was added. It is - currently opt-in by using either the GST_GL_PLATFORM=egl-device - environment variable or manual construction - (gst_gl_display_egl_device_new*()) due to compatibility issues with - some platforms. - -- Support was added for WinRT/UWP using the ANGLE project for running - OpenGL-based pipelines within a UWP application. - -- Various elements now support changing the GstGLDisplay to be used at - runtime in simple cases. This is primarily helpful for changing or - adding an OpenGL-based video sink that must share an OpenGL context - with an external source to an already running pipeline. - -GStreamer Vulkan integration - -- There is now a GStreamer Vulkan library to provide integration - points and helpers with applications and external GStreamer Vulkan - based elements. The structure of the library is modelled similarly - to the already existing GStreamer OpenGL library. Please note that - the API is still unstable and may change in future releases, - particularly around memory handling. The GStreamer Vulkan library - contains objects for sharing the vkInstance, vkDevice, vkQueue, - vkImage, VkMemory, etc with other elements and/or the application as - well as some helper objects for using Vulkan in an application or - element. - -- Added support for building and running on/for the Android and - Windows systems to complement the existing XCB, Wayland, MacOS, and - iOS implementations. - -- XCB gained support for mouse/keyboard events using the GstNavigation - API. - -- New vulkancolorconvert element for converting between color formats. - vulkancolorconvert can currently convert to/from all 8-bit RGBA - formats as well as 8-bit RGBA formats to/from the YUV formats AYUV, - NV12, and YUY2. - -- New vulkanviewconvert element for converting between stereo view - layouts. vulkanviewconvert can currently convert between all of the - single memory formats (side-by-side, top-bottom, column-interleaved, - row-interleaved, checkerboard, left, right, mono). - -- New vulkanimageidentity element for a blit from the input vulkan - image/s to a new vulkan image/s. - -- The vulkansink element can now scale the input image to the output - window/surface size where that information is available. - -- The vulkanupload element can now configure a transfer from system - memory to VulkanImage-based memory. Previously, this required two - vulkanupload elements. +- this section will be filled in in due course Tracing framework and debugging improvements -- gst_tracing_get_active_tracers() returns a list of active tracer - objects. This can be used to interact with tracers at runtime using - GObject API such as action signals. This has been implemented in the - leaks tracer for snapshotting and retrieving leaked/active objects - at runtime. - -- The leaks tracer can now be interacted with programmatically at - runtime via GObject action signals: - - - get-live-object returns a list of live (allocated) traced - objects - - log-live-objects logs a list of live objects into the debug log. - This is the same as sending the SIGUSR1 signal on unix systems, - but works on all operating systems including Windows. - - activity-start-tracking, activity-get-checkpoint, - activity-log-checkpoint, activity-stop-tracking: add support for - tracking and checkpointing objects, similar to what was - previously available via SIGUSR2 on unix systems, but works on - all operating systems including Windows. - -- various GStreamer gdb debug helper improvements: - - - new ‘gst-pipeline-tree’ command - - more gdb helper functions: gst_element_pad(), gst_pipeline() and - gst_bin_get() - - support for queries and buffers - - print more info for segment events, print event seqnums, object - pointers and structures - - improve gst-print command to show more pad and element - information +- this section will be filled in in due course Tools -gst-launch-1.0 - -- now prints the pipeline position and duration if available when the - pipeline is advancing. This is hopefully more user-friendly and - gives visual feedback on the terminal that the pipeline is actually - up and running. This can be disabled with the --no-position command - line option. - -- the parse-launch pipeline syntax now has support for presets: - use@preset=" after an element to load a preset. - -gst-inspect-1.0 - -- new --color command line option to force coloured output even if not - connected to a tty - -gst-tester-1.0 (new) - -- gst-tester-1.0 is a new tool for plugin developers to launch - .validatetest files with TAP compatible output, meaning it can - easily and cleanly be integrated with the meson test harness. It - allows you to use gst-validate (from the gst-devtools module) to - write integration tests in any GStreamer repository whilst keeping - the tests as close as possible to the code. The tool transparently - handles gst-validate being installed or not: if it is not installed - those integration tests will simply be skipped. - -gst-play-1.0 - -- interactive keyboard controls now also work on Windows - -gst-transcoder-1.0 (new) - -- gst-transcoder-1.0 is a new command line tool to transcode one URI - into another URI based on the specified encoding profile using the - new GstTranscoder API (see above). +- this section will be filled in in due course GStreamer RTSP server -- Fix issue where the first few packets (i.e. keyframes) could - sometimes be dropped if the rtsp media pipeline had a live input. - This was a regression from GStreamer 1.14. There are more fixes - pending for that which will hopefully land in 1.18.1. - -- Fix backpressure handling when sending data in TCP interleave mode - where RTSP requests and responses and RTP/RTCP packets flow over the - same RTSP TCP connection: The previous implementation would at some - point stop sending data to other clients when a single client - stopped consuming data or did not consume data fast enough. This - obviously created problems for shared media, where the same stream - from a single producer pipeline is sent to multiple clients. Instead - we now manage a backlog in the server’s stream-transport component - and remove slow clients once this backlog exceeds a maximum duration - (which is currently hardcoded). - -- Onvif Streaming Specification trick modes support (see section at - the beginning) - -- Scale/Speed header support: Speed will deliver the data at the - requested speed, which means increasing the data bandwidth for - speeds > 1.0. Scale will attempt to do the same without affecting - the overall bandwidth requirement vis-a-vis normal playback speed - (e.g. it might drop data for fast-forward playback). - -- rtspclientsink: send buffer lists in one go for better performance +- this section will be filled in in due course GStreamer VAAPI -- A lot of work was done adding support for media-driver (iHD), the - new VAAPI driver for Intel, mostly for Gen9 onwards. - -- Available color formats and frame sizes are now detected at run-time - according to the context configuration. - -- Gallium drivers have been re-enabled in the allowed drivers list - -- Improved the mapping between VA formats and GStreamer formats by - generating a mapping table at run-time since even among different - drivers the mapping might be different, particularly for RGB with - little endianness. - -- The experimental Flexible Encoding Infrastructure (FEI) elements - have been removed since they were not really actively maintained or - tested. - -- Enhanced the juggling of DMABuf buffers and VASurface metas - -- New vaapioverlay element: a compositor element using VA VPP blend - capabilities to accelerate overlaying and compositing. Example - pipeline: - - gst-launch-1.0 -vf videotestsrc ! vaapipostproc ! tee name=testsrc ! queue \ - ! vaapioverlay sink_1::xpos=300 sink_1::alpha=0.75 name=overlay ! vaapisink \ - testsrc. ! queue ! overlay. - -vaapipostproc - -- added video-orientation support, supporting frame mirroring and - rotation - -- added cropping support, either via properties (crop-left, - crop-right, crop-bottom and crop-top) or buffer meta. - -- new skin-tone-enhancenment-level property which is the iHD - replacement of the i965 driver’s sink-tone-level. Both are - incompatible with each other, so both were kept. - -- handle video colorimetry - -- support HDR10 tone mapping - -vaapisink - -- resurrected wayland backend for non-weston compositors by extracting - the DMABuf from the VASurface and rendering it. - -- merged the video overlay API for wayland. Now applications can - define the “window” to render on. - -- demoted the vaapisink element to secondary rank since libva - considers rendering as a second-class feature. - -VAAPI Encoders - -- new common target-percentage property which is the desired target - percentage of bitrate for variable rate control. - -- encoders now extract their caps from the driver at registration - time. - -- vaapivp9enc: added support for low power mode and support for - profile 2 (profile 0 by default) - -- vaapih264enc: new max-qp property that sets the maximum quantization - value. Support for ICQ and QBVR bitrate control mode, adding a - quality-factor property for these modes. Support baseline profile as - constrained-baseline - -- vaapih265enc: - - - support for main-444 and main-12 encoding profiles. - - new max-qp property that sets the maximum quantization value. - - support for ICQ and QBVR bitrate control mode, adding a - quality-factor property for these modes. - - handle SCC profiles. - - num-tile-cols and num-tile-row properties to specify the number - of tiles to use. - - the low-delay-b property was deprecated and is now determined - automatically. - - improved profile selection through caps. - -VAAPI Decoders - -- Decoder surfaces are not bound to their context any longer and can - thus be created and used dynamically, removing the deadlock - headache. - -- Reverse playback is now fluid - -- Forward Region-of-Interest (ROI) metas downstream - -- GLTextureUploadMeta uses DMABuf when GEM is not available. Now - Gallium drivers can use this meta for rendering with EGL. - -- vaapivp9dec: support for 4:2:2 and 4:4:4 chroma type streams - -- vaapih265dec: skip all pictures prior to the first I-frame. Enable - passing range extension flags to the driver. Handle SCC profiles. - -- vaapijpegdec: support for 4:0:0, 4:1:1, 4:2:2 and 4:4:4 chroma types - pictures - -- vaapih264dec: handle baseline streams as constrained-baseline if - possible and make it more tolerant when encountering unknown NALs +- this section will be filled in in due course GStreamer OMX -- omxvideoenc: use new video encoder subframe API to push out slices - as soon as they’re ready - -- omxh264enc, omxh265enc: negotiate subframe mode via caps. To enable - it, force downstream caps to video/x-h264,alignment=nal or - video/x-h265,alignment=nal. - -- omxh264enc: Add ref-frames property - -- Zynq ultrascale+ specific video encoder/decoder improvements: - - - GRAY8 format support - - support for alternate fields interlacing mode - - video encoder: look-ahead, long-term-ref, and long-term-freq - properties +- this section will be filled in in due course GStreamer Editing Services and NLE -- Added nested timelines and subproject support so that GES projects - can be used as clips, potentially serializing nested projects in the - main file or referencing external project files. - -- Implemented an OpenTimelineIO GES formatter. This means GES and - GStreamer can now load and save projects in all the formats - supported by otio. - -- Implemented a GESMarkerList object which allow setting timed - metadata on any GES object. - -- Fixed audio rendering issues during clip transition by ensuring that - a single segment is pushed into encoders. - -- The GESUriClipAsset API is now MT safe. - -- Added ges_meta_container_register_static_meta() to allow fixing a - type for a specific metadata without actually setting a value. - -- The framepositioner element now handles resizing the project and - keeps the same positioning when the aspect ratio is not changed . - -- Reworked the documentation, making it more comprehensive and much - more detailed. - -- Added APIs to retrieve natural size and framerate of a clip (for - example in the case of URIClip it is the framerate/size of the - underlying file). - -- ges_container_edit() is now deprecated and GESTimelineElement gained - the ges_timeline_element_edit() method so the editing API is now - usable from any element in the timeline. - -- GESProject::loading was added so applications can be notified about - when a new timeline starts loading. - -- Implemented the GstStream API in GESTimeline. - -- Added a way to add a timeoverlay inside the test source (potentially - with timecodes). - -- Added APIs to convert times to frame numbers and vice versa: - - - ges_timeline_get_frame_time() - - - ges_timeline_get_frame_at() - - - ges_clip_asset_get_frame_time() - - - ges_clip_get_timeline_time_from_source_frame() - - Quite a few validate tests have been implemented to check the - behavior for various demuxer/codec formats - -- Added ges_layer_set_active_for_tracks() which allows muting layers - for the specified tracks - -- Deprecated GESImageSource and GESMultiFileSource now that we have - imagesequencesrc which handles the imagesequence “protocol” - -- Stopped exposing ‘deinterlacing’ children properties for clip types - where they do not make sense. - -- Added support for simple time remapping effects +- this section will be filled in in due course GStreamer validate -- Introduced the concept of “Test files” allowing to implement “all - included” test cases, meaning that inside the file the following can - be defined: - - - The application arguments - - The validate configurations - - The validate scenario - - This replaces the previous big dictionary file in - gst-validate-launcher to implement specific test cases. - - We set several variables inside the files (as well as inside - scenarios and config files) to make them relocatable. - - The file format has been enhanced so it is easier to read and write, - for example line ending with a coma or (curly) brackets can now be - used as continuation marker so you do not need to add \ at the end - of lines to write a structure on several lines. - -- Support the imagesequence “protocol” and added integration tests for - it. - -- Added action types to allow the scenario to run the Test Clock for - better reproducibility of tests. - -- Support generating tests to check that seeking is frame accurate - (base on ssim). - -- Added ways to record buffers checksum (in different ways) in the - validateflow module. - -- Added vp9 encoding tests. - -- Enhanced seeking action types implementation to allow support for - segment seeks. - -- Output improvements: - - - Logs are now in markdown formats (and bat is used to dump them - if available). - - File format issues in scenarios/configs/tests files are nicely - reported with the line numbers now. +- this section will be filled in in due course GStreamer Python Bindings -- Python 2.x is no longer supported - -- Support mapping buffers without any memcpy: - - - Added a ContextManager to make the API more pythonic - - with buf.map(Gst.MapFlags.READ | Gst.MapFlags.WRITE) as info: - info.data[42] = 0 - -- Added high-level helper API for constructing pipelines: - - - Gst.Bin.make_and_add(factory_name, instance_name=None) - - Gst.Element.link_many(element, ...) +- this section will be filled in in due course GStreamer C# Bindings -- Bind gst_buffer_new_wrapped() manually to fix memory handling. - -- Fix gst_promise_new_with_change_func() where bindgen didn’t properly - detect the func as a closure. - -- Declare GstVideoOverlayComposition and GstVideoOverlayRectangle as - opaque type and subclasses of Gst.MiniObject. This changes the API - but without this all usage will cause memory corruption or simply - not work. - -- on Windows, look for gstreamer, glib and gobject DLLs using the MSVC - naming convention (i.e. gstvideo-1.0-0.dll instead of - libgstvideo-1.0-0.dll). - - The names of these DLLs have to be hardcoded in the bindings, and - most C# users will probably be using the Microsoft toolchain anyway. - - This means that the MSVC compiler is now required to build the - bindings, MingW will no longer work out of the box. +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins The GStreamer Rust bindings are released separately with a different release cadence that’s tied to gtk-rs, but the latest release has -already been updated for the new GStreamer 1.18 API, so there’s -absolutely no excuse why your next GStreamer application can’t be -written in Rust anymore. +already been updated for the upcoming new GStreamer 1.20 API. gst-plugins-rs, the module containing GStreamer plugins written in Rust, has also seen lots of activity with many new elements and plugins. @@ -1659,6 +119,8 @@ What follows is a list of elements and plugins available in gst-plugins-rs, so people don’t miss out on all those potentially useful elements that have no C equivalent. +- FIXME: add new elements + Rust audio plugins - audiornnoise: New element for audio denoising which implements the @@ -1724,73 +186,11 @@ Generic Rust plugins Build and Dependencies -- The Autotools build system has finally been removed in favour of the - Meson build system. Developers who currently use gst-uninstalled - should move to gst-build. - -- API and plugin documentation are no longer built with gtk_doc. The - gtk_doc documentation has been removed in favour of a new unified - documentation module built with hotdoc (also see “Documentation - improvements” section below). Distributors should use the - documentation release tarball instead of trying to package hotdoc - and building the documentation from scratch. - -- gst-plugins-bad now includes an internal copy of libusrsctp, as - there are problems in usrsctp with global shared state, lack of API - stability guarantees, and the absence of any kind of release - process. We also can’t rely on distros shipping a version with the - fixes we need. Both firefox and Chrome bundle their own copies too. - It is still possible to build against an external copy of usrsctp if - so desired. - -- nvcodec no longer needs the NVIDIA NVDEC/NVENC SDKs available at - build time, only at runtime. This allows distributions to ship this - plugin by default and it will just start to work when the required - run-time SDK libraries are installed by the user, without users - needing to build and install the plugin from source. - -- the gst-editing-services tarball is now named gst-editing-services - for consistency (used to be gstreamer-editing-services). - -- the gst-validate tarball has been superseded by the gst-devtools - tarball for consistency with the git module name. +- this section will be filled in in due course gst-build -gst-build is a meta-module and serves primarily as our uninstalled -development environment. It makes it easy to build most of GStreamer, -but unlike Cerbero it only comes with a limited number of external -dependencies that can be built as subprojects if they are not found on -the system. - -gst-build is based on Meson and replaces the old autotools -gst-uninstalled script. - -- The ‘uninstalled’ target has been renamed to ‘devenv’ - -- Experimental gstreamer-full library containing all built plugins and - their deps when building with -Ddefault_library=static. A monolithic - library is easier to distribute, and may be required in some - environments. GStreamer core, GLib and GObject are always included, - but external dependencies are still dynamically linked. The - gst-full-libraries meson option allows adding other GStreamer - libraries to the gstreamer-full build. This is an experiment for now - and its behaviour or API may still change in future releases. - -- Add glib-networking as a subproject when glib is a subproject and - load gio modules in the devenv, tls option control whether to use - openssl or gnutls. - -- git-worktree: Allow multiple worktrees for subproject branches - -- Guard against meson being run from inside the uninstalled devenv, as - this might have unexpected consequences. - -- our ffmpeg and x264 meson ports have been updated to the latest - stable version (you might need to update the subprojects checkout - manually though, or just remove the checkouts so meson checks out - the latest version again; improvements for this are pending in - meson, but not merged yet). +- this section will be filled in in due course Cerbero @@ -1800,405 +200,97 @@ Windows, Android, iOS and macOS. General improvements -- Recipe build steps are done in parallel wherever possible. This - leads to massive improvements in overall build time. -- Several recipes were ported to Meson, which improved build times -- Moved from using both GnuTLS and OpenSSL to only OpenSSL -- Moved from yasm to nasm for all assembly compilation -- Support zsh when running the cerbero shell command -- Numerous version upgrades for dependencies -- Default to xz for tarball binary packages. bz2 can be selected with - the --compress-method option to package. -- Added boolean variant for controlling the optimization level: - -v optimization -- Ship .pc pkgconfig files for all plugins in the binary packages -- CMake and nasm will only be built by Cerbero if the system versions - are unusable -- The nvcodec variant was removed and the nvcodec plugin is built by - default now (as it no longer requires the SDK to be installed at - build time, only at runtime) +- this section will be filled in in due course macOS / iOS -- Minimum iOS SDK version bumped to 11.0 -- Minimum macOS SDK version bumped to 10.11 -- No longer need to manually add support for newer iOS SDK versions -- Added Vulkan elements via MoltenVK -- Build times were improved by code-signing all build tools -- macOS framework ships all gstreamer libraries instead of an outdated - subset -- Ship pkg-config in the macOS framework package -- fontconfig: Fix EXC_BAD_ACCESS crash on iOS ARM64 -- Improved App Store compatibility by setting LC_VERSION_MIN_MACOSX, - fixing relocations, and improved bitcode support +- this section will be filled in in due course Windows -- MinGW-GCC toolchain was updated to 8.2. It uses the Universal CRT - instead of MSVCRT which eliminates cross-CRT issues in the Visual - Studio build. -- Require Windows 7 or newer for running binaries produced by Cerbero -- Require Windows x86_64 for running Cerbero to build binary packages -- Cerbero no longer uses C:/gstreamer/1.0 as a prefix when building. - That prefix is reserved for use by the MSI installers. -- Several recipes can now be buit with Visual Studio instead of MinGW. - Ported to meson: opus, libsrtp, harfbuzz, cairo, openh264, libsoup, - libusrsctp. Existing build system: libvpx, openssl. -- Support building using Visual Studio for 32-bit x86. Previously we - only supported building for 32-bit x86 using the MinGW toolchain. -- Fixed annoying msgmerge popups in the middle of cerbero builds -- Added configuration options vs_install_path and vs_install_version - for specifying custom search locations for older Visual Studio - versions that do not support vswhere. You can set these in - ~/.cerbero/cerbero.cbc where ~ is the MSYS homedir, not your Windows - homedir. -- New Windows-specific plugins: d3d11, mediafoundation, wasapi2 -- Numerous compatibility and reliability fixes when running Cerbero on - Windows, especially non-English locales -- proxy-libintl now exports the same symbols as gettext, which makes - it a drop-in replacement -- New mapping variant for selecting the Visual Studio CRT to use: - -v vscrt=. Valid values are md, mdd, and auto (default). A - separate prefix is used when building with either md (release) or - mdd (debug), and the outputted package will have +debug in the - filename. This variant is also used for selecting the correct Qt - libraries (debug vs release) to use when building with -v qt5 on - Windows. -- Support cross-compile on Windows to Windows ARM64 and ARMv7 -- Support cross-compile on Windows to the Universal Windows Platform - (UWP). Only the subset of plugins that can be built entirely with - Visual Studio will be selected in this case. To do so, use the - config/cross-uwp-universal.cbc configuration, which will build - ARM64, x86, and x86_64 binaries linked to the release CRT, with - optimizations enabled, and debugging turned on. You can combine this - with -v vscrt=mdd to produce binaries linked to the debug CRT. You - can turn off optimizations with the -v nooptimization variant. +- this section will be filled in in due course Windows MSI installer -- Require Windows 7 or newer for running GStreamer -- Fixed some issues with shipping of pkg-config in the Windows - installers -- Plugin PDB debug files are now shipped in the development package, - not the runtime package -- Ship installers for 32-bit binaries built with Visual Studio -- Ship debug and release “universal” (ARM64, X86, and X86_64) tarballs - built for the Universal Windows Platform -- Windows MSI installers now install into separate prefixes when - building with MSVC and MinGW. Previously both would be installed - into C:/gstreamer/1.0/x86 or C:/gstreamer/1.0/x86_64. Now, the - installation prefixes are: - - ---------------------------------------------------------------------------------------------------------------- - Target Path Build options - --------------------------- ------------------------------------ ----------------------------------------------- - MinGW 32-bit C:/gstreamer/1.0/mingw_x86 -c config/win32.cbc - - MinGW 64-bit C:/gstreamer/1.0/mingw_x86_64 -c config/win64.cbc - - MSVC 32-bit C:/gstreamer/1.0/msvc_x86 -c config/win32.cbc -v visualstudio - - MSVC 64-bit C:/gstreamer/1.0/msvc_x86_64 -c config/win64.cbc -v visualstudio - - MSVC 32-bit (debug) C:/gstreamer/1.0/msvc-debug_x86 -c config/win32.cbc -v visualstudio,vscrt=mdd - - MSVC 64-bit (debug) C:/gstreamer/1.0/msvc-debug_x86_64 -c config/win64.cbc -v visualstudio,vscrt=mdd - ---------------------------------------------------------------------------------------------------------------- - -Note: UWP binary packages are tarballs, not MSI installers. +- this section will be filled in in due course Linux -- Support creating MSI installers using WiX when cross-compiling to - Windows -- Support running cross-windows binaries with Wine when using the - shell and runit cerbero commands -- Added bash-completion support inside the cerbero shell on Linux -- Require a system-wide installation of openssl on Linux -- Added variant -v vaapi to build gstreamer-vaapi and the new gstva - plugin -- Debian packaging was disabled because it does not work. Help in - fixing this is appreciated. -- Trimmed the list of packages needed for bootstrap on Linux +- this section will be filled in in due course Android -- Updated to NDK r21 -- Support Vulkan -- Support Qt 5.14+ binary package layout +- this section will be filled in in due course Platform-specific changes and improvements Android -- opensles: Remove hard-coded buffer-/latency-time values and allow - openslessink to handle 48kHz streams. - -- photography interface and camera source: Add additional settings - relevant to Android such as: Exposure mode property, extra colour - tone values (aqua, emboss, sketch, neon), extra scene modes - (backlight, flowers, AR, HDR), and missing virtual methods for - exposure mode, analog gain, lens focus, colour temperature, min & - max exposure time. Add new effects and scene modes to Camera - parameters. +- this section will be filled in in due course macOS and iOS -- vtdec can now output to Vulkan-backed memory for zerocopy support - with the Vulkan elements. +- this section will be filled in in due course Windows -- d3d11videosink: new Direct3D11-based video sink with support for - HDR10 rendering if supported. - -- Hardware-accelerated video decoding on Windows via DXVA2 / - Direct3D11 using native Windows APIs rather than per-vendor SDKs - (like MSDK for Intel or NVCODEC for NVidia). Plus modern Direct3D11 - integration rather than the almost 20-year old Direct3D9 from - Windows XP times used in d3dvideosink. Formats supported for - decoding are H.264, H.265, VP8, and VP9, and zero-copy operation - should be supported in combination with the new d3d11videosink. See - Seungha’s blog post “Windows DXVA2 (via Direct3D 11) Support in - GStreamer 1.17” for more details. - -- Microsoft Media Foundation plugin for hardware-accelerated video - encoding on Windows using native Windows APIs rather than per-vendor - SDKs. Formats supported for encoding are H.264, H.265 and VP9. Also - includes audio encoders for AAC and MP3. See Seungha’s blog post - “Bringing Microsoft Media Foundation to GStreamer” for some more - details about this. - -- new mfvideosrc video capture source element using the latest Windows - APIs rather than ancient APIs used by ksvideosrc/winks. ksvideosrc - should be considered deprecated going forward. - -- d3d11: add d3d11convert, a color space conversion and rescaling - element using shaders, and introduce d3d11upload and d3d11download - elements that work just like glupload and gldownload but for D3D11. - -- Universal Windows Platform (UWP) support, including official - GStreamer binary packages for it. Check out Nirbheek’s latest blog - post “GStreamer 1.18 supports the Universal Windows Platform” for - more details. - -- systemclock correctness and reliability fixes, and also don’t start - the system clock at 0 any longer (which shouldn’t make any - difference to anyone, as absolute clock time values are supposed to - be meaningless in themselves, only the rate of increase matters). - -- toolchain specific plugin registry: the registry cache is now named - differently for MSVC and MinGW toolchains/packages, which should - avoid problems when switching between binaries built with a - different toolchain. - -- new wasapi2 plugin mainly to support UWP applications. The core - logic of this plugin is almost identical to existing wasapi plugin, - but the main target is Windows 10 and UWP. This plugin uses WinRT - APIs, so will likely not work on Windows 8 or older. Unlike the - existing wasapi plugin, this plugin supports automatic stream - routing (auto fallback when device was removed) and device level - mute/volume control. Exclusive streaming mode is not supported, - however, and loopback features are not implemented yet. It is also - only possible to build this plugin with MSVC and the Windows 10 SDK, - it can’t be cross-compiled with the MingW toolchain. - -- new dxgiscreencapsrc element which uses the Desktop Duplication API - to capture the desktop screen at high speed. This is only supported - on Windows 8 or later. Compared to the existing elements - dxgiscreencapsrc offers much better performance, works in High DPI - environments and draws an accurate mouse cursor. - -- d3dvideosink was downgraded to secondary rank, d3d11videosink is - preferred now. Support OverlayComposition for GPU overlay - compositing of subtitles and logos. - -- debug log output fixes, esp. with a non-UTF8 locale/codepage - -- speex, jack: fixed crashes on Windows caused by cross-CRT issues - -- gst-play-1.0 interactive keyboard controls now also work on Windows +- this section will be filled in in due course Linux -- kmssink: Add support for P010 and P016 formats - -- vah264dec: new experimental va plugin with an element for H.264 - decoding with VA-API. This novel approach, different from - gstreamer-vaapi, uses the gstcodecs library for decoder state - handling, which it is hoped will make for cleaner code because it - uses VA-API without further layers or wrappers. Check out Víctor’s - blog post “New VA-API H.264 decoder in gst-plugins-bad” for the full - lowdown and the limitations of this new plugin, and how to give it a - spin. - -- v4l2codecs: introduce a V4L2 CODECs Accelerator. This plugin will - support the new CODECs uAPI in the Linux kernel, which consists of - an accelerator interface similar to DXVA, NVDEC, VDPAU and VAAPI. So - far H.264 and VP8 are supported. This is used on certain embedded - systems such as i.mx8m, rk3288, rk3399, Allwinner H-series SoCs. +- this section will be filled in in due course Documentation improvements -- unified documentation containing tutorials, API docs, plugin docs, - etc. all under one roof, shipped in form of a documentation release - tarball containing both devhelp and html documentation. - -- all documentation is now generated using hotdoc, gtk-doc is no - longer used. Distributors should use the above-mentioned - documentation release tarball instead of trying to package hotdoc - and building the documentation from scratch. - -- there is now documentation for wrapper plugins like gst-libav and - frei0r, as well as tracer plugins. - -- for more info, check out Thibault’s “GStreamer Documentation” - lightning talk from the 2019 GStreamer Conference. - -- new API for plugins to support the documentation system: - - - new GParamSpecFlag GST_PARAM_DOC_SHOW_DEFAULT to make - gst-inspect-1.0 (and the documentation) show the paramspec’s - default value rather than the actually set value as default - - GstPadTemplate getter and setter for “documentation caps”, - gst_pad_template_set_documentation_caps() and - gst_pad_template_get_documentation_caps(): This can be used in - elements where the caps of pad templates are dynamically - generated and/or dependent on the environment, to override the - caps shown in the documentation (usually to advertise the full - set of possible caps). - - gst_type_mark_as_plugin_api() for marking types as plugin API, - used for plugin-internal types like enums, flags, pad - subclasses, boxed types, and such. +- this section will be filled in in due course Possibly Breaking Changes -- GstVideo: the canonical list of raw video formats (for use in caps) - has been reordered, so video elements such as videotestsrc or - videoconvert might negotiate to a different format now than before. - The new format might be a higher-quality format or require more - processing overhead, which might affect pipeline performance. - -- mpegtsdemux used to wrongly advertise H.264 and H.265 video - elementary streams as alignment=nal. This has now been fixed and - changed to alignment=none, which means an h264parse or h265parse - element is now required after tsdemux for some pipelines where there - wasn’t one before, e.g. in transmuxing scenarios (tsdemux ! tsmux). - Pipelines without such a parser may now fail to link or error out at - runtime. As parsers after demuxers and before muxers have been - generally required for a long time now it is hoped that this will - only affect a small number of applications or pipelines. - -- The Android opensles audio source and sink used to have hard-coded - buffer-/latency-time values of 20ms. This is no longer needed with - newer Android versions and has now been removed. This means a higher - or lower value might now be negotiated by default, which can affect - pipeline performance and latency. +- this section will be filled in in due course Known Issues -- None in particular +- this section will be filled in in due course + +- There are a couple of known WebRTC-related regressions/blockers: + + - webrtc: DTLS setup with Chrome is broken + - webrtcbin: First keyframe is usually lost Contributors -Aaron Boxer, Adam Duskett, Adam x Nilsson, Adrian Negreanu, Akinobu -Mita, Alban Browaeys, Alcaro, Alexander Lapajne, Alexandru Băluț, Alex -Ashley, Alex Hoenig, Alicia Boya García, Alistair Buxton, Ali Yousuf, -Ambareesh “Amby” Balaji, Amr Mahdi, Andoni Morales Alastruey, Andreas -Frisch, Andre Guedes, Andrew Branson, Andrey Sazonov, Antonio Ospite, -aogun, Arun Raghavan, Askar Safin, AsociTon, A. Wilcox, Axel Mårtensson, -Ayush Mittal, Bastian Bouchardon, Benjamin Otte, Bilal Elmoussaoui, -Brady J. Garvin, Branko Subasic, Camilo Celis Guzman, Carlos Rafael -Giani, Charlie Turner, Cheng-Chang Wu, Chris Ayoup, Chris Lord, -Christoph Reiter, cketti, Damian Hobson-Garcia, Daniel Klamt, Daniel -Molkentin, Danny Smith, David Bender, David Gunzinger, David Ing, David -Svensson Fors, David Trussel, Debarshi Ray, Derek Lesho, Devarsh -Thakkar, dhilshad, Dimitrios Katsaros, Dmitriy Purgin, Dmitry Shusharin, -Dominique Leuenberger, Dong Il Park, Doug Nazar, dudengke, Dylan McCall, -Dylan Yip, Ederson de Souza, Edward Hervey, Eero Nurkkala, Eike Hein, -ekwange, Eric Marks, Fabian Greffrath, Fabian Orccon, Fabio D’Urso, -Fabrice Bellet, Fabrice Fontaine, Fanchao L, Felix Yan, Fernando -Herrrera, Francisco Javier Velázquez-García, Freyr, Fuwei Tang, Gaurav -Kalra, George Kiagiadakis, Georgii Staroselskii, Georg Lippitsch, Georg -Ottinger, gla, Göran Jönsson, Gordon Hart, Gregor Boirie, Guillaume -Desmottes, Guillermo Rodríguez, Haakon Sporsheim, Haihao Xiang, Haihua -Hu, Havard Graff, Håvard Graff, Heinrich Kruger, He Junyan, Henry -Wilkes, Hosang Lee, Hou Qi, Hu Qian, Hyunjun Ko, ibauer, Ignacio Casal -Quinteiro, Ilya Smelykh, Jake Barnes, Jakub Adam, James Cowgill, James -Westman, Jan Alexander Steffens, Jan Schmidt, Jan Tojnar, Javier Celaya, -Jeffy Chen, Jennifer Berringer, Jens Göpfert, Jérôme Laheurte, Jim -Mason, Jimmy Ohn, J. Kim, Joakim Johansson, Jochen Henneberg, Johan -Bjäreholt, Johan Sternerup, John Bassett, Jonas Holmberg, Jonas Larsson, -Jonathan Matthew, Jordan Petridis, Jose Antonio Santos Cadenas, Josep -Torra, Jose Quaresma, Josh Matthews, Joshua M. Doe, Juan Navarro, -Juergen Werner, Julian Bouzas, Julien Isorce, Jun-ichi OKADA, Justin -Chadwell, Justin Kim, Keri Henare, Kevin JOLY, Kevin King, Kevin Song, -Knut Andre Tidemann, Kristofer Björkström, krivoguzovVlad, Kyrylo -Polezhaiev, Lenny Jorissen, Linus Svensson, Loïc Le Page, Loïc Minier, -Lucas Stach, Ludvig Rappe, Luka Blaskovic, luke.lin, Luke Yelavich, -Marcin Kolny, Marc Leeman, Marco Felsch, Marcos Kintschner, Marek -Olejnik, Mark Nauwelaerts, Markus Ebner, Martin Liska, Martin Theriault, -Mart Raudsepp, Matej Knopp, Mathieu Duponchelle, Mats Lindestam, Matthew -Read, Matthew Waters, Matus Gajdos, Maxim Paymushkin, Maxim P. -Dementiev, Michael Bunk, Michael Gruner, Michael Olbrich, Miguel París -Díaz, Mikhail Fludkov, Milian Wolff, Millan Castro, Muhammet Ilendemli, -Nacho García, Nayana Topolsky, Nian Yan, Nicola Murino, Nicolas -Dufresne, Nicolas Pernas Maradei, Niels De Graef, Nikita Bobkov, Niklas -Hambüchen, Nirbheek Chauhan, Ognyan Tonchev, okuoku, Oleksandr -Kvl,Olivier Crête, Ondřej Hruška, Pablo Marcos Oltra, Patricia Muscalu, -Peter Seiderer, Peter Workman, Philippe Normand, Philippe Renon, Philipp -Zabel, Pieter Willem Jordaan, Piotr Drąg, Ralf Sippl, Randy Li, Rasmus -Thomsen, Ratchanan Srirattanamet, Raul Tambre, Ray Tiley, Richard -Kreckel, Rico Tzschichholz, R Kh, Robert Rosengren, Robert Tiemann, -Roman Shpuntov, Roman Sivriver, Ruben Gonzalez, Rubén Gonzalez, -rubenrua, Ryan Huang, Sam Gigliotti, Santiago Carot-Nemesio, Saunier -Thibault, Scott Kanowitz, Sebastian Dröge, Sebastiano Barrera, Seppo -Yli-Olli, Sergey Nazaryev, Seungha Yang, Shinya Saito, Silvio -Lazzeretti, Simon Arnling Bååth, Siwon Kang, sohwan.park, Song Bing, -Soohyun Lee, Srimanta Panda, Stefano Buora, Stefan Sauer, Stéphane -Cerveau, Stian Selnes, Sumaid Syed, Swayamjeet, Thiago Santos, Thibault -Saunier, Thomas Bluemel, Thomas Coldrick, Thor Andreassen, Tim-Philipp -Müller, Ting-Wei Lan, Tobias Ronge, trilene, Tulio Beloqui, U. Artie -Eoff, VaL Doroshchuk, Varunkumar Allagadapa, Vedang Patel, Veerabadhran -G, Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Wangfei, Wang -Zhanjun, Wim Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier -Claessens, Xidorn Quan, Xu Guangxin, Yan Wang, Yatin Maan, Yeongjin -Jeong, yychao, Zebediah Figura, Zeeshan Ali, Zeid Bekli, Zhiyuan Sraf, -Zoltán Imets, +- this section will be filled in in due course … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.18 branch +Stable 1.20 branch -After the 1.18.0 release there will be several 1.18.x bug-fix releases +After the 1.20.0 release there will be several 1.20.x bug-fix releases which will contain bug fixes which have been deemed suitable for a stable branch, but no new features or intrusive changes will be added to -a bug-fix release usually. The 1.18.x bug-fix releases will be made from -the git 1.18 branch, which will be a stable branch. +a bug-fix release usually. The 1.20.x bug-fix releases will be made from +the git 1.20 branch, which will be a stable branch. -1.18.0 +1.20.0 -1.18.0 was released on 7 September 2020. +1.20.0 is scheduled to be released around July 2021. -Schedule for 1.20 +Schedule for 1.22 -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. +Our next major feature release will be 1.22, and 1.21 will be the +unstable development version leading up to the stable 1.22 release. The +development of 1.21/1.22 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 -2021, with the first 1.20 stable release around February/March 2021. +The plan for the 1.22 development cycle is yet to be confirmed, but it +is hoped that feature freeze will take place some time in December 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. +1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14, +1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. ------------------------------------------------------------------------ These release notes have been prepared by Tim-Philipp Müller with -contributions from Mathieu Duponchelle, Matthew Waters, Nirbheek -Chauhan, Sebastian Dröge, Thibault Saunier, and Víctor Manuel Jáquez -Leal. +contributions from … License: CC BY-SA 4.0 diff --git a/README b/README index 300b39868d..c95e53e28d 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -GStreamer 1.18.x stable series +GStreamer 1.19.x development series WHAT IT IS ---------- diff --git a/RELEASE b/RELEASE index 58ee901c66..58207844f0 100644 --- a/RELEASE +++ b/RELEASE @@ -1,18 +1,15 @@ -This is GStreamer core 1.18.0. +This is GStreamer core 1.19.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.19 is the development branch leading up to the next major +stable version which will be 1.20. -As always, this release is again packed with new features, bug fixes and -other improvements. - -The 1.18 release series adds new features on top of the 1.16 series and is +The 1.19 development series adds new features on top of the 1.18 series and is part of the API and ABI-stable 1.x release series of the GStreamer multimedia framework. -Full release notes can be found at: +Full release notes will one day be found at: - https://gstreamer.freedesktop.org/releases/1.18/ + https://gstreamer.freedesktop.org/releases/1.20/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. diff --git a/gstreamer.doap b/gstreamer.doap index b89797e297..7838a7b1e6 100644 --- a/gstreamer.doap +++ b/gstreamer.doap @@ -38,6 +38,16 @@ hierarchy, and a set of media-agnostic core elements. + + + 1.19.1 + master + + 2021-06-01 + + + + 1.18.0 diff --git a/meson.build b/meson.build index c4e8774f55..570531c34d 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.19.0.1', + version : '1.19.1', meson_version : '>= 0.54', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) -- cgit v1.2.3