diff --git a/ChangeLog b/ChangeLog index b1ff96b04b..b60096242c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,3982 @@ +=== release 1.19.1 === + +2021-06-01 00:09:54 +0100 Tim-Philipp Müller + + * ChangeLog: + * NEWS: + * README: + * RELEASE: + * gst-plugins-base.doap: + * meson.build: + Release 1.19.1 + +2021-05-26 16:57:28 -0400 Nicolas Dufresne + + * gst-libs/gst/gl/egl/gstglcontext_egl.c: + glcontext: Ask for an alpha channel and fallback + While this was already possible through the GLContext machinary, this simply + request an alpha channel by default and fallback if this is not possible. This + obsolete some RPi Dispmanx hack, since this is near equivalent will allow see + through when playgin WebM Alpha or other transparent files. + Application are still free to pass their own EGLContext attribute, this is + specially for the case the application let GStreamer chose (e.g. gst-launch). + Part-of: + +2021-05-31 09:14:53 +0200 Daniel Knobe + + * gst/rawparse/gstrawbaseparse.c: + rawbaseparse: check destination format correctly + Part-of: + +2021-05-26 22:50:22 -0400 Olivier Crête + + * tests/check/elements/audiomixer.c: + audiomixer: Add test for discont going backwards + Part-of: + +2021-05-27 16:05:04 -0400 Olivier Crête + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: Don't overwrite already written samples + On re-sync, don't forget what has already been written. Instead, just + drop any samples that overlap with parts that were already filled. + Part-of: + +2021-05-27 16:20:09 +0900 Seungha Yang + + * gst-libs/gst/audio/gstaudiobasesrc.c: + audiobasesrc: Fix divide by zero assertion + GstAudioRingBufferSpec can be cleared from other thread, then + rate value will be zero + Part-of: + +2021-05-26 23:22:45 +0200 Marijn Suijten + + * gst-libs/gst/audio/audio-format.c: + * gst-libs/gst/video/video-format.c: + audio,video-format: Make generate_raw_formats idempotent for assertions + When compiling without assertions `g_assert` and its contents disappear + resulting in no list being deserialized at all and the + `gst_{audio,video}_formats_raw` functions to return an empty collection. + Part-of: + +2021-05-23 23:48:39 +0100 Tim-Philipp Müller + + * ext/ogg/gstoggstream.c: + * tests/check/libs/rtp.c: + Use new gst_buffer_new_memdup() + Part-of: + +2021-05-24 14:25:55 +0300 Sebastian Dröge + + * gst/compositor/compositor.c: + compositor: Consider the converter-config when deciding whether one pad obscures another + If the converter configuration is set to not fill any borders, or if the + border fill color is not full opaque, then the pad has to be handled + as potentially transparent and can't be considered to obscure another + one. + This prevents pads from being wrongly skipped and doing alpha-blending + with uninitialized memory. + Part-of: + +2021-05-21 15:04:16 -0400 Nicolas Dufresne + + * docs/plugins/gst_plugins_cache.json: + doc: Update cache for AV12 pixel format + Part-of: + +2021-05-21 13:28:32 -0400 Nicolas Dufresne + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: Update video-orc-dist + This adds the new symbols needed for AV12 support. + Part-of: + +2021-05-18 16:20:36 -0300 Daniel Almeida + + * gst-libs/gst/gl/gstglcolorconvert.c: + * gst-libs/gst/gl/gstglcolorconvert.h: + * gst-libs/gst/gl/gstglformat.c: + * gst-libs/gst/gl/gstglmemory.h: + gl: add support for AV12 + AV12 is an internally conceived format that is actually the + combination of NV12 and an alpha plane. + This format is to add to gstreamer's webM transparency support for + vp8 and vp9. To this end, two I420 streams are independently decoded + simultaneously for the actual content and the alpha plane respectively + and these are then combined into A420. + This patch adds GL conversion support so that it is possible to convert + from AV12 to RGBA for the purposes of rendering it on a display. + The reverse conversion is also supplied. + Part-of: + +2021-05-21 12:24:37 -0300 Daniel Almeida + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-format.h: + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-orc.orc: + video: add support for AV12 + AV12 is an internally conceived format that is actually + the combination of NV12 and an alpha plane. + This format is to add to gstreamer's webM + transparency support for vp8 and vp9. To this end, two + I420 streams are independently decoded simultaneously for + the actual content and the alpha plane respectively + and these are then combined into A420. + Since most hardware decoders output NV12, this patch adds + NV12+A to make the same workflow possible. + Part-of: + +2021-05-21 12:24:00 -0300 Daniel Almeida + + * gst-libs/gst/video/video-orc.orc: + video: video-orc: remove trailing spaces + Remove unnecessary trailing spaces at the end of some orc functions. + Part-of: + +2021-05-20 11:16:30 -0400 Thibault Saunier + + * tests/validate/audiotestsrc/reverse/flow-expectations/log-asink-sink-expected: + * tests/validate/videorate/10_to_1fps/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/10_to_1fps/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/change_rate_reverse_playback/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/change_rate_reverse_playback/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/change_rate_while_playing/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/change_rate_while_playing/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/rate_0_5/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/rate_0_5/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/rate_0_5_with_decoder/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/rate_0_5_with_decoder/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/rate_2_0/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/rate_2_0/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/rate_2_0_with_decoder/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/rate_2_0_with_decoder/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/reverse.10_to_1fps/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/reverse.10_to_1fps/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/reverse.10_to_30fps/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/reverse.10_to_30fps/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/reverse.1_to_10fps/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/reverse.1_to_10fps/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/reverse.30fps/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/reverse.30fps/flow-expectations/log-videorate-src-expected: + * tests/validate/videorate/reverse.variable_to_10fps/flow-expectations/log-videorate-sink-expected: + * tests/validate/videorate/reverse.variable_to_10fps/flow-expectations/log-videorate-src-expected: + tests: Update expectation files with sorted structure fields + +2021-05-20 11:24:15 -0400 Thibault Saunier + + * gst-libs/gst/sdp/meson.build: + meson: Fix the name of the `sdp_deps` variable + Part-of: + +2021-05-20 22:52:56 +1000 Matthew Waters + + * gst-libs/gst/gl/wgl/gstglcontext_wgl.c: + gl/context/wgl: implement a better get_proc_address() + Look in opengl32.dll first, then wglGetProcAddress(), and only then + possibly from any linked in libraries. + Part-of: + +2021-05-20 22:50:23 +1000 Matthew Waters + + * gst-libs/gst/gl/gstglcontext.c: + gl/context: add opengl32.dll as a library to dlopen() on windows + Part-of: + +2021-05-20 23:27:21 +0100 Tim-Philipp Müller + + * gst/overlaycomposition/gstoverlaycomposition.c: + overlaycomposition: fix cut-off example code in docs + Include everything to the end. + Part-of: + +2021-05-06 17:26:50 -0300 Daniel Almeida + + * docs/plugins/gst_plugins_cache.json: + * gst-libs/gst/gl/gstglcolorconvert.c: + * gst-libs/gst/gl/gstglcolorconvert.h: + * gst-libs/gst/gl/gstglformat.c: + * gst-libs/gst/gl/gstglmemory.h: + gl: add support for A420 conversion + A420 is a four planar format similar to I420 but with an extra buffer + for alpha values. + A common use of the gl stack is for GPU format conversions using + shaders, in which case one can use glupload, glcolorconvert and + gldownload elements to upload their buffer to the GPU context, perform + the conversion on the GPU itself and then retrieve the data to CPU + context. + A420 was not supported. This patch adds said support mainly by adding + the corresponding shader to perform the conversion and updating the + supported caps. + Both A420->RGBA and RGBA->A420 conversions are supported. + Part-of: + +2021-05-19 19:44:29 +0200 Enrique Ocaña González + + * ext/gl/gstglcolorbalance.c: + glcolorbalance: Error out on unsupported texture target types + The issue can be reproduced on a computer with a Radeon graphics card + when trying to force GStreamer Editing Services to use GL for video + mixing in GESSmartMixer, instead of the GstCompositor that smart mixer + would normally use. This change causes the resulting video stream to + have "video/x-raw(memory:GLMemory) ... texture-target: 2D" caps (instead + of "video/x-raw ..." caps). At the PlaySink stage of the pipeline, a + GstGLImageSinkBin is plugged, with a GstGLColorBalance on it. For some + reason that is still to be debugged (and out of the scope of this + patch), gst_gl_filter_set_caps() is never called on that color balance + element, leaving filter->in_texture_target set to its default + GST_GL_TEXTURE_TARGET_NONE value. The incomplete _create_shader() logic + does the rest and silently generates a shader code that doesn't build. + This is the command I use to reproduce the issue (I'm not sure if I + would be able to isolate the issue in a simple pipeline, though): + GST_PLUGIN_FEATURE_RANK=vaapih265enc:NONE,vaapih264enc:NONE,vaapisink:NONE,vaapidecodebin:NONE,vaapipostproc:NONE,vaapih265dec:NONE,vaapivc1dec:NONE,vaapih264dec:NONE,vaapimpeg2dec:NONE,vaapijpegdec:NONE,glvideomixer:260 + ges-launch-1.0 +clip /tmp/video.mp4 + Part-of: + +2021-05-19 16:35:01 -0400 Nicolas Dufresne + + * gst/compositor/blend.c: + compositor: Fix NV12 blend operation + The full src_height/width was being used instead of the remaining + width/height for the current band. As a side effect, that value would + get erroneously reset and would cause overrun. + Fixes #887 + Part-of: + +2021-05-18 15:36:36 -0400 Nicolas Dufresne + + * gst-libs/gst/gl/egl/gsteglimage.c: + * gst-libs/gst/gl/gstglmemory.c: + * gst-libs/gst/gl/gstglutils.c: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-frame.c: + * gst-libs/gst/video/video-info.c: + * gst/compositor/compositor.c: + * gst/rawparse/gstrawvideoparse.c: + video: Pass component index not plane index + While so far it worked, we are about to introduce a format that break this + assuming. We have a format which consist of NV12 with alpha, and this format + does not have a direct mapping of the component against their plane indexes. + Fix this by using gst_video_format_info_component() introduced in 1.18 for + this purpose. + Part-of: + +2021-05-18 20:00:01 +1000 Matthew Waters + + * gst-libs/gst/gl/gstglcontext.c: + gl/context: move egl creation lower in priority on _new() + e.g. if running a dual wgl/egl built library, then egl will always + succeed in creating the GstGLContext because almost anything could + support egl, as long as eglGetDisplay() works. + wgl, however has a check for the correct display type so should move + earlier in the tried list. + Part-of: + +2021-05-18 19:56:13 +1000 Matthew Waters + + * gst-libs/gst/gl/eagl/gstglcontext_eagl.m: + * gst-libs/gst/gl/gstgldisplay.c: + * gst-libs/gst/gl/gstgldisplay.h: + gl/display: provide a gst_gl_display_new_with_type() + Allows more fine-grained control over the exact display type that is + created. + Part-of: + +2021-05-19 16:23:43 +0900 Seungha Yang + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: Don't try to return void + warning C4098: 'gst_video_aggregator_parallel_convert_pad_finalize': + 'void' function returning a value + Part-of: + +2021-05-16 13:31:56 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-hdr.h: + Revert video HDR10+ support + This reverts commit f76b731cbf76aa59ef462e4fd761cceda1f50a6d. + This reverts commit 631489de230d5e1c43f8ded596e220561824ca1e. + This reverts commit a1ed7a8f49568094f79fd76d7842d67e723229d1. + This reverts commit 7d6f72e956e63a0e8c4998c730d67c52e2b69a8d. + Back this out again for now for the release. Needs more discussion. + https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/865 + Part-of: + +2021-05-17 00:33:44 +0100 Tim-Philipp Müller + + * gst-libs/gst/gl/meson.build: + * meson.build: + * scripts/meson-pkg-config-file-fixup.py: + meson: fix up wrong escaping of variables in gl and plugins-base .pc file + Workaround for pkg.generate() escaping spaces in pc variables + that shouldn't be escaped. Perhaps going back to configure_file() + would be a better option though. Really needs a fix in Meson. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/884 + Part-of: + +2021-05-17 11:10:49 +0100 Tim-Philipp Müller + + * gst-libs/gst/gl/meson.build: + * meson.build: + meson: add custom pkg-config variables also to uninstalled .pc files + Part-of: + +2021-05-16 19:10:01 +0200 Guillaume Desmottes + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: add debug category + All logs were using 'default' category which is not handy for debugging. + Part-of: + +2021-04-02 16:43:02 +1100 Matthew Waters + + * docs/plugins/gst_plugins_cache.json: + * gst/compositor/compositor.c: + * gst/compositor/compositor.h: + compositor: perform conversions in parallel + Improves throughput of the total convert and blend process and allows + for higher performance across slightly more threads. + Also make use of video aggregator's task pool for blending as well in + order to reduce the number of threads. + Part-of: + +2021-04-02 16:40:37 +1100 Matthew Waters + + * gst-libs/gst/video/gstvideoaggregator.c: + * gst-libs/gst/video/gstvideoaggregator.h: + video/aggregator: add parallel convert pad class + Each required conversion will be performed concurrently + Part-of: + +2021-04-02 16:39:08 +1100 Matthew Waters + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video/converter: add support for async conversion operation + Allows for users to start up multiple conversions concurrently. + Part-of: + +2021-03-26 16:34:20 +0200 Jordan Petridis + + * ext/gl/meson.build: + ext/gl: change graphene default options + The type was changed upstream from a boolean to an autofeature + https://github.com/ebassi/graphene/commit/41ebe5fa61d4bdb6c75f677942d19c6c976fd17b + Part-of: + +2021-05-14 23:16:32 +0100 Jose Quaresma + + * tests/check/meson.build: + tests: use the real name of the videoscale test in GST_REGISTRY + The videoscale tests uses the same name as the one used in base tests. + Fix this and use the name of the videoscale test on the test environment GST_REGISTRY + Part-of: + +2021-04-21 22:40:35 -0400 Thibault Saunier + + * gst/playback/gsturisourcebin.c: + playback: Handle sources with dynamic pads and pads already present + In case we already have a pad but more might be added later we were + ignoring the new pads added later, we should track the element + new pads and expose them as they are added. + Part-of: + +2021-04-21 22:19:39 -0400 Thibault Saunier + + * gst/playback/gsturisourcebin.c: + playback: Stop giving "source" as name to sources + This makes it very hard to understand what source we are talking about + Part-of: + +2020-09-08 16:27:03 +1000 Matthew Waters + + * gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m: + * gst-libs/gst/gl/eagl/gstglcontext_eagl.m: + * gst-libs/gst/gl/egl/gstglcontext_egl.c: + * gst-libs/gst/gl/egl/gstglcontext_egl.h: + * gst-libs/gst/gl/gl.h: + * gst-libs/gst/gl/gstglcontext.c: + * gst-libs/gst/gl/gstglcontext.h: + * gst-libs/gst/gl/gstglcontext_private.h: + * gst-libs/gst/gl/gstglcontextconfig.c: + * gst-libs/gst/gl/gstglcontextconfig.h: + * gst-libs/gst/gl/meson.build: + * gst-libs/gst/gl/wgl/gstglcontext_wgl.c: + * gst-libs/gst/gl/x11/gstglcontext_glx.c: + * gst-libs/gst/gl/x11/gstglcontext_glx.h: + glcontext: add support for influencing the backing configuration + New API: + - gst_gl_context_get_config() + - gst_gl_context_request_config() + A GL context configuration is a GstStructure that has some well-known + names for common values that can also be extended in platform-specific + ways if necessary. + Wrapped OpenGL contexts may be able to retrieve the GL context + configuration depending on the platform. If that information is + available, GstGLContext will attempt to create an context that matches + the shared OpenGL context config unless gst_gl_context_request_config() + has been called. + A new environment variable 'GST_GL_CONFIG' will be read to influence the + configuration chosen. The environment variable will only be used as a + fallback if gst_gl_context_request_config() has not been called. + Part-of: + +2021-05-13 15:55:37 +1000 Matthew Waters + + * gst-libs/gst/gl/egl/gstglcontext_egl.h: + gl/context/egl: change header guard to be unique + The header guard in gst/gl/egl/gstglcontext_egl.h was the same as + gst/gl/egl/egl.h + Part-of: + +2020-09-08 15:53:27 +1000 Matthew Waters + + * gst-libs/gst/gl/gstglapi.c: + * tests/check/libs/gstglapi.c: + * tests/check/meson.build: + gl/api: improve the to/from string for GstGLAPI/GstGLPlatform + With unit tests now! + Part-of: + +2020-09-08 15:09:18 +1000 Matthew Waters + + * gst-libs/gst/gl/gstglframebuffer.c: + gl/framebuffer: expand documentation on valid usage + Part-of: + +2021-05-11 14:31:59 -0400 Nicolas Dufresne + + * docs/plugins/gst_plugins_cache.json: + * ext/opus/gstopusdec.c: + opusdec: Add Converter class to hint gst-validate + opusdec have minimal conversion capability, adding the Converter class allow + gst-validate to behave properly and not spit an error when it notice that the + number of channels or rate miss-match in and out. + Related to https://gitlab.freedesktop.org/gstreamer/gst-integration-testsuites/-/merge_requests/102 + Part-of: + +2021-05-11 10:34:16 +0800 Haihao Xiang + + * docs/plugins/gst_plugins_cache.json: + doc: update gst_plugins_cache.json + Part-of: + +2021-05-10 14:43:23 +0800 Haihao Xiang + + * gst-libs/gst/gl/gstglcolorconvert.c: + * gst-libs/gst/gl/gstglcolorconvert.h: + * gst-libs/gst/gl/gstglformat.c: + * gst-libs/gst/gl/gstglmemory.h: + gl: add support for RGBP and BGRP formats + gst-launch-1.0 videotestsrc ! video/x-raw,format=RGBP ! glimagesink + gst-launch-1.0 videotestsrc ! video/x-raw,format=BGRP ! glimagesink + Part-of: + +2021-05-10 14:21:51 +0800 Haihao Xiang + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-format.h: + * gst-libs/gst/video/video-info.c: + video: add support for RGBP and BGRP formats + The two RGB planar formats are used in OpenVino [1] + gst-launch-1.0 videotestsrc ! video/x-raw,format=BGRP ! fakesink + gst-launch-1.0 videotestsrc ! video/x-raw,format=RGBP ! fakesink + [1] https://docs.openvinotoolkit.org/latest/openvino_docs_optimization_guide_dldt_optimization_guide.html + Part-of: + +2021-05-11 12:01:03 +0800 Haihao Xiang + + * tests/check/libs/video.c: + test: enlarge the number + This is to make sure the case can pass after adding new video formats. + Part-of: + +2021-03-02 20:09:26 -0500 Nicolas Dufresne + + * gst-libs/gst/video/gstvideocodecalphameta.c: + * gst-libs/gst/video/gstvideocodecalphameta.h: + * gst-libs/gst/video/meson.build: + * gst-libs/gst/video/video.h: + codec: Introduce GstVideoCodecAlphaMeta + This meta hold one buffer of the same codec data as the parent memory. This + extra frame luma will be used as the alpha values for the final combined + frame. This is notably used to support VP8/VP9 alpha as defined in WebM and + matroska specification. + Part-of: + +2021-03-30 14:38:25 -0400 Nicolas Dufresne + + * gst-libs/gst/video/video.h: + video: Sort includes in video.h + Part-of: + +2021-05-04 18:09:07 +0300 Sebastian Dröge + + * gst/tcp/gstmultifdsink.c: + * gst/tcp/gstmultihandlesink.c: + * gst/tcp/gstmultihandlesink.h: + * gst/tcp/gstmultisocketsink.c: + multihandlesink: Use the monotonic clock for detecting timeouts and connection durations + Otherwise real-time clock changes can wrongly trigger timeouts, or not + cause timeouts to happen in time. + Unfortunately real-time clock times still have to be kept track inside + the elements for the statistics. Switching those over to the monotonic + clock would cause behaviour changes from the application point of view. + The statistics are extended with fields with monotonic times though. + Part-of: + +2021-05-03 17:10:20 +0300 Sebastian Dröge + + * tests/check/elements/appsrc.c: + appsrc: Add test for testing the max-* and leaky-type properties + Part-of: + +2021-05-02 20:46:00 +0300 Sebastian Dröge + + * docs/plugins/gst_plugins_cache.json: + * gst-libs/gst/app/gstappsrc.c: + * gst-libs/gst/app/gstappsrc.h: + appsrc: Implement a leaky property similar to the queue element + This allows dropping the newest or oldest buffer when the internal queue + is full instead of blocking or continuing to grow. + Part-of: + +2021-04-30 19:22:46 +0300 Sebastian Dröge + + * docs/plugins/gst_plugins_cache.json: + * gst-libs/gst/app/gstappsrc.c: + * gst-libs/gst/app/gstappsrc.h: + appsrc: Add new max-buffers / max-time / current-level-buffers / current-level-time properties + These work the same way as the corresponding properties on queue and + allow to control the internal buffer size of the appsrc in a more + flexible way. + Unlike in queue the max-buffers and max-time properties are 0 (i.e. + disabled) by default for backwards compatibility reasons. + Part-of: + +2021-04-20 19:53:01 +0200 François Laignel + + * gst/playback/gstdecodebin2.c: + * gst/playback/gstdecodebin3.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstplaybin3.c: + * gst/playback/gstplaysink.c: + * gst/playback/gsturidecodebin3.c: + * tests/check/elements/adder.c: + * tests/check/elements/audiointerleave.c: + * tests/check/elements/audiomixer.c: + * tests/check/elements/compositor.c: + * tests/check/elements/encodebin.c: + * tests/check/elements/streamsynchronizer.c: + * tests/check/elements/textoverlay.c: + * tests/check/pipelines/oggmux.c: + * tests/examples/compositor/crossfade.c: + * tests/examples/compositor/mosaic.c: + * tests/examples/decodebin_next/decodebin3.c: + * tests/examples/dynamic/codec-select.c: + * tests/examples/dynamic/sprinkle.c: + * tests/examples/dynamic/sprinkle2.c: + * tests/examples/dynamic/sprinkle3.c: + * tests/icles/output-selector-test.c: + Use gst_element_request_pad_simple... + Instead of the deprecated gst_element_get_request_pad. + +2021-05-04 15:38:18 +1000 Matthew Waters + + * gst-libs/gst/rtp/gstrtphdrext.c: + rtp/hdrext: correct gst_rtp_get_header_extension_list() docs + The return value is a list of GstElementFactory's that when + gst_element_factory_create()ed will create a GstRTPHeaderExtension. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/897 + Part-of: + +2021-05-02 20:45:01 +0300 Sebastian Dröge + + * gst-libs/gst/app/gstappsrc.c: + appsrc: Don't leak buffer list while wrongly unreffing buffer on EOS/flushing + Part-of: + +2021-05-02 20:45:36 +0300 Sebastian Dröge + + * gst-libs/gst/app/meson.build: + app: Add gstappsrc.h to the enum headers in meson.build + It's already indirectly included but let's better be explicit here. + Part-of: + +2021-04-27 10:30:15 +0200 Stéphane Cerveau + + * tools/gst-play.c: + gst-play: add --start-position command line argument + Part-of: + +2021-04-30 20:42:55 +0530 Nirbheek Chauhan + + * gst/videotestsrc/gstvideotestsrc.c: + videotestsrc: Fix a leak when computing alpha caps + Part-of: + +2021-04-23 14:45:07 +0200 Stéphane Cerveau + + * tests/examples/playback/playback-test.c: + playback-test: add window title + If playbin mode, display the current uri + Part-of: + +2021-04-29 21:16:10 +1000 Matthew Waters + + * gst-libs/gst/sdp/gstsdpmessage.c: + sdp/caps: support translating transport-cc rtcp-fb from caps to sdp attributes + Part-of: + +2021-04-11 18:43:06 -0400 Doug Nazar + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtp: Fix request-extension signal call + Signal is registered as taking a guint however was being passed a + guint64 which fails on 32-bit. + Part-of: + +2021-04-16 18:10:38 +0200 Víctor Manuel Jáquez Leal + + * sys/xvimage/xvimagesink.c: + xvimagesink: Handle cropping when copying frames. + Cropping was not handled properly when frames have to be copied to + xvimage's buffer pool, first because the crop meta were dropped, and + second because the allocated frame size in xvimage's buffer pool were + smaller than the incoming frame. + This patch updates xvimagesink's video info when propose_allocation() + is called, and copies the GstVideoCropMeta from source frame to + destination one. + Part-of: + +2021-04-01 15:30:41 +0200 Víctor Manuel Jáquez Leal + + * sys/xvimage/xvimagesink.c: + xvimagesink: Delay pool creation until it's needed. + Buffer pool is created every time setcaps() is called, but it's + required only when upstream doesn't use it, so it's only needed to + copy frames onto XV buffers. + This patch delay the creation of the buffer pool until it's frame copy + is required. + Part-of: + +2021-03-17 13:56:16 +1100 Matthew Waters + + * ext/gl/gstgldownloadelement.c: + * ext/gl/gstgldownloadelement.h: + * ext/gl/meson.build: + * gst-libs/gst/gl/meson.build: + gl/download: add support for output memory:NVMM buffers + Currently RGBA-only. + Part-of: + +2021-03-17 13:54:17 +1100 Matthew Waters + + * gst-libs/gst/gl/gstglbufferpool.c: + * gst-libs/gst/gl/gstglbufferpool.h: + gl/bufferpool: add api for retrieving the configure gl allocation params + Part-of: + +2021-02-26 18:48:09 +1100 Matthew Waters + + * gst-libs/gst/gl/gstglupload.c: + * gst-libs/gst/gl/meson.build: + glupload: add support for uploading memory:NVMM buffers + Currently RGBA-only. + Part-of: + +2021-03-18 14:20:34 +1100 Matthew Waters + + * gst-libs/gst/gl/egl/gstglmemoryegl.c: + * gst-libs/gst/gl/gstglupload.c: + glupload: guard against glEGLImageTexture2D not existing + e.g. if targetting EGL/opengl, we would attempt to use this GLES + function when wrapping EGLImage's. + Part-of: + +2021-04-26 14:25:03 -0400 Xavier Claessens + + * gst-libs/gst/gl/meson.build: + gstgl: Fix build when Meson >= 0.58.0rc1 + "implicit_include_directories: false" now also means that current build + directory is not added to include paths by default any more. We have to + add it manually because we have some custom_target() that generate + headers in current build directory. + See https://github.com/mesonbuild/meson/issues/8700. + Part-of: + +2021-04-23 14:05:45 -0400 Doug Nazar + + * gst-libs/gst/gl/cocoa/gstglcaopengllayer.m: + * gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m: + * gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m: + * gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m: + * gst-libs/gst/gl/gstglfuncs.h: + * gst-libs/gst/gl/meson.build: + * tests/examples/gl/cocoa/cocoa-videooverlay.m: + * tests/examples/gl/qt/qglwtextureshare/cocoa_utils.mm: + opengl: Silence macOS OpenGL deprecations + As of macOS 10.14 the entire OpenGL system is deprecated. No need to + log the general warnings about it. Specific warnings are still enabled. + Part-of: + +2021-04-06 14:55:39 +0200 Stéphane Cerveau + + * tests/examples/playback/playback-test.c: + playback-test: fix seek crash + check that app->seek_format exists before seeking. + Part-of: + +2021-04-20 23:20:19 -0400 Doug Nazar + + * gst/tcp/gsttcpclientsink.c: + * gst/tcp/gsttcpclientsrc.c: + * gst/tcp/gsttcpelements.c: + tcp: Rework client start error handling. + Ensure errors are cleaned up properly at the right level. + Abort connection attempts if we're cancelled. + Part-of: + +2021-04-21 17:18:51 +0200 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepay: fix locking of GstRTPHeaderExtension + 'ext' object unlocked if gst_rtp_header_extension_read() fails was never + locked in the first place. + Part-of: + +2021-04-21 10:27:10 +0200 Stéphane Cerveau + + * ext/vorbis/gstivorbisdec.c: + * ext/vorbis/gstvorbisdec.c: + * ext/vorbis/gstvorbiselement.c: + * ext/vorbis/gstvorbisenc.c: + * ext/vorbis/gstvorbisparse.c: + * ext/vorbis/gstvorbistag.c: + vorbis: avoid duplicate symbols + Use TREMOR define to avoid duplicate symbols + of ivodebis and vorbis plugins when + static linking GStreamer. + Rearrange debug category init. + Part-of: + +2021-04-21 02:05:36 +0900 Seungha Yang + + * gst/playback/gsturidecodebin.c: + uridecodebin: Don't force floating reference for future reusable decodebin + uridecodebin assumes that refcount of decodebins stored in pending_decodebins + are floating but it might not be true in case that refcount of the decodebin + was touched in other places. To avoid the floating refcount issue, + hold strong reference. + Part-of: + +2021-04-21 02:02:48 +0900 Seungha Yang + + * gst/playback/gsturidecodebin.c: + uridecodebin: Use gst_object_ref instead of g_object_ref + It's more debugging friendly (tracer for example) + Part-of: + +2021-04-20 11:06:09 +0300 Jordan Petridis + + * gst-libs/gst/video/gstvideoencoder.c: + gstvideoencoder: make sure the buffer is writable before modifying metadata + Similar to ae8d0cf3acfaf79d8479647a55bd44b8453d07df + Part-of: + +2021-04-19 15:54:18 -0400 Doug Nazar + + * gst/tcp/gsttcpclientsink.c: + tcp: Convert tcpclientsink to new helpers. + Part-of: + +2021-04-19 15:54:04 -0400 Doug Nazar + + * gst/tcp/gsttcpclientsrc.c: + tcp: Convert tcpclientsrc to new helpers. + Part-of: + +2021-04-19 15:53:36 -0400 Doug Nazar + + * gst/tcp/gsttcpserversink.c: + tcp: Convert tcpserversink to new helpers. + Part-of: + +2021-04-19 15:52:35 -0400 Doug Nazar + + * gst/tcp/gsttcpserversrc.c: + tcp: Convert tcpserversrc to new helpers. + Part-of: + +2021-04-19 15:48:18 -0400 Doug Nazar + + * gst/tcp/gsttcpelements.c: + * gst/tcp/gsttcpelements.h: + tcp: Add helper functions to lookup hostnames and create sockets. + Lookup will now maintain the full list of possible IP address(es). + We can now iterate over all available addresses in case certain + address families (IPv6) are disabled or try connecting to additional + addresses for the clients. + Part-of: + +2021-04-19 11:53:10 -0400 Doug Nazar + + * tests/check/pipelines/tcp.c: + tests/tcp: Fail if unable to start pipelines. + Part-of: + +2021-04-19 13:22:16 -0400 Doug Nazar + + * gst/tcp/gstsocketsrc.c: + * gst/tcp/gsttcp.h: + * gst/tcp/gsttcpclientsink.c: + * gst/tcp/gsttcpclientsink.h: + * gst/tcp/gsttcpclientsrc.c: + * gst/tcp/gsttcpelements.c: + * gst/tcp/gsttcpelements.h: + * gst/tcp/gsttcpserversink.c: + * gst/tcp/gsttcpserversrc.c: + * gst/tcp/gsttcpserversrc.h: + * gst/tcp/meson.build: + tcp: cleanup files + consolidate gsttcp.h & gsttcpelements.h + rename gsttcpelement.c to match header + Part-of: + +2021-04-19 13:28:39 +0200 Stéphane Cerveau + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: use DTS if PTS unknown + The buffer should be set according to DTS if exists + when we are guessin the PTS instead of segment start. + The decoder can receive buffers which are before the segment + in case of seek for example. + Part-of: + +2021-03-30 11:18:17 +0200 Marijn Suijten + + * gst-libs/gst/audio/gstaudiobasesink.h: + * gst-libs/gst/video/gstvideoutils.h: + * gst-libs/gst/video/video-color.c: + * gst/rawparse/gstrawbaseparse.c: + Drop `@` documentation references from functions and external types + `@` references are used to reference function parameters, struct members + or enum variants _within_ the current type/function. It cannot and + should not be used to reference to types outside that. + Since C has no notion of member functions it makes little sense to + prefix these with `@`; most of the documentation here was referencing + functions on _different_ types anyway. + Part-of: + +2021-04-12 14:02:46 +0200 Mathieu Duponchelle + + * gst/playback/gstplaybin2.c: + * gst/playback/gstplaybin3.c: + playbin{2,3}: fix base_time selection when flush seeking live + This is a direct translation of + , + as playbin{2,3} insulates its sub groups state changes from the pipeline + base class, it needs to track whether the subgroup is live itself, + and handle RESET_TIME the same way GstPipeline does. + Part-of: + +2021-04-11 14:29:30 -0400 Doug Nazar + + * tests/check/elements/overlaycomposition.c: + overlaycomposition: Fix test for big endian. + Part-of: + +2021-04-11 23:42:13 +0100 Tim-Philipp Müller + + * gst-libs/gst/gl/egl/gstglmemoryegl.h: + * gst-libs/gst/gl/gstglbuffer.h: + * gst-libs/gst/gl/gstglmemory.h: + * gst-libs/gst/gl/gstglmemorypbo.h: + * gst-libs/gst/gl/gstglrenderbuffer.h: + gl: fix up Since markers for newly-added _get_type() functions + Follow-up to !999 which wasn't backported into 1.18 in the end + after all. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/857 + Part-of: + +2021-04-06 13:22:15 +0200 Robin Burchell + + * gst/gio/gstgiobasesink.c: + gstgiobasesink: Handle incomplete writes in gst_gio_base_sink_render() + As the comment asked, yes, incomplete writes can happen. + I have encountered this with an sshfs mount, for example. + It seems like g_output_stream_write_all() is designed to handle this case, + by not returning until the requested buffer has been completely written, + or an error occurs, which seems to match up with the desired behaviour. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/885 + Part-of: + +2021-04-05 00:34:21 +0900 Seungha Yang + + * ext/pango/gstclockoverlay.c: + * ext/pango/gstclockoverlay.h: + clockoverlay: Fix broken string formatting by strftime() on Windows + Like other foobarA variant APIs on Windows, formatted string + by strftime() is ANSI string, not unicode encoded one. + It would be problematic for non-english locale systems. + We should use unicode version API (wcsftime in this case) + whenever it's possible on Windows. + Part-of: + +2021-04-07 04:25:47 -0400 Doug Nazar + + * ext/alsa/gstalsasink.c: + * gst-libs/gst/audio/gstaudiosink.c: + audio/alsa: Exit write loop if underlying device is already paused. + If the alsasink thread starts the write loop but another thread pauses + the underlying alsa device, the sink thread will endlessly loop. + snd_pcm_writei() will return 0 if the state is SND_PCM_STATE_PAUSED + and the loop will never make any progress. + Part-of: + +2021-04-07 08:28:40 -0400 Xavier Claessens + + * gst-libs/gst/gl/meson.build: + meson: Fix gstreamer-gl-prototypes-1.0.pc + This fix a warning because we were generating 2 pc files for gstgl + library. Also fix missing glesv2 in Requires. + Part-of: + +2020-06-01 12:45:36 +0200 Matej Knopp + + * gst-libs/gst/pbutils/codec-utils.c: + codec-utils: properly determine AAC Level + Table 1.10 – "Levels for the AAC Profile" only goes to 5 max channels + / 7 max channel post amendmend, so I assume the number of channels + should not include LFE, otherwise there's no valid level for 5.1 resp. + 7.1 (post amendmend) + Part-of: + +2021-04-04 21:18:59 +0700 Binh Truong + + * gst-libs/gst/gl/gl_mkenum.py: + Fix build issue on MinGW64 + Part-of: + +2021-03-18 20:13:21 +0100 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtpbuffer: make sure header extension buffer is initialized + Based upon valgrind finding: + Conditional jump or move depends on uninitialised value(s) + at 0x4AFF589: read_rtp_header_extensions (gstrtpbasedepayload.c:1197) + by 0x4AFF9E5: gst_rtp_base_depayload_set_headers + (gstrtpbasedepayload.c:1298) + by 0x4AFFEE0: gst_rtp_base_depayload_do_push + (gstrtpbasedepayload.c:1413) + by 0x4AFFF53: gst_rtp_base_depayload_push + (gstrtpbasedepayload.c:1448) + by 0x4AFDEBA: gst_rtp_base_depayload_handle_buffer + (gstrtpbasedepayload.c:801) + by 0x4AFE41E: gst_rtp_base_depayload_chain_list + (gstrtpbasedepayload.c:899) + by 0x48F262C: gst_pad_chain_data_unchecked (gstpad.c:4414) + by 0x48F3333: gst_pad_push_data (gstpad.c:4655) + by 0x48F3DF8: gst_pad_push_list (gstpad.c:4814) + by 0x4AFAD87: gst_rtp_base_payload_push_list + (gstrtpbasepayload.c:1978) + by 0x72B3154: gst_rtp_vp8_pay_handle_buffer (gstrtpvp8pay.c:672) + by 0x4AF7031: gst_rtp_base_payload_chain (gstrtpbasepayload.c:868) + Uninitialised value was created by a heap allocation + at 0x483C77F: malloc (in + /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) + by 0x4B8BA78: g_malloc (gmem.c:106) + by 0x4BA3A9D: g_slice_alloc (gslice.c:1069) + by 0x488D777: _sysmem_new_block (gstallocator.c:413) + by 0x488DB28: default_alloc (gstallocator.c:512) + by 0x488D3E8: gst_allocator_alloc (gstallocator.c:310) + by 0x4AE97E3: gst_rtp_buffer_set_extension_data (gstrtpbuffer.c:856) + by 0x4AF9EC6: set_headers (gstrtpbasepayload.c:1757) + by 0x489FE4D: gst_buffer_list_foreach (gstbufferlist.c:287) + by 0x4AFA87A: gst_rtp_base_payload_prepare_push + (gstrtpbasepayload.c:1915) + by 0x4AFAD06: gst_rtp_base_payload_push_list + (gstrtpbasepayload.c:1970) + by 0x72B3154: gst_rtp_vp8_pay_handle_buffer (gstrtpvp8pay.c:672) + Part-of: + +2021-04-01 21:44:10 -0400 Chris White + + * gst/typefind/gsttypefindfunctions.c: + typefind: use new gst_type_find_suggest_empty_simple() + gst_type_find_suggest_simple() now requires a NULL terminator. + Use the new, simpler API for no-parameter calls. + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/774#note_861492 + Part-of: + +2021-03-03 18:28:54 +1100 Matthew Waters + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: allow selecting an alpha output from non-alpha inputs + e.g. if we have: + video-x/raw,format=I420 ! compositor ! video/x-raw,format=BGRA + This will currently produce a warning as the alpha-ness of the chosen + 'best' format (I420) will be different from the value restricted by the + downstream caps filter. + Part-of: + +2021-03-29 14:10:12 +0200 Stéphane Cerveau + + * sys/xvimage/xvcontext.c: + * sys/xvimage/xvimage.c: + * sys/xvimage/xvimagepool.c: + * sys/xvimage/xvimagesink.c: + * sys/xvimage/xvimagesink.h: + xvimage: allow per feature 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: + +2021-03-29 14:09:16 +0200 Stéphane Cerveau + + * sys/ximage/ximage.c: + * sys/ximage/ximagepool.c: + * sys/ximage/ximagesink.c: + * sys/ximage/ximagesink.h: + ximage: allow per feature 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: + +2021-03-29 14:07:00 +0200 Stéphane Cerveau + + * gst/audiotestsrc/gstaudiotestsrc.c: + * gst/audiotestsrc/gstaudiotestsrc.h: + audiotestsrc: allow per feature 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: + +2021-03-29 14:06:30 +0200 Stéphane Cerveau + + * gst/audioresample/gstaudioresample.c: + * gst/audioresample/gstaudioresample.h: + audioresample: allow per feature 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: + +2021-03-29 14:06:00 +0200 Stéphane Cerveau + + * gst/audiorate/gstaudiorate.c: + * gst/audiorate/gstaudiorate.h: + audiorate: allow per feature 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: + +2021-03-19 10:31:58 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + * gst/playback/gstdecodebin3.c: + * gst/playback/gstparsebin.c: + * gst/playback/gsturidecodebin.c: + * gst/playback/gsturidecodebin3.c: + playback: Don't special-case G_SIGNAL_RUN_CLEANUP stage in signal accumulators + All these signals don't run the class handler in the CLEANUP stage. + Part-of: + +2021-03-25 09:35:31 +1100 Luke Yelavich + + * tools/gst-device-monitor-1.0.1: + tools: Fix incorrect argument in gst-device-monitor-1.0 manpage + The --include-hidden argument was --show-hidden in a previous iteration of + commit ddf3e6669fcfcaeb3205af698d66c8ec1648f4b3, and I forgot to change the + example. + Part-of: + +2021-03-25 10:29:41 +0100 Edward Hervey + + * gst/playback/gstdecodebin3.c: + decodebin3: Don't insert duplicated streams in collection + Filter out the ones which are already present. Can happen with several input + stream which have identical collections + Part-of: + +2020-12-11 10:15:32 +0100 Edward Hervey + + * gst/playback/gstparsebin.c: + parsebin: Put stream flags in GstStream + Part-of: + +2020-11-19 10:49:01 +0100 Edward Hervey + + * gst/playback/gstdecodebin3.c: + decodebin3: Make input activation "atomic" + When adding inputs dynamically, we need to make sure the new parsebin are + added *and* activated by the same thread (by taking the state change lock). + The rationale for this is that the calling thread might be an upstream streaming + thread and when activating parsebin it might call back upstream. If we don't use + the same thread (ex: when the application does a state change on decodebin3 + between the moment we add parsebin to decodebin3 and we synchronize the state of + parsebin) then we would end up in different threads trying to take upstream + recursive locks. + Part-of: + +2021-03-20 11:16:51 +1100 Luke Yelavich + + * tools/gst-device-monitor-1.0.1: + * tools/gst-device-monitor.c: + device-monitor: Add argument to include devices from hidden providers + Part-of: + +2021-03-22 13:59:39 +1100 Matthew Waters + + * gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c: + gl/wayland: provide a dummy global_remove function + Even if we don't care about any global objects being removed, wayland + will still error if globals are removed without a corresponding listener + set up for them. e.g. wl_output hotplugging + Discovered by: Matthias Clasen + Part-of: + +2021-03-21 16:46:54 +1100 Jan Schmidt + + * gst/gio/gstgiosrc.c: + gstgiosrc: Don't leak scheme string in gst_gio_src_query() + Add a g_free() in the code path that forwards the query to the parent + handler. + Part-of: + +2021-03-15 14:35:29 +0800 Bing Song + + * gst/encoding/gstencodebasebin.c: + encodebin: handle video encoder preset fail. + Check video encoder preset before request muxer pad as MOV/MP4 don't + support addition/removal of tracks at random times. + Part-of: + +2021-03-18 19:18:36 +1100 Matthew Waters + + * ext/gl/gstgleffects.c: + * ext/gl/gstglimagesink.h: + * ext/opus/gstopusenc.c: + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiometa.c: + * gst-libs/gst/audio/streamvolume.c: + * gst-libs/gst/gl/cocoa/gstglcaopengllayer.m: + * gst-libs/gst/gl/egl/gstgldisplay_egl.c: + * gst-libs/gst/gl/gbm/gstgldisplay_gbm.c: + * gst-libs/gst/gl/gl_mkenum.py: + * gst-libs/gst/gl/gstglbasememory.c: + * gst-libs/gst/gl/gstglbuffer.c: + * gst-libs/gst/gl/gstglcontext.c: + * gst-libs/gst/gl/gstgldebug.c: + * gst-libs/gst/gl/gstgldisplay.c: + * gst-libs/gst/gl/gstglfeature.c: + * gst-libs/gst/gl/gstglmemory.c: + * gst-libs/gst/gl/gstglmemorypbo.c: + * gst-libs/gst/gl/gstglquery.c: + * gst-libs/gst/gl/gstglrenderbuffer.c: + * gst-libs/gst/gl/gstglsl.c: + * gst-libs/gst/gl/gstglsyncmeta.c: + * gst-libs/gst/gl/gstglutils.c: + * gst-libs/gst/gl/gstglwindow.c: + * gst-libs/gst/gl/wayland/wayland_event_source.c: + * gst-libs/gst/pbutils/encoding-profile.c: + * gst-libs/gst/pbutils/gstaudiovisualizer.c: + * gst-libs/gst/rtp/gstrtpmeta.c: + * gst-libs/gst/rtsp/gstrtspextension.c: + * gst-libs/gst/tag/gsttagmux.c: + * gst-libs/gst/tag/xmpwriter.c: + * gst-libs/gst/video/gstvideoaffinetransformationmeta.c: + * gst-libs/gst/video/gstvideoaggregator.c: + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + * gst-libs/gst/video/gstvideometa.c: + * gst-libs/gst/video/video-anc.c: + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-multiview.c: + * gst-libs/gst/video/video-overlay-composition.c: + * gst/adder/gstadder.h: + * gst/encoding/gstencodebasebin.c: + * gst/playback/gstplay-enum.c: + * gst/videorate/gstvideorate.h: + * gst/videoscale/gstvideoscale.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: + +2021-03-18 15:58:01 +0100 Stéphane Cerveau + + * ext/vorbis/gstvorbiselement.c: + vorbis: fix debug category init + During the element splitting process, + the debug category initialization has + been dropped accidently. + Part-of: + +2021-03-17 14:26:54 +0100 Stéphane Cerveau + + * gst/audioconvert/gstaudioconvert.c: + audioconvert: update doc for mix-matrix + No need for specific cast in mix-matrix + syntax. + Part-of: + +2021-03-16 17:53:54 +0100 Stéphane Cerveau + + * ext/ogg/gstoggdemux.c: + ogg: element_init returns void + no need to return boolean as it will + be always TRUE. + Part-of: + +2021-03-16 12:59:14 +0100 Stéphane Cerveau + + * gst/playback/gstplaybackelement.c: + * gst/playback/gstplaybackelements.h: + * gst/playback/gstplaybin3.c: + playback: element_init returns void + no need to return boolean as it will + be always TRUE. + Part-of: + +2021-03-16 12:56:53 +0100 Stéphane Cerveau + + * ext/ogg/gstoggaviparse.c: + * ext/ogg/gstoggmux.c: + * ext/ogg/gstoggparse.c: + * ext/ogg/gstogmparse.c: + ogg: element_init returns void + no need to return boolean as it will + be always TRUE. + Part-of: + +2021-03-16 12:55:55 +0100 Stéphane Cerveau + + * ext/alsa/gstalsaelement.c: + * ext/alsa/gstalsaelements.h: + * ext/alsa/gstalsamidisrc.c: + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + alsa: element_init returns void + no need to return boolean as it will + be always TRUE. + Part-of: + +2021-02-11 11:15:10 +0100 Stéphane Cerveau + + * gst/volume/gstvolume.c: + * gst/volume/gstvolume.h: + volume: allow per feature 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: + +2021-02-11 11:14:31 +0100 Stéphane Cerveau + + * gst/videotestsrc/gstvideotestsrc.c: + * gst/videotestsrc/gstvideotestsrc.h: + videotestsrc: allow per feature 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: + +2021-02-11 11:11:25 +0100 Stéphane Cerveau + + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/gstvideoscale.h: + videoscale: allow per feature 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: + +2021-02-11 10:59:42 +0100 Stéphane Cerveau + + * gst/videorate/gstvideorate.c: + * gst/videorate/gstvideorate.h: + videorate: allow per feature 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: + +2021-02-11 10:55:25 +0100 Stéphane Cerveau + + * gst/videoconvert/gstvideoconvert.c: + * gst/videoconvert/gstvideoconvert.h: + videoconvert: allow per feature 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: + +2021-02-11 10:49:48 +0100 Stéphane Cerveau + + * gst/overlaycomposition/gstoverlaycomposition.c: + * gst/overlaycomposition/gstoverlaycomposition.h: + overlaycomposition: allow per feature 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: + +2021-02-11 10:43:14 +0100 Stéphane Cerveau + + * gst/encoding/gstencodebin.c: + * gst/encoding/gstencodebin2.c: + * gst/encoding/gstencodingelements.c: + * gst/encoding/gstencodingelements.h: + * gst/encoding/meson.build: + * gst/encoding/plugin.c: + encoding: allow per feature 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: + +2021-02-11 09:58:59 +0100 Stéphane Cerveau + + * gst/compositor/compositor.c: + * gst/compositor/compositor.h: + compositor: allow per feature 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: + +2021-02-11 09:37:02 +0100 Stéphane Cerveau + + * gst/adder/gstadder.c: + * gst/adder/gstadder.h: + adder: allow per feature 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: + +2021-02-11 09:34:13 +0100 Stéphane Cerveau + + * ext/cdparanoia/gstcdparanoiasrc.c: + * ext/cdparanoia/gstcdparanoiasrc.h: + cdparanoiasrc: allow per feature 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-11 17:54:31 +0100 Stéphane Cerveau + + * gst/audioconvert/gstaudioconvert.c: + * gst/audioconvert/gstaudioconvert.h: + * gst/audioconvert/plugin.c: + audioconvert: allow per feature 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-11 18:47:41 +0100 Stéphane Cerveau + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstclockoverlay.c: + * ext/pango/gstpangoelement.c: + * ext/pango/gstpangoelements.h: + * ext/pango/gstpangoplugin.c: + * ext/pango/gsttextoverlay.c: + * ext/pango/gsttextrender.c: + * ext/pango/gsttimeoverlay.c: + * ext/pango/meson.build: + pango: allow per feature 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-11 18:46:20 +0100 Stéphane Cerveau + + * ext/theora/gsttheora.c: + * ext/theora/gsttheoradec.c: + * ext/theora/gsttheoradec.h: + * ext/theora/gsttheoraenc.c: + * ext/theora/gsttheoraenc.h: + * ext/theora/gsttheoraparse.c: + * ext/theora/gsttheoraparse.h: + theora: allow per feature 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-11 17:56:13 +0100 Stéphane Cerveau + + * ext/vorbis/gstivorbisdec.c: + * ext/vorbis/gstvorbis.c: + * ext/vorbis/gstvorbisdec.c: + * ext/vorbis/gstvorbiselement.c: + * ext/vorbis/gstvorbiselements.h: + * ext/vorbis/gstvorbisenc.c: + * ext/vorbis/gstvorbisparse.c: + * ext/vorbis/gstvorbistag.c: + * ext/vorbis/meson.build: + vorbis: allow per feature 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-11 16:59:50 +0100 Stéphane Cerveau + + * ext/opus/gstopus.c: + * ext/opus/gstopusdec.c: + * ext/opus/gstopuselement.c: + * ext/opus/gstopuselements.h: + * ext/opus/gstopusenc.c: + * ext/opus/meson.build: + opus: allow per feature 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-11 15:42:32 +0100 Stéphane Cerveau + + * ext/gl/caopengllayersink.m: + * ext/gl/gstglalpha.c: + * ext/gl/gstglbumper.c: + * ext/gl/gstglcolorbalance.c: + * ext/gl/gstglcolorconvertelement.c: + * ext/gl/gstglcolorscale.c: + * ext/gl/gstgldeinterlace.c: + * ext/gl/gstgldifferencematte.c: + * ext/gl/gstgldownloadelement.c: + * ext/gl/gstgleffects.c: + * ext/gl/gstglelement.c: + * ext/gl/gstglelements.h: + * ext/gl/gstglfilterapp.c: + * ext/gl/gstglfilterbin.c: + * ext/gl/gstglfiltercube.c: + * ext/gl/gstglfilterglass.c: + * ext/gl/gstglfilterreflectedscreen.c: + * ext/gl/gstglfiltershader.c: + * ext/gl/gstglimagesink.c: + * ext/gl/gstglmixerbin.c: + * ext/gl/gstglmosaic.c: + * ext/gl/gstgloverlay.c: + * ext/gl/gstgloverlaycompositorelement.c: + * ext/gl/gstglsinkbin.c: + * ext/gl/gstglsrcbin.c: + * ext/gl/gstglstereomix.c: + * ext/gl/gstglstereosplit.c: + * ext/gl/gstgltestsrc.c: + * ext/gl/gstgltransformation.c: + * ext/gl/gstgluploadelement.c: + * ext/gl/gstglvideoflip.c: + * ext/gl/gstglvideomixer.c: + * ext/gl/gstglviewconvert.c: + * ext/gl/gstopengl.c: + * ext/gl/meson.build: + gl: allow per feature 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-11 15:12:29 +0100 Stéphane Cerveau + + * gst/gio/gstgio.c: + * gst/gio/gstgiobasesink.c: + * gst/gio/gstgiobasesink.h: + * gst/gio/gstgiobasesrc.c: + * gst/gio/gstgiobasesrc.h: + * gst/gio/gstgioelement.c: + * gst/gio/gstgioelements.h: + * gst/gio/gstgiosink.c: + * gst/gio/gstgiosink.h: + * gst/gio/gstgiosrc.c: + * gst/gio/gstgiosrc.h: + * gst/gio/gstgiostreamsink.c: + * gst/gio/gstgiostreamsink.h: + * gst/gio/gstgiostreamsrc.c: + * gst/gio/gstgiostreamsrc.h: + * gst/gio/meson.build: + gio: allow per feature 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-11 15:02:03 +0100 Stéphane Cerveau + + * gst/app/gstapp.c: + * gst/app/gstappelements.h: + * gst/app/gstappsink.c: + * gst/app/gstappsrc.c: + * gst/app/meson.build: + app: allow per feature 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-11 12:59:32 +0100 Stéphane Cerveau + + * gst/audiomixer/gstaudiointerleave.c: + * gst/audiomixer/gstaudiomixer.c: + * gst/audiomixer/gstaudiomixerelement.c: + * gst/audiomixer/gstaudiomixerelements.h: + * gst/audiomixer/gstaudiomixerplugin.c: + * gst/audiomixer/gstliveadder.c: + * gst/audiomixer/meson.build: + audiomixer: allow per feature 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-11 12:42:03 +0100 Stéphane Cerveau + + * gst/tcp/gstmultifdsink.c: + * gst/tcp/gstmultisocketsink.c: + * gst/tcp/gstsocketsrc.c: + * gst/tcp/gsttcpclientsink.c: + * gst/tcp/gsttcpclientsrc.c: + * gst/tcp/gsttcpelement.c: + * gst/tcp/gsttcpelements.h: + * gst/tcp/gsttcpplugin.c: + * gst/tcp/gsttcpserversink.c: + * gst/tcp/gsttcpserversrc.c: + * gst/tcp/meson.build: + tcp: allow per feature 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 15:14:00 +0100 Stéphane Cerveau + + * gst/rawparse/gstrawaudioparse.c: + * gst/rawparse/gstrawparseelements.h: + * gst/rawparse/gstrawvideoparse.c: + * gst/rawparse/gstunalignedaudioparse.c: + * gst/rawparse/gstunalignedvideoparse.c: + * gst/rawparse/plugin.c: + rawparse: allow per feature 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: + +2021-03-15 15:33:47 +0100 Jan Alexander Steffens (heftig) + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: Consider converting for equal audio formats + The converter might have a non-passthrough mix-matrix. The converter + can determine whether it should pass through, so let it, then remove it + if it's indeed a passthrough. + FIXME: Not converting when we need to but the config is invalid (e.g. + because the mix-matrix is not the right size) produces garbage. An + invalid config should cause a GST_FLOW_NOT_NEGOTIATED. + Part-of: + +2021-03-16 12:27:31 +0100 Jan Alexander Steffens (heftig) + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: Clean up _convert_pad_update_converter + No functional change. + Part-of: + +2021-03-15 19:05:44 +0530 Nirbheek Chauhan + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtspconnection: Consistently translate GIOError to GstRTSPResult + The users of this API need to be able to differentiate between EINTR + and ERROR. For example, in rtspsrc, gst_rtsp_conninfo_connect() + behaves differently when gst_rtsp_connection_connect_with_response_usec() + returns an ERROR or EINTR. The former is an element error while the + latter is simple a GST_ERROR since it was a user cancellation of the + connection attempt. + Due to this, rtspsrc was incorrectly emitting element errors while + going to NULL, which would or would not reach the application in + a racy manner. + Part-of: + +2021-03-03 01:08:25 +0000 Tim-Philipp Müller + + * gst-libs/gst/tag/id3v2frames.c: + tag: id3v2: fix frame size check and potential invalid reads + Check the right variable when checking if there's + enough data left to read the frame size. + Closes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/876 + Part-of: + +2021-02-09 22:09:52 +0100 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * tests/check/libs/rtpbasedepayload.c: + * tests/check/libs/rtpdummyhdrextimpl.c: + rtpbasedepayload: handle caps change partway through buffer list + While preparing a blist for pushing, some RTP header extension may + request caps change for a specific buffer in the list. When this + happens, depayloader should immediately push those buffers from the list + that precede the currently processed buffer (for which the caps change + was requested) and only then apply the new caps to the src pad. + Part-of: + +2021-02-04 17:08:04 +0100 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * gst-libs/gst/rtp/gstrtphdrext.c: + * gst-libs/gst/rtp/gstrtphdrext.h: + rtphdrext: allow updating depayloader src caps + Add overridable method that updates depayloader's src caps based on + the data from RTP header. + Part-of: + +2021-01-12 22:11:46 +0100 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + * gst-libs/gst/rtp/gstrtphdrext.c: + * gst-libs/gst/rtp/gstrtphdrext.h: + rtphdrext: allow the extension to inspect payloader's sink caps + Some header extensions may need to read information from the payloader's + sink caps. Introduce gst_rtp_header_extension_update_from_sinkcaps () + that passes the caps to the extension, which can then use it to update + its internal state. + Part-of: + +2021-02-09 05:16:34 -0800 Devarsh Thakkar + + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + ext: alsa: Set buffer time after period time + This because underlying driver may have constraint on + buffer size to be dependent on period size, so period + time needs to be set first. + For e.g. Xilinx ASoC driver requires + buffer size to be multiple of period size for it's DMA + operation. + alsa-utils also set period time first as seen in below commit : + https://github.com/alsa-project/alsa-utils/commit/9b621eeac4d55c4e881f093be5b163ca07d01b63 + Tested it on zcu106 board with HDMI based record and playback. + Also tested on Intel PC using Logitech C920 Webcam mic and ALC887-VD + Analog for playback. + Part-of: + +2021-03-08 10:45:32 +0100 Stéphane Cerveau + + * gst/playback/gstdecodebin2.c: + * gst/playback/gstdecodebin3.c: + * gst/playback/gstparsebin.c: + * gst/playback/gstplaybackplugin.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstplaysink.c: + * gst/playback/gststreamsynchronizer.c: + * gst/playback/gstsubtitleoverlay.c: + * gst/playback/gsturidecodebin.c: + * gst/playback/gsturidecodebin3.c: + * gst/playback/gsturisourcebin.c: + playback: remove useless ret test + Use GST_ELEMENT_REGISTER_DEFINE_CUSTOM instead + of GST_ELEMENT_REGISTER_DEFINE_WITH_CODE if a specific + init needs to be tested before registering the element. + Part-of: + +2021-03-08 10:44:53 +0100 Stéphane Cerveau + + * ext/ogg/gstoggdemux.c: + ogg: remove useless ret test + Use GST_ELEMENT_REGISTER_DEFINE_CUSTOM instead + of GST_ELEMENT_REGISTER_DEFINE_WITH_CODE if a specific + init needs to be tested before registering the element. + Part-of: + +2021-03-08 10:44:42 +0100 Stéphane Cerveau + + * ext/alsa/gstalsamidisrc.c: + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + alsa: remove useless ret test + Use GST_ELEMENT_REGISTER_DEFINE_CUSTOM instead + of GST_ELEMENT_REGISTER_DEFINE_WITH_CODE if a specific + init needs to be tested before registering the element. + Part-of: + +2021-03-10 14:26:22 +0100 Guillaume Desmottes + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: fix input_buffer ownership + The way pad->priv->input_buffer reference was managed was pretty + spurious: + - it was overridden without unrefing it, which could potentially lead to + leaks. + - we were unreffing it while keeping the pointer around, which could + potentially lead to use-after-free or double-free. + As priv->input_buffer is actually no longer used outside of the + aggregate() method, remove it from pad->priv to simplify the code and + prevent the issues desribed above. + Fix a single buffer leak when shutting down the pipeline as the buffer + returned from gst_aggregator_pad_drop_buffer() was never unreffed. + Part-of: + +2021-03-10 16:22:14 +0100 Guillaume Desmottes + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: fix input buffer when converting + This code path is meant to convert the current buffer to the new format + on update. It was using priv->input_buffer as input which is either + priv->buffer or a converted version of it. + Use priv->buffer instead as priv->input_buffer may no longer be a valid + reference. + Part-of: + +2021-01-22 22:24:24 +0100 david + + * sys/ximage/ximagesink.c: + * sys/xvimage/xvcontext.c: + Set _NET_WM_NAME property for xvimagesink and ximagesink + Part-of: + +2021-03-02 14:16:23 +0800 He Junyan + + * ext/gl/gstgldownloadelement.c: + gl: download: Fix a caps memory leak in _try_export_dmabuf(). + Part-of: + +2021-03-02 13:07:04 +0800 He Junyan + + * ext/gl/gstgldownloadelement.c: + gl: download: Fix a caps memory leak in prepare_output_buffer(). + Part-of: + +2021-03-01 23:33:29 +0800 He Junyan + + * ext/gl/gstgldownloadelement.c: + gl: download: Fix the wrong transformed result from src direction in transform_caps(). + The current manner in transform_caps() for src direction is not very correct. For example, + when the src caps is: + video/x-raw(memory:DMABuf); video/x-raw; video/x-raw(memory:GLMemory) + this function returns: + video/x-raw(memory:DMABuf); video/x-raw; video/x-raw(memory:GLMemory) + as the sink caps. This is not correct, because DMABuf feature is not even in the sink pad's + caps template. The correct answer should be: + video/x-raw(memory:GLMemory); video/x-raw + only. + Part-of: + +2021-03-01 12:23:25 +0100 Alexander Vandenbulcke + + * gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c: + gl/dispmanx: assign render_rect to window before window_resize + If the `render_rect` for a dispmanx display is set after calling + `window_resize` the resize defaults to the dp_width and dp_height to + determine the location of the render rectangle instead of the correct + dimensions that should be set on the window_egl. + Part-of: + +2021-02-18 16:16:33 +0100 Mathieu Duponchelle + + * gst/compositor/compositor.c: + compositor: fix drawing of transparent background + When drawing the background multithreaded, y_start needs to be + scaled to obtain the correct byte offset from which to start + memsetting (yoffset). + Fixes #871 + Part-of: + +2021-02-25 11:03:31 +0100 Kristofer Björkström + + * gst-libs/gst/rtsp/gstrtspconnection.c: + gstrtspconnection: correct data_size when tunneled mode + gst_rtsp_connection_send_messages_usec in tunneled mode does base64 + encode messages. When calculating data_size 1 bytes is added, which + results in ending the base64 with a NULL. + Part-of: + +2021-02-24 13:46:04 +0100 Robert Rosengren + + * gst-libs/gst/audio/audio.c: + * gst-libs/gst/audio/gstaudiobasesink.c: + * gst-libs/gst/audio/gstaudiobasesrc.c: + * gst-libs/gst/audio/gstaudiocdsrc.c: + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + audio: Use GST_BUFFER_PTS instead of deprecated GST_BUFFER_TIMESTAMP + GST_BUFFER_PTS already used in audio code base (e.g. gstaudiodecoder), + so migrate completely from deprecated GST_BUFFER_TIMESTAMP for better + readability, as gstcompat.h defines GST_BUFFER_TIMESTAMP directly to PTS + anyway. + Part-of: + +2021-02-24 19:51:40 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: Log if the sample rate of one sinkpad is not accepted + Otherwise this can silently cause not-negotiated errors without any + direct hint about what went wrong. + Part-of: + +2021-02-23 14:40:02 +0100 Francisco Javier Velázquez-García + + * gst/videotestsrc/videotestsrc.c: + videotestsrc.c: Correct left shift operator + Use the left shift operator '<<' instead of the mistakenly typed less + than operator '<'. + Part-of: + +2021-02-19 16:44:35 +0200 Vivia Nikolaidou + + * gst-libs/gst/video/video-converter.c: + video-converter: Don't upsample/downsample/dither invalid lines + This is a fallout from the conversion to support multiple threads. + convert->upsample_p is never NULL now, it's always an allocated array of + n_threads potentially-null pointers. + Part-of: + +2021-02-22 15:36:53 +0900 Jeongki Kim + + * gst/audioresample/gstaudioresample.c: + audioresample: Respect buffer layout when drain + Part-of: + +2021-02-19 02:27:07 +1100 Jan Schmidt + + * gst/videoconvert/gstvideoconvert.c: + videoconvert: Only prefer upstream chroma-site with same subsampling. + If converting YUV formats with different chroma-subsampling, there's + probably no good reason to prefer the upstream chroma-siting so just use + the default for the output format. + Part-of: + +2021-02-16 01:24:15 +1100 Jan Schmidt + + * gst/videoconvert/gstvideoconvert.c: + videoconvert: Implement more sophisticated colorimetry caps transfer + Implement a more sophisticated transfer of colorimetry and + chroma-site fields to output caps when fixating. + Part-of: + +2021-02-15 18:34:33 +1100 Jan Schmidt + + * gst/videoconvert/gstvideoconvert.c: + videoconvert: Forward colorimetry and chroma-site from upstream. + If downstream has expressed no preference for particular colorimetry + and chroma-site configuration, transfer them from the input caps. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/614 + Part-of: + +2021-01-19 15:56:18 +0100 Stéphane Cerveau + + * gst/playback/gstdecodebin3.c: + decodebin3: change stream selection message owner + In order to select the streams on GST_MESSAGE_STREAM_COLLECTION, + the app needs to send the select-streams event + to the decodebin and not to the parsebin. + The message should be always owned by the decodebin. + Part-of: + +2021-02-17 12:41:06 +0200 Vivia Nikolaidou + + * gst-libs/gst/audio/audio.c: + * tests/check/libs/audio.c: + libs: audio: Handle meta changes in gst_audio_buffer_truncate + Set timestamp and duration to GST_CLOCK_TIME_NONE unless trim==0, + because that function doesn't know the rate and therefore can't + calculate them. Set offset and offset_end to appropriate values. Make it + clear in the documentation that the caller is responsible for setting + the timestamp and duration. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/869 + Part-of: + +2021-02-15 16:05:30 +0000 Tim-Philipp Müller + + * gst/playback/gsturidecodebin3.c: + uridecodebin3: make caps property work + The caps set on uridecodebin3 via the "caps" property + were never passed to the internal decodebin3, so did + absolutely nothing. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/837 + Part-of: + +2021-02-13 00:27:04 +0100 Alicia Boya García + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Fix racy critical when pool negotiation occurs during flush + I found a rather reproducible race in a WebKit LayoutTest when a player + was intantiated and a VP8/9 video was loaded, then torn down after + getting the video dimensions from the caps. + The crash occurs during the handling of the first frame by gstvpxdec. + The following actions happen sequentially leading to a crash. + (MT=Main Thread, ST=Streaming Thread) + MT: Sets pipeline state to NULL, which deactivates vpxdec's srcpad, + which in turn sets its FLUSHING flag. + ST: gst_vpx_dec_handle_frame() -- which is still running -- calls + gst_video_decoder_allocate_output_frame(); this in turn calls + gst_video_decoder_negotiate_unlocked() which fails because the + srcpad is FLUSHING. As a direct consequence of the negotiation + failure, a pool is NOT set. + gst_video_decoder_negotiate_unlocked() still assumes there is a + pool, crashing in a critical in gst_buffer_pool_acquire_buffer() + a couple statements later. + This patch fixes the bug by returning != GST_FLOW_OK when the + negotiation fails. If the srcpad is FLUSHING, GST_FLOW_FLUSHING is + returned, otherwise GST_FLOW_ERROR is used. + Part-of: + +2021-02-15 17:22:47 +0100 Jan Alexander Steffens (heftig) + + * gst-libs/gst/audio/audio.c: + libs: audio: Fix gst_audio_buffer_truncate meta handling + In the non-interleaved case, it made `buffer` writable but then changed + the meta of the non-writable buffer. + Part-of: + +2021-02-13 21:25:18 +0000 Alejandro González + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: Fix gst_audio_encoder_get_audio_info return ownership GTK-Doc + GTK-Doc specifies that, by default, the caller owns returned objects, so that the caller should free them when it is done. However, in the case of this function, the returned GstAudioInfo is owned by the decoder, so this default choice is incorrect. This creates double free problems when using GStreamer Rust bindings, because they are generated using the information contained in the docs. + Fix this by correctly specifying that the caller does not own the returned object. + Part-of: + +2021-02-13 17:24:37 +0000 Alejandro González + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Fix gst_audio_decoder_get_audio_info return ownership GTK-Doc + GTK-Doc specifies that, by default, the caller owns returned objects, so that the caller should free it when it is done. However, in the case of this function, the returned GstAudioInfo is owned by the decoder, so this default choice is incorrect. This creates double free problems when using GStreamer Rust bindings, because they are generated using the information contained in the docs. + Fix this by correctly specifying that the caller does not own the returned object. + Part-of: + +2021-01-08 08:39:32 -0300 Thibault Saunier + + * gst-libs/gst/pbutils/encoding-profile.c: + encoding-profile: Plug a leak of factory list + Part-of: + +2020-11-20 18:35:49 -0300 Thibault Saunier + + * gst-libs/gst/pbutils/encoding-profile.c: + * gst-libs/gst/pbutils/encoding-profile.h: + * gst/encoding/gstencodebasebin.c: + * tests/validate/encodebin/set-encoder-properties.validatetest: + * tests/validate/meson.build: + encodebin: Add APIs to set element properties on encoding profiles + User often want to set encoder properties on encoding profiles, + this introduces a way to easily 'preset' properties when defining the + profile. This uses GstStructure to define those properties the same + way it is done in `splitmux` for example as it makes simple to handle. + This also defines a more complex structure type where we can map a set + of properties to set depending on the muxer/encoder factory that has + been picked by EncodeBin so it is quite flexible. + Part-of: + +2020-11-20 18:35:49 -0300 Thibault Saunier + + * gst-libs/gst/pbutils/encoding-profile.c: + encoding-profile: Cleanup profile serialization documentation + Part-of: + +2021-01-08 11:51:36 +0100 Alexander Vandenbulcke + + * gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c: + gl/dispmanx: fix deadlock triggered by `set_render_rectangle` + When the gstglimagesink is started with the option `glimagesink + render-rectangle="<0,0,1920,1080>"`, the pipeline reaches a deadlock. + The reason the deadlock occurs is that the + `gst_gl_window_set_render_rectangle` takes locks on the window, in + addition it calls `window_class->set_render_rectangle(...)` which + executes the `_on_resize` function. Since the `_on_resize` function also + takes locks on the window the deadlock is achieved. + By scheduling the adjustment of the render rectangle through an async + message for `gst_gl_window_dispmanx_set_render_rectangle`, the actual + resize happens in another context and therefore doesn't suffers from the + lock taken in `gst_gl_window_set_render_rectangle`. + This solution follows the same approach as gl/wayland. The problem was + introduced by b887db1. For the full discussion check #849. + Part-of: + +2021-02-04 18:51:27 +0200 Vivia Nikolaidou + + * tests/check/elements/videoconvert.c: + * tests/check/elements/videoscale.c: + videoconvert,videoscale: Add alternate-field negotiation tests + Make sure buffers with alternate-field interlacing mode can be + negotiated + Part-of: + +2021-02-04 18:22:15 +0200 Vivia Nikolaidou + + * gst/videoscale/gstvideoscale.c: + videoscale: Support for alternate-field interlacing + Accept the negotiation, video-converter.c is aware of the half-height + already + Part-of: + +2021-02-02 20:33:27 +0200 Vivia Nikolaidou + + * gst-libs/gst/video/video-converter.c: + * gst/videoconvert/gstvideoconvert.c: + videoconvert: Support for alternate-field interlacing + Treat the data just like normal data with half the height. Also treat it + as progressive when converting from/to I420 because it requires + different handling for chroma subsampling. + Part-of: + +2018-04-05 11:59:52 +0200 Havard Graff + + * gst-libs/gst/audio/gstaudiometa.c: + * gst-libs/gst/audio/gstaudiometa.h: + audio: add GstAudioLevelMeta + Will be used to implement RTP extension https://tools.ietf.org/html/rfc6464 + Co-authored-by: Guillaume Desmottes + Part-of: + +2021-01-26 09:37:44 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: add auto-header-extension property + Same property as the one I just added on rtpbasepayload. + Part-of: + +2021-01-26 09:37:44 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtpbasepayload: add auto-header-extension property + Using RTP header extensions is currently not convenient. Users have to + handle signals from the RTP payloader and instantiate the extension + element themselves, making it impossible to use with gst-launch. + Adding a property allowing the payloader to automatically try creating + extensions. This should help simple use cases and testing using + gst-launch. + Part-of: + +2021-01-19 10:23:12 +0200 Sebastian Dröge + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: Consider the number and types of atoms found in a row for suggesting a probability + If there are 3 or more known atoms in a row, it's likely that this is + actually MOV/MP4 even if we don't find any other known atoms. If 5 or + more are found then this is most certainly MOV/MP4 and we can return. + Also if a moov and mdat atom is found, this is definitely a MOV/MP4 file + and can be used as such, independent of anything else following the + mdat. + Fixes typefinding of various MOV files that have no `ftyp` atom but + otherwise a valid file structure followed by some garbage. + Part-of: + +2021-01-29 21:40:33 +0100 Marijn Suijten + + * gst-libs/gst/audio/gstaudiostreamalign.c: + * gst-libs/gst/audio/gstaudiostreamalign.h: + gstaudiostreamalign: Pass self as const pointer in getter functions + It was noticed in [1] that `GstAudioStreamAlign` is a simple boxed type + that is passed as const in the copy function, but not as such in the + getters. These functions turn out to be the only users of `const = true` + overrides in `gstreamer-rs`. Since there is no locking or other advanced + caching/sharing going on (as happens with miniobjects) these functions + can safely take self as const pointer. + [1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/683#note_783129 + Part-of: + +2020-04-27 20:52:34 +0200 Jakub Adam + + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-hdr.h: + video-hdr: Add API to check content light level equality + Part-of: + +2021-01-26 10:39:34 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * tests/check/libs/rtpbasedepayload.c: + rtpbasedepayload: set attributes on newly requested extensions + Users were supposed to configure the extension themselves but it was + impossible to do so as they didn't have access to the caps. + Fix #864 + Part-of: + +2021-01-26 10:39:34 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + * tests/check/libs/rtpbasepayload.c: + * tests/check/libs/rtpdummyhdrextimpl.c: + rtpbasepayload: set attributes on newly requested extensions + Users were supposed to configure the extension themselves but it was + impossible to do so as they didn't have access to the caps. + Part-of: + +2021-01-25 14:25:45 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: fix clear-extensions signal definition + Typo as we were using the wrong enum. + Part-of: + +2021-01-26 14:05:48 +0100 Knobe, Daniel + + * tests/examples/overlay/meson.build: + overlay/example: added qt core dependency for qt overlay example + Part-of: + +2021-01-25 14:25:45 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtp: fix clear-extensions signal definition + Typo as we were using the wrong enum. + Part-of: + +2021-01-22 10:10:05 +0100 Guillaume Desmottes + + * gst-libs/gst/rtp/gstrtphdrext.c: + rtphdrext: fix typo in doc + Part-of: + +2021-01-22 14:02:29 +1100 Matthew Waters + + * tests/examples/gl/generic/recordgraphic/main.cpp: + gl/examples: fix recordgraphic example + Not ported to proper modern OpenGL though but that is the case for a lot + of the GL examples. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/859 + Part-of: + +2021-01-04 23:25:10 +0100 Marijn Suijten + + * ext/gl/gltestsrc.c: + * ext/gl/gltestsrc.h: + * ext/gl/gstglimagesink.c: + * gst-libs/gst/gl/egl/gsteglimage.c: + * gst-libs/gst/gl/egl/gsteglimage.h: + * gst-libs/gst/gl/egl/gsteglimage_private.h: + * gst-libs/gst/gl/gstglbasememory.c: + * gst-libs/gst/gl/gstglbasememory.h: + * gst-libs/gst/gl/gstglbuffer.c: + * gst-libs/gst/gl/gstglbuffer.h: + * gst-libs/gst/gl/gstglbufferpool.c: + * gst-libs/gst/gl/gstglbufferpool.h: + * gst-libs/gst/gl/gstglcolorconvert.c: + * gst-libs/gst/gl/gstglformat.c: + * gst-libs/gst/gl/gstglformat.h: + * gst-libs/gst/gl/gstglmemory.c: + * gst-libs/gst/gl/gstglmemory.h: + * gst-libs/gst/gl/gstglmemorypbo.c: + * gst-libs/gst/gl/gstglrenderbuffer.c: + * gst-libs/gst/gl/gstglrenderbuffer.h: + * gst-libs/gst/gl/gstglutils.c: + * gst-libs/gst/gl/gstglutils.h: + * gst-libs/gst/gl/gstglviewconvert.c: + * gst-libs/gst/pbutils/gstaudiovisualizer.c: + * gst-libs/gst/video/gstvideopool.c: + * gst-libs/gst/video/gstvideopool.h: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-frame.c: + * gst-libs/gst/video/video-frame.h: + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-info.h: + * gst-libs/gst/video/video-overlay-composition.c: + * gst/compositor/compositor.c: + * gst/videoscale/gstvideoscale.c: + * sys/xvimage/xvcontext.c: + * sys/xvimage/xvcontext.h: + * tests/check/libs/gstglmemory.c: + gl,video: Make ptrs to VideoInfo and (GL)AllocationParams immutable + These parameters are incorrectly regarded as mutable in G-IR making them + "incompatible" with languages that are explicit about mutability like + Rust. In order to clean up the code and expected API there, update the + signatures here, right at the source (instead of overriding them in + Gir.toml and hoping for the best). + Part-of: + +2021-01-14 10:09:40 +0100 Marijn Suijten + + * gst-libs/gst/audio/audio-buffer.c: + audio/audio-buffer: @buffer in audio_buffer_map is out caller-allocates + Part-of: + +2021-01-13 11:07:47 +0100 Marijn Suijten + + * gst-libs/gst/video/video-frame.c: + video/video-frame: @frame in video_frame_map is out caller-allocates + Part-of: + +2021-01-12 10:34:41 +0100 Marijn Suijten + + * gst-libs/gst/audio/audio-info.c: + * gst-libs/gst/video/video-info.c: + audio,video: Add `out caller-allocates` to init and from_caps + Part-of: + +2021-01-11 12:25:33 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideosink.c: + * gst-libs/gst/video/gstvideosink.h: + videosink: Add new GstVideoSink::set_info() virtual method + Part-of: + +2020-12-26 14:16:34 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideosink.c: + videosink: Implement more complete BaseSink::get_times() based on the framerate + This will only make use of the framerate if the subclass is chaining up + BaseSink::set_caps(). Otherwise it will have the same behaviour as the + basesink default. + Doing so is useful if video buffers don't contain a duration to + calculate a default duration, and various video sinks already implement + a custom version of this. + Part-of: + +2021-01-12 10:36:34 +0100 Marijn Suijten + + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-info.h: + video: Convert info_to_caps to take self as const ptr + This requires a slight modification to the function itself because it + was overwriting a member locally. + However, now this side-effect cannot be observed outside the function + anymore. + Part-of: + +2021-01-06 11:16:18 +1100 Matthew Waters + + * gst-libs/gst/gl/egl/gstglmemoryegl.c: + * gst-libs/gst/gl/egl/gstglmemoryegl.h: + * gst-libs/gst/gl/gstglbuffer.c: + * gst-libs/gst/gl/gstglbuffer.h: + * gst-libs/gst/gl/gstglmemory.c: + * gst-libs/gst/gl/gstglmemory.h: + * gst-libs/gst/gl/gstglmemorypbo.c: + * gst-libs/gst/gl/gstglmemorypbo.h: + * gst-libs/gst/gl/gstglrenderbuffer.c: + * gst-libs/gst/gl/gstglrenderbuffer.h: + gl: add get_type() implementations for all of our memory types + Otherwise, various bindings can't really know the type of an object as + required. + Part-of: + +2021-01-12 22:08:14 +0100 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtpbasepayload: fix header extension length calculation + Since ternary operator has the lowest precedence in the expressions at + hand, wordlen would always incorrectly yield 0 or 1. + Part-of: + +2021-01-07 16:27:25 -0300 Thibault Saunier + + * gst/gio/gstgiosrc.c: + giosrc: Ensure that an error is posted when underlying file is deleted + Part-of: + +2020-07-14 20:44:18 +0200 Jakub Adam + + * gst-libs/gst/video/video-blend.c: + video-blend: fix blending 8-bit and 16-bit frames together + Replace hardcoded 255s with the correct max value for the given color + depth. Use 64-bit integer in calculations where overflow may occur. + Part-of: + +2020-12-07 11:23:49 -0300 Thibault Saunier + + * gst/encoding/gstencodebasebin.c: + encodebasebin: Ensure that parsers are compatible with selected encoders + See https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/845 + Part-of: + +2021-01-05 20:18:24 +1100 Matthew Waters + + * gst-libs/gst/gl/gstgl_enums.h: + * gst-libs/gst/gl/gstglmemory.c: + * gst-libs/gst/gl/gstglutils.c: + gl: document some GL caps specifics + Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/854 + Part-of: + +2021-01-04 13:40:20 +0000 Tim-Philipp Müller + + * gst-libs/gst/tag/gsttagdemux.c: + tagdemux: resize and trim buffer in place to fix interaction with oggdemux + Elements operating in pull mode may optionally pass a buffer to + pull_range that should be filled with the data. The only element + that does that at the moment is oggdemux operating in pull mode. + tagdemux currently creates a sub-buffer whenever a buffer pulled + from upstream (filesrc, usually) needs to be trimmed. This creates + a new buffer, however, so disregards any passed-in buffer from a + downstream oggdemux. + This would cause assertion failures and playback problems for + ogg files that contain ID3 tags at the end. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/848 + Part-of: + +2020-12-31 17:25:40 +0100 Mathieu Duponchelle + + * gst-libs/gst/app/gstappsrc.c: + appsrc: fix signal documentation + Part-of: + +2020-12-30 14:56:54 +0100 Edward Hervey + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: Pop out old buffers on timeout + This situation happens in the situation where an input stream has a framerate + exceeding the timeout latency (Ex: 1fps with a latency of 500ms) and an input + stream greater than output framerate (ex: 60fps in, 30 fps out). + The problem that would happen is that we would timeout, but then buffers from + the fast input stream would only be popped out one by one.... until a buffer + reaches the low-framerate input stream at which point they would quickly be + popped out/used. The resulting output would be "slow ... fast ... slow ... fast" + of that input fast stream. + In order to avoid this situation, whenever we detect a late buffer, check if + there's a next one and re-check with that one. + Part-of: + +2020-12-29 23:44:42 +0100 Mathieu Duponchelle + + * gst/compositor/blend.c: + compositor/blend.c: fix MT checker pattern + When filling the checker pattern from multiple threads, y_start + needs to be taken into account to determine the shade of the + current pixel. + Example pipeline: + gst-launch-1.0 videotestsrc ! video/x-raw, width=1920, height=1080, format=I420 ! \ + queue ! compositor sink_0::xpos=200 ! video/x-raw, format=I420 ! videoconvert ! \ + xvimagesink + Part-of: + +2020-12-29 23:42:08 +0100 Mathieu Duponchelle + + * gst/compositor/blend.c: + compositor/blend.c: fix MT fill_checker for YUY2 + The initial byte offset should be calculated from the stride, + not from the dest_add variable + Example pipeline: + gst-launch-1.0 videotestsrc ! video/x-raw, width=1920, height=1080, format=YUY2 ! \ + queue ! compositor sink_0::xpos=200 ! video/x-raw, format=YUY2 ! xvimagesink + Part-of: + +2020-12-29 20:24:51 +0100 Mathieu Duponchelle + + * gst/compositor/blend.c: + compositor/blend: fix blending of subsampled components + The correct way to determine the byte offset at a certain yoffset + in a subsampled component is to shift the yoffset by the component's + hsub + This fixes out-of-bounds memory accesses and visible artefacts, + example pipeline with the samples from #802: + gst-launch-1.0 compositor name=vmixer sink_1::xpos=1910 sink_1::ypos=1080 ! \ + videoconvert ! videorate ! xvimagesink \ + filesrc location=VID_20200723_203606.mp4 ! decodebin name=demux1 ! \ + queue ! videoflip method=vertical-flip ! vmixer. \ + filesrc location=bridgeoverstubbledwater.mp4 ! decodebin name=demux2 ! \ + queue ! vmixer. + Part-of: + +2020-12-24 11:44:27 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin3.c: + decodebin3: When reconfiguring a slot make sure that the ghostpad is unlinked + This was only taken care of previously if there was a decoder before. + However if previously a decoder was not needed then the ghostpad + would've been linked directly to the slot's srcpad. + Reconfiguring the slot requires this to be undone so that linking can + happen normally. + Part-of: + +2020-12-20 22:35:45 +0900 Seungha Yang + + * tests/examples/overlay/meson.build: + * tests/examples/overlay/win32-videooverlay-playbin.c: + examples: overlay: Add an example for Win32 window handle with playbin + Demonstrate video overlay handling on Windows when playbin is in use + Part-of: + +2020-12-15 22:05:11 +0100 Stéphane Cerveau + + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-hdr.h: + hdr: update doc + update GST_VIDEO_HDR10_PLUS_MAX_ROWS_MD_APL and + GST_VIDEO_HDR10_PLUS_MAX_COLS_MD_APL + Part-of: + +2020-07-03 12:06:14 +0200 Stéphane Cerveau + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Forward hdr-format info downstream + By default the hdr-format detected by a parser should + be passed to the downstream element. + Part-of: + +2020-05-08 11:06:42 +0200 Stéphane Cerveau + + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-hdr.h: + video-hdr: add hdr formats + Provide enum and helper method to set the hdr format + name in caps by example. + Part-of: + +2020-10-19 15:36:58 +0200 Stéphane Cerveau + + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-hdr.h: + video-hdr: introduce HDR10+ parser + Video can now parse a HDR10+ data structure + coming from a SEI message. + Part-of: + +2020-01-27 10:12:05 +0100 Stéphane Cerveau + + * gst-libs/gst/video/video-hdr.c: + * gst-libs/gst/video/video-hdr.h: + video-hdr: add HDR10+ structure + Provides structure and GstVideoMeta + Part-of: + +2020-12-15 15:07:31 +0200 Sebastian Dröge + + * gst/audiorate/gstaudiorate.c: + audiorate: Make buffer writable before changing its metadata + Part-of: + +2020-12-14 07:42:55 +0100 Fabrice Fontaine + + * gst-libs/gst/video/gstvideoaggregator.c: + gst-libs/gst/video/gstvideoaggregator.c: fix build with gcc 4.8 + Fix the following build failure with gcc 4.8 which has been added with + https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/commit/d268c193ad39fb970351ed62898be806ebd0a71e: + ../gst-libs/gst/video/gstvideoaggregator.c: In function 'gst_video_aggregator_init': + ../gst-libs/gst/video/gstvideoaggregator.c:2762:3: error: 'for' loop initial declarations are only allowed in C99 mode + for (gint i = 0; i < gst_caps_get_size (src_template); i++) { + ^ + Signed-off-by: Fabrice Fontaine + Part-of: + +2020-12-10 19:06:00 +0200 Jordan Petridis + + * ext/libvisual/plugin.c: + libvisual: workaround clang warning + libvisual api expects a priv data pointer to be passed, though we know its + going to be `GstDebugLevel`. + ``` + ../subprojects/gst-plugins-base/ext/libvisual/plugin.c:33:39: error: cast to smaller integer type 'GstDebugLevel' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast] + GST_CAT_LEVEL_LOG (libvisual_debug, (GstDebugLevel) (priv), NULL, "%s - %s", + ``` + Part-of: + +2020-12-11 10:13:59 +0100 Edward Hervey + + * gst/playback/gstdecodebin3-parse.c: + decodebin3: Release selection lock when pushing EOS + We can't keep the lock otherwise this would lock other actions. In order to keep + it safe, we grab a list of peer pads to send EOS to with the lock taken, then + send to the peer pads with the lock released. + Also make sure the selection lock is taken for another call to this function + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/847 + Part-of: + +2020-12-11 11:40:22 +0100 Edward Hervey + + * gst/typefind/gsttypefindfunctions.c: + * gst/typefind/gsttypefindfunctionsplugin.c: + * gst/typefind/gsttypefindfunctionsplugin.h: + * gst/typefind/gsttypefindfunctionsstartwith.c: + typefind: Fix debug category usage + Only register it in one place and use it everywhere from the header. Also make + sure it doesn't clash with the debug category from core. + Part-of: + +2020-12-04 16:55:53 +0100 Stéphane Cerveau + + * gst/typefind/gsttypefindfunctions.c: + * gst/typefind/gsttypefindfunctionsdata.c: + * gst/typefind/gsttypefindfunctionsdata.h: + * gst/typefind/gsttypefindfunctionsplugin.c: + * gst/typefind/gsttypefindfunctionsplugin.h: + * gst/typefind/gsttypefindfunctionsriff.c: + * gst/typefind/gsttypefindfunctionsstartwith.c: + * gst/typefind/meson.build: + typefindfunctions: allow per features registration + Split plugin into features including + typefind functions 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 13:34:15 +0100 Stéphane Cerveau + + * gst/pbtypes/gstpbtypes.c: + * gst/pbtypes/gstpbtypes.h: + pbtypes: 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-11-30 11:00:30 +0100 Stéphane Cerveau + + * gst/subparse/gstssaparse.c: + * gst/subparse/gstsubparse.c: + * gst/subparse/gstsubparse.h: + * gst/subparse/gstsubparseelement.c: + * gst/subparse/gstsubparseelements.h: + * gst/subparse/gstsubparseplugin.c: + * gst/subparse/meson.build: + subparse: allow per feature registration + Split plugin into features including + elements and device providers which + can be indiviually registered during + a static build. + More details here: + i + https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199 + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661 + Part-of: + +2020-08-11 11:47:02 -0400 Julian Bouzas + + * ext/ogg/gstoggaviparse.c: + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggdemux.h: + * ext/ogg/gstoggelements.h: + * ext/ogg/gstoggmux.c: + * ext/ogg/gstoggparse.c: + * ext/ogg/gstoggplugin.c: + * ext/ogg/gstogmparse.c: + * ext/ogg/meson.build: + ogg: allow per feature registration + Split plugin into features including + elements and device providers 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-10-22 11:07:26 +0200 Stéphane Cerveau + + * gst/playback/gstdecodebin2.c: + * gst/playback/gstdecodebin3.c: + * gst/playback/gstparsebin.c: + * gst/playback/gstplaybackelement.c: + * gst/playback/gstplaybackelements.h: + * gst/playback/gstplaybackplugin.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstplaybin3.c: + * gst/playback/gstplaysink.c: + * gst/playback/gstplaysink.h: + * gst/playback/gststreamsynchronizer.c: + * gst/playback/gststreamsynchronizer.h: + * gst/playback/gstsubtitleoverlay.c: + * gst/playback/gstsubtitleoverlay.h: + * gst/playback/gsturidecodebin.c: + * gst/playback/gsturidecodebin3.c: + * gst/playback/gsturisourcebin.c: + * gst/playback/meson.build: + playback: allow per feature registration + Split plugin into features including + elements and device providers 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-10-16 14:35:04 +0200 Stéphane Cerveau + + * ext/alsa/gstalsaelement.c: + * ext/alsa/gstalsaelements.h: + * ext/alsa/gstalsamidisrc.c: + * ext/alsa/gstalsaplugin.c: + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + * ext/alsa/meson.build: + alsa: allow per feature registration + Split plugin into features including + elements and device providers 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-09 10:40:40 -0300 Thibault Saunier + + * tests/validate/giosrc/read-growing-file.validatetest: + tests: Fix races in the read-growing-file test + First: the buffer is pushed on the encoding filesink only *after* the + checkpoints, leading to wrong ordering in expectations. + The second one is about EOS being posted on the bus *before* the + stop action is executed, leading to the action never being executed. + That action was plain useless as the default behavior of validate + scenario is to internally create a "stop" action on EOS (unless + disabled by user). + Part-of: + +2020-11-19 19:17:18 -0300 Thibault Saunier + + * docs/plugins/gst_plugins_cache.json: + * gst/gio/gstgio.h: + * gst/gio/gstgiobasesrc.c: + * gst/gio/gstgiobasesrc.h: + * gst/gio/gstgiosrc.c: + * gst/gio/gstgiosrc.h: + * tests/validate/giosrc/read-growing-file.validatetest: + * tests/validate/giosrc/read-growing-file/flow-expectations/log-filesink-sink-expected: + * tests/validate/giosrc/read-growing-file/flow-expectations/log-growing-file-sink-sink-expected: + * tests/validate/meson.build: + giosrc: Add support for growing source files + Add a way for applications to specify that the underlying file is + growing which implies that the source won't EOS when reaching the end + of the file but instead start monitoring it and start reading it again + whenever a change is detected. + Also add a validate test to check the behavior + Part-of: + +2020-11-26 04:04:48 +0900 Seungha Yang + + * gst-libs/gst/video/gstvideoaggregator.c: + * gst-libs/gst/video/gstvideoencoder.c: + * gst-libs/gst/video/video-info.c: + video: Make use of gst_video_chroma_site_{from,to}_string() API + Replace deprecated gst_video_chroma_{from,to}_string() + to newly added gst_video_chroma_site_{from,to}_string() + Part-of: + +2020-11-10 18:01:12 +0900 Seungha Yang + + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-chroma.h: + * tests/check/libs/video.c: + video-chroma: Add support for any combination of chroma-site flags + We've been allowing only a few known chroma-site values such as + jpeg (not co-sited), mpeg2 (horizontally co-sited) and + dv (co-sited on alternate lines). That's insufficient for + representing all possible chroma-site values. By this commit, + we can represent any combination of chroma-site flags. + But, an exception here is that any combination with + GST_VIDEO_CHROMA_SITE_NONE will be considered as invalid value. + For any combination of chroma-site flags, + gst_video_chroma_to_string() method is deprecated in order to + return newly allocated string via a new gst_video_chroma_site_to_string() + method. And for consistent API naming, gst_video_chroma_from_string() + is also deprecated. Newly written code should use + gst_video_chroma_site_from_string() instead. + Part-of: + +2020-11-30 21:38:08 +0100 Jakub Adam + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + * gst-libs/gst/rtp/gstrtpbasepayload.h: + rtpbasepayload: pass optional caps fields in a GstStructure + For more flexibility, allow to pass the extra output caps fields as + a GstStructure. + Part-of: + +2019-12-05 20:08:36 +0700 Ratchanan Srirattanamet + + * gst-libs/gst/audio/gstaudiobasesrc.c: + audiobasesrc: always acquire if not acquired in _setcaps + audiobasesrc's setcaps contains an optimization that makes it not re- + acquire the ringbuffer if the caps have not changed. However, it doesn't + check if it has successfully acquired it or not. It's possible to have + the caps set but not having ringbuffer acquired if the previous attempt + to acquire fails. + This commit replaces the caps existence check with whether the + ringbuffer is acquired or not. There's no need to check for caps + existence because 1.) it's unlikely to be NULL if the ringbuffer is + acquired, and 2.) _setcaps shouldn't be called with a NULL caps. + This should also let the element retry on acquiring ringbuffer after an + error by re-setting the element's state to READY and back to PLAYING. + Whether this behavior is correct is up for debate. + Part-of: + +2020-11-06 14:05:39 +0800 He Junyan + + * ext/gl/gstglimagesink.c: + glimagesink: Avoid assert in query. + The sink_query just uses context, other_context and display to query info. + But all these objects can be changed or distroyed in state_change() func + and other places. + This patch is not very perfect. The condition race still exists in other + places in this element. All the functions directly access these objects + without protection. Most of them are executed when the data is pushing and + draw context/window have already been established, so they should not have + problems. But the sink_query and propose_allocation functions are the query + -like functions and executed in query context, which can be called in any + state of the element. So it can cause some crash issues because of destroyed + context object. + Part-of: + +2020-11-06 16:18:14 +0800 He Junyan + + * ext/gl/gstglcolorconvertelement.c: + glcolorconver: Return empty caps in transform_caps if fails. + We should not return a NULL in transform_caps() function. The NULL + will generate a assert of: + "transform_caps returned caps which are not a real subset of the + filter caps" + in transform base class. + Part-of: + +2020-11-06 15:36:01 +0800 He Junyan + + * gst-libs/gst/gl/gstglbasefilter.c: + glbasefilter: Need to check the display before lock it. + In find_gl_context_unlocked(), the display of filter may be NULL + and can cause crash if we directly access and lock it. + Part-of: + +2020-11-06 15:36:21 +0800 He Junyan + + * gst-libs/gst/gl/gstglbasefilter.c: + glbasefilter: Delete the un-paired unlock in change_state(). + Part-of: + +2020-12-03 06:50:07 -0500 Arun Raghavan + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: Fix incorrect GST_LOG_OBJECT usage + GstBuffer is not a GstObject, so this causes a warning to be emitted. + Part-of: + +2020-07-10 15:33:46 +1000 Matthew Waters + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + * tests/check/libs/rtpbasepayload.c: + rtp/basepayload: implement support for rtp header extensions + New signals are added for managing the internal list of rtp header + extension implementations read by a specific depayloader instance. + If the 'extmap-$NUM' field is present in the src caps, then an + extension implementation will be requested but is not required to be able + to negotiate correctly. An extension will be requested using the + 'request-extension' signal if none could be found internally. + Part-of: + +2020-07-10 15:30:57 +1000 Matthew Waters + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * tests/check/libs/rtpbasedepayload.c: + rtp/basedepayload: implement support for rtp header extensions + New signals are added for managing the internal list of rtp header + extension implementations read by a specific depayloader instance. + If the 'extmap-$NUM' field is present in the sink caps, then an + extension implementation will be requested but is not requited to be + able to negotiate correctly. An extension will be requested using the + 'request-extension' signal if none could be found internally. + Part-of: + +2020-07-10 15:14:09 +1000 Matthew Waters + + * gst-libs/gst/rtp/gstrtphdrext.c: + * gst-libs/gst/rtp/gstrtphdrext.h: + * tests/check/libs/rtpdummyhdrextimpl.c: + * tests/check/libs/rtphdrext.c: + * tests/check/meson.build: + rtp: add base object for reading/writing rtp header extensions (RFC5285) + Facilitates the creation of rtp header extension implementations that + can be reused across applications. + Implementations are registered into the GStreamer registry as elements + (idea from GstRTSPExtension) and can be retrieved by URI or filtered + manually. RTP header extensions must have the classification + "Network/Extension/RTPHeader" to be considered as a RTP Header + extension. + Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/777 + Part-of: + +2020-11-26 14:52:26 +0200 Mart Raudsepp + + * gst-libs/gst/gl/eagl/gstglwindow_eagl.m: + gl/eagl: Fix automatic resize behaviour + https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/681 + added a layoutSubViews, which never gets called, because it should have been + called layoutSubviews (non-capital "v"). However after fixing that, it still + doesn't work correctly, because window_width/height values are immediately + updated and then draw_cb will never trigger the resize path, because the + values are already up to date. + Update the values inside the resize path again instead, so the check for + entering the resize path is logically always correct. + This makes the layoutSubviews unnecessary, as it only updated the internal + size values prematurely, so it is deleted instead of method naming fixed. + These changes were originally done to avoid accessing UIKit objects on the + main thread, but no additional accesses are added here, only internal + private variable assignments under the same draw_lock, so there should be + no threading issues reintroduced. + Part-of: + +2020-11-26 14:45:05 +0200 Mart Raudsepp + + * gst-libs/gst/gl/eagl/gstglwindow_eagl.m: + gl/eagl: Fix resize condition check in draw_cb to not get called unnecessarily + A CGSize contains CGFloat values (a typedef to double or float), which means + that the values aren't equal, despite it being equal after they are cast to + int by assigning them to window_height/width private members. This leads to + excessive gst_gl_window_resize calls on each frame, at least if the CGFloat + value has a .5 decimal value, e.g. 103.5. + Fix it by storing them as CGFloat instead of gint. + Part-of: + +2020-11-20 16:51:09 +1100 Matthew Waters + + * gst-libs/gst/video/video-converter.c: + video/converter: increase the number of cache lines for resampling + The exising hardcoded max default does not account for the possible + -1 offset when retrieving lines for resampling. As a result, when + another chain has the same number of cache lines (4), the resample + operation would be attempting to generate 5 lines with a cache size + of 4 and would overwrite the first cache line. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/821 + Part-of: + +2020-12-01 13:13:40 +0200 Sebastian Dröge + + * gst/compositor/compositor.c: + compositor: Don't crash in prepare_frame() if the pad was just removed + Part-of: + +2020-12-01 09:31:48 +0100 Guillaume Desmottes + + * gst-libs/gst/video/gstvideometa.c: + videometa: gir annotate the size of plane array in new API + Fix #838 + Part-of: + +2020-11-19 19:06:12 -0300 Thibault Saunier + + * gst/encoding/gstencodebasebin.c: + encodebin: Enhance algorithm to check if profiles can be plugged to muxer + In particular muxing sinks have specific set of sinkpads and we need + to handle that. + +2020-11-19 19:03:29 -0300 Thibault Saunier + + * gst/encoding/gstencodebasebin.c: + encodebin: Ignore element classification when a muxer name specified + Instead of going through the list of known muxers go ahead and + instantiate the muxer specified as 'preset name' as this specifies + the exact element factory name to use. + +2020-11-13 16:32:45 -0300 Thibault Saunier + + * gst-libs/gst/pbutils/encoding-profile.c: + pbutils: Add support for muxing sinks usage in encoding profiles + +2020-11-13 16:32:45 -0300 Thibault Saunier + + * docs/plugins/gst_plugins_cache.json: + * gst/encoding/gstencodebasebin.c: + * gst/encoding/gstencodebasebin.h: + * gst/encoding/gstencodebin2.c: + * gst/encoding/gstencodebin2.h: + * gst/encoding/meson.build: + * gst/encoding/plugin.c: + encoding: Implement encodebin2 with an ON_REQUEST src pad + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/304 + +2020-11-13 13:06:32 -0300 Thibault Saunier + + * docs/plugins/gst_plugins_cache.json: + * gst/encoding/gstencodebasebin.c: + * gst/encoding/gstencodebasebin.h: + * gst/encoding/gstencodebin.c: + * gst/encoding/gstencodebin.h: + * gst/encoding/meson.build: + * gst/encoding/plugin.c: + encodebin: Split implementation into a base class + Create EncodeBaseBin as a base class for the existing + encodebin to allow other implementations. + Co-authored with Jan Schmidt + +2020-11-28 04:14:14 +0900 Seungha Yang + + * gst-libs/gst/gl/wgl/gstglcontext_wgl.c: + glcontext: wgl: Implement check_feature vfunc + There are several WGL specific extenstions such as WGL_NV_DX_interop. + Currently we have no WGL specific extension support and + this commit is also only for debugging purpose. + Part-of: + +2020-11-27 11:41:36 +0530 Sanchayan Maity + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Move max_errors out of GstAudioDecoderContext + Currently max-errors gets set during init to default or via property. + However, if a decoder element calls gst_audio_decoder_reset with 'full' + argument set to TRUE, it would result in all the fields of context being + zeroed with memset. This effectively results in max-errors getting a + value of 0 overriding the default or user requested value set during + init. + This would result in calls to GST_AUDIO_DECODER_ERROR which track error + counts and allow max-errors, to be ineffective. + To fix this move max-errors out of GstAudioDecoderContext, as changes to + context should not affect this. The error_count is anyways also in + GstAudioDecoderPrivate and not in context. + Part-of: + +2020-11-26 17:37:01 +0100 Stéphane Cerveau + + * ext/opus/meson.build: + opus: disable docs option in meson fallback + As the docs are not necessary, no need to keep it + enabled. + Part-of: + +2020-11-25 20:16:53 +0100 Marijn Suijten + + * gst-libs/gst/video/video-color.c: + video: Provide "deprecated in" version for gst_video_color_transfer fns + As requested in [1]. + [1]: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/940#note_706437 + Fixes: d0f36c7e1 ("video: Rename video_color_transfer to video_transfer_function") + +2020-11-24 20:54:49 +0100 Marijn Suijten + + * gst-libs/gst/audio/audio-converter.c: + * gst-libs/gst/audio/audio-format.c: + * gst-libs/gst/audio/audio-format.h: + * gst-libs/gst/audio/gstaudioaggregator.c: + * gst-libs/gst/audio/gstaudioringbuffer.c: + * gst-libs/gst/audio/gstaudiosink.c: + * gst-libs/gst/audio/gstaudiosrc.c: + * gst/adder/gstadder.c: + * gst/audioconvert/gstaudioconvert.c: + * gst/audiorate/gstaudiorate.c: + * tests/check/libs/audio.c: + audio: Move fill_silence into audio_format_info + With the function named gst_audio_format_fill_silence it would get + associated to the GstAudioFormat type in .gir which is incorrect and + confusing. See [1] for the discussion sparking this change. + https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/630#note_694795 + Part-of: + +2020-11-25 23:54:08 +1100 Jan Schmidt + + * sys/xvimage/xvcontext.c: + * sys/xvimage/xvcontext.h: + xvimagesink: Add support for the XV_COLORSPACE attribute. + The XV_COLORSPACE attribute exists on some Xv adapters, with the same + semantics as the XV_ITURBT_709 attribute that was already supported. + A value of 0 is bt601, and 1 is for bt709 colorspace. + Fixes color shifting issues displaying bt709 content on some Xv + adapters. + Part-of: + +2020-11-13 17:45:12 +0100 Edward Hervey + + * gst/playback/gstdecodebin3.c: + decodebin3: Take into account decoder latency for interleave size + Some decoders might introduce quite large latencies, which would result in + multiqueue draining out on some streams. In order to avoid that, check the + latency of decoders and adjust the minimum interleave time of multiqueue + accordingly. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/800 + Part-of: + +2020-11-19 14:35:32 +0100 Edward Hervey + + * gst/playback/gstdecodebin3-parse.c: + decodebin3: Don't leak filter caps + Introduced by previous commit + See https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/933 + Part-of: + +2020-11-14 09:43:59 +0100 Edward Hervey + + * gst/playback/gstdecodebin3-parse.c: + decodebin3: Properly handle caps query with no filter + There's no guarantee that upstream elements will do queries with specified + filter caps. If that's the case, just return GST_CAPS_ANY + Part-of: + +2020-11-07 17:30:19 +0000 Tim-Philipp Müller + + * ext/opus/meson.build: + opus: add subproject fallback + Part-of: + +2020-11-07 02:59:09 +0100 Mathieu Duponchelle + + * docs/plugins/gst_plugins_cache.json: + * gst/compositor/compositor.c: + * gst/compositor/compositor.h: + compositor: expose zero-size-is-unscaled property + When that property is left to its default, the width and height + property considers frames from input pads with width or height <= 0 + should be left unscaled in that dimension. + Setting this property to FALSE changes that behaviour to < 0, as when + animating these properties, 0 should be a valid end value (eg. shrinking + an input stream until it disappears). + The default value of the width and height properties is set to -1, so that + the default behaviour stays consistent whether that new property is set + or not. + Part-of: + +2020-10-28 00:01:16 +0100 Mathieu Duponchelle + + * gst-libs/gst/video/gstvideoaggregator.c: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * tests/check/libs/video.c: + video-converter: switch to using a task pool .. + .. and make use of that API in videoaggregator. + When setting certain properties, such as cropping or the scaled + size of pads, a new converter is created by videoaggregator. + Before that patch, this implied spawning new threads, potentially + at each aggregate cycle when interpolating pad properties. This + is obviously wasteful, and re-using a task pool removes that + overhead. + Part-of: + +2020-11-10 23:26:39 +0100 David Keijser + + * gst-libs/gst/pbutils/encoding-profile.c: + Fix segfault when using invalid encoding profile + Trying to use gst_encoding_profile_get_file_extension on a + GstEncodingProfile with a cap containing a typo would result in strcmp + being called with NULL. Instead use g_strcmp0 that handles this case. + Part-of: + +2020-11-03 17:00:53 +0100 Jan Alexander Steffens (heftig) + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: Fix locking around vagg->info + Take `GST_OBJECT_LOCK` when writing `vagg->info`, so that reading in + subclasses is protected against races, as documented in the struct. + /*< public >*/ + /* read-only, with OBJECT_LOCK */ + GstVideoInfo info; + `gst_video_aggregator_default_negotiated_src_caps` should take the + `GST_VIDEO_AGGREGATOR_LOCK` to avoid racing with + `gst_video_aggregator_reset` called by + `gst_video_aggregator_release_pad` of the last sinkpad. Otherwise it can + happen that `latency = gst_util_uint64_scale (...` gets called with a + zero framerate. + There doesn't seem to be any reason not to use the local `info` instead + of `vagg->info`, so do that. + Part-of: + +2020-10-26 08:59:34 +0100 Guillaume Desmottes + + * gst-libs/gst/video/gstvideodecoder.h: + video: fix doc warning + @mode has been renamed to + gst_video_decoder_set_interlaced_output_state() but not in the header + file, raising a doc warning. + Part-of: + +2020-11-05 04:43:47 +1100 Jan Schmidt + + * gst-libs/gst/video/video-converter.c: + video-converter: Skip input lines where possible. + There is a case where there are no lines in the temp cache, and + it's possible to skip straight to the request line and not generate + intermediate ones. This is really only beneficial when doing + nearest-neighbour downscaling, as other methods generally require + all input lines sequentially to generate the output. In that case, + this change has no effect and all lines are generated and cached + as before. + As a side effect however, this fixes corruption when downscaling + using nearest-neighbour, as interactions with the pass_alloc flag + and reuse of temporary lines causes the unecessarily-generated + cache lines to overwrite the final output. + Part-of: + +2020-11-04 02:11:30 +1100 Jan Schmidt + + * tests/examples/compositor/meson.build: + * tests/examples/compositor/mosaic.c: + examples: Add a compositor mosaic example. + Add an example of configuring compositor to display 2 videos + side-by-side in a mosaic, and additionally configure some + video-converter properties to demonstrate how that works.. + Part-of: + +2020-11-04 23:05:27 +0800 He Junyan + + * ext/gl/gstgluploadelement.c: + gluploadelement: Avoid race condition in propose_allocation(). + The inside upload and context may have race condition in the function + of propose_allocation(). They may be destroyed while this function is + stilling using it. + Part-of: + +2020-11-04 17:02:13 +0800 He Junyan + + * ext/gl/gstgluploadelement.c: + gluploadelement: Avoid race condition of base class' context. + The base class' context may change, we should use the common API + with lock to access it, rather than the just directly access the + struct field. + Part-of: + +2020-11-04 18:42:11 +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-03 20:19:16 +0800 He Junyan + + * ext/gl/gstgluploadelement.c: + gluploadelement: Avoid race condition of inside upload creation. + The operations for the inside GstGLUploadElement->upload have race + condition. The _transform_caps() will creates this object if it does + not exist, while the _stop() and change_state() can destroy this object. + The _transform_caps() is called by the gst_base_transform_query(), + so it does not hold the stream lock. It may use the upload while the + _stop() and change_state() has already destroy that object, and then + crash. + Fix: #645 + Part-of: + +2020-11-03 16:40:38 +0200 Sebastian Dröge + + * gst-libs/gst/gl/glprototypes/sync.h: + gl: Fix prototype of glGetSynciv() + Part-of: + +2020-10-30 13:56:16 -0300 Thibault Saunier + + * docs/plugins/gst_plugins_cache.json: + * gst-libs/gst/video/gstvideoaggregator.c: + * gst/compositor/compositor.c: + * tests/check/elements/compositor.c: + * tests/validate/compositor/renogotiate_failing_unsupported_src_format.validatetest: + * tests/validate/meson.build: + videoaggregator: Guarantee that the output format is supported + In the case `videoaggregator` is set as allowing format conversions, + and as we convert only on the sinkpads, we should ensure that the + chosen format is usable by the subclass. This in turns implies + that the format is usable on the srcpad. + When doing conversion *any* format can be used on the sinkpads, and this + is the only way that we can avoid race conditions during renegotiations + so we can not change that fact, we just need to ensure that the chosen + intermediary format is usable, which was not actually ensured before + that patch. + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/834 + Part-of: + +2020-10-31 03:14:20 +0900 Seungha Yang + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Don't assume GstVideoChromaSite and GstVideoColorimetry + Even if given GstVideoChromaSite and/or GstVideoColorimetry has unknown + value(s), assumption for an unknown value should be done by subclass or + downstream element, not a role of video decoder. And subclass might + want to output unknown value as is. + Part-of: + +2020-10-31 03:16:00 +0900 Seungha Yang + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Remove trailing whitespace + Part-of: + +2020-10-30 13:52:29 +0100 Jan Alexander Steffens (heftig) + + * gst/tcp/gsttcpserversink.c: + tcpserversink: Don't assume g_socket_get_remote_address succeeds + When the client disconnects immediately after connecting, the remote + address is no longer available. + Part-of: + +2020-10-29 16:38:44 -0300 Thibault Saunier + + * gst-libs/gst/video/gstvideoaggregator.c: + video-aggregator: Fix renegotiation when using convert pads + Since 23189c60f4cff998c7880e1768cee2f6d1b719d0 we started using the + useless result of `modified_caps` which, was never used since it was + introduced 7 years ago (in videomixer2). The intersection is useless and + we should just avoid doing it at all (which was always the case before) + as it can end up failing renegotiation for bad reasons. + Part-of: + +2020-05-27 23:20:25 +0900 Seungha Yang + + * tools/gst-play.c: + gst-play: Add support for audio mute control + Assign 'm' keyboard input to control audio mute state + Part-of: + +2020-10-28 15:51:27 -0400 Nicolas Dufresne + + * tests/check/libs/allocators.c: + tests: allocator: Fix FDMemory portability issue + This fixes few issues in the test but mainly some portability issue reported + on Ubutun. The test now uses a randomly name tempory file located into system + default tempory location and uses glib wrappers when available. + Fixes !895 + Part-of: + +2020-10-24 23:45:19 +0530 Dinesh Manajipet + + * ext/gl/gstglcolorbalance.c: + * ext/gl/gstglcolorbalance.h: + gl: optimize glcolorbalance by precomputing shader math + Precompute the rgb -> yuv conversion and color balance adjustment math + so that the shader does minimal work per pixel. + Merging these 15+ steps into 3 steps let us jump from choppy + 360p video to smooth 720p video on our underpowered embedded system. + If we can remove the clamp() step inside the shader, or apply it after + rgba + conversion, there are more performance benefits to reap. But I am not + sure + what the side effects will be in that case. + + Part-of: + +2020-10-28 23:26:27 +1100 Matthew Waters + + * gst-libs/gst/gl/meson.build: + gl/build: use the brcm GL libraries on the rpi + Upstream RPi has moved to a completely separate GL library names now due + to conflicts. + See https://github.com/RPi-Distro/repo/issues/134 + Part-of: + +2020-10-27 14:12:42 +0100 Tobias Ronge + + * gst-libs/gst/allocators/gstfdmemory.c: + * tests/check/libs/allocators.c: + fdmemory: Allow for change of protection mode + After a memory has been unmapped, protection mode can now be changed + when mapping it again. + See https://bugzilla.gnome.org/show_bug.cgi?id=789952. + Part-of: + +2020-10-28 01:19:37 +0100 Mathieu Duponchelle + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: document and fix locking in convert pad + Part-of: + +2020-10-28 13:22:09 +0000 Tim-Philipp Müller + + * ext/gl/gstgldeinterlace.c: + gldeinterlace: fix doc blurb + Part-of: + +2018-04-07 20:52:12 -0400 Xavier Claessens + + * gst-libs/gst/allocators/meson.build: + * gst-libs/gst/app/meson.build: + * gst-libs/gst/audio/meson.build: + * gst-libs/gst/fft/meson.build: + * gst-libs/gst/gl/meson.build: + * gst-libs/gst/pbutils/meson.build: + * gst-libs/gst/riff/meson.build: + * gst-libs/gst/rtp/meson.build: + * gst-libs/gst/rtsp/meson.build: + * gst-libs/gst/sdp/meson.build: + * gst-libs/gst/tag/meson.build: + * gst-libs/gst/video/meson.build: + * meson.build: + * pkgconfig/gstreamer-allocators-uninstalled.pc.in: + * pkgconfig/gstreamer-allocators.pc.in: + * pkgconfig/gstreamer-app-uninstalled.pc.in: + * pkgconfig/gstreamer-app.pc.in: + * pkgconfig/gstreamer-audio-uninstalled.pc.in: + * pkgconfig/gstreamer-audio.pc.in: + * pkgconfig/gstreamer-fft-uninstalled.pc.in: + * pkgconfig/gstreamer-fft.pc.in: + * pkgconfig/gstreamer-gl-egl-uninstalled.pc.in: + * pkgconfig/gstreamer-gl-egl.pc.in: + * pkgconfig/gstreamer-gl-prototypes-uninstalled.pc.in: + * pkgconfig/gstreamer-gl-prototypes.pc.in: + * pkgconfig/gstreamer-gl-uninstalled.pc.in: + * pkgconfig/gstreamer-gl-wayland-uninstalled.pc.in: + * pkgconfig/gstreamer-gl-wayland.pc.in: + * pkgconfig/gstreamer-gl-x11-uninstalled.pc.in: + * pkgconfig/gstreamer-gl-x11.pc.in: + * pkgconfig/gstreamer-gl.pc.in: + * pkgconfig/gstreamer-pbutils-uninstalled.pc.in: + * pkgconfig/gstreamer-pbutils.pc.in: + * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in: + * pkgconfig/gstreamer-plugins-base.pc.in: + * pkgconfig/gstreamer-riff-uninstalled.pc.in: + * pkgconfig/gstreamer-riff.pc.in: + * pkgconfig/gstreamer-rtp-uninstalled.pc.in: + * pkgconfig/gstreamer-rtp.pc.in: + * pkgconfig/gstreamer-rtsp-uninstalled.pc.in: + * pkgconfig/gstreamer-rtsp.pc.in: + * pkgconfig/gstreamer-sdp-uninstalled.pc.in: + * pkgconfig/gstreamer-sdp.pc.in: + * pkgconfig/gstreamer-tag-uninstalled.pc.in: + * pkgconfig/gstreamer-tag.pc.in: + * pkgconfig/gstreamer-video-uninstalled.pc.in: + * pkgconfig/gstreamer-video.pc.in: + * pkgconfig/meson.build: + Meson: Use pkg-config generator + +2020-10-22 19:16:42 +0900 Seungha Yang + + * gst/playback/gsturisourcebin.c: + urisourcebin: Fix crash caused by use after free + OutputSlotInfo doesn't hold ref of queue, so gst_bin_remove() + will free the queue memory. + Part-of: + +2020-10-21 14:55:40 -0500 Zebediah Figura + + * ext/theora/gsttheoradec.c: + theoradec: Set telemetry options only if they are nonzero + Setting telemetry options, even to zero, causes libtheora to enable an expensive code path. For large enough videos (e.g. 1920x1080) this can increase the time to decode each frame by 30-40 ms, which can be enough to cause noticeable stutter. + Part-of: + +2020-10-21 11:42:54 +0200 Michael Tretter + + * gst-libs/gst/gl/gstglslstage.c: + glslstage: delete shader on finalize of stage + GLSLstage creates the glShader using glCreateShader, but never calls + glDeleteShader if the glShader is not used anymore. This forces the GL + library to keep the compiled shader around, because it might be used in + the future. Therefore, the glShader is leaked whenever a GLSLStage is + destroyed. + Fix the leak by deleting the glShader when finishing the GLSLStage. + Part-of: + +2020-10-20 12:44:21 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + audio/videodecoder: Initialize max_errors in instance_init() + Part-of: + +2020-10-20 11:51:08 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + audio/videodecoder: Don't reset max-errors in reset() + Otherwise setting the property on the elements has no effect at all + because it's immediately reset during startup. + Part-of: + +2020-10-13 03:34:07 +0900 Seungha Yang + + * tests/examples/decodebin_next/meson.build: + * tests/examples/decodebin_next/uridecodebin3-select-all.c: + examples: Add an uridecodebin3 example + Demonstrate a way to select multiple streams + Part-of: + +2020-10-19 20:03:40 +0900 Seungha Yang + + * gst/playback/gstdecodebin3.c: + * gst/playback/gsturidecodebin3.c: + decodebin3: Store stream-start event on output pad before exposing it + It's required for users to be able to figure out associated GstStream + object with a pad on pad-added callback. + Part-of: + +2020-10-17 12:35:16 +0300 Sebastian Dröge + + * gst-libs/gst/app/gstappsink.c: + * gst-libs/gst/app/gstappsrc.c: + Add some missing nullable annotations + Part-of: + +2020-10-17 10:42:49 +0300 Sebastian Dröge + + * gst/typefind/gsttypefindfunctions.c: + typefind/xdgmime: Validate mimetypes to be valid GstStructure names before using them + On macOS, for example, "text/*" can be returned as mimetype for + plaintext files but we don't allow '*' in structure names and this would + cause critical warnings. + It's a valid mimetype but not a valid structure name. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/616 + Part-of: + +2020-10-15 18:20:37 +0200 Stéphane Cerveau + + * gst-libs/gst/video/video-anc.c: + * gst-libs/gst/video/video-hdr.c: + * meson.build: + 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-09-20 19:47:08 +0900 Seungha Yang + + * gst/videoconvert/gstvideoconvert.c: + videoconvert: Enhance debug message to be more human readable + Numerical representation of GstVideoFormat is not debugging + friendly + Part-of: + +2020-10-13 17:57:53 +0900 Seungha Yang + + * gst/playback/gsturidecodebin3.c: + uridecodebin3: Forward upstream events to decodebin3 directly + Otherwise default handler will try to forward it to sink element + or srcpad which might not be available at that moment. + Part-of: + +2020-09-14 20:01:18 +0900 Seungha Yang + + * tests/check/elements/appsrc.c: + tests: appsrc: Fix unstable test case + Wait all buffers to be consumed before sending flush seek event, + so that checking timestamp and segment as expected. + Part-of: + +2020-10-13 15:31:41 +0200 Jan Alexander Steffens (heftig) + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: Limit accepted caps by template caps + This seems like an obvious mistake, since `modified_caps` was created + but not used. + Part-of: + +2020-10-13 15:28:54 +0200 Jan Alexander Steffens (heftig) + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: Log the format name instead of index + Part-of: + +2020-10-12 12:21:17 +0100 Will Miller + + * gst-libs/gst/rtp/gstrtpbuffer.c: + * tests/check/libs/rtp.c: + gstrtpbuffer: fix header extension length validation + We validate the header extensions length of an RTP buffer by comparing + it against the block size. Since we multiply the length in words by 4 to + get the length in bytes, a suitably large length could cause a wrapround + of the uint16, giving a lower length which erroneously passes the check + and allows the buffer to be mapped. + Part-of: + +2020-09-11 20:28:55 +0200 Marijn Suijten + + * gst-libs/gst/gl/gstglslstage.c: + gl: glslstage: Sync new_default_{fragment,vertex} documentation name + Documentation for the parameter and return value don't show up when + this header mismatches the function it tries to describe. + Part-of: + +2020-10-10 17:26:42 +0200 François Laignel + + * gst/playback/gstdecodebin3.c: + decodebin3: only force streams-selected seqnum after a select-streams + The initial streams-selected message might not match any select-streams, + in which case it is currently overriden with GST_SEQNUM_INVALID. + Related to: + - https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/601 + Part-of: + +2020-10-09 17:15:37 +0200 Jan Alexander Steffens (heftig) + + * tests/examples/gl/gtk/meson.build: + examples/gl/gtk: Add missing dependency on gstgl + Occasionally, a clean build would fail like this: + In file included from ../subprojects/gst-plugins-base/tests/examples/gl/gtk/gstgtk.c:24: + ../subprojects/gst-plugins-base/gst-libs/gst/gl/gl.h:25:10: fatal error: gst/gl/gl-enumtypes.h: No such file or directory + 25 | #include + | ^~~~~~~~~~~~~~~~~~~~~~~ + Add the missing dependency so that the headers are generated beforehand. + Part-of: + +2020-09-04 21:09:17 +0200 Mathieu Duponchelle + + * gst-libs/gst/rtsp/gstrtsptransport.c: + rtsptransport: support single port for client_port and server_port + This is explicitly specified as valid in the RFC, where the + syntax for both parameters is: + ";" "client_port" "=" port [ "-" port ] + ";" "server_port" "=" port [ "-" port ] + This is useful for applications where RTCP is either not necessary + or not possible. + Part-of: + +2020-10-09 12:02:14 +0200 Guillaume Desmottes + + * gst-libs/gst/video/video-info.h: + video-info: clarify GST_VIDEO_INTERLACE_MODE_ALTERNATE doc + Fields really should alternate in this mode. + Part-of: + +2020-10-05 12:07:22 +0200 Guillaume Desmottes + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: fix output state interlace-mode + When user is passing the actual interlace-mode when calling + gst_video_decoder_set_interlaced_output_state() it should not be + overidden by the input interlace-mode. + Needed to fix #825 as we want to keep interlace-mode=interleaved from + parsers and have the OMX decoder producing interlace-mode=alternate. + Part-of: + +2020-10-05 11:38:09 +0200 Guillaume Desmottes + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: add interlace-mode to debug output when setting output state + Part-of: + +2020-07-16 18:10:45 +1000 Matthew Waters + + * tests/check/libs/gstgl-public-headers.h: + * tests/check/libs/gstglheaders.c: + * tests/check/libs/libsabi.c: + * tests/check/libs/struct_aarch64.h: + * tests/check/libs/struct_arm.h: + * tests/check/libs/struct_i386.h: + * tests/check/libs/struct_ppc32.h: + * tests/check/libs/struct_ppc64.h: + * tests/check/libs/struct_x86_64.h: + * tests/check/meson.build: + tests: add gl structs to abi check + Tested on x86, x86_64, armv7l, aarch64. + Part-of: + +2020-10-09 12:25:21 +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-01 11:22:51 +0200 Jan Alexander Steffens (heftig) + + * gst/tcp/gstmultihandlesink.c: + multihandlesink: Don't pass NULL caps to gst_caps_is_equal + Apparently the sinkpad caps can get cleared when shutting down the + pipeline while the sink is working, provoking a critical warning. + Part-of: + +2020-10-08 17:10:30 +0300 Sebastian Dröge + + * docs/plugins/gst_plugins_cache.json: + * ext/pango/gsttimeoverlay.c: + * ext/pango/gsttimeoverlay.h: + timeoverlay: Add elapsed-running-time mode + This takes the first running time and the first after each flush-stop as + an offset for the running time that is rendered. + Part-of: + +2020-10-08 13:52:33 +0200 Jan Alexander Steffens (heftig) + + * gst-libs/gst/audio/gstaudiofilter.c: + * gst-libs/gst/video/gstvideofilter.c: + * gst/videoscale/gstvideoscale.c: + audio: video: Fix in/outbuf confusion of transform_meta + There are three instances where in- and outbuf have been swapped. This + didn't affect the correctness of the libs *filter code, but the + videoscale implementation swapped the arguments of meta->transform_func. + Part-of: + +2020-10-01 14:45:24 -0400 Xavier Claessens + + * ext/pango/meson.build: + pango: Add fallback dependency + When we'll depend on Meson >=0.55 this can be replaced by [provide] + section in gst-build's pango.wrap file. The dependency variable name can + also be dropped when pango is updated to use override_dependency: + https://gitlab.gnome.org/GNOME/pango/-/merge_requests/250 + Part-of: + +2020-09-16 04:30:40 +0900 Seungha Yang + + * meson.build: + meson: Always wrap "prefix" option with join_paths() to make Windows happy + Both "\" and "/" separators are allowed on Windows but the problem + is that "\" is not converted to "\\" in this case. + It will result to unknown/unrecognized character escape sequence. + Part-of: + +2020-09-25 14:05:09 -0400 Xavier Claessens + + * gst-libs/gst/gl/meson.build: + meson: Add GL summary + Part-of: + +2020-09-21 23:50:03 +1000 Matthew Waters + + * gst/compositor/blend.c: + compositor: fix YUY2/UYVY/VYUY blending + Don't overead memory. + Fixup for https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/755 + Part-of: + +2020-09-15 14:15:36 -0400 Nicolas Dufresne + + * meson_options.txt: + * tests/examples/gl/qt/meson.build: + * tests/examples/overlay/meson.build: + meson: Add a qt5 feature + This allow opting out items of the builds the depends on QT5 library. + Auto-detection of QT5 in cross-build requires host tools to match with the + sysroot, and detection of mis-match is not fully reliable. + Part-of: + +2020-09-14 17:56:07 +0900 sohwan.park + + * meson.build: + meson: add abi configuration for meson build + Part-of: + +2020-07-15 15:46:56 +1000 Matthew Waters + + * gst/compositor/blend.c: + * gst/compositor/blend.h: + * gst/compositor/compositor.c: + * gst/compositor/compositor.h: + compositor: blend with multiple threads + Increases the throughput of compositing by using more CPU cycles across + multiple threads. Simple cases (the output contains one pixel from at + most one input) can have up to a 70% increase in throughput. Not so + simple cases are limited by the region with the most number of + composite operations. + Part-of: + +2020-09-11 20:15:14 +0200 Marijn Suijten + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + * gst-libs/gst/video/video-converter.c: + * tests/check/libs/video.c: + video: Rename video_color_transfer to video_transfer_function + Rename remaining `gst_video_color_transfer_{encode,decode}` functions on + the `GstVideoTransferFunction` enumeration to + `gst_video_transfer_function_{encode,decode}` permitting + gobject-introspection to turn these into associated functions and place + them under the respective `` block in gir XML files. + Part-of: + +2020-09-11 21:40:26 +1000 Matthew Waters + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: ensure peek_next_sample() uses the correct caps + gst_pad_get_current_caps() may be wrong when there is a renegotiation in + progress for the pad and we have not yet received or selected the buffer + with different caps yet. + Fix by storing the caps through in a similar way to the existing code + for buffer/video-info selection machinery. + Part-of: + +2017-08-18 17:01:02 +0200 Stian Selnes + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Bump log level of marking a sync point + Sync points are often important when debugging and deserves DEBUG + level. + Part-of: + +2020-07-01 18:19:09 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + videodecoder: Add API for subclasses to request a new sync point + This allows subclasses that notice missing reference frames to request a + new sync point to allow seamless decoding again. While doing so the + subclass can also signal whether it wants a) all following input frames + until the sync point to be discarded or b) all output frames until the + sync point to be marked as corrupt. + Sending of force-keyunit events for this can be throttled by the + application via the "min-force-keyunit-interval" property. + This replaces custom behaviour for the same in various decoders, for + example openh264dec. + Based on patches by Haakon Sporsheim and + Stian Selnes . + Part-of: + +2020-07-01 18:14:40 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + videodecoder: Add API for subclasses to signal that they need the stream to start with a sync point + If the first frame(s) at the very beginning or after a flush are not a + sync point then the base class would discard them before passing them to + the subclass. + This also fixes the previously broken distance_from_sync handling: it + was never reset at sync points. + Part-of: + +2020-07-01 18:11:25 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Add "discard-corrupted-frames" property + This can be used by applications to configure decoders so that corrupted + frames are directly discarded instead of being forwarded inside the + pipeline. It is a replacement for the "output-corrupt" property of the + ffmpeg decoders. + Part-of: + +2020-07-01 18:09:22 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoutils.h: + videodecoder: Add API for marking output frames as corrupted + This can be used by subclasses to mark output frames as known to be + corrupted, for example if reference frames were missing. ffmpeg's + decoders can signal this. + In addition this flag is propagated downstream if the input frame had it + set. + Part-of: + +2020-06-23 18:40:07 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Remove unused reorder_depth variable + Part-of: + +2020-07-01 19:18:36 +0300 Mikhail Fludkov + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: Mark GAP events sent because of packet loss as such + This allows downstream to distinguish packet loss from normal GAP events + that are sent simply because of gaps in the timeline. + Part-of: + +2020-09-08 15:41:55 +0530 Nirbheek Chauhan + + * gst-libs/gst/gl/meson.build: + meson: Actually build gstgl without implicit include dirs + Fixes a typo from https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/800 + Part-of: + +2020-09-10 14:19:04 +0300 Sebastian Dröge + + * tests/check/elements/glmixer.c: + glmixer: Fix unit test to actually work reliably + Don't run the harness in live mode, or otherwise it would output frames + already in the very beginning before a buffer was provided to it due to + timeout. + Also send EOS/a second buffer before pulling a buffer as videoaggregator + has one frame of latency. + Part-of: + +2020-08-13 12:49:19 +0800 Haihao Xiang + + * docs/plugins/gst_plugins_cache.json: + * gst-libs/gst/gl/glprototypes/gstgl_gles2compat.h: + * gst-libs/gst/gl/gstglcolorconvert.c: + * gst-libs/gst/gl/gstglcolorconvert.h: + * gst-libs/gst/gl/gstglformat.c: + * gst-libs/gst/gl/gstglmemory.h: + gl: add support for GBR and GBRA + example pipeline: + gst-launch-1.0 videotestsrc ! video/x-raw,format=GBR ! glimagesink + Part-of: + +2020-08-20 09:06:04 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideoaggregator.c: + videoaggregator: Don't require any pads to be configured for negotiating source pad caps + This is not actually required (anymore?). Source pad caps can be + negotiated at any time regardless of any configured (or existing) sink + pads and videoaggregator comes up with some fixated caps based on the + downstream caps. + Subclasses can override this behaviour as needed by overriding + update_src_caps(). + Part-of: + +2020-09-03 21:19:29 +0200 Marijn Suijten + + * gst-libs/gst/gl/gstglmemory.c: + * gst-libs/gst/gl/gstglmemory.h: + * gst-libs/gst/gl/gstglmemorypbo.c: + * gst-libs/gst/video/video-color.c: + gst-libs: gl: Fix documentation typo and clarify gl_memory_texsubimage + `gst_gl_memory_read_pixels` reads pixels from `GLMemory` into the + pointer, effectively writing to it. This is opposite from + `gst_gl_memory_texsubimage` which reads texture data from `read_pointer` + into `GLMemory`. + Both cases are clarified by changing `read_pointer` to `write_pointer`, + and explaining what `gst_gl_memory_texsubimage` does in addition to + referring back to `gst_gl_memory_read_pixels`. + Part-of: + +2020-08-20 16:31:38 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioaggregator.c: + audioaggregator: Reset offset if the output rate is renegotiated + On next aggregation the new offset will be calculated based on the + segment position. + Without this a rate change would cause a jump forwards or backwards in + the output timeline. + Part-of: + +2020-08-18 10:42:09 +0300 Sebastian Dröge + + * gst-libs/gst/video/video-anc.c: + video-anc: Implement transform functions for AFD/Bar metas + If the transformation is just a copy, copy over the metadata. For AFD + also copy over the metadata if the aspect ratio stays the same in + scaling transformations. In all other cases fail the transformation. + Part-of: + +2020-08-24 19:37:15 +0300 Sebastian Dröge + + * gst-libs/gst/app/gstappsrc.c: + appsrc: Wake up the create() function on caps changes + This allows the new caps to be sent downstream as soon as possible + instead of having to wait for the next buffer/buffer list. + Part-of: + +2020-09-08 20:45:53 -0300 Thibault Saunier + + * gst/encoding/gstencodebin.c: + encodebin: Be less restrictive on muxer caps when preset name is specified + This way the user can simply define its caps by only providing the + structure name which is what we do in the encoding profile + deserialization function for example. + Part-of: + +2020-07-30 18:49:52 -0400 Thibault Saunier + + * gst/encoding/gstsmartencoder.c: + encodebin: Add vp8 and vp9 smart encoding support + Part-of: + +2020-07-30 18:49:18 -0400 Thibault Saunier + + * gst/encoding/gstencodebin.c: + encodebin: Fix refcount mishandling + Part-of: + +2020-08-21 03:06:04 +0200 Mathieu Duponchelle + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtpbasepayload: do not forget delayed segment when forwarding gaps + Part-of: + +2020-08-04 12:53:18 +0300 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + video-converter: Add fast paths from v210 to I420/YV12, Y42B, UYVY and YUY2 + These then don't require going through the generic code path via AYUV64 + first but can be converted directly. + This speeds up processing of + videotestsrc ! v210 ! videoconvert ! other_format ! fakesink + by a factor of 1.55 for I420/YV12 and 1.40 for the other destination + formats and reduces memory pressure considerably. + Part-of: + +2020-09-08 17:30:31 +0100 Tim-Philipp Müller + + * .gitlab-ci.yml: + ci: include template from gst-ci master branch again + +2020-09-08 16:58:29 +0100 Tim-Philipp Müller + + * meson.build: + Back to development + === release 1.18.0 === 2020-09-08 00:03:33 +0100 Tim-Philipp Müller + * .gitlab-ci.yml: * ChangeLog: * NEWS: * README: @@ -70616,7 +74591,6 @@ * gst-libs/gst/fft/fft.h: * gst-libs/gst/fft/gstfft.h: * gst-libs/gst/pbutils/Makefile.am: - * gst-libs/gst/pbutils/gstpbutils.h: * gst-libs/gst/riff/Makefile.am: * gst-libs/gst/riff/riff.h: * gst-libs/gst/rtp/Makefile.am: 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 3a3c748a9c..dbd8eecf0a 100644 --- a/RELEASE +++ b/RELEASE @@ -1,18 +1,15 @@ -This is GStreamer gst-plugins-base 1.18.0. +This is GStreamer gst-plugins-base 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/gst-plugins-base.doap b/gst-plugins-base.doap index c353c0492e..ddc16d6eda 100644 --- a/gst-plugins-base.doap +++ b/gst-plugins-base.doap @@ -34,6 +34,16 @@ A wide range of video and audio decoders, encoders, and filters are included. + + + 1.19.1 + master + + 2021-06-01 + + + + 1.18.0 diff --git a/meson.build b/meson.build index 597737725e..a966006263 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-base', 'c', - version : '1.19.0.1', + version : '1.19.1', meson_version : '>= 0.54', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ])