diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f71a25eeba0..65bbaec34d2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -239,6 +239,11 @@ windows amd64 docker: "--build-arg", "CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME" ` ) - ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE + rules: + - if: '$CI_PROJECT_NAME != "gstreamer-security"' + # Never run for gstreamer-security repo + - if: '$CI_PROJECT_NAME == "gstreamer-security"' + when: never .macos image: image: "registry.freedesktop.org/gstreamer/gstreamer/macos-arm64/26-tahoe:2025-09-30.0" @@ -522,6 +527,9 @@ build debian x86_64 debug: -Dvpx:tools=disabled rules: + # Don't run Windows jobs for gstreamer-security repo + - if: '$CI_PROJECT_NAME == "gstreamer-security"' + when: never - !reference [.upstream-branch-rules, rules] - changes: paths: @@ -620,6 +628,9 @@ build vs2022 x86: build vs2022 arm64: extends: '.build windows cross' rules: + # Don't run Windows jobs for gstreamer-security repo + - if: '$CI_PROJECT_NAME == "gstreamer-security"' + when: never - when: 'manual' allow_failure: true variables: @@ -662,6 +673,9 @@ build macos: MESON_TEST_ARGS: "gst-plugins-bad:*avf* gst-plugins-bad:*vtdec* gst-plugins-bad:*_vk*" SUBPROJECTS_CACHE_DIR: "/Users/gst-ci/subprojects" rules: + # Don't run macOS jobs for gstreamer-security repo + - if: '$CI_PROJECT_NAME == "gstreamer-security"' + when: never - !reference [.upstream-branch-rules, rules] - changes: paths: @@ -1196,6 +1210,9 @@ cerbero trigger: # Never run post merge - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: never + # Never run for gstreamer-security repo + - if: '$CI_PROJECT_NAME == "gstreamer-security"' + when: never - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # For merge reqest, we want to test user branch <<: *cerbero_trigger_changes diff --git a/ci/fluster/visl_references/test_suites/h265/JCT-VC-MV-HEVC.json b/ci/fluster/visl_references/test_suites/h265/JCT-VC-MV-HEVC.json index e5d1a576438..ac805b704e3 100644 --- a/ci/fluster/visl_references/test_suites/h265/JCT-VC-MV-HEVC.json +++ b/ci/fluster/visl_references/test_suites/h265/JCT-VC-MV-HEVC.json @@ -25,7 +25,7 @@ "source_checksum": "fbda521fadb7f70692941f833b434c4d", "input_file": "MVHEVCS_C/MVHEVCS_C.bit", "output_format": "yuv420p", - "result": "cd15c307c65bb0c9e4e4b43dde54aaec" + "result": "51c963c21045fca966ccea54511b4b9e" }, { "name": "MVHEVCS_D_NTT_3", @@ -33,7 +33,7 @@ "source_checksum": "f81f4594b769395f0ad99e98b31467db", "input_file": "MVHEVCS_D_NTT_3/MVHEVCS_D.bit", "output_format": "yuv420p", - "result": "46ac559b66419104d23767d8b59b78a7" + "result": "c60e3c4c6aa09dc26f926834d9060c93" }, { "name": "MVHEVCS_E_Qualcomm_3", @@ -73,7 +73,7 @@ "source_checksum": "bbe731cbbccced6ea25cb1850c91eacc", "input_file": "MVHEVCS_I.bit", "output_format": "yuv420p", - "result": "c858895b3e5f6292095451b9b3d5fec7" + "result": "476a0cbd0147f475526da444918dc5ed" } ] } \ No newline at end of file diff --git a/ci/fuzzing/build-oss-fuzz.sh b/ci/fuzzing/build-oss-fuzz.sh index f033bc8f41a..d82850b95b2 100755 --- a/ci/fuzzing/build-oss-fuzz.sh +++ b/ci/fuzzing/build-oss-fuzz.sh @@ -52,9 +52,22 @@ meson \ -Ddoc=disabled \ -Dexamples=disabled \ -Dintrospection=disabled \ - -Dgood=disabled \ + -Dgood=enabled \ + -Dgst-plugins-good:auto_features=disabled \ + -Dgst-plugins-good:isomp4=enabled \ + -Dgst-plugins-good:matroska=enabled \ + -Dgst-plugins-good:flv=enabled \ + -Dgst-plugins-good:avi=enabled \ + -Dgst-plugins-good:audioparsers=enabled \ + -Dgst-plugins-good:wavparse=enabled \ + -Dgst-plugins-good:id3demux=enabled \ + -Dgst-plugins-good:flac=disabled \ + -Dbad=enabled \ + -Dgst-plugins-bad:auto_features=disabled \ + -Dgst-plugins-bad:mpegtsdemux=enabled \ + -Dgst-plugins-bad:videoparsers=enabled \ + -Dgst-plugins-bad:jpegformat=enabled \ -Dugly=disabled \ - -Dbad=disabled \ -Dlibav=disabled \ -Dges=disabled \ -Dsharp=disabled \ @@ -67,7 +80,6 @@ meson \ -Dqt5=disabled \ -Dorc=disabled \ -Dgstreamer:tracer_hooks=false \ - -Dgst-plugins-base:opus=disabled \ -Dgst-plugins-base:pango=disabled \ _builddir \ $SRC/gstreamer diff --git a/ci/fuzzing/gst-audio-converter.c b/ci/fuzzing/gst-audio-converter.c new file mode 100644 index 00000000000..5532e680275 --- /dev/null +++ b/ci/fuzzing/gst-audio-converter.c @@ -0,0 +1,187 @@ +/* + * Copyright 2026 Google Inc. + * author: Arthur SC Chan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Audio converter/resampler/quantize fuzzing target + * + * Exercises: + * gst-libs/gst/audio/audio-converter.c + * gst-libs/gst/audio/audio-resampler.c + * gst-libs/gst/audio/audio-quantize.c + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#define HEADER_SIZE 8 +#define MAX_FRAMES 4096 +#define MAX_RESAMPLE_BYTES (16 * 1024 * 1024) + +/* All formats exercised by the converter path */ +static const GstAudioFormat all_formats[] = { + GST_AUDIO_FORMAT_S8, GST_AUDIO_FORMAT_U8, + GST_AUDIO_FORMAT_S16LE, GST_AUDIO_FORMAT_U16LE, + GST_AUDIO_FORMAT_S24LE, GST_AUDIO_FORMAT_S32LE, + GST_AUDIO_FORMAT_U32LE, GST_AUDIO_FORMAT_F32LE, + GST_AUDIO_FORMAT_F64LE, +}; + +#define N_ALL_FORMATS G_N_ELEMENTS(all_formats) + +/* Resampler only accepts these four formats */ +static const GstAudioFormat resamp_formats[] = { + GST_AUDIO_FORMAT_S16, GST_AUDIO_FORMAT_S32, + GST_AUDIO_FORMAT_F32, GST_AUDIO_FORMAT_F64, +}; + +#define N_RESAMP_FORMATS G_N_ELEMENTS(resamp_formats) + +static const gint rates[] = { + 100, 997, 7919, + 8000, 11025, 16000, 22050, + 32000, 44100, 48000, 96000, + 8009, 22051, 44101 +}; + +#define N_RATES G_N_ELEMENTS(rates) + +/* Channel counts the audio converter's mix matrix supports out of the box. */ +static const gint mixable_channels[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; + +#define N_MIXABLE_CHANNELS G_N_ELEMENTS(mixable_channels) + +static void +custom_logger (const gchar * log_domain, + GLogLevelFlags log_level, const gchar * message, gpointer unused_data) +{ + if (log_level & G_LOG_LEVEL_CRITICAL) { + g_printerr ("CRITICAL ERROR : %s\n", message); + abort (); + } else if (log_level & G_LOG_LEVEL_WARNING) { + g_printerr ("WARNING : %s\n", message); + } +} + +int +LLVMFuzzerTestOneInput (const guint8 * data, size_t size) +{ + static gboolean initialized = FALSE; + + if (!initialized) { + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + g_log_set_default_handler (custom_logger, NULL); + gst_init (NULL, NULL); + initialized = TRUE; + } + + if (size < HEADER_SIZE) + return 0; + + GstAudioFormat in_fmt = all_formats[data[0] % N_ALL_FORMATS]; + GstAudioFormat out_fmt = all_formats[data[1] % N_ALL_FORMATS]; + + /* Picked from the supported mix-matrix set so the converter actually runs. */ + gint in_ch = mixable_channels[data[2] % N_MIXABLE_CHANNELS]; + gint in_rate = rates[data[3] % N_RATES]; + gint out_rate = rates[data[4] % N_RATES]; + GstAudioResamplerMethod rm = (GstAudioResamplerMethod) ((data[5] >> 4) % 5); + GstAudioFormat resamp_fmt = resamp_formats[data[5] % N_RESAMP_FORMATS]; + GstAudioDitherMethod dither = (GstAudioDitherMethod) ((data[6] >> 4) % 4); + GstAudioNoiseShapingMethod ns = + (GstAudioNoiseShapingMethod) ((data[6] & 0x0f) % 5); + guint quantizer = (guint) data[6] + 1; + + const guint8 *audio_data = data + HEADER_SIZE; + gsize audio_size = size - HEADER_SIZE; + + /* audio converter */ + { + gint out_ch = mixable_channels[data[7] % N_MIXABLE_CHANNELS]; + GstAudioInfo in_info, out_info; + GstAudioConverter *conv; + + gst_audio_info_set_format (&in_info, in_fmt, in_rate, in_ch, NULL); + gst_audio_info_set_format (&out_info, out_fmt, out_rate, out_ch, NULL); + conv = gst_audio_converter_new (0, &in_info, &out_info, NULL); + if (conv) { + if (audio_size > 0) { + gpointer out = NULL; + gsize out_size = 0; + gst_audio_converter_convert (conv, 0, (gpointer) audio_data, + audio_size, &out, &out_size); + g_free (out); + } + gst_audio_converter_free (conv); + } + } + + /* audio resampler */ + { + GstAudioResampler *resampler; + + resampler = gst_audio_resampler_new (rm, 0, resamp_fmt, in_ch, + in_rate, out_rate, NULL); + if (resampler) { + const GstAudioFormatInfo *finfo = gst_audio_format_get_info (resamp_fmt); + gsize frame_size = (finfo->width / 8) * in_ch; + if (frame_size > 0 && audio_size >= frame_size) { + gsize in_frames = MIN (audio_size / frame_size, MAX_FRAMES); + gsize out_frames = + gst_audio_resampler_get_out_frames (resampler, in_frames); + if (out_frames > 0) { + gsize out_buf_size = out_frames * (finfo->width / 8) * in_ch; + /* Cap allocation to keep the fuzzer alive on extreme rate ratios. */ + if (out_buf_size > 0 && out_buf_size <= MAX_RESAMPLE_BYTES) { + gpointer out_buf = g_malloc0 (out_buf_size); + gpointer in_ptrs[1] = { (gpointer) audio_data }; + gpointer out_ptrs[1] = { out_buf }; + gst_audio_resampler_resample (resampler, in_ptrs, in_frames, + out_ptrs, out_frames); + g_free (out_buf); + } + } + } + gst_audio_resampler_free (resampler); + } + } + + /* audio quantize */ + { + GstAudioQuantize *quant = gst_audio_quantize_new (dither, ns, 0, + GST_AUDIO_FORMAT_S32, 1, quantizer); + if (quant) { + const gsize frame_size = sizeof (gint32); + if (audio_size >= frame_size) { + guint frames = (guint) MIN (audio_size / frame_size, MAX_FRAMES); + gpointer out_buf = g_malloc0 (frames * frame_size); + gpointer in_ptrs[1] = { (gpointer) audio_data }; + gpointer out_ptrs[1] = { out_buf }; + gst_audio_quantize_samples (quant, in_ptrs, out_ptrs, frames); + g_free (out_buf); + } + gst_audio_quantize_free (quant); + } + } + + return 0; +} diff --git a/ci/fuzzing/gst-audio.c b/ci/fuzzing/gst-audio.c new file mode 100644 index 00000000000..12b8c30488c --- /dev/null +++ b/ci/fuzzing/gst-audio.c @@ -0,0 +1,165 @@ +/* + * Copyright 2026 Google Inc. + * author: Arthur SC Chan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Audio caps fuzzing target + * + * Exercises: + * gst-libs/gst/audio/audio-info.c + * gst-libs/gst/audio/audio-channels.c + * gst-libs/gst/audio/gstdsd.c + * gst-libs/gst/audio/gstaudioringbuffer.c + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#define HEADER_SIZE 8 + +static const gint rates[] = { + 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000 +}; + +#define N_RATES G_N_ELEMENTS(rates) + +static void +custom_logger (const gchar * log_domain, + GLogLevelFlags log_level, const gchar * message, gpointer unused_data) +{ + if (log_level & G_LOG_LEVEL_CRITICAL) { + g_printerr ("CRITICAL ERROR : %s\n", message); + abort (); + } else if (log_level & G_LOG_LEVEL_WARNING) { + g_printerr ("WARNING : %s\n", message); + } +} + +int +LLVMFuzzerTestOneInput (const guint8 * data, size_t size) +{ + static gboolean initialized = FALSE; + + if (!initialized) { + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + g_log_set_default_handler (custom_logger, NULL); + gst_init (NULL, NULL); + initialized = TRUE; + } + + if (size < HEADER_SIZE) + return 0; + + gint in_ch = (data[2] % 8) + 1; + gint in_rate = rates[data[4] % N_RATES]; + + const guint8 *audio_data = data + HEADER_SIZE; + gsize audio_size = size - HEADER_SIZE; + + /* fuzz-derived caps parsers */ + { + gchar *fuzz_str = g_strndup ((const gchar *) data, size); + + { + GstAudioInfo info; + GstCaps *caps = gst_caps_new_simple ("audio/x-raw", + "format", G_TYPE_STRING, "S16LE", + "layout", G_TYPE_STRING, fuzz_str, + "rate", G_TYPE_INT, in_rate, + "channels", G_TYPE_INT, in_ch, + NULL); + gst_audio_info_from_caps (&info, caps); + gst_caps_unref (caps); + } + { + GstAudioInfo *info; + GstCaps *caps = gst_caps_new_simple ("audio/x-raw", + "format", G_TYPE_STRING, "S16LE", + "layout", G_TYPE_STRING, fuzz_str, + "rate", G_TYPE_INT, in_rate, + "channels", G_TYPE_INT, in_ch, + NULL); + info = gst_audio_info_new_from_caps (caps); + if (info) + gst_audio_info_free (info); + gst_caps_unref (caps); + } + { + GstDsdInfo dsd_info; + GstCaps *caps = gst_caps_new_simple ("audio/x-dsd", + "format", G_TYPE_STRING, "DSDU8", + "layout", G_TYPE_STRING, fuzz_str, + "rate", G_TYPE_INT, in_rate, + "channels", G_TYPE_INT, in_ch, + NULL); + gst_dsd_info_from_caps (&dsd_info, caps); + gst_caps_unref (caps); + } + { + static const gchar *const mimes[] = { + "audio/x-raw", "audio/x-alaw", "audio/x-mulaw", + "audio/x-iec958", "audio/x-ac3", "audio/x-dts", + "audio/mpeg", "audio/x-flac", + }; + const gchar *mime = mimes[(data[5] >> 3) % G_N_ELEMENTS (mimes)]; + GstAudioRingBufferSpec spec = { 0 }; + GstCaps *caps; + + spec.latency_time = 10000; + + if (g_str_equal (mime, "audio/x-raw")) { + caps = gst_caps_new_simple (mime, + "format", G_TYPE_STRING, "S16LE", + "layout", G_TYPE_STRING, "interleaved", + "rate", G_TYPE_INT, in_rate, "channels", G_TYPE_INT, in_ch, NULL); + } else if (g_str_equal (mime, "audio/mpeg")) { + caps = gst_caps_new_simple (mime, + "mpegversion", G_TYPE_INT, 1, + "mpegaudioversion", G_TYPE_INT, 1, + "stream-format", G_TYPE_STRING, fuzz_str, + "rate", G_TYPE_INT, in_rate, "channels", G_TYPE_INT, in_ch, NULL); + } else { + caps = gst_caps_new_simple (mime, + "rate", G_TYPE_INT, in_rate, "channels", G_TYPE_INT, in_ch, NULL); + } + gst_audio_ring_buffer_parse_caps (&spec, caps); + if (spec.caps) + gst_caps_unref (spec.caps); + gst_caps_unref (caps); + } + + g_free (fuzz_str); + } + + /* channel positions from mask */ + { + if (audio_size >= sizeof (guint64)) { + guint64 mask; + GstAudioChannelPosition positions[64]; + + memcpy (&mask, audio_data, sizeof (guint64)); + gst_audio_channel_positions_from_mask (in_ch, mask, positions); + } + } + + return 0; +} diff --git a/ci/fuzzing/gst-discoverer.corpus b/ci/fuzzing/gst-discoverer.corpus index 3037d70f9ad..28a0dd86662 100644 --- a/ci/fuzzing/gst-discoverer.corpus +++ b/ci/fuzzing/gst-discoverer.corpus @@ -1,4 +1,13 @@ -subprojects/gst-integration-testsuites/media/defaults/ogg/numerated_frames_blue.ogv -subprojects/gst-integration-testsuites/media/defaults/ogg/opus.1.ogg -subprojects/gst-integration-testsuites/media/defaults/ogg/vorbis_theora.0.ogg -subprojects/gst-integration-testsuites/media/defaults/ogg/vorbis_theora.1.ogg +subprojects/gst-plugins-base/tests/files/*.ogg +subprojects/gst-plugins-base/tests/files/*.mkv +subprojects/gst-plugins-bad/tests/files/*.mp4 +subprojects/gst-plugins-bad/tests/files/*.webm +subprojects/gst-plugins-bad/tests/files/*.ts +subprojects/gst-plugins-good/tests/files/*.mp4 +subprojects/gst-plugins-good/tests/files/*.mkv +subprojects/gst-plugins-good/tests/files/*.wav +subprojects/gst-plugins-good/tests/files/*.flv +subprojects/gst-plugins-good/tests/files/*.ogg +subprojects/gst-plugins-good/tests/files/*.mp3 +subprojects/gst-editing-services/tests/check/assets/*.ogg +subprojects/gst-rtsp-server/tests/files/*.avi diff --git a/ci/fuzzing/gst-value.c b/ci/fuzzing/gst-value.c new file mode 100644 index 00000000000..b0460be6808 --- /dev/null +++ b/ci/fuzzing/gst-value.c @@ -0,0 +1,137 @@ +/* + * Copyright 2026 Google Inc. + * author: Arthur SC Chan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* GStreamer value/caps/structure string fuzzing target + * + * Exercises: + * gst/gstvalue.c + * gst/gstcaps.c + * gst/gststructure.c + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +/* Filled after gst_init() since GST_TYPE_* globals are set at registration */ +static GType deser_types[16]; + +/* Valid structure name forced onto fuzz input so parsers never assert on it. */ +#define FUZZER_NAME_PREFIX "fuzzer/x-data," + +static gchar * +fuzzer_make_trusted_name_input (const gchar * str) +{ + GString *out = g_string_new (FUZZER_NAME_PREFIX); + const gchar *p; + + for (p = str; *p != '\0'; p++) { + if (*p != ';') + g_string_append_c (out, *p); + } + + return g_string_free (out, FALSE); +} + +static void +custom_logger (const gchar * log_domain, + GLogLevelFlags log_level, const gchar * message, gpointer unused_data) +{ + if (log_level & G_LOG_LEVEL_CRITICAL) { + g_printerr ("CRITICAL ERROR : %s\n", message); + abort (); + } else if (log_level & G_LOG_LEVEL_WARNING) { + g_printerr ("WARNING : %s\n", message); + } +} + +int +LLVMFuzzerTestOneInput (const guint8 * data, size_t size) +{ + static gboolean initialized = FALSE; + + if (!initialized) { + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + g_log_set_default_handler (custom_logger, NULL); + gst_init (NULL, NULL); + + deser_types[0] = GST_TYPE_FRACTION; + deser_types[1] = GST_TYPE_LIST; + deser_types[2] = GST_TYPE_ARRAY; + deser_types[3] = GST_TYPE_BITMASK; + deser_types[4] = GST_TYPE_FLAG_SET; + deser_types[5] = GST_TYPE_CAPS; + deser_types[6] = GST_TYPE_STRUCTURE; + deser_types[7] = G_TYPE_INT; + deser_types[8] = G_TYPE_UINT; + deser_types[9] = G_TYPE_INT64; + deser_types[10] = G_TYPE_UINT64; + deser_types[11] = G_TYPE_BOOLEAN; + deser_types[12] = G_TYPE_FLOAT; + deser_types[13] = G_TYPE_DOUBLE; + deser_types[14] = G_TYPE_STRING; + deser_types[15] = GST_TYPE_BUFFER; + + initialized = TRUE; + } + + if (size == 0) + return 0; + + gchar *str = g_strndup ((const gchar *) data, size); + + /* Trusted-name input for name-sensitive paths; raw str kept for the rest. */ + gchar *name_str = fuzzer_make_trusted_name_input (str); + + /* caps string parsing */ + { + GstCaps *caps = gst_caps_from_string (name_str); + if (caps) + gst_caps_unref (caps); + } + + /* structure string parsing */ + { + GstStructure *s = gst_structure_from_string (name_str, NULL); + if (s) + gst_structure_free (s); + } + + /* per-type value deserializers */ + for (gsize i = 0; i < G_N_ELEMENTS (deser_types); i++) { + GValue v = G_VALUE_INIT; + const gchar *input = str; + + /* These deserialize via caps/structure from_string, so need trusted name. */ + if (deser_types[i] == GST_TYPE_CAPS || deser_types[i] == GST_TYPE_STRUCTURE) + input = name_str; + + g_value_init (&v, deser_types[i]); + gst_value_deserialize (&v, input); + g_value_unset (&v); + } + + g_free (name_str); + g_free (str); + + return 0; +} diff --git a/ci/fuzzing/gst-value.corpus b/ci/fuzzing/gst-value.corpus new file mode 100644 index 00000000000..a0021e14945 --- /dev/null +++ b/ci/fuzzing/gst-value.corpus @@ -0,0 +1 @@ +./ci/fuzzing/seeds/gst-value/* diff --git a/ci/fuzzing/gst-video-converter.c b/ci/fuzzing/gst-video-converter.c new file mode 100644 index 00000000000..dc21b2522f4 --- /dev/null +++ b/ci/fuzzing/gst-video-converter.c @@ -0,0 +1,147 @@ +/* + * Copyright 2026 Google Inc. + * author: Arthur SC Chan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Video converter fuzzing target + * + * Exercises: + * gst-libs/gst/video/video-converter.c + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#define HEADER_SIZE 6 + +static const GstVideoFormat formats[] = { + GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, + GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV21, + GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, + GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGB, + GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_RGBA, + GST_VIDEO_FORMAT_BGRA, GST_VIDEO_FORMAT_ARGB, + GST_VIDEO_FORMAT_ABGR, GST_VIDEO_FORMAT_GRAY8, + GST_VIDEO_FORMAT_GRAY16_LE, GST_VIDEO_FORMAT_RGB16, +}; + +#define N_FORMATS G_N_ELEMENTS(formats) + +static void +custom_logger (const gchar * log_domain, + GLogLevelFlags log_level, const gchar * message, gpointer unused_data) +{ + if (log_level & G_LOG_LEVEL_CRITICAL) { + g_printerr ("CRITICAL ERROR : %s\n", message); + abort (); + } else if (log_level & G_LOG_LEVEL_WARNING) { + g_printerr ("WARNING : %s\n", message); + } +} + +int +LLVMFuzzerTestOneInput (const guint8 * data, size_t size) +{ + static gboolean initialized = FALSE; + + if (!initialized) { + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + g_log_set_default_handler (custom_logger, NULL); + gst_init (NULL, NULL); + initialized = TRUE; + } + + if (size < HEADER_SIZE) + return 0; + + GstVideoFormat in_fmt = formats[data[0] % N_FORMATS]; + GstVideoFormat out_fmt = formats[data[1] % N_FORMATS]; + + /* Random size */ + guint in_width = (guint) data[2] + 1; + guint in_height = (guint) data[3] + 1; + guint out_width = (guint) data[4] + 1; + guint out_height = (guint) data[5] + 1; + + GstVideoInfo in_info, out_info; + gst_video_info_init (&in_info); + gst_video_info_init (&out_info); + if (!gst_video_info_set_format (&in_info, in_fmt, in_width, in_height)) + return 0; + if (!gst_video_info_set_format (&out_info, out_fmt, out_width, out_height)) + return 0; + + const guint8 *payload = data + HEADER_SIZE; + gsize payload_size = size - HEADER_SIZE; + gsize in_size = GST_VIDEO_INFO_SIZE (&in_info); + gsize out_size = GST_VIDEO_INFO_SIZE (&out_info); + + if (in_size == 0 || out_size == 0) + return 0; + + GstBuffer *in_buf = gst_buffer_new_allocate (NULL, in_size, NULL); + GstBuffer *out_buf = gst_buffer_new_allocate (NULL, out_size, NULL); + if (!in_buf || !out_buf) { + if (in_buf) + gst_buffer_unref (in_buf); + if (out_buf) + gst_buffer_unref (out_buf); + return 0; + } + + /* Fill input buffer with fuzz data (zero-padded if shorter) */ + { + GstMapInfo map; + if (gst_buffer_map (in_buf, &map, GST_MAP_WRITE)) { + memset (map.data, 0, map.size); + memcpy (map.data, payload, MIN (payload_size, map.size)); + gst_buffer_unmap (in_buf, &map); + } + } + + GstVideoFrame in_frame = GST_VIDEO_FRAME_INIT; + GstVideoFrame out_frame = GST_VIDEO_FRAME_INIT; + gboolean in_mapped = FALSE, out_mapped = FALSE; + + if (gst_video_frame_map (&in_frame, &in_info, in_buf, GST_MAP_READ)) { + in_mapped = TRUE; + if (gst_video_frame_map (&out_frame, &out_info, out_buf, GST_MAP_WRITE)) { + out_mapped = TRUE; + GstVideoConverter *conv = + gst_video_converter_new (&in_info, &out_info, NULL); + if (conv) { + gst_video_converter_frame (conv, &in_frame, &out_frame); + gst_video_converter_free (conv); + } + } + } + + if (out_mapped) + gst_video_frame_unmap (&out_frame); + if (in_mapped) + gst_video_frame_unmap (&in_frame); + + gst_buffer_unref (in_buf); + gst_buffer_unref (out_buf); + + return 0; +} diff --git a/ci/fuzzing/gst-video.c b/ci/fuzzing/gst-video.c new file mode 100644 index 00000000000..88a6446468f --- /dev/null +++ b/ci/fuzzing/gst-video.c @@ -0,0 +1,106 @@ +/* + * Copyright 2026 Google Inc. + * author: Arthur SC Chan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Video library fuzzing target + * + * Exercises: + * gst-libs/gst/video/video-hdr.c + * gst-libs/gst/video/video-color.c + * gst-libs/gst/video/video-info-dma.c + * gst-libs/gst/video/gstvideotimecode.c + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +static void +custom_logger (const gchar * log_domain, + GLogLevelFlags log_level, const gchar * message, gpointer unused_data) +{ + if (log_level & G_LOG_LEVEL_CRITICAL) { + g_printerr ("CRITICAL ERROR : %s\n", message); + abort (); + } else if (log_level & G_LOG_LEVEL_WARNING) { + g_printerr ("WARNING : %s\n", message); + } +} + +int +LLVMFuzzerTestOneInput (const guint8 * data, size_t size) +{ + static gboolean initialized = FALSE; + + if (!initialized) { + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + g_log_set_default_handler (custom_logger, NULL); + gst_init (NULL, NULL); + initialized = TRUE; + } + + if (size == 0) + return 0; + + /* HDR10+ binary parsing */ + { + GstVideoHDR10Plus hdr10; + gst_video_hdr_parse_hdr10_plus (data, size, &hdr10); + } + + /* string-based metadata parsers */ + { + gchar *str = g_strndup ((const gchar *) data, size); + + { + GstVideoMasteringDisplayInfo minfo; + gst_video_mastering_display_info_from_string (&minfo, str); + } + { + GstVideoContentLightLevel linfo; + gst_video_content_light_level_from_string (&linfo, str); + } + { + GstVideoColorimetry cinfo; + gst_video_colorimetry_from_string (&cinfo, str); + } + { + guint64 modifier; + gst_video_dma_drm_fourcc_from_string (str, &modifier); + } + { + GstVideoTimeCode *tc = gst_video_time_code_new_from_string (str); + if (tc) + gst_video_time_code_free (tc); + } + { + GstVideoTimeCodeInterval *tci = + gst_video_time_code_interval_new_from_string (str); + if (tci) + gst_video_time_code_interval_free (tci); + } + + g_free (str); + } + + return 0; +} diff --git a/ci/fuzzing/meson.build b/ci/fuzzing/meson.build index ac96ed73c26..b2e088f3731 100644 --- a/ci/fuzzing/meson.build +++ b/ci/fuzzing/meson.build @@ -3,10 +3,15 @@ if get_option('oss_fuzz').disabled() endif fuzz_targets = [ + ['gst-audio.c', false, ['gstreamer-audio-1.0']], + ['gst-audio-converter.c', false, ['gstreamer-audio-1.0']], ['gst-codec-utils.c', false, ['gstreamer-pbutils-1.0']], ['gst-discoverer.c', false, ['gstreamer-pbutils-1.0']], ['gst-subparse.c', false, []], ['gst-tag.c', false, ['gstreamer-tag-1.0']], + ['gst-value.c', false, []], + ['gst-video.c', false, ['gstreamer-video-1.0']], + ['gst-video-converter.c', false, ['gstreamer-video-1.0']], ['typefind.c'], ] diff --git a/ci/fuzzing/seeds/gst-value/buffer-hex b/ci/fuzzing/seeds/gst-value/buffer-hex new file mode 100644 index 00000000000..59b3c01ea57 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/buffer-hex @@ -0,0 +1 @@ +0102030405060708090a0b0c0d0e0f10 diff --git a/ci/fuzzing/seeds/gst-value/caps-features b/ci/fuzzing/seeds/gst-value/caps-features new file mode 100644 index 00000000000..c62cca40dc9 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/caps-features @@ -0,0 +1 @@ +video/x-raw(memory:DMABuf), format=(string)NV12, width=(int)1920, height=(int)1080 diff --git a/ci/fuzzing/seeds/gst-value/caps-list-range b/ci/fuzzing/seeds/gst-value/caps-list-range new file mode 100644 index 00000000000..7a0bdca8f65 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/caps-list-range @@ -0,0 +1 @@ +audio/x-raw, format=(string){ S16LE, F32LE }, rate=(int)[ 8000, 192000 ], channels=(int)[ 1, 8 ] diff --git a/ci/fuzzing/seeds/gst-value/caps-simple b/ci/fuzzing/seeds/gst-value/caps-simple new file mode 100644 index 00000000000..e27e09d7e43 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/caps-simple @@ -0,0 +1 @@ +video/x-raw, format=(string)I420, width=(int)640, height=(int)480, framerate=(fraction)30/1 diff --git a/ci/fuzzing/seeds/gst-value/datetime b/ci/fuzzing/seeds/gst-value/datetime new file mode 100644 index 00000000000..91461b2d07e --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/datetime @@ -0,0 +1 @@ +2026-05-26T15:30:45Z diff --git a/ci/fuzzing/seeds/gst-value/flagset b/ci/fuzzing/seeds/gst-value/flagset new file mode 100644 index 00000000000..38811f5a6ad --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/flagset @@ -0,0 +1 @@ +0000001f:000000ff diff --git a/ci/fuzzing/seeds/gst-value/fraction b/ci/fuzzing/seeds/gst-value/fraction new file mode 100644 index 00000000000..f186717d5b6 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/fraction @@ -0,0 +1 @@ +30000/1001 diff --git a/ci/fuzzing/seeds/gst-value/range-fraction b/ci/fuzzing/seeds/gst-value/range-fraction new file mode 100644 index 00000000000..ece13b807b3 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/range-fraction @@ -0,0 +1 @@ +[ 24/1, 60/1 ] diff --git a/ci/fuzzing/seeds/gst-value/range-int b/ci/fuzzing/seeds/gst-value/range-int new file mode 100644 index 00000000000..423271de58d --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/range-int @@ -0,0 +1 @@ +[ 0, 100 ] diff --git a/ci/fuzzing/seeds/gst-value/structure-mix b/ci/fuzzing/seeds/gst-value/structure-mix new file mode 100644 index 00000000000..760bcfb7c89 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/structure-mix @@ -0,0 +1 @@ +application/x-test, foo=(string)"bar baz", num=(int)42, frac=(fraction)30/1, ar=(int)< 1, 2, 3 > diff --git a/ci/fuzzing/seeds/gst-value/taglist b/ci/fuzzing/seeds/gst-value/taglist new file mode 100644 index 00000000000..30fb4977fe4 --- /dev/null +++ b/ci/fuzzing/seeds/gst-value/taglist @@ -0,0 +1 @@ +taglist, title=(string)"Test Track", artist=(string)"Me", track-number=(uint)1 diff --git a/ci/scripts/test.sh b/ci/scripts/test.sh index 8b173bef365..56003b91327 100755 --- a/ci/scripts/test.sh +++ b/ci/scripts/test.sh @@ -31,12 +31,18 @@ export LIBGL_ALWAYS_SOFTWARE="true" # This the hardcoded value for llvmpipe export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/lvp_icd.json" +if test "x$CI_PROJECT_NAME" = "xgstreamer-security"; then + check_bugs="" +else + check_bugs="--check-bugs" +fi + ret=0 ./gst-env.py \ "--builddir=$builddir" \ gst-validate-launcher "$tests" \ --jobs "$jobs" \ - --check-bugs \ + $check_bugs \ --dump-on-failure \ --mute \ --shuffle \ diff --git a/girs/GES-1.0.gir b/girs/GES-1.0.gir index 072f822bf34..d5cfcd4b2f7 100644 --- a/girs/GES-1.0.gir +++ b/girs/GES-1.0.gir @@ -16140,7 +16140,7 @@ contains one frame) - + diff --git a/girs/Gst-1.0.gir b/girs/Gst-1.0.gir index dc98bfcd0d4..4f1aa999ba5 100644 --- a/girs/Gst-1.0.gir +++ b/girs/Gst-1.0.gir @@ -65,6 +65,13 @@ See also #GstBufferMapInfo. + + Opaque identifier for an in-flight trace span. Returned by +gst_trace_span_begin() and passed to +gst_trace_span_end(). + + + @@ -12690,6 +12697,48 @@ Use this variant of #GST_DEBUG_FUNCPTR if you do not need to use @ptr. + + Defines a `static` getter that lazily registers the format on first call +and caches it for the lifetime of the process. Subsequent calls return the +cached #GstTraceFormat. + +Pass the getter to the scope macros to time a block. + +``` c +GST_DEFINE_TRACE_FORMAT (decode_frame_span, + "codec", STRING, + "frame", UINT64) + +static void +decode_frame (MyDecoder * self, guint64 frame) +{ + GST_TRACE_SCOPE_BEGIN (decode_frame_span, + STRING (self->codec), + UINT64 (frame)); + + // ... decode the frame ... + + GST_TRACE_SCOPE_END (decode_frame_span); +} +``` + +When the span does not match a lexical scope, hold the #GstTraceSpanId +returned by gst_trace_span_begin() and close it later with +gst_trace_span_end(). In both cases the field values are only evaluated +while a tracer is listening. + + + + identifier of the getter function to define; its name is also used + verbatim as the span name surfaced to tracers + + + at least one (field-name, short-field-type) pair, where the type is a + #GstTracerFieldType name without the `GST_TRACER_FIELD_TYPE_` prefix (e.g. + `STRING`, `UINT64`); the %NULL terminator is added automatically + + + @@ -49127,6 +49176,63 @@ character, a newline character will be added automatically. + + Opens a span and returns its #GstTraceSpanId. When @format has no +listening tracer the values are not evaluated and %GST_TRACE_SPAN_ID_NONE +is returned. The caller closes the span with gst_trace_span_end() +or gst_trace_span_end_and_clear() at the desired point; use this +when the span lifetime does not match a lexical scope (see GST_TRACE_FUNC() +for the auto-closed variant). + + + + a #GstTraceFormat (typically the result of a getter declared + with GST_DEFINE_TRACE_FORMAT()) + + + one or more GST_TRACE_VALUE_* entries, in the field order declared + on @format + + + + + Emits a point event for @format. Unlike GST_TRACE_BEGIN(), an +event has no duration and no matching end; it is the structured +equivalent of the legacy #GstTracerRecord log entry and is emitted whenever +the GST_TRACER debug level is enabled. As with gst_tracer_record_log() the +values are always evaluated, so keep them cheap. + + + + a #GstTraceFormat (typically the result of a getter declared + with GST_DEFINE_TRACE_FORMAT()) + + + one or more GST_TRACE_VALUE_* entries, in the field order declared + on @format + + + + + Opens a span like GST_TRACE_SCOPE_BEGIN() but closes it automatically when +the enclosing block exits via `return`, `goto`, or fall-through, so no +GST_TRACE_SCOPE_END() call is needed. + +Implemented with `__attribute__((cleanup))`. On compilers that do not +support the attribute (stock MSVC) this macro expands to nothing and its +arguments are not evaluated; use the GST_TRACE_SCOPE_BEGIN() / +GST_TRACE_SCOPE_END() pair there instead. + + + + a span format getter declared with GST_DEFINE_TRACE_FORMAT() + + + one or more GST_TRACE_VALUE_* entries, in the field order declared + on @format + + + Output a tracing message for the given identifier in the default category. @@ -49201,6 +49307,143 @@ character, a newline character will be added automatically. + + Opens a span and stores its #GstTraceSpanId in a local variable named after +@format, so the matching GST_TRACE_SCOPE_END() can close it without the +caller declaring a span-id variable. When no tracer is listening the values +are not evaluated and %GST_TRACE_SPAN_ID_NONE is stored. + +Calling GST_TRACE_SCOPE_BEGIN() twice for the same @format in the same scope +is not allowed, since the variable name is derived from @format. + +The span remains open until the matching GST_TRACE_SCOPE_END() is called + + + + a span format getter declared with GST_DEFINE_TRACE_FORMAT() + + + one or more GST_TRACE_VALUE_* entries, in the field order declared + on @format + + + + + Closes the span opened by GST_TRACE_SCOPE_BEGIN() for @format and resets the +variable to %GST_TRACE_SPAN_ID_NONE. + + + + the span format getter passed to the matching + GST_TRACE_SCOPE_BEGIN() + + + + + Sentinel #GstTraceSpanId value meaning "no span". Returned by +gst_trace_span_begin() when no tracer is listening, and accepted +as a no-op by gst_trace_span_end(). + + + + + Builds a positional `GstTraceValue` array suitable for +gst_trace_span_begin(). Values are positional and must match the +field order declared on the corresponding #GstTraceFormat. + + + + one or more short value entries, e.g. `STRING (s)`, `UINT (n)`, + `OBJECT (o)`; each names a `GST_TRACE_VALUE_*` constructor without the + `GST_TRACE_VALUE_` prefix + + + + + Builds a `GstTraceValue` holding @x for use inside GST_TRACE_VALUES(). + + + + a #gboolean value + + + + + + + + a #GstClockTime value + + + + + + + + a #gdouble value + + + + + + + + a #gint value + + + + + + + + a #gint64 value + + + + + @x must outlive the trace call. + + + + a borrowed #GObject + + + + + @x must outlive the trace call. %NULL is passed through unchanged so tracers +can distinguish unset from empty strings. + + + + a borrowed #gchar pointer; %NULL means the field is unset + + + + + @x must outlive the trace call. + + + + a borrowed #GstStructure + + + + + + + + a #guint value + + + + + + + + a #guint64 value + + + @@ -52430,6 +52673,428 @@ unreffed before setting a new one. + + Transient field descriptor created by gst_trace_field_new() and added +to a #GstTraceFormatBuilder. + + + Frees a field that has not been added to a builder. + + + + + + + a #GstTraceField + + + + + + Sets the description metadata on @field. Tracers and documentation +generators surface this string when describing the field. + + + @field for chaining + + + + + a #GstTraceField + + + + a human-readable description; %NULL clears any + previously set description + + + + + + Sets metadata flags on @field. %GST_TRACER_VALUE_FLAGS_OPTIONAL marks the +field as optional: when emitting an event, the field's value must be +preceded by a #gboolean value telling whether it is present. + + + @field for chaining + + + + + a #GstTraceField + + + + the #GstTracerValueFlags describing the field + + + + + + Declares which entity (process, thread, element or pad) the field's value +relates to. Post-processing tools such as `gst-stats` use this to group +measurements. + + + @field for chaining + + + + + a #GstTraceField + + + + the #GstTracerValueScope the field relates to + + + + + + Creates a transient field descriptor that can be configured with chainable +setters and then consumed by +gst_trace_format_builder_add_field_full(). + + + a new #GstTraceField + + + + + the field name + + + + the field #GstTracerFieldType + + + + + + + Opaque registered format describing the fields of a trace span. +Obtain one via gst_trace_format_register() or +GST_DEFINE_TRACE_FORMAT() and pass it to +gst_trace_span_begin(). + + + + + the description set on the builder, or + %NULL if none was set + + + + + a #GstTraceFormat + + + + + + + + the description declared for the field + at @index, or %NULL if no description was set (or @index is out of range) + + + + + a #GstTraceFormat + + + + a field index + + + + + + + + the name of the field at @index, or %NULL if + @index is out of range + + + + + a #GstTraceFormat + + + + a field index + + + + + + Returns the raw #GstStructure describing the field at @index. The structure +carries the field's type (`"type"`, a #GstTracerFieldType stored as #gint) +and any optional metadata declared via +gst_trace_format_builder_add_field_full() (e.g. `"description"`). + + + the field structure, or %NULL if + @index is out of range + + + + + a #GstTraceFormat + + + + a field index + + + + + + + + the #GstTracerFieldType of the field at @index (defaults to + %GST_TRACER_FIELD_TYPE_BOOLEAN if @index is out of range) + + + + + a #GstTraceFormat + + + + a field index + + + + + + + + the number of fields declared on @format + + + + + a #GstTraceFormat + + + + + + + + the registered span name + + + + + a #GstTraceFormat + + + + + + Cheap check that lets callers skip preparing span values when no tracer +is active. Returns %TRUE whenever any tracer is registered, regardless +of which hooks it listens for. + + + %TRUE if any tracer is active + + + + + a #GstTraceFormat + + + + + + Convenience wrapper around #GstTraceFormatBuilder for the common case +where only the field names and types are declared. Equivalent to creating +a builder, calling gst_trace_format_builder_add_field() for each pair +and then gst_trace_format_builder_register(). + + + the registered #GstTraceFormat + + + + + the span name + + + + %NULL-terminated list of (field-name, #GType) pairs + + + + + + + Opaque, chainable builder used to assemble a #GstTraceFormat field by +field; consumed by gst_trace_format_builder_register(). + + + Adds a positional field to the format. @type must be one of %G_TYPE_BOOLEAN, +%G_TYPE_INT, %G_TYPE_UINT, %G_TYPE_INT64, %G_TYPE_UINT64, %G_TYPE_DOUBLE, +%G_TYPE_STRING or %G_TYPE_POINTER, matching the `GstTraceValue` union +member callers will pass to gst_trace_span_begin(). Duplicate +field names are rejected. + + + @builder for chaining + + + + + a #GstTraceFormatBuilder + + + + the field name + + + + the field #GType + + + + + + Adds a positional field with optional metadata to the format. The field is +consumed and freed by this call; do not use @field afterwards. + + + @builder for chaining + + + + + a #GstTraceFormatBuilder + + + + a #GstTraceField built via gst_trace_field_new() + and optionally configured with chainable setters such as + gst_trace_field_set_description() + + + + + + Frees an unregistered builder. + + + + + + + a #GstTraceFormatBuilder + + + + + + Registers the format declared by @builder and consumes the builder. +The returned format is valid until gst_deinit(). + + + the registered #GstTraceFormat + + + + + a #GstTraceFormatBuilder + + + + + + Sets a human-readable description on the format being built. Replaces any +previous description. + + + @builder for chaining + + + + + a #GstTraceFormatBuilder + + + + a human-readable description + + + + + + Creates a new builder for a span format. The builder is used to +declare the span's field schema before registering it with +gst_trace_format_builder_register(). + + + a new #GstTraceFormatBuilder + + + + + the span name + + + + + + + A single borrowed value for a trace span row. + +Values are positional and interpreted according to the format description +used when registering the corresponding #GstTraceFormat. The value order +matches the field order declared on the builder. + + + a #gboolean + + + + a #gint + + + + a #guint + + + + a #gint64 + + + + a #guint64 (also carries %GST_TRACER_FIELD_TYPE_CLOCK_TIME) + + + + a #gdouble + + + + a borrowed string (may be %NULL) + + + + a borrowed #GstStructure (may be %NULL) + + + + a borrowed #GObject (may be %NULL) + + + + + + + + Tracing modules will subclass #GstTracer and register through gst_tracer_register(). Modules can attach to various hook-types - see @@ -52564,14 +53229,50 @@ the factory is not loaded. + + The type of a trace format field. This is a deliberately small, self +contained set rather than a #GType so the tracer stream stays independent +of the GObject type system. + + a #gboolean + + + a #gint + + + a #guint + + + a #gint64 + + + a #guint64 + + + a #gdouble + + + a borrowed string (may be %NULL) + + + a #GstClockTime + + + a borrowed #GstStructure (may be %NULL) + + + a borrowed #GObject (may be %NULL) + + - + Tracing modules will create instances of this class to announce the data they will log and create a log formatter. + Use #GstTraceFormat and gst_trace_event() instead. - + Create a new tracer record. The record instance can be used to efficiently log entries using gst_tracer_record_log(). %NULL terminator required after the last argument. @@ -52588,9 +53289,9 @@ the optional field, that if %TRUE signals that the optional field is valid and %FALSE signals that the optional field should be ignored. One must still log a placeholder value for the optional field though. Please also note, that pointer type values must not be NULL - the underlying serialisation can not -handle that right now. - -> Please note that this is still under discussion and subject to change. +handle that right now. + Build a #GstTraceFormat with + gst_trace_format_builder_new() / gst_trace_format_register() instead. a new #GstTracerRecord @@ -52611,13 +53312,12 @@ handle that right now. - + Serialzes the trace event into the log. Right now this is using the gstreamer debug log with the level TRACE (7) and -the category "GST_TRACER". - -> Please note that this is still under discussion and subject to change. +the category "GST_TRACER". + Use gst_trace_event() instead. @@ -52638,38 +53338,38 @@ the category "GST_TRACER". - Flag that describe the value. These flags help applications processing the + Flag that describe the value. These flags help applications processing the logs to understand the values. - no flags + no flags - the value is optional. When using this flag + the value is optional. When using this flag one need to have an additional boolean arg before this value in the var-args list passed to gst_tracer_record_log(). - the value is a combined figure, since the - start of tracing. Examples are averages or timestamps. + the value is a combined figure, since the + start of tracing. Examples are averages or accumulated durations. - Tracing record will contain fields that contain a measured value or extra + Tracing record will contain fields that contain a measured value or extra meta-data. One such meta data are values that tell where a measurement was -taken. This enumerating declares to which scope such a meta data field +taken. This enumeration declares to which scope such a meta data field relates to. If it is e.g. %GST_TRACER_VALUE_SCOPE_PAD, then each of the log events may contain values for different #GstPads. - the value is related to the process + the value is related to the process - the value is related to a thread + the value is related to a thread - the value is related to an #GstElement + the value is related to an #GstElement - the value is related to a #GstPad + the value is related to a #GstPad @@ -54607,7 +55307,7 @@ determine a order for the two provided values. - + The micro version of GStreamer at compile time: @@ -56455,6 +57155,13 @@ Either @new_context or the #GstContext pointed to by @old_context may be %NULL.< + + + + %TRUE if RISC-V Vector extension is supported by the CPU, %FALSE otherwise. + + + @@ -60487,6 +61194,108 @@ even from dynamically loaded plugins.) + + Emits a point event for @format: a single timestamped record with no +duration, the counterpart to the begin/end pair of gst_trace_span_begin() +and the structured replacement for gst_tracer_record_log(). + +The event is delivered to tracers through the "event" hook; the `log` tracer +renders it to the GST_TRACER debug log. Values are positional and must match +@format; keep their computation cheap as they are built whenever tracing is +enabled. + + + + + + + a #GstTraceFormat describing the fields of the event + + + + the positional values for @format's fields, in + declaration order; %NULL logs all fields as unset + + + + + + + + Convenience wrapper around #GstTraceFormatBuilder for the common case +where only the field names and types are declared. Equivalent to creating +a builder, calling gst_trace_format_builder_add_field() for each pair +and then gst_trace_format_builder_register(). + + + the registered #GstTraceFormat + + + + + the span name + + + + %NULL-terminated list of (field-name, #GType) pairs + + + + + + Emits a span begin hook for @format. + +Values are borrowed for the duration of the hook call. The number of +@values must match the fields of the structure used to register @format. + + + a span id to pass to gst_trace_span_end(), or +%GST_TRACE_SPAN_ID_NONE if no tracer is listening for spans + + + + + a #GstTraceFormat + + + + positional values matching @format + + + + + + + + Emits a span end hook. Passing %GST_TRACE_SPAN_ID_NONE is allowed and +is a no-op. + + + + + + + a span id returned by gst_trace_span_begin() + + + + + + Ends the span pointed to by @span_id and resets it to +%GST_TRACE_SPAN_ID_NONE. Safe to call when @span_id already holds +%GST_TRACE_SPAN_ID_NONE. Intended for spans stored on long-lived state +(struct fields) where the slot must be cleared after closing the span. + + + + + + + a pointer to a #GstTraceSpanId; may not be %NULL + + + + Get a list of all active tracer objects owned by the tracing framework for the entirety of the run-time of the process or till gst_deinit() is called. diff --git a/girs/GstAllocators-1.0.gir b/girs/GstAllocators-1.0.gir index d2823fcf6cf..8634717d13a 100644 --- a/girs/GstAllocators-1.0.gir +++ b/girs/GstAllocators-1.0.gir @@ -7,6 +7,118 @@ and/or use gtk-doc annotations. --> + + Android AHardwareBuffer format values. These correspond to the +`AHARDWAREBUFFER_FORMAT_*` constants in Android's `hardware_buffer.h`, but +are available regardless of which Android SDK version is used to build. + + + R8G8B8A8_UNORM format + + + R8G8B8X8_UNORM format + + + R8G8B8_UNORM format + + + R5G6B5_UNORM format + + + R16G16B16A16_FLOAT format + + + BLOB format + + + Y8Cb8Cr8_420 format + + + R10G10B10A2_UNORM format + + + D16_UNORM format + + + D24_UNORM format + + + D24_UNORM_S8_UINT format + + + D32_FLOAT format + + + D32_FLOAT_S8_UINT format + + + S8_UINT format + + + YCbCr_P010 format + + + R8_UNORM format + + + R16_UINT format + + + R16G16_UINT format + + + R10G10B10A10_UNORM format + + + YCbCr_P210 format + + + R12_UINT format + + + R14_UINT format + + + R12G12_UINT format + + + R14G14_UINT format + + + R12G12B12A12_UINT format + + + R14G14B14A14_UINT format + + + B10G10R10A2_UNORM format + + + B10G10R10X2_UNORM format + + + + Function used by memory implementations to expose AHardwareBuffer backing +through gst_ahardware_buffer_memory_peek_buffer(). + +Returning %TRUE requires setting @buffer. @buffer must be a borrowed +reference owned by @mem and valid for as long as @mem is alive. + + + %TRUE if @mem exposes an AHardwareBuffer. + + + + + a #GstMemory + + + + location for the `AHardwareBuffer` + + + + @@ -27,6 +139,12 @@ gst_memory_is_type(). + + Name of the caps feature for indicating the use of AHardwareBuffer-backed +memory. + + + Constant that defines the caps feature name for DMA buffer sharing. @@ -561,6 +679,88 @@ gst_udmabuf_allocator_init_once() did not register the allocator. + + Parses the canonical string representation used by the `ahb-format` caps +field. + + + %TRUE if @value is a known name or canonical hexadecimal value. + + + + + an AHardwareBuffer format string + + + + location for the Android AHardwareBuffer format value + + + + + + Converts an Android AHardwareBuffer format value to the canonical string +representation used by the `ahb-format` caps field. Known formats use the +Android constant suffix and unknown formats use fixed-width hexadecimal. + + + the canonical format string. + + + + + an Android AHardwareBuffer format value + + + + + + Queries whether @mem is backed by an AHardwareBuffer and, if so, returns the +AHardwareBuffer represented by this memory. +@buffer is only modified if this function returns %TRUE. + +The returned AHardwareBuffer is owned by @mem and is valid for as long as +@mem is alive. Callers must call `AHardwareBuffer_acquire()` if they want to +keep the AHardwareBuffer beyond @mem's lifetime. + + + %TRUE if @mem exposes an AHardwareBuffer. + + + + + a #GstMemory + + + + the `AHardwareBuffer` + + + + + + Registers @query as the AHardwareBuffer query function for #GstMemory +objects allocated by @allocator_type. + +This function is intended for memory implementers rather than applications. +@query must remain valid for the lifetime of the process and must only +return borrowed AHardwareBuffer references owned by the queried memory. + + + + + + + a #GstAllocator type + + + + function used to query AHardwareBuffer backing for memory allocated + by @allocator_type + + + + Return the file descriptor associated with @mem. @@ -625,6 +825,40 @@ an fd. + + The AHardwareBuffer helpers provide a common interface for detecting and +querying AHardwareBuffer-backed #GstMemory. + +The #GST_CAPS_FEATURE_MEMORY_AHARDWAREBUFFER caps feature can be used on +`video/x-raw` caps to negotiate AHardwareBuffer-backed buffers. + + + + + %TRUE if @buffer is non-empty and every memory block in @buffer +exposes an AHardwareBuffer. + + + + + a #GstBuffer + + + + + + + + %TRUE if @mem exposes an AHardwareBuffer. + + + + + a #GstMemory + + + + Check if @mem is dmabuf memory. diff --git a/girs/GstBase-1.0.gir b/girs/GstBase-1.0.gir index 409f525a15e..b8ba6c51f21 100644 --- a/girs/GstBase-1.0.gir +++ b/girs/GstBase-1.0.gir @@ -3636,6 +3636,38 @@ This must be called with sinkpad STREAM_LOCK held. + + By default, the base class will not allow two frames in a row to have the +same PTS but instead will set the second frame's PTS to GST_CLOCK_TIME_NONE. +Setting @allow_duplicated_pts would allow outputting the same PTS multiple +times. + +For audio parsers this is generally not a good idea to allow as it can lead to +unnecessary resyncs if upstream provides coarse grained timestamps and +decoders and other elements generally interpolate missing timestamps based on +the number of samples so missing timestamps would be fixed up later. + +For video parsers this generally should be allowed as various elements expect +valid timestamps on all video frames and will error out or misbehave +otherwise. + +This value is not reset during PAUSED->READY state changes. Subclasses +can call this function from their instance init function. + + + + + + + a #GstBaseParse + + + + %TRUE if parser should allow duplicated PTS on the output + + + + Optionally sets the average bitrate detected in media (if non-zero), e.g. based on metadata, as it will be posted to the application. @@ -3643,7 +3675,10 @@ e.g. based on metadata, as it will be posted to the application. By default, announced average bitrate is estimated. The average bitrate is used to estimate the total duration of the stream and to estimate a seek position, if there's no index and the format is syncable -(see gst_base_parse_set_syncable()). +(see gst_base_parse_set_syncable()). + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. @@ -3664,7 +3699,10 @@ a seek position, if there's no index and the format is syncable when it is able to determine duration and/or notices a change in the media duration. Alternatively, if @interval is non-zero (default), then stream duration is determined based on estimated bitrate, and updated every @interval -frames. +frames. + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. @@ -3693,7 +3731,10 @@ frames. and timestamping. When performing segment clipping, or seeking to a specific location, a corresponding decoder might need an initial @lead_in and a following @lead_out number of frames to ensure the desired segment is -entirely filled upon decoding. +entirely filled upon decoding. + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. @@ -3724,7 +3765,10 @@ entirely filled upon decoding. Set if frames carry timing information which the subclass can (generally) parse and provide. In particular, intrinsic (rather than estimated) time -can be obtained following a seek. +can be obtained following a seek. + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. @@ -3744,7 +3788,10 @@ can be obtained following a seek. By default, the base class might try to infer PTS from DTS and vice versa. While this is generally correct for audio data, it may not be otherwise. Sub-classes implementing such formats should disable -timestamp inferring. +timestamp inferring. + +This value is retained over PAUSED->READY state changes. Subclasses +can call this function from their instance init function. @@ -3767,7 +3814,10 @@ particular parsing of the format, it typically corresponds to 1 frame duration. If the provided values changed from previously provided ones, this will also post a LATENCY message on the bus so the pipeline can reconfigure its -global latency. +global latency. + +This value is retained over PAUSED->READY state changes. Subclasses +can call this function from their instance init function. @@ -3789,7 +3839,10 @@ global latency. Subclass can use this function to tell the base class that it needs to -be given buffers of at least @min_size bytes. +be given buffers of at least @min_size bytes. + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. @@ -3813,7 +3866,10 @@ applies when operating in push mode). That is, incoming buffers are pushed through unmodified, i.e. no #GstBaseParseClass::handle_frame will be invoked, but #GstBaseParseClass::pre_push_frame will still be invoked, so subclass can perform as much or as little is appropriate for -passthrough semantics in #GstBaseParseClass::pre_push_frame. +passthrough semantics in #GstBaseParseClass::pre_push_frame. + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. @@ -3833,7 +3889,10 @@ passthrough semantics in #GstBaseParseClass::pre_push_frame. By default, the base class will guess PTS timestamps using a simple interpolation (previous timestamp + duration), which is incorrect for data streams with reordering, where PTS can go backward. Sub-classes -implementing such formats should disable PTS interpolation. +implementing such formats should disable PTS interpolation. + +This value is retained over PAUSED->READY state changes. Subclasses +can call this function from their instance init function. @@ -3852,7 +3911,10 @@ implementing such formats should disable PTS interpolation. Set if frame starts can be identified. This is set by default and determines whether seeking based on bitrate averages -is possible for a format/stream. +is possible for a format/stream. + +This value is reset during PAUSED->READY state changes. Subclasses must +call this function from #GstBaseParseClass::start if they want to set a static value. diff --git a/girs/GstCuda-1.0.gir b/girs/GstCuda-1.0.gir index fd43ead7ea4..5477381c0b0 100644 --- a/girs/GstCuda-1.0.gir +++ b/girs/GstCuda-1.0.gir @@ -15,6 +15,69 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -108,6 +171,27 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + @@ -155,6 +239,182 @@ and/or use gtk-doc annotations. --> + + + + The subclass performs operations on aggregated video frames. +#GstCudaAggregator performs synchronization before this call, +if a prepared frame is associated with different #GstCudaStream. + +#GstCudaAggregator does not perform synchronization after this call. +Therefore, the subclass is responsible for any required synchronization +(e.g., by calling cuStreamSynchronize or setting the NEED_SYNC flag +on #GstCudaMemory). + + + + + + + a #GstCudaAggregator + + + + a #GstCudaStream that subclass can submit commands on + + + + output buffer that subclass can update + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a #GstCudaAggregator + + + + a #GstCudaStream that subclass can submit commands on + + + + output buffer that subclass can update + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A #GstAllocator subclass for cuda memory @@ -379,7 +639,7 @@ This method is conceptually identical to gst_buffer_pool_set_active method. - + @@ -413,7 +673,7 @@ This method is conceptually identical to gst_buffer_pool_set_active method. - + @@ -586,7 +846,126 @@ so all CUDA functions that operate on the current context are affected. - + + + + + + Creates a new converter instance + + + a new #GstCudaConverter instance +or %NULL if conversion is not supported + + + + + a #GstCudaContext + + + + a #GstVideoInfo + + + + a #GstVideoInfo + + + + a #GstStructure with configuration options + + + + + + Performs conversion operation + + + %TRUE if successful + + + + + + + + a #GstCudaStream + + + + a #GstVideoFrame + + + + a #GstVideoFrame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1024,10 +1403,10 @@ failure - + - + CUDA memory transfer flags @@ -1174,7 +1553,7 @@ inactive. - + @@ -1252,8 +1631,50 @@ failure - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1296,6 +1717,20 @@ failure + + + + + + + + + + + + + + @@ -1514,6 +1949,36 @@ necessary for #GstCudaContext. + + Performs an operation similar to ID3D11DeviceContext::ClearRenderTargetView. +For non-RGBA formats, the RGBA components of @color_rgba are interpreted +as YUVA values. + + + + + + + a #GstCudaContext + + + + a #GstCudaStream + + + + a #GstVideoFrame to fill + + + + normalized RGBA color components +in the range [0.0, 1.0] to fill @frame with + + + + + + Create new #GstCudaGraphicsResource with given @context and @type diff --git a/girs/GstGL-1.0.gir b/girs/GstGL-1.0.gir index 36bf358ae53..64131620f36 100644 --- a/girs/GstGL-1.0.gir +++ b/girs/GstGL-1.0.gir @@ -4872,8 +4872,8 @@ Intended for use within implementations of - - (nullable): The #GstGLFramebuffer in use by this @mix + + The #GstGLFramebuffer in use by this @mix diff --git a/girs/GstGLEGL-1.0.gir b/girs/GstGLEGL-1.0.gir index 1afff61f076..30a28b73331 100644 --- a/girs/GstGLEGL-1.0.gir +++ b/girs/GstGLEGL-1.0.gir @@ -123,6 +123,42 @@ external-only or not at all. + + + + a #GstEGLImage wrapping @client_buffer or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + a #GstGLTextureTarget + + + + a #GstGLFormat + + + + an EGLClientBuffer + + + + additional attributes to add to the `eglCreateImage`() call. + + + + user data + + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data is passed as RGBA data. Shaders later take this "RGBA" data and @@ -752,6 +788,42 @@ external-only or not at all. + + + + a #GstEGLImage wrapping @client_buffer or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + a #GstGLTextureTarget + + + + a #GstGLFormat + + + + an EGLClientBuffer + + + + additional attributes to add to the `eglCreateImage`() call. + + + + user data + + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data is passed as RGBA data. Shaders later take this "RGBA" data and diff --git a/girs/GstPbutils-1.0.gir b/girs/GstPbutils-1.0.gir index d9c732cfbfd..cc1f62bbe21 100644 --- a/girs/GstPbutils-1.0.gir +++ b/girs/GstPbutils-1.0.gir @@ -1896,10 +1896,23 @@ use the stream ID after the life-time of @info you will need to copy it. + Get the stream number of @info, a stable identifier of the stream within its +#GstDiscovererInfo. + +The contract of the stream number is: + +* Elementary streams are numbered from 0, in the order the demuxer exposes + them (their declaration order in the container) - the same order in which a + #GstStreamCollection enumerates them. This usually matches the stream index + other tools such as `ffprobe` report, but the order is the demuxer's, so it + may differ between tools for containers without a canonical stream order. +* Each actual (elementary) stream is given exactly one number. Extra caps + nodes that a parser may expose for a *single* stream do not get their own + number. +* A container is not an elementary stream and has a stream number of -1. - the stream number, -1 if no index could be determined. This property -acts as a unique identifier as a 'int' for the stream. + the stream number, or -1 if it could not be determined. @@ -3839,7 +3852,7 @@ in debugging. - + The micro version of GStreamer's gst-plugins-base libraries at compile time. diff --git a/girs/GstVideo-1.0.gir b/girs/GstVideo-1.0.gir index 2d5d81d5f6b..0eb6307d088 100644 --- a/girs/GstVideo-1.0.gir +++ b/girs/GstVideo-1.0.gir @@ -3274,7 +3274,7 @@ template caps. - + This is similar to %GST_VIDEO_FORMATS_ALL_STR but includes formats like DMA_DRM for which no software converter exists. This should be used for passthrough template caps. @@ -3624,7 +3624,7 @@ Return the width of one tile in pixels, zero if its not an integer. - + Number of video formats in #GstVideoFormat. @@ -11292,6 +11292,11 @@ bits. packed 4:4:4 RGB (R-G-B-x), 10 bits for R/G/B channel and MSB 2 bits for padding. + + Android Hardware Buffer special format. It's only used with +memory:AHardwareBuffer #GstCapsFeatures, where an extra parameter +(ahb-format) describes the AHardwareBuffer format. + Converts a FOURCC value into the corresponding #GstVideoFormat. If the FOURCC cannot be represented by #GstVideoFormat, @@ -20443,9 +20448,9 @@ versions were printing a critical warning and returned %NULL. Return all the raw video formats supported by GStreamer including -special opaque formats such as %GST_VIDEO_FORMAT_DMA_DRM for which -no software conversion exists. This should be use for passthrough -template cpas. +special opaque formats such as %GST_VIDEO_FORMAT_DMA_DRM and +%GST_VIDEO_FORMAT_AHARDWARE_BUFFER for which no software conversion exists. This +should be used for passthrough template caps. an array of #GstVideoFormat diff --git a/girs/GstVulkan-1.0.gir b/girs/GstVulkan-1.0.gir index a97d85feccc..16beeb7d9cf 100644 --- a/girs/GstVulkan-1.0.gir +++ b/girs/GstVulkan-1.0.gir @@ -14,6 +14,14 @@ and/or use gtk-doc annotations. --> + + Opt-in for a single multi-planar VkImage (e.g. NV12) instead of +per-plane images when the format and usage allow it. Use for +zero-copy interop without Vulkan Video usage bits; unsupported +combinations fall back to per-plane allocation. + + + @@ -302,6 +310,17 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + @@ -805,6 +824,17 @@ negotiation stays decoupled from a specific #GstVulkanInstance. + + + + + + + + + + + @@ -2788,6 +2818,30 @@ See also: gst_vulkan_full_screen_quad_set_blend_factors(). + + Sets the immutable sampler used for input image descriptors. The sampler is +fixed in the descriptor set layout instead of being provided when updating +the descriptor set. + +This is required, for example, for samplers with +`VkSamplerYcbcrConversion`, whose conversion state must be fixed at pipeline +creation time. + + + whether the sampler was set. + + + + + the #GstVulkanFullScreenQuad + + + + a #GstVulkanHandle + + + + See also gst_vulkan_full_screen_quad_set_vertex_buffer() @@ -2851,7 +2905,7 @@ See also: gst_vulkan_full_screen_quad_set_blend_factors(). - whether the input buffer could be changed + whether the output buffer could be changed @@ -2865,6 +2919,25 @@ See also: gst_vulkan_full_screen_quad_set_blend_factors(). + + Sets the sampler used for input image descriptors. The sampler is provided +when updating the descriptor set. + + + whether the sampler was set. + + + + + the #GstVulkanFullScreenQuad + + + + a #GstVulkanHandle + + + + @@ -2889,7 +2962,7 @@ See also: gst_vulkan_full_screen_quad_set_blend_factors(). - whether the shaders could be set + whether the uniform buffer could be set @@ -2906,7 +2979,7 @@ See also: gst_vulkan_full_screen_quad_set_blend_factors(). - whether the index data could be set + whether the vertex data could be set @@ -3184,6 +3257,23 @@ more specific implementations (#GstVulkanCommandBuffer, #GstVulkanCommandPool).< + + Frees the sampler YCbCr conversion in @handle + + + + + + + a #GstVulkanHandle containing a vulkan `VkSamplerYcbcrConversion` + + + + callback user data + + + + Frees the shader in @handle @@ -3960,6 +4050,36 @@ multiple times. This must be called before any other #GstVulkanImageMemory oper + + + + a new #GstVulkanImageMemory wrapping + @image + + + + + a #GstVulkanDevice + + + + a `VkImage` + + + + the `VkImageCreateInfo` used to create @image + + + + user data for @notify + + + + a #GDestroyNotify when @image is no longer needed + + + + Opaque #GstVulkanImageMemoryAllocator struct @@ -7644,6 +7764,36 @@ multiple times. This must be called before any other #GstVulkanImageMemory oper + + + + a new #GstVulkanImageMemory wrapping + @image + + + + + a #GstVulkanDevice + + + + a `VkImage` + + + + the `VkImageCreateInfo` used to create @image + + + + user data for @notify + + + + a #GDestroyNotify when @image is no longer needed + + + + Performs the steps necessary for executing a context query between only other elements in the pipeline @@ -7938,6 +8088,17 @@ non-NULL #GstVulkanInstance objects do not contribute to @dst. + + + + + + + + + + + @@ -7983,6 +8144,28 @@ non-NULL #GstVulkanInstance objects do not contribute to @dst. + + + + + + + + + + + + + + + + + + + + + + A #GstVulkanTrashNotify implementation for unreffing a #GstMiniObject when the associated #GstVulkanFence is signalled diff --git a/meson.build b/meson.build index 2d9faa12c78..edb842ed7da 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gstreamer-full', 'c', - version : '1.29.1.1', + version : '1.29.2.1', meson_version : '>= 1.4', default_options : ['buildtype=debugoptimized', # Needed due to https://github.com/mesonbuild/meson/issues/1889, diff --git a/release-notes/1.29/release-notes-1.29.md b/release-notes/1.29/release-notes-1.29.md index f7017b8dc16..a6988e0db7c 100644 --- a/release-notes/1.29/release-notes-1.29.md +++ b/release-notes/1.29/release-notes-1.29.md @@ -2,7 +2,7 @@ GStreamer 1.29.x is an API/ABI-unstable development series leading up to the stable 1.30 series. -The latest unstable development snapshot in the 1.29 series is [1.29.1](#1.29.1) and was released on 22 March 2026. +The latest unstable development snapshot in the 1.29 series is [1.29.2](#1.29.2) and was released on 29 June 2026. @@ -55,26 +55,26 @@ The 1.29.x release series is for testing and development purposes, and distros s Backported into 1.28: - - [Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637) - - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) - - [GThreadFunc return type fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) - - [aggregator: Handle gap event before segment (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10787) - - [aggregator: Various introspection annotations / docs fixes for vfuncs (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10720) - - [baseparse, Preserve upstream buffer duration if possible (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10672) - - [baseparse: Fix out_buffer leak in frame_free and missing ref in frame_copy (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11046) - - [bin: iterator is not nullable (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11007) - - [bitwriter: Steal owned data in reset_and_get_data() (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10802) - - [caps: Fix the features leak in gst_caps_append_structure_full (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10605) - - [filesink: Fix wrong open() in overwrite mode (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10988) - - [filesink: Report write error correctly on Windows (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10754) - - [ges: Plug all leaks reported running valgrind on our testsuite (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784) - - [gst-stats: Also allow ANSI colored logs without 0x in front of the thread id (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10854) - - [gst: Add explanatory comment to call_async implementation (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10871) - - [input-selector: fix several shortcomings (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10507) - - [multiqueue: reverse playback: use segment stop position as start time (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10764) - - [registry: Skip .dSYM bundles when loading plugins, try 2 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10850) - - [registry: Skip .dSYM bundles when loading plugins, try 3 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10964) - - [typefindfunctions: Promote y4m_typefind (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10542) + - [Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637) + - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) + - [GThreadFunc return type fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) + - [aggregator: Handle gap event before segment](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10787) + - [aggregator: Various introspection annotations / docs fixes for vfuncs](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10720) + - [baseparse, Preserve upstream buffer duration if possible](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10672) + - [baseparse: Fix out_buffer leak in frame_free and missing ref in frame_copy](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11046) + - [bin: iterator is not nullable](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11007) + - [bitwriter: Steal owned data in reset_and_get_data()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10802) + - [caps: Fix the features leak in gst_caps_append_structure_full](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10605) + - [filesink: Fix wrong open() in overwrite mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10988) + - [filesink: Report write error correctly on Windows](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10754) + - [ges: Plug all leaks reported running valgrind on our testsuite](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784) + - [gst-stats: Also allow ANSI colored logs without 0x in front of the thread id](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10854) + - [gst: Add explanatory comment to call_async implementation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10871) + - [input-selector: fix several shortcomings](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10507) + - [multiqueue: reverse playback: use segment stop position as start time](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10764) + - [registry: Skip .dSYM bundles when loading plugins, try 2](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10850) + - [registry: Skip .dSYM bundles when loading plugins, try 3](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10964) + - [typefindfunctions: Promote y4m_typefind](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10542) #### gst-plugins-base @@ -94,34 +94,35 @@ Backported into 1.28: Backported into 1.28: - - [Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637) - - [Fix scaling and resizing with UIView on EAGL and Vulkan (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10556) - - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) - - [GThreadFunc return type fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) - - [Various element factory metadata fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) - - [audiobuffersplit: Various smaller fixes and implement handling of negative rates correctly (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10568) - - [audiodecoder / videodecoder: Fix gap event handling (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738) - - [compositor: Do copy_metas also for background frame (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10824) - - [compositor: move gst_compositor_init_blend() to element class_init (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11078) - - [decodebin3: Fix switch to smaller collections (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10583) - - [decodebin3: Improve handling collection change on existing pad (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8700) - - [glcolorconvert: Fix NULL pointer dereference on buffers without video meta (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10939) - - [glupload: Fix linking glupload with restrictive caps filter (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11029) - - [input-selector: fix several shortcomings (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10507) - - [opusenc: Use correct memcpy() size when copying Vorbis channel positions (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10982) - - [playsink: unref color balance channels with g_object_unref() (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10701) - - [riff: Correctly check that enough RGB palette data is available (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10882) - - [rtcp: Fix buffer overread in SDES packet parsing (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10730) - - [rtp: Add mappings for H266 and AV1 encoding-names (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10649) - - [rtpbuffer: Add validation for CSRC list length (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10956) - - [rtsp: Validate transport parameter parsing in RFC 2326 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10500) - - [typefindfunctions: Promote y4m_typefind (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10542) - - [video-converter: Do not transform_metas with 0 width or height (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10832) - - [video-converter: fix I420/A420 BGRA/ARGB output on big-endian (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11013) - - [video: fix too small default stride for UYVP with odd widths (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11033) - - [videodecoder: Handle recovery from temporary reordered output (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10558) - - [videofilter: Add VIDEO_ALIGNMENT to downstream pool (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10808) - - [videorate: Fix unrestored caps on backward PTS (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11020) + - [Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637) + - [Fix scaling and resizing with UIView on EAGL and Vulkan](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10556) + - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) + - [GThreadFunc return type fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) + - [Various element factory metadata fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) + - [audiobuffersplit: Various smaller fixes and implement handling of negative rates correctly](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10568) + - [audiodecoder / videodecoder: Fix gap event handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738) + - [compositor: Do copy_metas also for background frame](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10824) + - [compositor: move gst_compositor_init_blend() to element class_init](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11078) + - [decodebin3: Fix switch to smaller collections](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10583) + - [decodebin3: Improve handling collection change on existing pad](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8700) + - [glcolorconvert: Fix NULL pointer dereference on buffers without video meta](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10939) + - [glupload: Fix linking glupload with restrictive caps filter](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11029) + - [input-selector: fix several shortcomings](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10507) + - [opusenc: Use correct memcpy() size when copying Vorbis channel positions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10982) + - [playsink: unref color balance channels with g_object_unref()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10701) + - [riff: Correctly check that enough RGB palette data is available](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10882) + - [rtcp: Fix buffer overread in SDES packet parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10730) + - [rtp: Add mappings for H266 and AV1 encoding-names](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10649) + - [rtpbuffer: Add validation for CSRC list length](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10956) + - [rtsp: Validate transport parameter parsing in RFC 2326](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10500) + - [rtsp: gstrtspurl: Parse URL having user without password](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10847) + - [typefindfunctions: Promote y4m_typefind](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10542) + - [video-converter: Do not transform_metas with 0 width or height](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10832) + - [video-converter: fix I420/A420 BGRA/ARGB output on big-endian](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11013) + - [video: fix too small default stride for UYVP with odd widths](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11033) + - [videodecoder: Handle recovery from temporary reordered output](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10558) + - [videofilter: Add VIDEO_ALIGNMENT to downstream pool](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10808) + - [videorate: Fix unrestored caps on backward PTS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11020) #### gst-plugins-good @@ -143,7 +144,6 @@ Backported into 1.28: - [qt6: fixed build for Android](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10781) - [qtdemux: Handle 'pict' tracks as if they were video tracks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10688) - [qtmux: include gstqtmux-doc.c in doc_sources](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10763) - - [rgvolume: don't apply dBSPL reference level compensation for LUFS values (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10997) - [rtp: Lower Opus (de)payloader ranks to SECONDARY](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10940) - [rtspsrc: add backchannel-http-method property for HTTP tunnel mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10999) - [rtspsrc: Correctly parse RTSP 2.0 RTP-Info headers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8571) @@ -155,34 +155,35 @@ Backported into 1.28: Backported into 1.28: - - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) - - [GThreadFunc return type fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) - - [Qt6GLVideoItem: caps update fixed (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10959) - - [Various element factory metadata fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) - - [gstrtspsrc: Set new mki in the encoder upon crypto update (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10744) - - [hlsdemux2: fix seekable range for live HLS streams (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11044) - - [meson: Fix libxml2 not building due to wrong option type (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10615) - - [qml6glsrc: Fix rendering of scene with clipped items (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10572) - - [qtdemux: Don't ignore flow return when pushing queued buffers downstream (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10570) - - [qtdemux: Don't immediately push segment after moov in push mode for fmp4 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11014) - - [qtdemux: Fix handling of in-between fragments without tfdt (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10590) - - [qtdemux: Fix invalid WebVTT timestamps (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11017) - - [qtdemux: Fix out-of-bounds read when parsing PlayReady DRM UUIDs (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10880) - - [qtdemux: Make sure to not output the same samples multiple times in reverse playback mode (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10548) - - [qtdemux: Push raw audio/video buffers downstream in reverse order if rate < 0 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10571) - - [qtdemux: Set the segment position to the start on EOS in reverse playback mode (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10534) - - [rtph264depay: fix invalid memory access in gst_rtp_h264_finish_fragmentation_unit (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10951) - - [rtpqdm2depay: error out if anyone tries to use this element (and remove it) (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10886) - - [rtpsource: Add locking for receive reports table (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10683) - - [rtptwcc: fix feedback packet count wrapping at 255 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10920) - - [rtspsrc: fix Memory leak in gst_rtspsrc_close() when GST_RTSP_EEOF error occurs (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10759) - - [v4l2: Add support for AV1 stateful V4l2 decoder (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9892) - - [vpxdec: Support downstream pools with alignment requirements (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10442) - - [wavenc: Skip writing empty LIST INFO chunk (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11049) - - [wavpack: Fix handling of format changes, extend parser with new features, handle non-S32 samples in all variations (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10496) - - [wavparse: Avoid integer overflow and out-of-bounds read when parsing adtl chunks (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10900) - - [wavparse: Avoid overflow in length when setting ignore-length=true (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11004) - - [wavparse: Fix parsing of RF64 wave files (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11008) + - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) + - [GThreadFunc return type fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) + - [Qt6GLVideoItem: caps update fixed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10959) + - [Various element factory metadata fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) + - [gstrtspsrc: Set new mki in the encoder upon crypto update](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10744) + - [hlsdemux2: fix seekable range for live HLS streams](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11044) + - [meson: Fix libxml2 not building due to wrong option type](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10615) + - [qml6glsrc: Fix rendering of scene with clipped items](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10572) + - [qtdemux: Don't ignore flow return when pushing queued buffers downstream](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10570) + - [qtdemux: Don't immediately push segment after moov in push mode for fmp4](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11014) + - [qtdemux: Fix handling of in-between fragments without tfdt](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10590) + - [qtdemux: Fix invalid WebVTT timestamps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11017) + - [qtdemux: Fix out-of-bounds read when parsing PlayReady DRM UUIDs](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10880) + - [qtdemux: Make sure to not output the same samples multiple times in reverse playback mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10548) + - [qtdemux: Push raw audio/video buffers downstream in reverse order if rate < 0](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10571) + - [qtdemux: Set the segment position to the start on EOS in reverse playback mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10534) + - [rgvolume: don't apply dBSPL reference level compensation for LUFS values](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10997) + - [rtph264depay: fix invalid memory access in gst_rtp_h264_finish_fragmentation_unit](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10951) + - [rtpqdm2depay: error out if anyone tries to use this element (and remove it)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10886) + - [rtpsource: Add locking for receive reports table](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10683) + - [rtptwcc: fix feedback packet count wrapping at 255](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10920) + - [rtspsrc: fix Memory leak in gst_rtspsrc_close() when GST_RTSP_EEOF error occurs](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10759) + - [v4l2: Add support for AV1 stateful V4l2 decoder](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9892) + - [vpxdec: Support downstream pools with alignment requirements](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10442) + - [wavenc: Skip writing empty LIST INFO chunk](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11049) + - [wavpack: Fix handling of format changes, extend parser with new features, handle non-S32 samples in all variations](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10496) + - [wavparse: Avoid integer overflow and out-of-bounds read when parsing adtl chunks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10900) + - [wavparse: Avoid overflow in length when setting ignore-length=true](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11004) + - [wavparse: Fix parsing of RF64 wave files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11008) #### gst-plugins-bad @@ -206,7 +207,6 @@ Backported into 1.28: - [play: Add new tracks-selected message to notify about track selections having happened](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10509) - [rtmp2: Don't retry on G_IO_ERROR_TIMED_OUT](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8989) - [srtpdec: Add API for invalidating keys for a specific SSRC](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10980) - - [rtsp: gstrtspurl: Parse URL having user without password (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10847) - [tests: add vulkan av1 decode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10725) - [tests: fix vp9 vulkan decode test on radv](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10919) - [timecodestamper: Add timecode source mode based on ST12-2/3 ancillary meta](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10774) @@ -223,81 +223,81 @@ Backported into 1.28: Backported into 1.28: - - [analytics: Set default pixel-aspect-ratio for inference elements (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10987) - - [Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637) - - [Fix dims_order handling (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10861) - - [Fix scaling and resizing with UIView on EAGL and Vulkan (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10556) - - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) - - [GThreadFunc return type fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) - - [GstPlay: fix segmentation fault due to use after free (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10647) - - [Minimal support for compiling with zxing-cpp 3.x (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10790) - - [Various element factory metadata fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) - - [ajasink: Only allow 6 / 8 / 16 audio channels (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10521) - - [ajasinkcombiner: Only forward the segment events from the video sinkpad (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10747) - - [applemedia: Fix vtenc draining logic, port other existing fixes between vtdec and vtenc (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10849) - - [applemedia: elements can now be individually registered with gst-full (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10780) - - [asiosink: Fill silence when paused (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10823) - - [audiobuffersplit: Various smaller fixes and implement handling of negative rates correctly (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10568) - - [audiobuffersplit: fix reverse playback (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10705) - - [av1dec: Enable VIDEO_META and VIDEO_ALIGNMENT for pool (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10865) - - [av1parse: split the alignment and stream type logic (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10868) - - [av1parse: Misc fixes 2 typo (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11001) - - [av1parse, vp9parse: Remove segment clipping to let downstream handle frame boundaries (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11081) - - [baseparse, h264parse, h265parse: Preserve upstream buffer duration if possible (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/ - [baseparse, h264parse, h265parse: Preserve upstream buffer duration if possible (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10672) - - [ccconverter: Reset counters on flush-stop (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10842) - - [cea608mux: fix overflow when calculating output PTS (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10706) - - [codecs: v4l2: Add short and long term ref sets support in v4l2 codecs -- stable ABI (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10820) - - [codectimestamper: Fix latency query handling (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10588) - - [cudaupload, cudadownload: Fix CUDA/GL interop copy path (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10495) - - [dashsink: test: use playbin3 for DASH playback verification (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10834) - - [decklinkvideosink: fix element leak in decklink callback (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11006) - - [dtls: unregister signal handlers from connection (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11054) - - [dvbsuboverlay: Add missing bounds checks to the parser everywhere (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10884) - - [gdppay: Fix null pointer dereference on duplicated caps event (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10911) - - [h264,h265ccextractor: Fix framerate in initial caps (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10840) - - [h264parse: Fix framerate calculation and interlaced features (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8310) - - [h264parser: Fix memory leak in gst_h264_parser_parse_nal() (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11052) - - [h265parser: Validate num_decoding_units_minus1 in pic_timing SEI (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10902) - - [h266parser: Fix APS ID bounds check in APS parsing (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10888) - - [h266parser: Fix out of bounds write when parsing pic_timing SEI (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10889) - - [h266parser: Validate tile index bounds in picture partition parsing (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10887) - - [libs: jpegparser: boundary checks before copying it (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10885) - - [meson: Add a subproject for providing the LunarG MoltenVK SDK (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10743) - - [meson: Explicitly use cpp_std=c++11 for decklink (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10801) - - [meson: Fix downloading MoltenVK SDK, make it work when meson-installed (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10797) - - [meson: Fix libxml2 not building due to wrong option type (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10615) - - [mpeghdec: memory leak fix in MPEG-H Audio decoder plugin (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10593) - - [mpegtspacketizer: Handle clock change/resets without skew correction (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10559) - - [mxfdemux: always send a segment before sending eos or segment-done (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10569) - - [mxfdemux: fix gst_mxf_demux_pad_get_stream_time () (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10550) - - [nvcodec: Add capability caching to speed up plugin initialization (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10339) - - [objectdetectionoverlay: add support for rotated bounding boxes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10552) - - [openh264enc: remove broken drain and simplify handle_frame (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10589) - - [soundtouch: Only allow up to 192kHz and 16 channels (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11000) - - [srtpenc: preserve ROC when master key is updated for an ongoing session (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10969) - - [svtav1: fix "Level of parallelism" property type discrepencies (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10836) - - [tsdemux: Fix Continuity Counter handling (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10560) - - [tsmux: reduce noise for DEBUG log level (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10474) - - [tsmux: Fix integer overflow in SCTE35 NULL interval (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11066) - - [v4l2: Add support for AV1 stateful V4l2 decoder (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9892) - - [vabasetransform: copy buffer's metadata at copy when import buffer (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10800) - - [vavp8enc: set color format chroma (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10803) - - [vkav1dec: fix to set SavedOrderHints properly (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10829) - - [vtdec: Avoid busy looping when queue length is smaller than DPB size (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10818) - - [vtdec: Don't re-create session if only the framerate changed (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10686) - - [vtdec: Fix race condition when negotiating during playback (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10679) - - [vtdec: Fix wrong DPB size check in the output loop (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10858) - - [vtdec: Reverse playback fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10613) - - [vtenc: Fix DTS offset calculation (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9097) - - [vtdec: Store supplemental codec support in a global variable (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11018) - - [vulkan: load video function pointers conditionally based on codec operation (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10771) - - [vulkan: Clear mutex when GstVulkanImageMemory is freed (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11047) - - [wayland: Fix CLAMP operation of maxFALL and maxCLL (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10585) - - [wayland: display: Add protection when replacing wl_output (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11002) - - [waylandsink: make gst_wl_window_commit_buffer handle NULL buffers (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10786) - - [webrtc: sink floating refs of ICE transports (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10532) - - [webrtcbin: Check the presence of encoding-name fields in answer caps (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10639) - - [zxing: Fix version check for zxing-cpp 3.0.1 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10812) + - [analytics: Set default pixel-aspect-ratio for inference elements](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10987) + - [Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637) + - [Fix dims_order handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10861) + - [Fix scaling and resizing with UIView on EAGL and Vulkan](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10556) + - [Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667) + - [GThreadFunc return type fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682) + - [GstPlay: fix segmentation fault due to use after free](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10647) + - [Minimal support for compiling with zxing-cpp 3.x](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10790) + - [Various element factory metadata fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) + - [ajasink: Only allow 6 / 8 / 16 audio channels](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10521) + - [ajasinkcombiner: Only forward the segment events from the video sinkpad](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10747) + - [applemedia: Fix vtenc draining logic, port other existing fixes between vtdec and vtenc](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10849) + - [applemedia: elements can now be individually registered with gst-full](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10780) + - [asiosink: Fill silence when paused](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10823) + - [audiobuffersplit: Various smaller fixes and implement handling of negative rates correctly](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10568) + - [audiobuffersplit: fix reverse playback](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10705) + - [av1dec: Enable VIDEO_META and VIDEO_ALIGNMENT for pool](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10865) + - [av1parse: split the alignment and stream type logic](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10868) + - [av1parse: Misc fixes 2 typo](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11001) + - [av1parse, vp9parse: Remove segment clipping to let downstream handle frame boundaries](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11081) + - [baseparse, h264parse, h265parse: Preserve upstream buffer duration if possible](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10672) + - [ccconverter: Reset counters on flush-stop](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10842) + - [cea608mux: fix overflow when calculating output PTS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10706) + - [codecs: v4l2: Add short and long term ref sets support in v4l2 codecs -- stable ABI](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10820) + - [codectimestamper: Fix latency query handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10588) + - [cudaupload, cudadownload: Fix CUDA/GL interop copy path](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10495) + - [dashsink: test: use playbin3 for DASH playback verification](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10834) + - [decklinkvideosink: fix element leak in decklink callback](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11006) + - [dtls: unregister signal handlers from connection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11054) + - [dvbsuboverlay: Add missing bounds checks to the parser everywhere](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10884) + - [gdppay: Fix null pointer dereference on duplicated caps event](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10911) + - [h264,h265ccextractor: Fix framerate in initial caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10840) + - [h264parse: Fix framerate calculation and interlaced features](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8310) + - [h264parser: Fix memory leak in gst_h264_parser_parse_nal()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11052) + - [h265parser: Validate num_decoding_units_minus1 in pic_timing SEI](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10902) + - [h266parser: Fix APS ID bounds check in APS parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10888) + - [h266parser: Fix out of bounds write when parsing pic_timing SEI](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10889) + - [h266parser: Validate tile index bounds in picture partition parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10887) + - [libs: jpegparser: boundary checks before copying it](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10885) + - [meson: Add a subproject for providing the LunarG MoltenVK SDK](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10743) + - [meson: Explicitly use cpp_std=c++11 for decklink](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10801) + - [meson: Fix downloading MoltenVK SDK, make it work when meson-installed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10797) + - [meson: Fix libxml2 not building due to wrong option type](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10615) + - [mpeghdec: memory leak fix in MPEG-H Audio decoder plugin](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10593) + - [mpegtspacketizer: Handle clock change/resets without skew correction](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10559) + - [mxfdemux: always send a segment before sending eos or segment-done](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10569) + - [mxfdemux: fix gst_mxf_demux_pad_get_stream_time ()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10550) + - [nvcodec: Add capability caching to speed up plugin initialization](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10339) + - [objectdetectionoverlay: add support for rotated bounding boxes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10552) + - [openh264enc: remove broken drain and simplify handle_frame](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10589) + - [soundtouch: Only allow up to 192kHz and 16 channels](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11000) + - [srtpenc: preserve ROC when master key is updated for an ongoing session](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10969) + - [svtav1: fix "Level of parallelism" property type discrepencies](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10836) + - [tsdemux: Fix Continuity Counter handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10560) + - [tsmux: reduce noise for DEBUG log level](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10474) + - [tsmux: Fix integer overflow in SCTE35 NULL interval](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11066) + - [v4l2: Add support for AV1 stateful V4l2 decoder](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9892) + - [vabasetransform: copy buffer's metadata at copy when import buffer](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10800) + - [vavp8enc: set color format chroma](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10803) + - [vkav1dec: fix to set SavedOrderHints properly](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10829) + - [vtdec: Avoid busy looping when queue length is smaller than DPB size](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10818) + - [vtdec: Don't re-create session if only the framerate changed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10686) + - [vtdec: Fix race condition when negotiating during playback](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10679) + - [vtdec: Fix wrong DPB size check in the output loop](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10858) + - [vtdec: Reverse playback fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10613) + - [vtenc: Fix DTS offset calculation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9097) + - [vtdec: Store supplemental codec support in a global variable](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11018) + - [vulkan: load video function pointers conditionally based on codec operation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10771) + - [vulkan: Clear mutex when GstVulkanImageMemory is freed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11047) + - [wayland: Fix CLAMP operation of maxFALL and maxCLL](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10585) + - [wayland: display: Add protection when replacing wl_output](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11002) + - [waylandsink: make gst_wl_window_commit_buffer handle NULL buffers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10786) + - [webrtc: sink floating refs of ICE transports](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10532) + - [webrtcbin: Check the presence of encoding-name fields in answer caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10639) + - [zxing: Fix version check for zxing-cpp 3.0.1](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10812) #### gst-plugins-ugly @@ -305,8 +305,8 @@ Backported into 1.28: Backported into 1.28: - - [asfdemux: Error out on files with more than 32 streams (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10881) - - [rmdemux: Check if new video fragment overflows the fragment storage before storing it (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10883) + - [asfdemux: Error out on files with more than 32 streams](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10881) + - [rmdemux: Check if new video fragment overflows the fragment storage before storing it](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10883) #### GStreamer Rust plugins @@ -317,7 +317,6 @@ Backported into 1.28: - [dashsink2: add new DASH sink element that uses CMAF muxer without splitmuxsink](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2186) - [flate: adding flate, for general purpose compress/decompress](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2889) - [hlssink3: Add HLS WebVTT sink element](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2890) - - [png: implement image repacking when buffer is padded (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2962) - [rtp: Bump ranks of new Rust (de)payloaders to PRIMARY](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2918) - [rtp: basepay2: default to lower MTU of 1200 instead of 1400](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2785) - [rtprecv: Add `add-reference-timestamp-meta` property](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2953) @@ -333,24 +332,25 @@ Backported into 1.28: Backported into 0.15: - - [burn: yoloxinference: Restrict widths/heights to a multiple of 32 (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2966) - - [cargo_wrapper: Add nasm dir to path only if needed (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2897) - - [Don't transform push_event() false returns into flow errors (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2911) - - [fallbacksrc: Send select-streams event to collection source element (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2907) - - [gst-plugins-rs: only add example features when dependencies are found (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2824) - - [gtk4paintablesink: Error out in NULL->READY if there is no default GDK display (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2930) - - [rtpav1pay: insert sequence header if a keyframe is missing it (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2888) - - [rtpbin2: don't panic in Drop impl (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2948) - - [rtpsend: send mandatory events on the rtcp srcpad before sending the first buffer (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2894) + - [burn: yoloxinference: Restrict widths/heights to a multiple of 32](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2966) + - [cargo_wrapper: Add nasm dir to path only if needed](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2897) + - [Don't transform push_event() false returns into flow errors](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2911) + - [fallbacksrc: Send select-streams event to collection source element](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2907) + - [gst-plugins-rs: only add example features when dependencies are found](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2824) + - [gtk4paintablesink: Error out in NULL->READY if there is no default GDK display](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2930) + - [png: implement image repacking when buffer is padded](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2962) + - [rtpav1pay: insert sequence header if a keyframe is missing it](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2888) + - [rtpbin2: don't panic in Drop impl](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2948) + - [rtpsend: send mandatory events on the rtcp srcpad before sending the first buffer](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2894) - [rtspsrc2: Implement authentication support](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2957) - - [speechmatics: fix first_buffer_pts race condition in dispatch_message (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2898) - - [speechmatics, textaccumulate: fix flushing issues (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2926) - - [threadshare: examples: add rtpbin2 send / recv (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2938) - - [threadshare: fix socket leak in ts-udpsink (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2760) - - [threadshare: udpsink/src: don't error out failing to send packet to a client / receiving an ICMP error (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2928) - - [Update dependencies (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2916) - - [webrtc: Silence new clippy warning (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2934) - - [whisper: update to latest release 0.16 (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2951) + - [speechmatics: fix first_buffer_pts race condition in dispatch_message](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2898) + - [speechmatics, textaccumulate: fix flushing issues](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2926) + - [threadshare: examples: add rtpbin2 send / recv](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2938) + - [threadshare: fix socket leak in ts-udpsink](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2760) + - [threadshare: udpsink/src: don't error out failing to send packet to a client / receiving an ICMP error](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2928) + - [Update dependencies](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2916) + - [webrtc: Silence new clippy warning](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2934) + - [whisper: update to latest release 0.16](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2951) #### gst-libav @@ -358,13 +358,13 @@ Backported into 0.15: Backported into 1.28: - - [Various element factory metadata fixes (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) - - [audiodecoder / videodecoder: Fix gap event handling (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738) - - [avviddec: Allow stride changes for some decoders (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8963) - - [avviddec: Fix handling of mixed interlaced content (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9956) - - [avviddec: Handle field/order changes in mixed interlace mode (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10578) - - [gst-libav: avvidcmp: set colorimetry on AVFrame (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10090) - - [libav: Don't process lines that won't be outputted (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10557) + - [Various element factory metadata fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728) + - [audiodecoder / videodecoder: Fix gap event handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738) + - [avviddec: Allow stride changes for some decoders](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8963) + - [avviddec: Fix handling of mixed interlaced content](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9956) + - [avviddec: Handle field/order changes in mixed interlace mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10578) + - [gst-libav: avvidcmp: set colorimetry on AVFrame](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10090) + - [libav: Don't process lines that won't be outputted](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10557) #### gst-rtsp-server @@ -372,9 +372,9 @@ Backported into 1.28: Backported into 1.28: - - [rtsp-client: Lock media when unlinking session medias (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11040) - - [rtsp-stream: Clear send_thread when it's freed (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10844) - - [rtspclient: expose property to control error posting on RTCP timeout (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10819) + - [rtsp-client: Lock media when unlinking session medias](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11040) + - [rtsp-stream: Clear send_thread when it's freed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10844) + - [rtspclient: expose property to control error posting on RTCP timeout](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10819) #### gstreamer-sharp @@ -386,8 +386,8 @@ Backported into 1.28: Backported into 1.28: - - [Python typing (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10526) - - [bin: iterator is not nullable (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11007) + - [Python typing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10526) + - [bin: iterator is not nullable](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11007) #### gst-editing-services @@ -397,9 +397,9 @@ Backported into 1.28: Backported into 1.28: - - [Plug all leaks reported running valgrind on our testsuite (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784) - - [Remove spurious python-embed dependency from libges (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11065) - - [meson: Fix libxml2 not building due to wrong option type (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10615) + - [Plug all leaks reported running valgrind on our testsuite](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784) + - [Remove spurious python-embed dependency from libges](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11065) + - [meson: Fix libxml2 not building due to wrong option type](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10615) #### gst-devtools, gst-validate + gst-integration-testsuites @@ -415,7 +415,7 @@ Backported into 1.28: Backported into 1.28: - - [Update Rust dependencies (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10867) + - [Update Rust dependencies](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10867) #### gstreamer-docs @@ -424,7 +424,7 @@ Backported into 1.28: Backported into 1.28: - - [tutorials/android: bump up ndkVersion to 29 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10782) + - [tutorials/android: bump up ndkVersion to 29](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10782) #### Development build environment @@ -438,9 +438,9 @@ Backported into 1.28: Backported into 1.28: - - [Add a subproject for providing the LunarG MoltenVK SDK (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10743) - - [Fix downloading MoltenVK SDK, make it work when meson-installed (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10797) - - [wraps: update libxml2 to v2.15.2 (backported)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10974) + - [Add a subproject for providing the LunarG MoltenVK SDK](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10743) + - [Fix downloading MoltenVK SDK, make it work when meson-installed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10797) + - [wraps: update libxml2 to v2.15.2](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10974) #### Cerbero build tool and packaging changes in 1.29.1 @@ -454,39 +454,39 @@ Backported into 1.28: Backported into 1.28: - - [Add tvOS support (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2080) - - [Ensure there's no gstreamer in the artifact cache (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2144) - - [Rename vaapi variant to va and by default on Linux, test built plugins correctly on CI (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2131) - - [Update to Rust 1.93 / cargo-c 0.10.20 (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2071) - - [Update to Rust 1.94 and cargo-c 0.10.21 (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2156) - - [build: include plugin's .pc file in Linux and macOS (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2154) - - [bump up to NDK 29 and pin cpp_std to c++11 in opencore-amr (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2090) - - [cerbero: Use static python requires for all wheels (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2116) - - [cerbero: add environment variable for building run with background priority (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2082) - - [cerbero: os.PRIO_DARWIN_PROCESS is only available on Python 3.12+ (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2142) - - [fetch: use the Oven for parsing the dependency tree (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2115) - - [filesprovider: Check missing files at the recipe level on CI runs (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2068) - - [glib.recipe: Upstream old iOS GIO_MODULE_DIR hack (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2073) - - [gtk.recipe: Enable gstreamer media backend on Windows (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2121) + - [Add tvOS support](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2080) + - [Ensure there's no gstreamer in the artifact cache](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2144) + - [Rename vaapi variant to va and by default on Linux, test built plugins correctly on CI](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2131) + - [Update to Rust 1.93 / cargo-c 0.10.20](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2071) + - [Update to Rust 1.94 and cargo-c 0.10.21](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2156) + - [build: include plugin's .pc file in Linux and macOS](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2154) + - [bump up to NDK 29 and pin cpp_std to c++11 in opencore-amr](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2090) + - [cerbero: Use static python requires for all wheels](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2116) + - [cerbero: add environment variable for building run with background priority](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2082) + - [cerbero: os.PRIO_DARWIN_PROCESS is only available on Python 3.12+](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2142) + - [fetch: use the Oven for parsing the dependency tree](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2115) + - [filesprovider: Check missing files at the recipe level on CI runs](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2068) + - [glib.recipe: Upstream old iOS GIO_MODULE_DIR hack](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2073) + - [gtk.recipe: Enable gstreamer media backend on Windows](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2121) - [gtk: Enable GStreamer media backend on Windows](https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/556) - - [inno: assorted fixes for Registry key handling (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2170) - - [inno: Fix incorrect MSVC redistributable when cross-building for Arm64 (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2081) - - [inno: Restrict usage to native Windows as exposed by sys.platform (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2083) - - [inno: fix environment variable being created outside SessionManager/Environment (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2152) - - [libpng: update to 1.6.55 (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2100) - - [libsoup: update to 3.6.6 (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2150) - - [libsrtp: update to v2.8.0 (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2167) - - [osx-framework: Add missing gstreamer libraries (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2122) - - [osx: fix file duplication in .pkg payloads (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2113) - - [packaging: Fix missing devel payloads for gstreamer-1.0-python (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2171) - - [pygobject.recipe: Fix overflow when comparing GstMessageType on Windows (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2089) - - [recipe: do not run symbolication if nodebug (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2149) - - [wheel: Add a new gstreamer_meta package with fewer deps (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2087) - - [wheel: Add debuginfo wheel (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2077) - - [wheels: Add a new meta-package 'gstreamer_bundle' (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2103) - - [wheels: Add proper description / long_description (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2110) - - [wheels: Don't raise an exception if cli exits with non-zero code (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2120) - - [x265: drop common source recipe (backported)](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2114) + - [inno: assorted fixes for Registry key handling](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2170) + - [inno: Fix incorrect MSVC redistributable when cross-building for Arm64](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2081) + - [inno: Restrict usage to native Windows as exposed by sys.platform](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2083) + - [inno: fix environment variable being created outside SessionManager/Environment](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2152) + - [libpng: update to 1.6.55](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2100) + - [libsoup: update to 3.6.6](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2150) + - [libsrtp: update to v2.8.0](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2167) + - [osx-framework: Add missing gstreamer libraries](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2122) + - [osx: fix file duplication in .pkg payloads](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2113) + - [packaging: Fix missing devel payloads for gstreamer-1.0-python](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2171) + - [pygobject.recipe: Fix overflow when comparing GstMessageType on Windows](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2089) + - [recipe: do not run symbolication if nodebug](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2149) + - [wheel: Add a new gstreamer_meta package with fewer deps](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2087) + - [wheel: Add debuginfo wheel](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2077) + - [wheels: Add a new meta-package 'gstreamer_bundle'](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2103) + - [wheels: Add proper description / long_description](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2110) + - [wheels: Don't raise an exception if cli exits with non-zero code](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2120) + - [x265: drop common source recipe](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2114) #### Contributors to 1.29.1 @@ -518,6 +518,754 @@ suggestions or helped testing. Thank you all! - [List of Merge Requests applied in 1.29.1](https://gitlab.freedesktop.org/groups/gstreamer/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged&milestone_title=1.29.1) - [List of Issues fixed in 1.29.1](https://gitlab.freedesktop.org/groups/gstreamer/-/issues?scope=all&utf8=%E2%9C%93&state=closed&milestone_title=1.29.1) + + +### 1.29.2 + +The first API/ABI-unstable 1.29.x development snapshot release (1.29.2) was released on 29 June 2026. + +Any newly-added API in the 1.29.x series may still change or be removed again before 1.30 and should be considered unstable until 1.30 is released. + +The 1.29.x release series is for testing and development purposes, and distros should probably not package it. + +#### Highlighted changes in 1.29.2 + + - webrtcbin2: New scalable WebRTC bin that uses fewer threads and native Rust DTLS, ICE and RTP session management implementations + - rtspsrc2: implement support for SRTP, authentication, HTTP tunnelling, keep alive, stream selection, TLS validation, latency configuration + - rtp2: New Rust RTP payloader and depayloader implementations for MPA audio, MPEG-2 video and raw video + - Digitally Signed Content (DSC) support, initially for H.266 video + - New D3D12-based element which performs color lookup operations using user-provided Adobe .cube LUT files + - videoencoders: Support adaptive presets with resolution-dependent properties and implement in x264enc and nvh264enc + - closedcaption: add h266seiinserter; add "do-timestamp" property to codecseiiinserter/merge_requests/10514) + - flv: Add support for AV1 video + - v4l2: add capture timestamps to buffers in v4l2src, and "bitrate" and "gop-size" properties to video encoders + - applemedia: new iosurface helper library providing a memory:IOSurface abstraction + - AMF: add super resolution hq-scaler component + - New OpenGL glalphacombine element for RGBA inputs and Vulkan/OpenGL memory support for alphacombine + - openjpeg: Add support for high bit depth formats + - analytics: add semantic tag getter to GstAnalyticsMtd + - tensordecoders: Add YOLO26 detection decoder + - tfliteinference: support for external delegates, XNNPACK, and GRAY8 input + - MP4: add support for losslessly-compressed video + - matroskamux: add TrueHD audio and HDMV PGS subpicture support + - playsink reconfiguration stability improvements + - New agingradio and sofalizer audio effect elements + - New image-rs based imagersoverlay element in Rust to replace gdkpixbufoverlay + - webrtcsink: add v4l2h264enc (Raspberry Pi) encoder support and a signaller for Unreal Engine PixelStreaming + - webrtcsink, webrtcsource: make custom signalling protocol extendable + - Speech elements: implement support for non-synchronized output + - d3d12: Add support for hardware-accelerated decoding of VP9 with alpha + - androidmedia: New source element for Android assets + - filesink: Add support for Windows file sharing mode to allow reading of file while it's being written to + - tracing: custom spans and events API and new tracers that integrate with the Rust tracing ecosystem + - editing-services: auto-plug raw video converters from the registry based on compositor memory family and prepare for multi-threaded usage + - dots-viewer: General enhancement of the web app + - New viuersink video sink that plays video in the terminal, replacing aasink and cacasink + - cerbero: Added ccache support for MSVC + - Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements + +#### gstreamer + +Core: + + - [Add a GST_SEGMENT debug category](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11181) + - [cpuid: Add RISC-V Vector extension detection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11768) + - [doc: Improve documentation of gst_debug_bin_to_dot_file()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11289) + - [value: Add gst_value_take_structure() and use it where possible](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7647) + - [systemclock: Add gst_system_clock_new() to create a new instance of the system clock](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11474) + - [pluginfeature: export the rank as a property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11390) + - [plugin: Fix typo in documentation comment](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11593) + - [preset: Support adaptive presets with resolution-dependent properties](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11092) + - [ReferenceTimestampMeta: add documentation for timestamp/x-system-monotonic](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10211) + - [tracer: Add a custom span API](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11708) + - [riscv: Add host_defines and ABI struct definitions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11773) + +Core Libraries: + + - [aggregator: Improve locking, fix flushing deadlock](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11864) + - [aggregator: Don't clear the pad's segment on flush](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/612) + - [aggregator: Wake up src pad task on reconfigure event](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/707) + - [basesrc, basetransform: add a virtual method to prepare the pool & allocator](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11425) + - [ptp-helper: Fix copy&paste mistakes in error messages](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11353) + +Core Elements and Tracers: + + - [filesink: Add support for Windows file sharing mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11733) + - [inputselector several raciness fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11928) + - [Pass a strong reference to the user_data to gst_pad_start_task()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11489) + - [tracers: gst-dots: General enhancement of the web app](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11082) + - [tools: fix gst-inspect for nested caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11521) + +Backported into 1.28: + + - [aggregator: Fix documentation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11485) + - [allocator: Use g_try_malloc() instead of g_malloc() for sysmem](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11540) + - [baseparse: Fix memory leak when subclass returns error](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11525) + - [bitwriter: Allow unsetting set bits when overwriting them](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11442) + - [bufferpool: avoid leaking partially preallocated buffers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11663) + - [caps: fix multiple caps leaks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11751) + - [check: Add API to run tests without fork(), adjust existing tests](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11196) + - [datetime: Improve correctness of ISO-8601 string parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11507) + - [devicemonitor: Wait for start thread to finish when listing devices](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11502) + - [gstinfo: Don't use fwrite() on Windows for debug logging](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11586) + - [gstinfo: Use stack allocation for <=1KB messages](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11577) + - [gsttask: Fix racy tests by making unref deterministic](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11635) + - [gstvalue: fix crash when converting NULL G_TYPE_VALUE_ARRAY to G_TYPE_STRING](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11706) + - [pads: Fix sticky event raciness when linked mid-push](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11929) + - [queue: Fix potential use-after-free in log function](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11191) + - [registry: detect libgstreamer load from Android container and skip canonicalization](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11574) + - [streams: Add METADATA to the valid stream flags for serialization](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11519) + - [value: On buffer deserialization errors first unmap the buffer and then unref it](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11583) + - [gst-inspect-1.0: type for string caps fields should be 'string' not 'gchararray'](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11449) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + - [Tests: Fix build with glib <= 2.67.2](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11605) + +#### gst-plugins-base + + - [allocators: round GstShmAllocator maxsize up to page size](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11118) + - [alsa: fix deadlock during shutdown](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10265) + - [audioaggregator: Add gst_audio_aggregator_has_current_output_buffer()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11486) + - [audio/video base classes: add prepare_allocator virtual method](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11425) + - [audiovisualizer: copy metas to the output video buffer](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11857) + - [compositor: Fix caps negotiation for messy downstream caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11342) + - [exiftag: Use byte readers for parsing consistently](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11296) + - [glcolorbalance: Fix caps transformation in passthrough mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11408) + - [glcolorscale: fails to renegotiate when resolution changes, if it is a passthrough at some point](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/4973) + - [glfilter: Fix regression from "fix not rangifying size caps when in passthrough"](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5052) + - [glfilter: fix not rangifying size caps when in passthrough](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11090) + - [videotimecode: Add timecode discont flag, bind it with pic_timing discontinuity in h264parse and drift resync in timecodestamper](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11268) + - [mikey: Allow disabling SRTP authentication via SP type 10](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11880) + - [opengl: Add new glalphacombine element for RGBA inputs](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11678) + - [codecutils: va, v4l2: Add shared H.264 level calculation helper and automatic level selection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11154) + - [discoverer: add builder API for GstDiscovererInfo](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11469) + - [playsink: Ensure that pad-blocking waits for an in-progress reconfigure](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11401) + - [playsink: Fixes for reconfiguration to avoid deadlocks and out-of-lock accesses](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11195) + - [rtspsrc: add independent keepalive worker for non-live TCP-interleaved](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11544) + - [timecodestamper: Add scale property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7317) + - [video: add missing classifications in scaler/colorspace/uploader/downloader elements](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11388) + - [video: Add Digitally Signed Content (DSC) buffer meta](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10435) + - [video: fix doc chunk for GST_VIDEO_DSC_VERIFICATION_META_INFO](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11665) + - [video-format: Add static assert to prevent list of formats mismatch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11917) + - [videodecoder: send a new gap event with current position if the received gap event is cached](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11278) + - [videoencoder: Support adaptive presets with resolution-dependent properties](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11092) + - [wavparse: handle uppercase 'ID3 ' chunk fourcc for ReplayGain tags](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11711) + - [Pass a strong reference to the user_data to gst_pad_start_task()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11489) + - [Use new gst_system_clock_new() which creates a new instance of the system clock](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11474) + - [Use gst_value_take_structure() where possible](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7647) + +Backported into 1.28: + + - [GstAudio/VideoDecoder: Fix different seqnum for eos event error](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11119) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + - [Tag: Prevent ubsan and wrong fraction usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11287) + - [appsink, appsrc: Allow passing NULL callbacks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11407) + - [appsink: Clear local sample storage when flushing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11931) + - [appsrc: Uniformly handle EOS events being pushed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11924) + - [appsrc: Fix dropped counting with bufferlist](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11311) + - [audio-resampler-neon: fix Thumb encoding and use Clang O2 calculation for strides](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11472) + - [audio-resampler-neon: fix accumulated stride](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11672) + - [audio-resampler-neon: re-increment address](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11752) + - [audio-resampler-neon: read array operand by hand](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11205) + - [audio-resampler-neon: read array operand by hand, part 2](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11270) + - [audioaggregator: Don't drop pending input buffers on sinkpads on srcpad caps changes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11482) + - [audioaggregator: Don't reset samples_per_buffer unless sample rate / output-buffer-duration has changed](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11484) + - [audioaggregator: Don't try converting buffers on caps changes if impossible](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11477) + - [audioaggregator: Remove brittle conversion of in-progress buffers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1037) + - [audioencoder: Remove fixed caps from srcpad](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11115) + - [audioresample: Fix extra samples produced at speech-to-silence transitions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11394) + - [av1parse / typefind: Avoid signed 32 bit integer overflow and OOB reads when parsing LEB128 values](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11245) + - [decodebin2: fix leak of endpads list on shutdown while exposing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11468) + - [discoverer: Lock the DISCO_LOCK whenever accessing the streams list](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11838) + - [discoverer: Take the DISCO_LOCK while parsing stream topology](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11497) + - [exiftag: Add missing bounds check and integer overflow protections in various places](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11246) + - [exiftag: Ignore invalid fractions with numerator/denominator G_MININT](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11227) + - [exiftag: Unmap buffer if parsing a rational number gives a zero denominator](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11207) + - [exiftag: Use a hashtable instead of a linked list for storing the pending tags](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11326) + - [gl: add GBRA swizzle support](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11405) + - [gl: egl: Set TRANSFER_NEED_DOWNLOAD flag](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11681) + - [glupload: fix memleak on failure path](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11623) + - [glwindow: Allow setting a NULL window handle](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11542) + - [id3v2: Add input validation and refactor id3v2_ununsync_data](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11314) + - [id3v2: Check valid frame sizes more](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11379) + - [id3v2: Don't modify const data and check for enough data when reading RVA2 tags](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11794) + - [id3v2: Don't unnecessarily assert on size==0 when unsyncing data](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11636) + - [libs: video: add precondition check on dma helpers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11445) + - [opengl: Fix glcolorconvert vertical flip issue on crop](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11406) + - [pbutils: Add NULL check for tmpcaps parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11745) + - [pbutils: Fix possible null dereferene when empty string is provided](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11744) + - [playback: Make sure to check for empty/any caps before getting the first structure](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11201) + - [rtcpbuffer: Add some missing bounds checks when parsing SDES](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11791) + - [sdp: keep level-asymmetry-allowed in the caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11667) + - [subparse / samiparse: Various robustness fixes and minor other fixes.](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11325) + - [subparse: Avoid NULL-pointer dereferences in mdvdsub parsing code](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11238) + - [subparse: Avoid zero and extreme fps when parsing mdvdsub subtitles](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11795) + - [subparse: Don't allow very small framerates for microdvd subtitles](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11849) + - [subparse: Fix integer overflow when calculating qttext timestamp](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11255) + - [subparse: Fix memory leakage for text colour and background colour](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11357) + - [subparse: Replace regex string matching / replacing with plain C string parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11237) + - [uridecodebin3: Use PLAY_ITEMS_LOCK for URI-related getter](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11627) + - [uridecodebin3: deactivate input_item in erroneous ready->paused transition](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11950) + - [uridecodebin: Protect missing_plugin_errors list from concurrent access](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11576) + - [videodmabufpool: Break ref cycle between the pool and its thread](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11313) + - [videodmabufpool: Fix debug category](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11676) + - [vorbistag: Check for enough base64 data before trying to decode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11855) + - [xmptag: Correctly initialize pointer to the end of the input array](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11793) + - [xmptag: Don't allocate -1 bytes of memory if there's only a single tag](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11850) + - [xmptag: Handle fractions with 0 denominator as invalid](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11912) + +#### gst-plugins-good + + - [aacparse: Overhaul PCE handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11742) + - [adaptivedemux2: Ensure we are preserving target time on non-snapping seeks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9884) + - [cacasink, aasink: remove libcaca and libaa-based ASCII rendering plugins](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11172) + - [flv: Add support for enhanced-rtmp's support for av1](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5087) + - [matroskademux: Don't ignore encoded seek table](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11279) + - [matroskamux: HDMV PGS support (subpicture/x-pgs)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8688) + - [matroskamux: TrueHD support (audio/x-true-hd)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8689) + - [mpegaudioparse: Add channel mask to output caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11116) + - [pbutils, va, v4l2: Add shared H.264 level calculation helper and automatic level selection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11154) + - [qtdemux: add 'max-atom-size' property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5215) + - [qtdemux: add support for losslessly-compressed video](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10998) + - [rtspsrc: add independent keepalive worker for non-live TCP-interleaved](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11544) + - [rtspsrc: add mTLS file properties](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11735) + - [udpsrc: don't query downstream for Allocation / pool parameters](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11425) + - [v4l2: Fix empty name warning in dqbuf for M2M devices](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11457) + - [v4l2src: add v4l2_buffer timestamp to buffer](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10211) + - [v4l2videoenc: Add bitrate and gop-size GObject properties](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11125) + - [wavparse: handle uppercase 'ID3 ' chunk fourcc for ReplayGain tags](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11711) + - [Use gst_system_clock_new() to create a new instance of the system clock](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11474) + - [Pass a strong reference to the user_data to gst_pad_start_task()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11489) + +Backported into 1.28: + + - [adaptivedemux/hlsdemux assertions / fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11550) + - [applemedia: Require Xcode 12.4 for all builds](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11225) + - [audioinvert: fix float truncation in transform_float](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11170) + - [avidemux: Fix divide by zero if VPRP contains fields==0](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11302) + - [flacenc: Fix g_object_notify on loose-mid-side-stereo property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11508) + - [flvdemux: Avoid assertions on corrupted streams](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11244) + - [flvmux: fix race condition on caps get and check](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11220) + - [gdkpixbufdec: remove Sun and Andrew raster formats](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11183) + - [isomp4: Fix memory leak when file is corrupted](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11515) + - [isomp4: qtdemux: Add bounds checks for ESDS descriptors](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11377) + - [qtdemux: push_buffer() should use global GstClockTime](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11951) + - [matroska-mux: Write ReferenceBlock for non-keyframe video in BlockGroups](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11705) + - [matroska: Fix wrong object type bug](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11514) + - [matroskademux: Add missing parenthesis when calculating bz2 buffer sizes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11248) + - [matroskademux: Don't pass non-GstElement pointers to GST_ELEMENT_ERROR](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11909) + - [osxaudio: Fix stack overflow with >64ch audio devices](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11656) + - [qml6glsink: Fix redraw issues on buffer change](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11335) + - [qt6: remove an unneeded QOpenGLContext->makeCurrent()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11788) + - [qt: Avoid parsing caps on every buffer (same fix for both qt5 and qt6)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8256) + - [qtdemux: Add various integer overflow and bounds checks to uncompressed video handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11242) + - [qtdemux: Avoid a couple of integer overflows](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11102) + - [qtdemux: Check for minimum stride requirements and width/height constraints with uncompressed video](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11584) + - [qtdemux: Preserve Metas and Flags when doing row alignment](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11122) + - [qtdemux: Various fixes related to audio channel counts](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11243) + - [qtdemux: parse mastering luminance as u32 instead of u16](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11657) + - [rtph265depay: fix mem leak](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11714) + - [rtspsrc: Discard early data in ONVIF mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11161) + - [rtspsrc: Fix const-correctness issue around strchr() usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11214) + - [rtspsrc: include user-agent property in HTTP tunnel requests](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11282) + - [rtspsrc: mki is optional upon crypto update](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11393) + - [sbcparse: Add bounds checking to header parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11799) + - [splitmuxsink: Fix some failure-to-shutdown race conditions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11723) + - [splitmuxsink: Require buffers to have a valid PTS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6776) + - [tests: mpegaudioparse: Fix raciness in the state change handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11721) + - [v4l2: Fix buffer leak on qbuf failure](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11712) + - [v4l2: object: Fix caps filtering in caps negotiation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11222) + - [v4l2transform: release input buffers earlier](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9850) + - [wavpack: Various channel / channel-mask related fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11729) + - [wavpackdec: Avoid integer overflow when calculating output buffer size and related fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11797) + - [wavparse: Fix integer overflow when checking available buffer size for reading cues](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11247) + - [wavparse: Remove assertion about upstream file size](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11465) + - [wavparse: recover from invalid av_bps instead of failing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11328) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + +#### gst-plugins-bad + + - [adaptivedemux: Fix caps query](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11168) + - [alphacombine: support GLMemory, VulkanMemory and all applicable planar formats](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11399) + - [amfcodec: Fix a build error for gstamfbasefilter](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11770) + - [amfcodec: Fix a build error in amfencoder](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11750) + - [amfcodec: add super resolution hq-scaler component](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11674) + - [amfcodec: add High quality preset values to h264 and h265 encoders](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11873) + - [analytics: add semantic tag getter to GstAnalyticsGroupMtd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11155) + - [analytics: move semantic tag from GstAnalyticsGroupMtd to generic GstAnalyticsMtd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11423) + - [androidmedia: Add aassetsrc element for Android assets](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11718) + - [androidmedia: Read video codec details from VideoCapabilities](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11549) + - [applemedia: Add stable unique-id device selection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11158) + - [applemedia: avf sources now honour downstream GstVideoMeta requests](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11358) + - [applemedia: add iosurface helper library and introduce memory:IOSurface](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11560) + - [av1parse: support T.35 UK country code (0xB4) for LCEVC detection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11730) + - [avfvideosrc: Improve concurrent usage detection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11463) + - [closedcaption: add h266seiinserter](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10514) + - [codecparser: expose publicly H265 bitwriter API](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11330) + - [codecparsers: h265bitwriter: implement gst_h265_bit_writer_filler()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11323) + - [codecseiinserter: Add do-timestamp property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10591) + - [cuda-appsrc: Fix missing sentinel in nvcodec example](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11402) + - [cuda: check CuMemFree/CuMemFreeAsync return values](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11106) + - [cuda: fix CONVET typo in format macro names](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11104) + - [cuda: fix typos in gstcudacontext](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11105) + - [d3d12: Add most-detailed-mip property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11790) + - [d3d12: Add support for VP9 with alpha](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11084) + - [d3d12: Implement fast-path mipmap texture generation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11218) + - [d3d12converter: Add src-roi properties for mipmap level selection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11704) + - [errorignore: Add ignore-flushing property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7388) + - [errorignore: post warning on first flow conversion](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11103) + - [examples: Fix nvcodec example build on Windows](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11111) + - [facedetector: Support model without built-in post-processing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9418) + - [videotimecode: Add timecode discont flag, bind it with pic_timing discontinuity in h264parse and drift resync in timecodestamper](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11268) + - [h26456parse: Trigger caps update when HDR SEI expires](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11437) + - [h264parse: Ignore bitstream restrictions when it has out of bound values](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11384) + - [h266parse: add support to both read and parse Digitally Signed Content (DSC) SEI messages, and attach their metas to the buffers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10435) + - [hlssink2: Add enable_program_date_time property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11354) + - [mpegtsdemux: Add stats to mpegtsbase](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3455) + - [mpegtsmux: Accumulate audio packets for larger PES and a couple of small fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2085) + - [mpegtsmux: Remove streamheader from caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11113) + - [mpegtssection: Write serializer for mpegts_sections](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11169) + - [msdkav1enc: Add intrabc and palette for scc encode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11250) + - [nvcodec: add example for pushing cuda runtime api frames into appsrc](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8967) + - [onnxinference: Accept ranges with only one entry](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11319) + - [onnxinference: Add unit tests](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11417) + - [onnxinference: fix typo](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11260) + - [openjpeg: Add support for high bit depth formats](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11749) + - [openjpeg, jpeg200parse: Fix JPEG 2K for YUV input](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11787) + - [va, v4l2: use shared H.264 level calculation helper and automatic level selection](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11154) + - [play: Fix GstStream leaks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11177) + - [shm: fix shmpipe lockup due to wrong buffer ack and fallback allocator](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11162) + - [shmsink: fix hang](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/4346) + - [srtp: mikey: Allow disabling SRTP authentication via SP type 10](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11880) + - [ssdtensordecoder: Allow fixed and variable tensor dimensions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11492) + - [tensordecoder: fix tensordecodebin classification](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11361) + - [tensordecoders: Add YOLO26 detection decoder](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11140) + - [tensordecoders: yolo-seg: fix mask stride metadata for ROI masks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11224) + - [tfliteinference tests: Add missing model files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11644) + - [tfliteinference: Accept ranges with one entry](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11416) + - [tfliteinference: Add GRAY8 input support](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11415) + - [tfliteinference: Add XNNPACK support](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11443) + - [tfliteinference: Add support for external delegate](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11478) + - [tfliteinference: Drop video meta API to avoid strided data](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11493) + - [tfliteinference: Fix caps negotiation with upstream element](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11643) + - [tfliteinference: fix compilation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11490) + - [timecodestamper: Add scale property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7317) + - [timecodestamper: Ignore upstream timecodes from corrupted frames](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11153) + - [tsdemux: define IGNORE_PCR_THRESHOLD constant, raise to 1000ms](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11166) + - [tsdemux: Add ignore-continuity-counter property for HLS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11884) + - [tsmux: Don't write HDMV descriptor for H264 files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11346) + - [ultralightfacedetectortensordec: Add caps for without-postproc](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11221) + - [va: Document CPU access to decoded frames](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11496) + - [va: add background-color property for vacompositor and vapostproc](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11694) + - [va: misc fixes for vaav1enc and vavp9enc](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11604) + - [validate: Reindent all validatetest files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10965) + - [video: add missing classifications in scaler/colorspace/uploader/downloader elements](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11388) + - [videoencoder: Support adaptive presets with resolution-dependent properties](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11092) + - [videoparsers: Use parsed resolution instead of upstream one](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11148) + - [vkh264enc: enable a simple unit test](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11446) + - [vmaf: change "threads" property default to 0 for automatic number of CPUs determination](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11133) + - [vulkan: Assert encode query result offset is zero per spec](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11300) + - [vulkan: caps leaks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11336) + - [vulkan: fix encode feedback query handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11023) + - [vulkan: fix planar VulkanImage download bookkeeping](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11436) + - [vulkan: h264encoder: base class miscelaneous improvements](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11267) + - [vulkan: merge plugin extension requirements into default instance/device setup](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11280) + - [vulkan: opt-in multi-planar YUV VkImage for image buffer pool](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11766) + - [vulkan: remove propose_allocation override in GstVulkanVideoFilter](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11668) + - [vulkan: requested-extensions - use-after-free on merged_req](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11765) + - [vulkanh264{enc,dec}: add missing profiles constrained-high and progressive-high](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11462) + - [Vulkan H.264 encoder base class updates](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11447) + - [wayland: Add sync_store to prevent callback errors](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11634) + - [wayland: Rework gstwayland render path](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11157) + - [wayland: fix crash due to double-destroy wl_callback](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11327) + - [wayland: handle padded buffers in wl_shm buffer creation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11370) + - [webrtcbin: Drop late received data on bundled EOS branches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11748) + - [Use gst_system_clock_new() to create a new instance of the system clock](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11474) + - [Pass a strong reference to the user_data to gst_pad_start_task()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11489) + +Backported into 1.28: + + - [ahcsrc: Register exposure-mode property for GstPhotography interface](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11545) + - [ajasink: Correctly set reference source](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11304) + - [amc: Don't try printing NULL caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11685) + - [amcvideodec: Don't keep crop-rectangle uninitialized if not specified](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11684) + - [amcvideodec: Fix double-free happening when codec gets reconfigured](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11900) + - [analytics: fix meta transform function for copy cases](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11392) + - [android: trim tutorials by using fewer plugins, ensure that an AMC video decoder is always found, fix decoding of constrained-baseline files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10547) + - [androidmedia: Add various new codec mime / profile mappings](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11547) + - [androidmedia: Don't print error logs if downstream returns flushing / EOS](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11543) + - [androidmedia: Fix typo in error message](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11691) + - [androidmedia: Free element name after use for logging](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11555) + - [androidmedia: support decoding flac](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10753) + - [applemedia: Fix MoltenVK usage with vtdec-imported textures](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11062) + - [applemedia: Fix test instability and nofork issues](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11458) + - [applemedia: Require Xcode 12.4 for all builds](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11225) + - [applemedia: fix planar CoreVideo buffer plane offsets](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11412) + - [av1parse / typefind: Avoid signed 32 bit integer overflow and OOB reads when parsing LEB128 values](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11245) + - [av1parse: Fix null pointer deference](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11523) + - [av1parser: Fix bytes/bits confusion when parsing tile data size](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11803) + - [avfassetsrc: Now supports vp9/av1, and able to read incompletely supported files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10684) + - [avtp: Correct ptime generation from avtp timestamp](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11887) + - [bpmdetect: Fix calculation of number of samples for >1 channels](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11283) + - [camerabin: Fix caps negotiation when starting video capture](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11440) + - [cudaconvert: fix performance regression caused by double precision floating point constants](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11344) + - [d3d12decoder: Fix decoding on Qualcomm GPUs](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11764) + - [decklink: Fix various refcount issues and related leaks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11509) + - [h263parse: Fix wrong ratio masking](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11528) + - [h263parse: Missing handling of reserved invalid EPAR_D value](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11527) + - [h264parse: Avoid NULL pointer dereferences when freeing partially parsed SPS/MVC data](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11240) + - [h264parse: Check for enough slice header data being available](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11938) + - [h264parse, h265parse: Unset GValue in every code path](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11911) + - [h265decoder: Fix HEVC with alpha decoding](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11144) + - [h265parser: use sub-layer 0 CPB count in buffering_period SEI loops](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11334) + - [h266parser: Add missing clearing function for H266 SEI message](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11526) + - [h266parser: Avoid integer overflow when parsing profile / tier / level](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11241) + - [h266parser: Avoid out-of-bounds write when parsing PPS tile slices](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11581) + - [h266parser: Check aspect ratio index against lookup table length](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11939) + - [h266parser: Use long bit skipping function for potentially large values](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11910) + - [interlace: Revert "Drop framerate from query caps of sinkpad"](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11421) + - [jp2kdecimator: Avoid integer overflows and divisions by zero on invalid tile configurations](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11236) + - [librfb: Validate framebuffer update rectangles against the framebuffer size](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11866) + - [mpegdemux: Add various bounds checks related to PES header parsing](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11580) + - [mpegtsdemux: Various fixes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11450) + - [mpegtsdemux: Improve PTS rollover handling in ignore-pcr mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11903) + - [mpegtspacketizer: Avoid potential overflow](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11303) + - [mpegtspacketizer: Do not seek before the first PCR](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11782) + - [mpegtsmux: Always assign PTS to output buffers in CBR mode (regression fix)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11930) + - [mse: Also disable the library if the option is disabled](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11467) + - [mxf: Fix multiple writing / parsing issues when handling VANC packets](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11585) + - [mxfdemux: Fix essence track offsets array population](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11882) + - [mxfdemux: Fix remaining offsets index entry insertion call site](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11895) + - [mxfdemux: Fix reverse temporal offsets array upper bounds check](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11582) + - [mxfdemux: Use unsigned integers in more places and don't truncate 64 bit integers](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11792) + - [mxfdemux: hardening](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11124) + - [mxfmux: aes-bwf: Use correct size when serializing user data / channel status mode](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11340) + - [netsim: Fix racy test failures](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11927) + - [nvcodec: Fix missing adapter-luid when loading decoders](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11317) + - [pcapparse: Add missing bounds checks to ensure packets are large enough](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11867) + - [pngparse: Fix Use-after-free bug](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11524) + - [pnmdec: Avoid overflows when calculating frame sizes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11913) + - [qml6d3d11sink: Clear texture on Paused-to-Ready transition](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11510) + - [qroverlay: Fix use after free bug](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11959) + - [qt6d3d11: fix null check in SetForceAspectRatio()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11456) + - [rtmp2: Remove socket timeout after handshake completes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11888) + - [rtpsink: fix mutex not unlocked on invalid URI in set_property](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11937) + - [sctp: Set number of outgoing & incoming streams to the same value](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11204) + - [shm: fix shmsink exit code 1 on clean shutdown](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11109) + - [svtav1enc: Scale MDCV and CLL to SVT-AV1's expected units](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11518) + - [tfliteinference: Add unit tests](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11318) + - [tsdemux: Fix parsing of PES ESCR and following PES header fields](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11292) + - [tsdemux: Fix segfault when trying to handle SCTE-35 with incorrect program specified](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11167) + - [va: surfacecopy: get surface's image in `gst_va_surface_copy`](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11899) + - [va: do not post error message when push fails](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11398) + - [va: drm: Fix fd leak and return type in create_va_display](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11637) + - [vajpegdecoder: Validate that enough data is available for the current JPEG segment](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11805) + - [vaoverlaycompositor: Fix textoverlay transparency](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11619) + - [vkswapper/vksink: Don't advertise unsupported formats](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11149) + - [vkupload/vkdownload: Fix possible corrupted image due to mismatched stride/padding](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11147) + - [vmncdec: Set cursormask to NULL to prevent double free](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11254) + - [vmncdec: Avoid integer overflows when rectangle positions and sizes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11869) + - [vtdec: Avoid locking up during a decoder reset](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11386) + - [vtdec: Do not hold the stream lock when pushing out frames](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11096) + - [vtdec: Prefer outputting VulkanImage instead of sysmem, fix some leaks, ensure vulkansink provides a window](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11070) + - [vtdec: Support decoding HEVC+alpha](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11130) + - [vtdec: fix deadlock when restarting pipeline](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11310) + - [vtdec: handle decoder error status for iOS, vtenc: restart if VTCompressionSessionCompleteFrames fails](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11097) + - [vulkan: Fix tests crashing on macOS due to fork() usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11196) + - [vulkanupload: Don't reallocate the pool when the framerate changes](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11500) + - [vulkanvp9dec: Fix case in device-specific factory name](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11107) + - [wasapi2: Don't reset process loopback capture client](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11673) + - [wasapi2: Log target device information](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11189) + - [wasapi2sink: Ignore device errors from default device](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11110) + - [waylandsink: Properly reset the tag orientation](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11180) + - [waylandsink: fix waylandsink crash when call window flush](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11128) + - [webrtc: nice: Fix leak of nice thread](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11088) + - [webrtc: take ownership of src_bin and sink_bin and don't leak error message](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11352) + - [wlwindow: fix viewport source outside buffer when play resolution change stream](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11129) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + - [Tests: Fix build with glib <= 2.67.2](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11605) + - [meson: fix building -bad tests with disabled tflite, onnx and mse](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11594) + - [Fix a couple of const correctness bugs around strchr() usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11185) + +#### gst-plugins-ugly + + - [mpeg2dec: remove plugin](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11173) + - [x264enc: Add adaptive bitrate preset for YouTube](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11092) + - [x264enc: Refactor SEI handling](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11114) + - [Pass a strong reference to the user_data to gst_pad_start_task()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11489) + +Backported into 1.28: + + - [mpegpsdemux: Release stream lock when seeking fails](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11862) + - [realmedia: Fixes for various out-of-bounds reads](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11825) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + +#### GStreamer Rust plugins + + - [Add sofalizer element](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1212) + - [Add viuersink - a video sink that plays video in your terminal](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2973) + - [colorlut: Allow any keyword line before data table](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3076) + - [image: add imagersoverlay element](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3024) + - [isobmff: add support for lossless compression](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2942) + - [pcap_writer: Mark target-factory and pad-path props as construct](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2971) + - [quinn: Do not make source elements live by default](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3051) + - [quinn: Miscellaneous clean ups](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3093) + - [rsaudiofx: Add agingradio plugin](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3087) + - [rtp2: Add MPEG-1/2 video RTP payloader/depayloader](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3092) + - [rtp2: Add MPEG-1 Audio RTP payloader/depayloader](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1596) + - [rtp2: Add raw video RTP payloader/depayloader](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2861) + - [rtpbin2: By default use the same CNAME for all sessions created by the same rtprecv/rtpsend](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2977) + - [rtpbin2: Do NTP timestamp calculations with integers instead of floating point numbers](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2976) + - [rtpbin2: jitterbuffer: move deadline calculation where it's needed](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3002) + - [rtpbin2: Remove BYE / timeout SSRCs from sync context and add a signal for timeout SSRCs](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2975) + - [rtpbin2/rtpsend: calculate NTP capture time for packets](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3027) + - [rtpbin2/time: handle NTP rollovers](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3026) + - [speech elements: implement support for non-synchronized output](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3001) + - [tracers: add Rust tracing ecosystem integration](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2820) + - [udpsrc2: override prepare_allocator](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3049) + - [udpsrc2: set socket in NULL to READY](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3054) + - [validate: dump failing frame to PNG on QR code check failure](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2929) + - [video: Add D3D12-based color LUT element](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3052) + - [webrtcbin2: Add new scalable WebRTC bin with fewer threads](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2955) + - [webrtcbin2: require rice-proto for webrtcbin2 build](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3082) + - [webrtcbin2/example: wait for caps event before creating answer](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3090) + - [webrtcrecv: add threadshare-mode](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3123) + - [webrtcsend: add sink pad early-data-mode property](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3106) + - [webrtsend: move early-data-mode property to webrtcsend](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3122) + - [webrtc/signalling: make protocol extendable](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3028) + - [webrtcsink: add v4l2h264enc (Raspberry Pi) encoder support](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2893) + - [webrtcsink: don't forward duplicate timecode metas](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2192) + - [webrtcsink: Unreal Engine PixelStreaming Signalling](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2024) + - [Build: Don't build utils/validate by default](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2936) + +Backported into 0.15: + + - [fallbacksrc: Add fallback-source and enable-dummy properties](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2989) + - [fmp4mux: Fix draining in chunk mode after partial GOPs were drained](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3057) + - [gopbuffer: add support for H.266/VVC](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3135) + - [isobmff: Change caps updates in test to not be delayed](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3040) + - [isobmff/fmp4mux: Various fixes for splitting at fragment boundaries](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3116) + - [onvifmeta2relatiometa: fix inversion between width and height](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3108) + - [png: implement image repacking when buffer is padded](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2962) + - [quinn: Disable tests](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2983) + - [quinnwtsrc/sink: Fix session close](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3033) + - [Rtp2Session: add ParamSpec for property stats](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3060) + - [rtpbin2: examples: fix audio resyncs, stream offsets and frame drops](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2969) + - [rtpbin2: improve logs](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2980) + - [rtpbin2: jitterbuffer: fix deadline for re-ordered packets](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2992) + - [rtpbin2: more log improvements](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2991) + - [rtprecv: extend jitter accounted for](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3015) + - [rtprecv: fix buffer list split handling](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3109) + - [rtprecv: fix race conditions handling rapid FlushStart / FlushStop](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3004) + - [rtprecv: JitterBufferStream: avoid polling JitterBuffer when possible](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2996) + - [rtspsrc2: Add support for SET_PARAMETER and GET_PARAMETER using signals](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3085) + - [rtspsrc2: Add support for SRTP](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3045) + - [rtspsrc2: Add TLS support](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2970) + - [rtspsrc2: handle parse errors with tcp interleaved rtsp more gracefully](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3073) + - [rtspsrc2: Implement support for HTTP tunnelling](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2987) + - [rtspsrc2: Implement support for keep alive](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2990) + - [rtspsrc2: Implement support for streams](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3009) + - [rtspsrc2: Include user-agent property in HTTP tunnel requests](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3022) + - [rtspsrc2: Support latency configuration property](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3099) + - [rtspsrc2: Support TLS validation flags for server certificate](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3101) + - [rtspsrc2: Update README with implemented features](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3068) + - [rtspsrc2: Update sha2 and md-5 dependencies](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3007) + - [st2038combiner: only forward video pad segment](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3096) + - [Switch from `std::os::raw` to `std::ffi` for C types](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3010) + - [threadshare: add leaky mode to dataqueue-based elements](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3032) + - [threadshare: add ts-clocksync (backported)](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3132) + - [tracers: feature gate remaining PluginAPIFlags makers behind doc](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3012) + - [transcriberbin: ignore flow errors from transcription branch](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2974) + - [webrtc: set level in negotiated caps only if level asymmetry not allowed](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3059) + - [webrtcsink: actually allow custom signaller to be set](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3042) + - [webrtcsink: Adding imx8mp vpuenc_hevc support for 265](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3018) + - [webrtcsink: handle payloader timestamp-offset prop type variants](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3075) + - [webrtcsink: read rav1enc bitrate as i32](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3112) + - [webrtcsink: add support for h264 profile constrained-high](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3121) + - [webrtcsink: allow change of interlace-mode in the input caps](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3127) + - [webrtcsink: allow renegotiation if caps is missing interlace-mode](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3124) + - [webrtcsink: fix negotiation for nvh264enc in the GLMemory case](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3131) + - [webrtc: tests: run signalling server with unique port number](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2988) + - [whisper: fix compiling on ARM](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2985) + - [Clippy: address clippy 1.95.0 suggestions](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3035) + - [Clippy: Fix new 1.95 clippy warnings](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3047) + - [Update dependencies](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3005) + - [Update dependencies](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3020) + - [Update dependencies](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3038) + - [Update dependencies](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3055) + - [Add script to convert git sourced dependencies to crates.io packages](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3083) + - [gst-plugin-version-helper: Relax version requirements and update to 0.8.4](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3071) + +#### gst-libav + + - [avcodecmap: Take the dual mono case into account](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5211) + - [avcodecmap: Declare undeclared loop iterator variable](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11419) + - [Pass a strong reference to the user_data to gst_pad_start_task()](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11489) + +Backported into 1.28: + + - [avdemux: Always free AVIOContext and open failure and don't dereference NULL AVFormatContext](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11802) + - [avprotocol: Don't free GstFFMpegPipe when closing the AVIOContext](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11801) + - [avviddec: Refcount codec frame associated with video frame](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10915) + - [Require C std gnu11 or c11, remove custom 'restrict' definition](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + +#### gst-rtsp-server + + - [tests: Fix potential deadlock in unit tests](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11516) + +Backported into 1.28: + + - [RTSPMediaFactory: make create_pipeline introspectable](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11719) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + - [gst: Fix a couple of const correctness bugs around strchr() usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11185) + +#### gstreamer-sharp + + - [gstreamer-sharp: update for latest API additions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11906) + +#### gst-python + + - [analytics: add semantic tag getter to GstAnalyticsGroupMtd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11155) + - [analytics: move semantic tag from GstAnalyticsGroupMtd to generic GstAnalyticsMtd](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11423) + +#### gst-editing-services + + - [ges: add internal locking to enable multi-threaded GES usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10198) + - [ges: auto-plug raw-video converters from the registry based on compositor memory family](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11434) + - [ges: make ges:+clip URIs work out of the box](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11671) + - [nle: ghostpad: Replace gst_pad_get_element_private with NleGhostPad subclass](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10992) + - [validate: Reindent all validatetest files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10965) + - [validate: flow: compare expectations live as lines are produced](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10975) + - [test: updat efor compositor: Fix caps negotiation for messy downstream caps](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11342) + +Backported into 1.28: + + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + - [ges: fix use-after-free in GESUriSource decodebin callbacks](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11374) + - [ges: fix use-after-free in structured-interface and asset cache](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11348) + - [gst: Fix a couple of const correctness bugs around strchr() usage](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11185) + +#### gst-devtools, gst-validate + gst-integration-testsuites + + - [dots-viewer: General enhancement of the web app](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11082) + - [dots-viewer: Update dependencies](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11350) + - [modelinfo-helper: Use shape_signature for tflite when available](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11281) + - [validateflow: Compare expectations live as lines are produced](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10975) + - [validateflow: Wait for all async calls when stopping](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11517) + - [validate: Reindent all validatetest files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10965) + - [Use gst_value_take_structure() where possible](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7647) + +Backported into 1.28: + + - [validate: use relative paths in the printed validate command, fix flaky tests due to non-deterministic pad task unref](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11626) + - [Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266) + +#### gstreamer-docs + + - [docs: Update iOS tutorials to use the new .xcframework package, add tvOS target](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10954) + - [documentation: misc improvements made while building on Windows](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11701) + +Backported into 1.28: + + - [android: trim tutorials by using fewer plugins, ensure that an AMC video decoder is always found, fix decoding of constrained-baseline files](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10547) + +#### Development build environment + + - [Update wraps: expat, flac, gdk-pixbuf, jpeg-turbo, png, srtp, xml, opus, proxy-intl, soundtouch, sqlite3, theora, zlib, wayland-protocols, drm, glib-networking](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11630) + - [Move many wrap files from wrap-git to wrap-file, ban new ones with a check in pre-commit](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11503) + +Backported into 1.28: + + - [gobject-introspection.wrap: Assorted fixes for Alpine RISC-V and MSVC build](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11784) + +#### Cerbero build tool and packaging changes in 1.29.2 + + - [Add ccache support for MSVC](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2255) + - [cmake: support LibraryType.BOTH under MSVC on all remaining recipes](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2254) + - [ffmpeg: update to 8.1.2](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2281) + - [gst-plugins-bad: Package libgstiosurface on Apple targets](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2268) + - [gst-plugins-good: update for removal of cacasink and aasink](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2181) + - [gst-plugins-rs.recipe: Add colorlut](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2249) + - [gst-plugins-rs: also build webrtcbin2 plugin](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2175) + - [gst-plugins-rs: fix webrtcbin2 build for MinGW](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2253) + - [openssl: Add parallel build support for MSVC with Jom](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2262) + - [pyproject.toml: fix version after 1.29.1 release](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2197) + - [tinyalsa: switch to AOSP source](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2208) + - [Cannot link rust plugins with Xcode 26](https://gitlab.freedesktop.org/gstreamer/cerbero/-/work_items/538) + - [docs: Copy AI policy from the monorepo](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2265) + +Backported into 1.28: + + - [Adjust CI for xcframework iOS tutorials](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2148) + - [Fixes for cross-compiling to android on macOS and consuming the built binaries](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2184) + - [Update to Rust 1.95 / rustup 1.29.0 / cargo-c 0.10.22](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2228) + - [Update to Rust 1.96 / cargo-c 0.10.23](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2260) + - [bindgen-cli: Update to 0.72.1](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2275) + - [bundlesource: Output xz tarballs instead of gzip, fix pkg-config-dist packaging](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2195) + - [cerbero: Fix entering into the build environment, add explicit non-interactive mode](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2192) + - [cerbero: Fix invalid target_subsystem when targeting Android on macOS](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2204) + - [cerbero: Read recipe files as UTF-8](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2258) + - [cerbero: fixes for background mode on macOS](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2178) + - [cerbero: support differently named Xcode for iOS and tvOS builds](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2161) + - [cerbero: Reenable deps cache for gst-libav and pkg-config](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2269) + - [cerbero: Use capi command for cargo-c](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2272) + - [cmake: Fix destination for the Java plugin initializers](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2240) + - [glib-networking: Backport various OpenSSL backend fixes](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2246) + - [gst-plugins-rs: Extend melding to Darwin platforms](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/1935) + - [gst-plugins-rs: fix MSVC link errors for cargo binary consumers](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2227) + - [inno: allow setting User or Admin-level install via command line](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2216) + - [inno: do not automatically create envvars or Registry keys with portable mode enabled](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2234) + - [ios: Execute postinstall template copy only with user level installs](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2225) + - [ios: fix syntax error in postinstall script](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2233) + - [libffi.recipe: Update to latest 3.2.9999.5 release, update proxy-libintl to 0.5](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2207) + - [libpng: update to 1.6.56](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2180) + - [libproxy: add backend, gio module and add to gstreamer-1.0-net.package](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2193) + - [m4: Update to 1.4.21](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2232) + - [osx: Add uninstaller script via osascript](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2217) + - [osxrelocator: relocate absolute paths to Python.framework](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2206) + - [pkg-config.recipe: Never enable --define-prefix](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2257) + - [pkg-config.recipe: Fix pcfiledir substitution with whitespace](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2277) + - [soundtouch: update to 2.4.1](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2187) + - [source: serialize tarball extracts that share an unpack path](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2250) + - [srt: update to 1.5.5](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2218) + - [vvdec: upgrade to 3.1.0](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2194) + - [vvdev: silence -Werror=nontrivial-memcall on macos and friends](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2244) + - [wheel: rename and placehold the msvc runtime wheel](https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2221) + +#### Contributors to 1.29.2 + +Albert Sjƶlund, Alicia Boya GarcĆ­a, Anders Hellerup Madsen, Andreas Frisch, +Andrew Yooeun Chun, Arthur Chan, Azat Nurgaliev, Batalev Ilya, BenoĆ®t Mauduit, +Cameron O'Neal, Carlos Falgueras GarcĆ­a, Carlos Bentzen, Christoph Seitz, +Cole Richardson, Corentin NoĆ«l, Daniel Morin, David Maseda Neira, dec05eba, +Dennis Han, Diego Nieto, Dino Spiller, Dominique Leroux, Edward Hervey, +Elliot Chen, Emil Ljungdahl, Emmanuel Madrigal, Fabian Orccon, Fabien Danieau, +FranƧois Laignel, Felix Gong, FrĆ©dĆ©ric Chanal, Gordon Smith, +Guillaume Desmottes, Haihua Hu, Havard Graff, He Junyan, Hou Qi, Ilya Batalev, +Jakub Adam, Jan Alexander Steffens (heftig), Jan Schmidt, Jeehyun Lee, +Jeongmin Kwak, Jeremy Whiting, Jerome Colle, Jochen Henneberg, Johan Sternerup, +Jordan Petridis, LĆ”szló KĆ”rolyi, Leonardo Salvatore, L. E. Segovia, +Marcus Hanestad, Mathieu Duponchelle, Matthew Waters, Michael Olbrich, +Michiel Westerbeek, MilkClouds, Monty C, Niclas Gƶtting, Nicolas Dufresne, +Nirbheek Chauhan, nitroxis, Ognyan Tonchev, Olivier CrĆŖte, Oscar Carter, +Oskar Fiedot, Pablo GarcĆ­a, Pavel Guzenfeld, Per Enstedt, Philippe Normand, +Philipp Wallrich, Pieter Willem Jordaan, Piotr Brzeziński, Qian Hu (čƒ”éŖž), +Rares Branici, Robert Mader, Rolf Eike Beer, romain, RSWilli, Ruben Gonzalez, +Sanchayan Maity, Santiago Carot-Nemesio, Sebastian Drƶge, Seungha Yang, +Seungmin Lee, Shengqi Yu, Shigeharu Kamiya, StĆ©phane Cerveau, +Taruntej Kanakamalla, Thibault Saunier, Thomas Devoogdt, Tim-Philipp Müller, +Tjitte, Tobias Koenig, Tomas Granath, Tomasz Andrzejak, Tomasz Bujewski, +Tulio Beloqui, Tushar Darote, Vadym Markov, VĆ­ctor Manuel JĆ”quez Leal, +Vincent Beng Keat Cheah, Vivia Nikolaidou, Walisiewicz, +Xabier Rodriguez Calvar, Xavier Claessens, Zeeshan Ali Khan, + +... and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +#### List of merge requests and issues fixed in 1.29.2 + +- [List of Merge Requests applied in 1.29.2](https://gitlab.freedesktop.org/groups/gstreamer/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged&milestone_title=1.29.2) +- [List of Issues fixed in 1.29.2](https://gitlab.freedesktop.org/groups/gstreamer/-/work_items?scope=all&utf8=%E2%9C%93&state=closed&milestone_title=1.29.2) + ## Schedule for 1.30 Our next major feature release will be 1.30, and 1.29.x is the unstable diff --git a/release-notes/snippets/tracer-custom-spans.md b/release-notes/snippets/tracer-custom-spans.md new file mode 100644 index 00000000000..71b25321eca --- /dev/null +++ b/release-notes/snippets/tracer-custom-spans.md @@ -0,0 +1,27 @@ +## tracer: custom spans and events API + +New `gst_trace_span_begin()` / `gst_trace_span_end()` and `gst_trace_event()` +API to instrument arbitrary code with custom tracing spans (timed regions) and +point events, each described by a typed `GstTraceFormat`. + +This makes it possible to measure how long any operation takes - decoder setup, +a composition restack, a blocking state change - and see it on a profiler +timeline correlated with the rest of the pipeline. The `perfetto` tracer plots +the spans; the `log` tracer renders them to the `GST_TRACER` debug category. + +Declare the field layout once, then bracket the region to measure with a +begin/end pair: + + /* GST_DEFINE_TRACE_FORMAT(name, ...) declares a `name ()` getter. */ + GST_DEFINE_TRACE_FORMAT (process_span, "element", STRING, "size", UINT) + + static void + process (GstElement * element, guint size) + { + GST_TRACE_SCOPE_BEGIN (process_span, STRING (GST_ELEMENT_NAME (element)), + UINT (size)); + ... + GST_TRACE_SCOPE_END (process_span); + } + +Use `GST_TRACE_EVENT()` for an instantaneous point event. diff --git a/security-advisories/sa-2026-0003.md b/security-advisories/sa-2026-0003.md index 759479aadf9..894d248cda3 100644 --- a/security-advisories/sa-2026-0003.md +++ b/security-advisories/sa-2026-0003.md @@ -6,7 +6,7 @@ | ----------------- | ----------------------------------------- | | Summary | Heap-based Buffer Overflow on Huffman tables reading in JPEG parser | | Date | 2026-02-25 | -| Affected Versions | GStreamer gst-plugins-bad | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.1 | | IDs | GStreamer-SA-2026-0003
CVE-2026-3082
ZDI-CAN-28840| diff --git a/security-advisories/sa-2026-0008.md b/security-advisories/sa-2026-0008.md index 1aa2f66ab2d..b479de88ee9 100644 --- a/security-advisories/sa-2026-0008.md +++ b/security-advisories/sa-2026-0008.md @@ -6,7 +6,7 @@ | ----------------- | --- | | Summary | Multiple vulnerabilities in RTP QDM2 depayloader element| | Date | 2026-02-25 | -| Affected Versions | GStreamer gst-plugins-good 1.28 < 1.28.1
, GStreamer gst-plugins-good 1.x <= 1.28.10 | +| Affected Versions | GStreamer gst-plugins-good 1.28 < 1.28.1, 1.x <= 1.26.10 | | IDs | GStreamer-SA-2026-0008
CVE-2026-3083
CVE-2026-3085
ZDI-CAN-28851
ZDI-CAN-28850 | diff --git a/security-advisories/sa-2026-0038.md b/security-advisories/sa-2026-0038.md index 538f2e65d5a..99772c14116 100644 --- a/security-advisories/sa-2026-0038.md +++ b/security-advisories/sa-2026-0038.md @@ -1,4 +1,4 @@ -# Security Advisory 2026-0038 +# Security Advisory 2026-0038 (CVE-2026-12893)
@@ -7,7 +7,7 @@ | Summary | Memory leak and NULL pointer dereference in gst-libav demuxer | | Date | 2026-06-12 | | Affected Versions | GStreamer gst-libav < 1.28.4 | -| IDs | GStreamer-SA-2026-0038 | +| IDs | GStreamer-SA-2026-0038
CVE-2026-12893 |
@@ -32,7 +32,7 @@ versions of GStreamer should apply the patch and recompile. ### CVE Database Entries -- No CVE number assigned or pending +- [CVE-2026-12893](https://www.cve.org/CVERecord?id=CVE-2026-12893) ### GStreamer 1.28.4 release diff --git a/security-advisories/sa-2026-0043.md b/security-advisories/sa-2026-0043.md new file mode 100644 index 00000000000..e8c31cd34c2 --- /dev/null +++ b/security-advisories/sa-2026-0043.md @@ -0,0 +1,48 @@ +# Security Advisory 2026-0043 (CVE-2026-52720) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read and write in RFB source | +| Date | 2026-06-16 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0043
CVE-2026-52720 | + +
+ +## Details + +An out-of-bounds read and write vulnerability in the rfbsrc element (RFB source) in gst-plugins-bad. The underlying RFB decoder failed to properly validate framebuffer update rectangle coordinates and dimensions against the actual framebuffer size when processing RFB protocol data. Malicious VNC servers could send crafted framebuffer update messages with rectangle coordinates extending beyond the framebuffer boundaries, causing memory copy and fill operations to read from or write to memory outside the allocated framebuffer buffer. Additionally, the decoder lacked integer overflow protection when calculating the size of raw pixel data, potentially allowing size calculations to wrap around. + +## Impact + +A malicious third party could trigger out-of-bounds reads and writes by connecting to a crafted VNC server or by processing crafted RFB protocol data, potentially resulting in a crash, denial of service, data corruption, or arbitrary code execution. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-52720](https://www.cve.org/CVERecord?id=CVE-2026-52720) + +### GStreamer 1.28.5 release + +Note: This advisory was published before the GStreamer 1.28.5 release since the +CVE numbering authority accidentally released the CVE details ahead of schedule. +The release is planned for early July 2026. + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/f3b66928a194b32b27fac3c3379d3d20e5966442.patch) diff --git a/security-advisories/sa-2026-0044.md b/security-advisories/sa-2026-0044.md new file mode 100644 index 00000000000..7b68888311b --- /dev/null +++ b/security-advisories/sa-2026-0044.md @@ -0,0 +1,45 @@ +# Security Advisory 2026-0044 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in RTP CELT audio depayloader | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0044 | + +
+ +## Details + +An out-of-bounds read vulnerability in the RTP CELT depayloader in gst-plugins-good. The payload parsing loop reads frame size prefix bytes from the RTP packet payload without validating that the read offset remains within the payload boundary. A crafted RTP packet with an all-0xFF payload causes the offset to advance past the end of the payload buffer. The subsequent attempt to extract a sub-buffer then fails and returns NULL, which is dereferenced without checking, resulting in a NULL pointer dereference. + +## Impact + +A malicious third party could trigger a NULL pointer dereference by sending a crafted RTP packet to an application using the RTP CELT depayloader, resulting in a crash and denial of service. Since this element processes network-reachable RTP streams, the vulnerability can be exploited remotely without authentication. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue by disabling the RTP CELT depayloader element entirely. CELT was an experimental audio codec that never gained adoption and was superseded by Opus more than a decade ago. There are no CELT decoders or encoders in GStreamer, and the RTP mapping specification never progressed beyond draft status. The element should not be used. Future releases of GStreamer will remove it completely. + +People using older versions of GStreamer should apply the patch and recompile, or disable the element to mitigate the vulnerability. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12038.patch) diff --git a/security-advisories/sa-2026-0045.md b/security-advisories/sa-2026-0045.md new file mode 100644 index 00000000000..a97c1ac1215 --- /dev/null +++ b/security-advisories/sa-2026-0045.md @@ -0,0 +1,46 @@ +# Security Advisory 2026-0045 (CVE-2026-52721) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds reads in PCAP parser due to missing bounds checks | +| Date | 2026-06-16 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0045
CVE-2026-52721 | +
+ +## Details + +Multiple out-of-bounds read vulnerabilities in the pcapparse element (PCAP file parser) in gst-plugins-bad. The parser trusts header-derived offsets and lengths from IPv4 and TCP packets without verifying they fit within the captured PCAP record. Specifically, the IPv4 IHL field, IPv4 total length field, and TCP data offset field were used to compute buffer pointers and payload sizes without sufficient bounds validation. This allowed crafted PCAP files with oversized header fields or truncated packet data to trigger reads beyond the allocated buffer. + +## Impact + +A malicious third party could trigger out-of-bounds reads by providing a crafted PCAP file with malformed IPv4 or TCP header fields, potentially resulting in a crash, denial of service, or information disclosure. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-52721](https://www.cve.org/CVERecord?id=CVE-2026-52721) + +### GStreamer 1.28.5 release + +Note: This advisory was published before the GStreamer 1.28.5 release since the +CVE numbering authority accidentally released the CVE details ahead of schedule. +The release is planned for early July 2026. + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/3833dd745ef7b1cd5f699c90897ecca3ef09c59b.patch) diff --git a/security-advisories/sa-2026-0046.md b/security-advisories/sa-2026-0046.md new file mode 100644 index 00000000000..05ddf78bb22 --- /dev/null +++ b/security-advisories/sa-2026-0046.md @@ -0,0 +1,48 @@ +# Security Advisory 2026-0046 (CVE-2026-52722) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Integer overflow in VMNC decoder cursor payload size calculation | +| Date | 2026-06-16 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0046
CVE-2026-52722 | + +
+ +## Details + +An integer overflow vulnerability in the vmncdec element (VMNC decoder) in gst-plugins-bad when handling VMNC streams with cursor rectangle data. The vulnerability occurs during the computation of the cursor payload size, where rectangle dimensions, bytes per pixel, and a multiplier for colour cursor data are combined using signed integer arithmetic. Although a previous fix (CVE-2016-9445) limited the maximum stream dimensions to 16384, dimensions at this limit are large enough for the colour cursor payload calculation to overflow a 32-bit signed integer. The resulting negative length value bypasses the subsequent short-packet check, leading to oversized memory allocations and out-of-bounds reads from the input buffer. + +## Impact + +A malicious third party could trigger a crash in the application, resulting in denial of service, or cause out-of-bounds reads from the input buffer when processing a crafted VMNC stream. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-52722](https://www.cve.org/CVERecord?id=CVE-2026-52722) + +### GStreamer 1.28.5 release + +Note: This advisory was published before the GStreamer 1.28.5 release since the +CVE numbering authority accidentally released the CVE details ahead of schedule. +The release is planned for early July 2026. + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/6c146775d784bbe91ff7afc6701ba351306282ce.patch) diff --git a/security-advisories/sa-2026-0047.md b/security-advisories/sa-2026-0047.md new file mode 100644 index 00000000000..57c824b32c7 --- /dev/null +++ b/security-advisories/sa-2026-0047.md @@ -0,0 +1,51 @@ +# Security Advisory 2026-0047 (CVE-2026-12892) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | One-byte out-of-bounds read in H.264 NAL unit parser | +| Date | 2026-06-24 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0047
CVE-2026-12892 | + +
+ +## Details + +A one-byte heap out-of-bounds read vulnerability in the H.264 parser in gst-plugins-bad. The NAL unit parser reads a byte from the NAL payload at an offset determined by the NAL header size without verifying that the payload is large enough to contain that byte. This affects slice NAL types that use multi-byte extension headers for MVC and SVC profiles. A NAL unit with a payload size equal to its header size passes the existing minimum-size validation but triggers a read one byte past the end of the allocation. + +The vulnerability is reachable through malformed H.264 bitstreams delivered via media files, network streams, or web content. + +## Impact + +A malicious third party could trigger an out-of-bounds read by providing a crafted H.264 stream containing undersized slice NAL units, potentially resulting in information disclosure, parser desynchronization, incorrect frame boundary detection, or denial of service. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-12892](https://www.cve.org/CVERecord?id=CVE-2026-12892) + +### GStreamer 1.28.5 release + +Note: This advisory was published before the GStreamer 1.28.5 release since the +CVE numbering authority released the CVE details without embargo before the +release, as the impact was considered low. The release is planned for early +July 2026. + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11938.patch) diff --git a/security-advisories/sa-2026-0048.md b/security-advisories/sa-2026-0048.md new file mode 100644 index 00000000000..62e58a63315 --- /dev/null +++ b/security-advisories/sa-2026-0048.md @@ -0,0 +1,49 @@ +# Security Advisory 2026-0048 (CVE-2026-12891) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in H.266 parser VUI aspect ratio parsing | +| Date | 2026-06-24 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0048
CVE-2026-12891 | + +
+ +## Details + +An out-of-bounds read vulnerability in the H.266/VVC parser in gst-plugins-bad. When parsing VUI parameters from the sequence parameter set, a field read from the bitstream is used directly as an index into a fixed-size lookup table without bounds validation. Values outside the valid range cause reads of up to 2048 bytes beyond the array boundaries in the global data segment. + +## Impact + +A malicious third party could trigger out-of-bounds reads by providing a crafted H.266/VVC media file with an invalid aspect ratio index in the VUI parameters, potentially resulting in a crash or denial of service. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-12891](https://www.cve.org/CVERecord?id=CVE-2026-12891) + +### GStreamer 1.28.5 release + +Note: This advisory was published before the GStreamer 1.28.5 release since the +CVE numbering authority released the CVE details without embargo before the +release, as the impact was considered low. The release is planned for early +July 2026. + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11939.patch) diff --git a/security-advisories/sa-2026-0049.md b/security-advisories/sa-2026-0049.md new file mode 100644 index 00000000000..9cf316d27f7 --- /dev/null +++ b/security-advisories/sa-2026-0049.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0049 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Heap buffer overflow in MPEG-4 Video parser | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0049 | + +
+ +## Details + +A heap buffer overflow vulnerability in the mpeg4videoparse element (MPEG-4 Video parser) in gst-plugins-bad. When processing Visual Sequence Start packets, the parser passes an incorrect length value to the profile and level extraction functions. The offset into the buffer was used as the length parameter instead of the remaining packet size, causing the codec utility functions to read one byte past the end of the heap-allocated buffer when the packet size is small. + +## Impact + +A malicious third party could potentially trigger a crash by providing a crafted MPEG-4 Visual stream (DivX/Xvid), resulting in denial of service. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12040.patch) diff --git a/security-advisories/sa-2026-0050.md b/security-advisories/sa-2026-0050.md new file mode 100644 index 00000000000..4b118279eae --- /dev/null +++ b/security-advisories/sa-2026-0050.md @@ -0,0 +1,45 @@ +# Security Advisory 2026-0050 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Heap buffer overflow in MOV/MP4 moov recovery tool | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0050
ZDI-CAN-29510, ZDI-CAN-29608 | + +
+ +## Details + +Heap buffer overflow vulnerabilities in the qtmoovrecover element (MOV/MP4 moov recovery tool) in gst-plugins-good when parsing recovery files. The file parser trusts atom size fields from the input without validating they meet minimum expected sizes, and performs size calculations that can truncate larger values. A crafted recovery file with undersized atom declarations causes heap buffers to be allocated that are too small, and subsequent writes of atom fields overflow past the allocation boundary. + +## Impact + +A malicious third party could trigger a heap buffer overflow by providing a crafted MRF file to the moov recovery tool, potentially resulting in data corruption, crash, denial of service, or arbitrary code execution. The qtmoovrecover element is a utility component that requires explicit user invocation with specific input files, limiting the attack surface compared to elements used in standard media playback pipelines. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue by validating box sizes during MRF file parsing to ensure all atoms meet their minimum expected sizes and that container atoms properly contain their sub-atoms. + +People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12041.patch) diff --git a/security-advisories/sa-2026-0051.md b/security-advisories/sa-2026-0051.md new file mode 100644 index 00000000000..d9257b5ba62 --- /dev/null +++ b/security-advisories/sa-2026-0051.md @@ -0,0 +1,42 @@ +# Security Advisory 2026-0051 (ZDI-CAN-29787) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in RTP SBC depayloader | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0051
ZDI-CAN-29787 | +
+ +## Details + +An out-of-bounds read vulnerability in the RTP SBC depayloader element (rtpsbcdepay) in gst-plugins-good. The element fails to validate the size of incoming RTP payload data before parsing the SBC-specific payload header, allowing a one-byte read past the end of the payload when processing packets with no payload data. Additionally, the element does not check whether the reassembly adapter contains data before attempting to extract a buffer from it, and fails to reset local buffer variables to NULL after transferring ownership. When processing a crafted RTP packet with a minimal payload, this results in critical warnings in standard builds. In builds with assertions disabled, the bug further leads to a use-after-free of a GstBuffer object that is subsequently accessed by the RTP base depayloader. + +## Impact + +A malicious third party could trigger an out-of-bounds read by sending a crafted RTP packet to an application using the RTP SBC depayloader, resulting in critical warnings or a crash and denial of service. The impact is minimal in standard builds with assertions enabled, where the bug manifests as recoverable critical warnings. In builds with assertions disabled (not recommended), the bug additionally leads to a use-after-free, but the practical impact remains limited to denial of service as the freed memory is read at fixed offsets for timestamp values rather than control flow data. Since this element processes network-reachable RTP streams, the vulnerability can be exploited remotely without authentication. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue. People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12042.patch) diff --git a/security-advisories/sa-2026-0052.md b/security-advisories/sa-2026-0052.md new file mode 100644 index 00000000000..f22654fcbd6 --- /dev/null +++ b/security-advisories/sa-2026-0052.md @@ -0,0 +1,47 @@ +# Security Advisory 2026-0052 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Heap buffer overflow in GdkPixbuf image decoder due to dimension changes | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0052
ZDI-CAN-29581 | + +
+ +## Details + +A heap buffer overflow vulnerability in the gdkpixbufdec element (GdkPixbuf-based image decoder) in gst-plugins-good. The element initializes its output buffer pool based on the dimensions of the first decoded frame and never re-evaluates or reconfigures it when subsequent frames have different dimensions or pixel formats. When processing image sequences where later frames are larger than the first frame, the element acquires undersized output buffers from the stale pool and writes decoded pixel data beyond the buffer boundary, resulting in a heap buffer overflow proportional to the dimension difference. + +## Impact + +A malicious third party could trigger a heap buffer overflow by providing a crafted image sequence with frames of increasing dimensions to an application using the gdkpixbufdec element. This could be triggered through network streams, container files, or image sequences that contain images of differing dimensions processed consecutively, provided the element is the highest-ranked decoder for the image format in question. The overflow could result in a crash, denial of service, data corruption, or arbitrary code execution. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue by ensuring the output buffer pool is re-evaluated whenever frame dimensions or pixel format change. + +Additionally, the element rank was lowered from SECONDARY to NONE, as the underlying gdk-pixbuf library is not designed to handle untrusted input and the element should not be auto-selected for decoding images from unknown sources. Specialized decoders for common image formats are available at higher ranks, and a proper replacement is being tracked at [gst-plugins-rs issue #764](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/764). + +People using older versions of GStreamer should apply the patch and recompile, or disable the plugin to mitigate the vulnerability. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12043.patch) diff --git a/security-advisories/sa-2026-0053.md b/security-advisories/sa-2026-0053.md new file mode 100644 index 00000000000..a8ffdfb7ebb --- /dev/null +++ b/security-advisories/sa-2026-0053.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0053 (ZDI-CAN-29584) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Stack and heap buffer overflow in Opus audio decoder | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-base < 1.28.5 | +| IDs | GStreamer-SA-2026-0053
ZDI-CAN-29584 | + +
+ +## Details + +A stack-based and heap-based buffer overflow vulnerability in the Opus audio decoder in gst-plugins-base when processing Opus streams with more than 64 channels. The decoder uses the channel count from the stream header to determine the size of memory operations on fixed-size 64-element arrays, causing out-of-bounds writes when the channel count exceeds this limit. + +## Impact + +A malicious third party could trigger a stack and heap buffer overflow by providing a crafted Opus stream with an excessive channel count. This could result in application crash, denial of service, data corruption, or possibly arbitrary code execution through stack manipulation or pointer corruption. + +## Solution + +The gst-plugins-base 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Base 1.28.5](/src/gst-plugins-base/gst-plugins-base-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12044.patch) diff --git a/security-advisories/sa-2026-0054.md b/security-advisories/sa-2026-0054.md new file mode 100644 index 00000000000..ac405c0d817 --- /dev/null +++ b/security-advisories/sa-2026-0054.md @@ -0,0 +1,42 @@ +# Security Advisory 2026-0054 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Heap buffer overflow in encoding-target loader on malformed UTF-8 input | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-base < 1.28.5 | +| IDs | GStreamer-SA-2026-0054 | +
+ +## Details + +A heap buffer overflow vulnerability in the encoding-target loader in gst-plugins-base. The loader passes encoding target names directly to a UTF-8 to ASCII conversion function without validating UTF-8 well-formedness first. The conversion function assumes valid UTF-8 input and iterates over multi-byte sequences without bounds checking. When the input contains a truncated multi-byte UTF-8 sequence at the end of the buffer, the internal UTF-8 iterator advances past the NUL terminator and reads adjacent heap memory. The vulnerability is reachable through the public encoding profile API, which accepts arbitrary byte sequences from callers. + +## Impact + +An application that passes untrusted input to the encoding profile API could trigger a heap buffer overflow by providing a string containing a truncated UTF-8 sequence, potentially resulting in a crash, denial of service, or information disclosure. + +## Solution + +The gst-plugins-base 1.28.5 release addresses the issue. People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Base 1.28.5](/src/gst-plugins-base/gst-plugins-base-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12045.patch) diff --git a/security-advisories/sa-2026-0055.md b/security-advisories/sa-2026-0055.md new file mode 100644 index 00000000000..fc86141273f --- /dev/null +++ b/security-advisories/sa-2026-0055.md @@ -0,0 +1,43 @@ +# Security Advisory 2026-0055 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in H.266/VVC parser PPS tile slice loop | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0055 | +
+ +## Details + +An out-of-bounds read vulnerability in the H.266/VVC codec parser (gsth266parser) in gst-plugins-bad when parsing Picture Parameter Set (PPS) tile slices. The parser iterates over explicitly signalled slice heights using a count that is constrained only by the tile row height in coding tree units. For large pictures this count can exceed the fixed array dimension of 440, allowing reads beyond the second dimension of the slice height storage array. A previous fix for CVE-2026-53701 added bounds validation for the first dimension of the array but did not address the second dimension. + +## Impact + +A malicious third party could trigger an out-of-bounds read by providing a crafted H.266/VVC video stream with a large picture dimension and an excessive number of explicitly signalled slices per tile, potentially resulting in a crash, denial of service, or information disclosure. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12046.patch) diff --git a/security-advisories/sa-2026-0056.md b/security-advisories/sa-2026-0056.md new file mode 100644 index 00000000000..db6ded4b88f --- /dev/null +++ b/security-advisories/sa-2026-0056.md @@ -0,0 +1,52 @@ +# Security Advisory 2026-0056 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Heap-based buffer overflow in H.266 video parser slice header processing | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0056| +
+ +## Details + +A heap-based buffer overflow in the H.266 (VVC) video bitstream parser in +gst-plugins-bad when parsing slice headers. The vulnerability occurs in the +code that tracks CTU entry points during slice header parsing. A bounds check +on the fixed-size entry point array was performed after the loop that populates +it, rather than before each write, allowing a crafted H.266 stream with many +tile or entropy-coding sync boundaries to write past the end of the heap- +allocated array. + +## Impact + +It is possible for a malicious third party to trigger a heap buffer overflow +that can result in a crash of the application or possibly also allow code +execution through heap manipulation when processing a crafted H.266 video +stream. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12047.patch) diff --git a/security-advisories/sa-2026-0057.md b/security-advisories/sa-2026-0057.md new file mode 100644 index 00000000000..dff68d50ee3 --- /dev/null +++ b/security-advisories/sa-2026-0057.md @@ -0,0 +1,47 @@ +# Security Advisory 2026-0057 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in RTP JPEG depayloader | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0057 | + +
+ +## Details + +An out-of-bounds read vulnerability in the RTP JPEG depayloader in gst-plugins-good. When processing RTP packets with custom quantization tables, the precision field is used to determine how many bytes to copy from the quantization table data, but the length field provided by the packet is only validated against the total payload size. An attacker can craft a packet where the precision field indicates large 16-bit quantization tables while the length field specifies a much smaller amount of actual data. The subsequent memory copy then reads past the end of the quantization table region into adjacent memory in the RTP payload buffer. + +## Impact + +A malicious third party could trigger an out-of-bounds read by sending a crafted RTP packet to an application using the RTP JPEG depayloader. This can result in a crash and denial of service, or potentially leak heap memory contents into the reconstructed JPEG output. Since this element processes network-reachable RTP streams, the vulnerability can be exploited remotely without authentication. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue by validating that the precision-derived quantization table size matches the actual length field before copying table data. + +Note that the rtpjpegdepay element is deprecated. Users should migrate to [rtpjpegdepay2](https://gstreamer.freedesktop.org/documentation/rsrtp/rtpjpegdepay2.html) and generally the new Rust-based RTP payloader/depayloader elements. These follow the specifications more closely and solve many of the problems present in the older C-based elements. + +People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12048.patch) diff --git a/security-advisories/sa-2026-0058.md b/security-advisories/sa-2026-0058.md new file mode 100644 index 00000000000..91de4bc41ed --- /dev/null +++ b/security-advisories/sa-2026-0058.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0058 (CVE-2026-2920 follow-up) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in ASF demuxer packet payload parsing | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-ugly < 1.28.5 | +| IDs | GStreamer-SA-2026-0058
CVE-2026-2920 follow-up | + +
+ +## Details + +An out-of-bounds read vulnerability in the ASF demuxer in gst-plugins-ugly. The demuxer lacked sufficient bounds validation when parsing payload extension data from packet replicated data. The replicated data length field from packet headers could exceed the fixed 256-byte buffer size, and the bounds checks used the unclamped length value, allowing reads beyond the buffer boundary when processing multiple payload extensions with cumulative offsets. Additionally, the TIMING extension type read eight bytes without validating that sufficient data was available. + +## Impact + +A malicious third party could trigger out-of-bounds reads by providing a crafted ASF or WMV file, potentially resulting in a crash, denial of service, or information disclosure. + +## Solution + +The gst-plugins-ugly 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-2920](https://www.cve.org/CVERecord?id=CVE-2026-2920) + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Ugly 1.28.5](/src/gst-plugins-ugly/gst-plugins-ugly-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12049.patch) diff --git a/security-advisories/sa-2026-0059.md b/security-advisories/sa-2026-0059.md new file mode 100644 index 00000000000..050121e0da0 --- /dev/null +++ b/security-advisories/sa-2026-0059.md @@ -0,0 +1,43 @@ +# Security Advisory 2026-0059 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Out-of-bounds read in VP9 parser superframe index parsing | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0059 | +
+ +## Details + +An out-of-bounds read vulnerability in the VP9 parser in gst-plugins-bad when parsing VP9 superframe metadata. The parser extracts the per-frame-size byte count and frame count from the superframe header to compute the total superframe index size, but did not validate that the computed index size fits within the provided data buffer. A crafted VP9 superframe with large field values produces an index size exceeding the actual buffer length, causing the pointer arithmetic for the index reader to underflow and subsequent reads to access memory before the start of the buffer. + +## Impact + +A malicious third party could trigger out-of-bounds reads by providing a crafted VP9 superframe with a short buffer and large index size fields, potentially resulting in a crash, denial of service, or limited information disclosure. VP9 is widely used for file-based media (WebM containers), real-time communication (WebRTC), and adaptive streaming (DASH/HLS), making the vulnerability triggerable through file processing pipelines, remote video streams, and live streaming servers. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12050.patch) diff --git a/security-advisories/sa-2026-0060.md b/security-advisories/sa-2026-0060.md new file mode 100644 index 00000000000..da0c993074a --- /dev/null +++ b/security-advisories/sa-2026-0060.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0060 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Stack-based out-of-bounds write in closed caption converter | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0060 | + +
+ +## Details + +A stack-based out-of-bounds write vulnerability in the ccconverter element (closed caption converter) in gst-plugins-bad. When converting CEA608 raw data to CEA708 CDP format, the element passed the full input buffer size directly to the internal conversion function without validation. The conversion function uses fixed-size stack buffers sized according to the maximum expected CEA608 data length. Input buffers exceeding this maximum caused writes beyond the stack buffer boundaries. The fix truncates the input length to the maximum expected size before processing and adds internal bounds validation as a defense-in-depth measure. + +## Impact + +A malicious third party could trigger a stack-based out-of-bounds write by providing a crafted media file containing oversized CEA608 closed caption data, potentially resulting in a crash, denial of service, or arbitrary code execution. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12051.patch) diff --git a/security-advisories/sa-2026-0061.md b/security-advisories/sa-2026-0061.md new file mode 100644 index 00000000000..bf50bdb63dd --- /dev/null +++ b/security-advisories/sa-2026-0061.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0061 (CVE-2026-14935) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Possible authentication bypass in WebRTC SDP fingerprint validation | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0061
CVE-2026-14935 | + +
+ +## Details + +A logic error in the WebRTC SDP fingerprint validation code in the `webrtcbin` element of gst-plugins-bad. The condition checking for the presence of DTLS fingerprint attributes in incoming SDP was inverted: it rejected SDP offers and answers that contained fingerprint information in both the session-level and media-level, while accepting SDP that lacked fingerprint information entirely. SDP with fingerprint information in only one location was handled correctly. This affected the validation performed when processing remote descriptions for active media sections. + +## Impact + +A malicious third party controlling or modifying the remote SDP signaling can strip the fingerprint attributes and have the affected element accept the description. This breaks the WebRTC requirement that binds the DTLS certificate to the signaled identity, weakening the authentication guarantee of the DTLS handshake. The vulnerability enables an authentication bypass at the SDP validation stage. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-14935](https://www.cve.org/CVERecord?id=CVE-2026-14935) + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12052.patch) diff --git a/security-advisories/sa-2026-0062.md b/security-advisories/sa-2026-0062.md new file mode 100644 index 00000000000..ff39e61dd1e --- /dev/null +++ b/security-advisories/sa-2026-0062.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0062 (CVE-2026-59692) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Stack buffer overflow in DTLS certificate verification | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0062
CVE-2026-59692 | + +
+ +## Details + +A stack buffer overflow vulnerability in the DTLS connection implementation in gst-plugins-bad. The DTLS connection element used a fixed-size stack buffer to store the formatted Subject Distinguished Name (DN) of a peer certificate during DTLS handshake verification. The buffer size was not validated against the actual formatted length of the certificate Subject. A remote DTLS peer can send a certificate with a Subject DN that formats to more than the fixed buffer size, causing a stack-based out-of-bounds write. + +## Impact + +An unauthenticated remote DTLS-SRTP or WebRTC peer can trigger a stack buffer overflow during the DTLS handshake by sending a certificate with an oversized Subject DN. This can result in process crash, data corruption, or potentially arbitrary code execution. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-59692](https://www.cve.org/CVERecord?id=CVE-2026-59692) + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12053.patch) diff --git a/security-advisories/sa-2026-0063.md b/security-advisories/sa-2026-0063.md new file mode 100644 index 00000000000..ea324f6baa9 --- /dev/null +++ b/security-advisories/sa-2026-0063.md @@ -0,0 +1,44 @@ +# Security Advisory 2026-0063 (CVE-2026-59691) + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Heap out-of-bounds write in RFB source when decoding framebuffer updates | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-bad < 1.28.5 | +| IDs | GStreamer-SA-2026-0063
CVE-2026-59691 | + +
+ +## Details + +A heap out-of-bounds write vulnerability in the rfbsrc element (RFB source) in gst-plugins-bad. The underlying RFB decoder wrote pixel data using a fixed size when filling rectangles during framebuffer update decoding, regardless of the negotiated bytes-per-pixel value. When a VNC server advertised a 16 bits-per-pixel framebuffer format, the decoder allocated the framebuffer at 2 bytes per pixel but the fill operation wrote 4 bytes per pixel, causing writes beyond the allocated buffer. Additionally, the decoder read color values from RRE, CoRRE, and Hextile encoded framebuffer updates using a fixed 4-byte format instead of respecting the negotiated pixel size, leading to incorrect data interpretation for smaller pixel formats. + +## Impact + +A malicious third party could trigger a heap out-of-bounds write by operating a crafted VNC server that sends framebuffer updates with specific pixel formats and encoding types. This can result in a crash, denial of service, data corruption, or potentially arbitrary code execution in the client application using the RFB source element. + +## Solution + +The gst-plugins-bad 1.28.5 release addresses the issue. People using older +versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2026-59691](https://www.cve.org/CVERecord?id=CVE-2026-59691) + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Bad 1.28.5](/src/gst-plugins-bad/gst-plugins-bad-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12054.patch) diff --git a/security-advisories/sa-2026-0064.md b/security-advisories/sa-2026-0064.md new file mode 100644 index 00000000000..c9b39bbceb3 --- /dev/null +++ b/security-advisories/sa-2026-0064.md @@ -0,0 +1,47 @@ +# Security Advisory 2026-0064 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | NULL pointer dereference in WAV parser during adtl chunk parsing in streaming mode | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0064 | + +
+ +## Details + +A NULL pointer dereference vulnerability in the WAV parser (wavparse) in gst-plugins-good when processing crafted WAV files in streaming (push) mode. The streaming handler for `LIST`/`adtl` chunks maps the chunk buffer using the attacker-declared size without first verifying that sufficient data is available. When fewer bytes are buffered than declared, the mapping operation returns NULL, which is subsequently dereferenced during chunk parsing without a NULL check. + +This is distinct from CVE-2026-1940 (GST-SA-2026-0001), which addressed an out-of-bounds read inside the `adtl` chunk parser but did not add the availability guard on the streaming caller side. + +## Impact + +A malicious third party could trigger a crash of the application by supplying a crafted WAV file with an over-declared `adtl` chunk size, resulting in denial of service. Because push mode is used by network source elements such as HTTP sources like souphttpsrc, the vulnerability can be exploited remotely by an unauthenticated server delivering a small crafted file to a receiving application. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue by adding a data availability check before mapping `adtl` chunk data in streaming mode, consistent with the existing guard used for `LIST`/`INFO` chunks. + +People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12055.patch) diff --git a/security-advisories/sa-2026-0065.md b/security-advisories/sa-2026-0065.md new file mode 100644 index 00000000000..e0ae50effda --- /dev/null +++ b/security-advisories/sa-2026-0065.md @@ -0,0 +1,45 @@ +# Security Advisory 2026-0065 + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Integer overflow in Matroska LZO1X decompressor | +| Date | 2026-07-08 | +| Affected Versions | GStreamer gst-plugins-good < 1.28.5 | +| IDs | GStreamer-SA-2026-0065| + +
+ +## Details + +An integer overflow vulnerability in the vendored LZO1X decompressor used by the Matroska (MKV/WebM) demuxer in gst-plugins-good. The decompressor accumulates run lengths from the compressed stream into a signed 32-bit integer without bounding the value. A compressed stream containing a sufficiently long sequence of zero bytes (approximately 8.4 million or more) causes the accumulator to overflow past the maximum representable value into a negative value. This negative length is then passed to the internal copy functions, where bounds checks comparing the signed integer against unsigned buffer offsets fail to trigger. The negative value is implicitly converted to a very large unsigned value during the memory copy operation, resulting in a heap buffer overflow writing well past the decompression output buffer. + +The vulnerability affects Matroska and WebM files with tracks using LZO1X compression. This is related to CVE-2014-4610 in FFmpeg, which addressed the same issue in the upstream LZO1X decoder. GStreamer's vendored copy of the decoder was never updated with this fix. A previous advisory (SA-2022-0002, CVE-2022-1924) addressed size accounting around the decompressor but did not fix the integer overflow in the length decoding logic. + +## Impact + +A malicious third party could trigger a heap buffer overflow by providing a crafted Matroska or WebM file with LZO1X-compressed data. Since the Matroska demuxer is auto-plugged by playbin, decodebin, and gst-discoverer pipelines, merely opening or previewing such a file is sufficient to trigger the vulnerability. This could result in application crash, denial of service, data corruption, or arbitrary code execution. + +## Solution + +The gst-plugins-good 1.28.5 release addresses the issue. People using older versions of GStreamer should apply the patch and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- No CVE number assigned or pending + +### GStreamer 1.28.5 release + +- [Release Notes](/releases/1.28/#1.28.5) +- [GStreamer Plugins Good 1.28.5](/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12056.patch) diff --git a/subprojects/gst-devtools/docs/ges-validate-action-types.md b/subprojects/gst-devtools/docs/ges-validate-action-types.md index 09973b7bbd0..1384a87601c 100644 --- a/subprojects/gst-devtools/docs/ges-validate-action-types.md +++ b/subprojects/gst-devtools/docs/ges-validate-action-types.md @@ -1,1040 +1,2387 @@ # GES action types +## seek + + +``` validate-scenario +seek, + flags=(string describing the GstSeekFlags to set), + start=(double or string (GstClockTime)), + [rate=(double)], + [start_type=(string)], + [stop=(double or string (GstClockTime))], + [stop_type=(string)], + [playback-time=(double,string)]; +``` + +Seeks into the stream. This is an example of a seek happening when the stream reaches 5 seconds +or 1 eighth of its duration and seeks to 10s or 2 eighths of its duration: + + +``` + seek, playback-time="min(5.0, (duration/8))", start="min(10, 2*(duration/8))", flags=accurate+flush +``` + + +**Implementer namespace**: ges + +### Parameters + +#### `flags` (_mandatory_) + +The GstSeekFlags to use + +**Possible types**: `string describing the GstSeekFlags to set` + +--- + +#### `start` (_mandatory_) + +The starting value of the seek + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double or string (GstClockTime)` + +--- + +#### `rate` (_optional_) + +The rate value of the seek + +**Possible types**: `double` + +**Default**: 1.0 + +--- + +#### `start_type` (_optional_) + +The GstSeekType to use for the start of the seek, in: + [none, set, end] + +**Possible types**: `string` + +**Default**: set + +--- + +#### `stop` (_optional_) + +The stop value of the seek + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double or string (GstClockTime)` + +**Default**: GST_CLOCK_TIME_NONE + +--- + +#### `stop_type` (_optional_) + +The GstSeekType to use for the stop of the seek, in: + [none, set, end] + +**Possible types**: `string` + +**Default**: set + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + ## edit-container + ``` validate-scenario edit-container, - [playback-time=(double,string)], container-name=(string), - position=(double or string), - [edit-mode=(string)], [edge=(string)], - [new-layer-priority=(int)]; + [edit-mode=(string)], + [new-layer-priority=(int)], + [position=(double or string)], + [project-uri=(string)], + [playback-time=(double,string)]; ``` Allows to edit a container (like a GESClip), for more details, have a look at: -ges_container_edit documentation, Note that the timeline will -be commited, and flushed so that the edition is taken into account - * Implementer namespace: ges +ges_timeline_element_edit documentation, Note that the timeline will +be committed, and flushed so that the edition is taken into account + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `container-name` (_mandatory_) + +The name of the GESContainer to edit + +**Possible types**: `string` + +--- + +#### `edge` (_optional_) + +The GESEdge to use to edit @container-name +should be in [ start, end, none ] + +**Possible types**: `string` + +**Default**: none + +--- + +#### `edit-mode` (_optional_) + +The GESEditMode to use to edit @container-name + +**Possible types**: `string` + +**Default**: normal + +--- + +#### `new-layer-priority` (_optional_) + +The priority of the layer @container should land in. +If the layer you're trying to move the container to doesn't exist, it will +be created automatically. -1 means no move. + +**Possible types**: `int` + +**Default**: -1 + +--- -* `playback-time`:(optional): The playback time at which the action will be executed +#### `position` (_optional_) - Possible variables: +The new position of the GESContainer + +**Possible variables**: + + * position: The current position in the stream + + * duration: The duration of the stream + +**Possible types**: `double or string` + +**Default**: (null) + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` - Default: 0.0 +**Default**: 0.0 -* `on-message`:(optional): Specify on what message type the action will be executed. +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` + +**Default**: (null) + +--- + +## edit + + +``` validate-scenario +edit, + element-name=(string), + [edge=(string)], + [edit-mode=(string)], + [new-layer-priority=(int)], + [position=(double or string)], + [project-uri=(string)], + [source-frame=(double or string)], + [playback-time=(double,string)]; +``` + +Allows to edit a element (like a GESClip), for more details, have a look at: +ges_timeline_element_edit documentation, Note that the timeline will +be committed, and flushed so that the edition is taken into account + +**Implementer namespace**: ges + +### Parameters + +#### `element-name` (_mandatory_) + +The name of the element to edit + +**Possible types**: `string` + +--- + +#### `edge` (_optional_) + +The GESEdge to use to edit @element-name +should be in [ start, end, none ] + +**Possible types**: `string` + +**Default**: none + +--- + +#### `edit-mode` (_optional_) + +The GESEditMode to use to edit @element-name + +**Possible types**: `string` + +**Default**: normal + +--- + +#### `new-layer-priority` (_optional_) - Default: (null) +The priority of the layer @element should land in. +If the layer you're trying to move the element to doesn't exist, it will +be created automatically. -1 means no move. + +**Possible types**: `int` -* `container-name`:(mandatory): The name of the GESContainer to edit +**Default**: -1 - Possible types: `string` +--- -* `position`:(mandatory): The new position of the GESContainer +#### `position` (_optional_) - Possible variables: +The new position of the element + +**Possible variables**: * position: The current position in the stream * duration: The duration of the stream - Possible types: `double or string` +**Possible types**: `double or string` -* `edit-mode`:(optional): The GESEditMode to use to edit @container-name +**Default**: (null) - Possible types: `string` +--- - Default: normal +#### `project-uri` (_optional_) -* `edge`:(optional): The GESEdge to use to edit @container-name -should be in [ edge_start, edge_end, edge_none ] +The project URI with the serialized timeline to execute the action on - Possible types: `string` +**Possible types**: `string` - Default: edge_none +**Default**: (null) -* `new-layer-priority`:(optional): The priority of the layer @container should land in. -If the layer you're trying to move the container to doesn't exist, it will -be created automatically. -1 means no move. +--- + +#### `source-frame` (_optional_) + +The new frame of the element, computed from the @element-nameclip's source frame. + +**Possible types**: `double or string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. - Possible types: `int` +**Possible types**: `string` - Default: -1 +**Default**: (null) + +--- ## add-asset ``` validate-scenario add-asset, - [playback-time=(double,string)], id, - type; + type, + [project-uri=(string)], + [playback-time=(double,string)]; ``` Allows to add an asset to the current project - * Implementer namespace: ges + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `id` (_mandatory_) + +Adds an asset to a project. + +--- + +#### `type` (_mandatory_) + +The type of asset to add + +--- -* `playback-time`:(optional): The playback time at which the action will be executed +#### `project-uri` (_optional_) - Possible variables: +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` + +**Default**: 0.0 + +--- - Default: 0.0 +#### `on-message` (_optional_) -* `on-message`:(optional): Specify on what message type the action will be executed. +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` - Default: (null) +**Default**: (null) -* `id`:(mandatory): Adds an asset to a project. - -* `type`:(mandatory): The type of asset to add +--- ## remove-asset ``` validate-scenario remove-asset, - [playback-time=(double,string)], id, - type; + type, + [project-uri=(string)], + [playback-time=(double,string)]; ``` Allows to remove an asset from the current project - * Implementer namespace: ges + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `id` (_mandatory_) + +The ID of the clip to remove + +--- + +#### `type` (_mandatory_) + +The type of asset to remove + +--- -* `playback-time`:(optional): The playback time at which the action will be executed +#### `project-uri` (_optional_) - Possible variables: +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` + +**Default**: 0.0 + +--- - Default: 0.0 +#### `on-message` (_optional_) -* `on-message`:(optional): Specify on what message type the action will be executed. +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` - Default: (null) +**Default**: (null) -* `id`:(mandatory): The ID of the clip to remove - -* `type`:(mandatory): The type of asset to remove +--- ## add-layer ``` validate-scenario add-layer, - [playback-time=(double,string)], - [priority]; + [priority], + [project-uri=(string)], + [playback-time=(double,string)]; ``` Allows to add a layer to the current timeline - * Implementer namespace: ges + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `priority` (_optional_) + +The priority of the new layer to add,if not specified, the new layer will be appended to the timeline + +**Default**: (null) + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on -* `playback-time`:(optional): The playback time at which the action will be executed +**Possible types**: `string` - Possible variables: +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` - Default: 0.0 +**Default**: 0.0 -* `on-message`:(optional): Specify on what message type the action will be executed. +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` - Default: (null) +**Default**: (null) -* `priority`:(optional): The priority of the new layer to add,if not specified, the new layer will be appended to the timeline - - Default: (null) +--- ## remove-layer ``` validate-scenario remove-layer, - [playback-time=(double,string)], priority, - [auto-transition=(boolean)]; + [auto-transition=(boolean)], + [project-uri=(string)], + [playback-time=(double,string)]; ``` -Allows to remove a layer from the current timeline - * Implementer namespace: ges +Allows to remove a layer from the current timeline + +**Implementer namespace**: ges + +### Parameters + +#### `priority` (_mandatory_) + +The priority of the layer to remove + +--- + +#### `auto-transition` (_optional_) + +Whether auto-transition is activated on the new layer. + +**Possible types**: `boolean` + +**Default**: False + +--- + +#### `project-uri` (_optional_) + +The nested timeline to add clip to + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## add-clip + + +``` validate-scenario +add-clip, + asset-id=(string), + layer-priority=(int), + name=(string), + type=(string), + [duration=(double or string)], + [inpoint=(double or string)], + [project-uri=(string)], + [start=(double or string)], + [playback-time=(double,string)]; +``` + +Allows to add a clip to a given layer + +**Implementer namespace**: ges + +### Parameters + +#### `asset-id` (_mandatory_) + +The id of the asset from which to extract the clip + +**Possible types**: `string` + +--- + +#### `layer-priority` (_mandatory_) + +The priority of the clip to add + +**Possible types**: `int` + +--- + +#### `name` (_mandatory_) + +The name of the clip to add + +**Possible types**: `string` + +--- + +#### `type` (_mandatory_) + +The type of the clip to create + +**Possible types**: `string` + +--- + +#### `duration` (_optional_) + +The duration value to set on the new GESClip + +**Possible types**: `double or string` + +**Default**: (null) + +--- + +#### `inpoint` (_optional_) + +The inpoint value to set on the new GESClip + +**Possible types**: `double or string` + +**Default**: (null) + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `start` (_optional_) + +The start value to set on the new GESClip. + +**Possible types**: `double or string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## remove-clip + + +``` validate-scenario +remove-clip, + name=(string), + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Allows to remove a clip from a given layer + +**Implementer namespace**: ges + +### Parameters + +#### `name` (_mandatory_) + +The name of the clip to remove + +**Possible types**: `string` + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## serialize-project + + +``` validate-scenario +serialize-project, + uri=(string), + [playback-time=(double,string)]; +``` + +serializes a project + +**Implementer namespace**: ges + +### Parameters + +#### `uri` (_mandatory_) + +The uri where to store the serialized project + +**Possible types**: `string` + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## set-child-property + + +``` validate-scenario +set-child-property, + element-name=(string), + property=(string), + value=(gvalue), + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Allows to change child property of an object + +**Implementer namespace**: ges + +### Parameters + +#### `element-name` (_mandatory_) + +The name of the element on which to modify the property + +**Possible types**: `string` + +--- + +#### `property` (_mandatory_) + +The name of the property to modify + +**Possible types**: `string` + +--- + +#### `value` (_mandatory_) + +The value of the property + +**Possible types**: `gvalue` + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## set-layer-active + + +``` validate-scenario +set-layer-active, + active=(gboolean), + layer-priority=(gint), + [tracks=({string, })], + [playback-time=(double,string)]; +``` + +Set activness of a layer (on optional tracks). + +**Implementer namespace**: ges + +### Parameters + +#### `active` (_mandatory_) + +The activness of the layer + +**Possible types**: `gboolean` + +--- + +#### `layer-priority` (_mandatory_) + +The priority of the layer to set activness on + +**Possible types**: `gint` + +--- + +#### `tracks` (_optional_) + +tracks + +**Possible types**: `{string, }` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## set-ges-properties + + +``` validate-scenario +set-ges-properties, + element-name=(string), + [playback-time=(double,string)]; +``` + +Set `element-name` properties values defined by the fields in the following format: `property_name=expected-value` + +**Implementer namespace**: ges + +### Parameters + +#### `element-name` (_mandatory_) + +The name of the element on which to set properties + +**Possible types**: `string` + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## check-ges-properties + + +``` validate-scenario +check-ges-properties, + element-name=(string), + [playback-time=(double,string)]; +``` + +Check `element-name` properties values defined by the fields in the following format: `property_name=expected-value` + +**Implementer namespace**: ges + +### Parameters + +#### `element-name` (_mandatory_) + +The name of the element on which to check properties + +**Possible types**: `string` + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## check-child-properties + + +``` validate-scenario +check-child-properties, + element-name=(string), + [at-time=(string)], + [playback-time=(double,string)]; +``` + +Check `element-name` children properties values defined by the fields in the following format: `property_name=expected-value` + +**Implementer namespace**: ges + +### Parameters + +#### `element-name` (_mandatory_) + +The name of the element on which to check children properties + +**Possible types**: `string` + +--- + +#### `at-time` (_optional_) + +The time at which to check the values, taking into account the ControlBinding if any set. + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## set-child-properties + + +``` validate-scenario +set-child-properties, + element-name=(string), + [playback-time=(double,string)]; +``` + +Sets `element-name` children properties values defined by the fields in the following format: `property-name=new-value` + +**Implementer namespace**: ges + +### Parameters + +#### `element-name` (_mandatory_) + +The name of the element on which to modify child properties + +**Possible types**: `string` + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## split-clip + + +``` validate-scenario +split-clip, + clip-name=(string), + position=(double or string), + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Split a clip at a specified position. + +**Implementer namespace**: ges + +### Parameters + +#### `clip-name` (_mandatory_) + +The name of the clip to split + +**Possible types**: `string` + +--- + +#### `position` (_mandatory_) + +The position at which to split the clip + +**Possible types**: `double or string` + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## set-track-restriction-caps + + +``` validate-scenario +set-track-restriction-caps, + caps=(string), + track-type=(string), + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Sets restriction caps on tracks of a specific type. + +**Implementer namespace**: ges + +### Parameters + +#### `caps` (_mandatory_) + +The caps to set on the track + +**Possible types**: `string` + +--- + +#### `track-type` (_mandatory_) + +The type of track to set restriction caps on + +**Possible types**: `string` + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## element-set-asset + + +``` validate-scenario +element-set-asset, + asset-id=(string), + element-name=(string), + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Sets restriction caps on tracks of a specific type. + +**Implementer namespace**: ges + +### Parameters + +#### `asset-id` (_mandatory_) + +The id of the asset from which to extract the clip + +**Possible types**: `string` + +--- + +#### `element-name` (_mandatory_) + +The name of the TimelineElement to set an asset on + +**Possible types**: `string` + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## container-add-child + + +``` validate-scenario +container-add-child, + asset-id=(string), + container-name=(string), + [child-name=(string)], + [child-type=(string)], + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Add a child to @container-name. If asset-id and child-type are specified, the child will be created and added. Otherwise @child-name has to be specified and will be added to the container. + +**Implementer namespace**: ges + +### Parameters + +#### `asset-id` (_mandatory_) + +The id of the asset from which to extract the child + +**Possible types**: `string` + +--- + +#### `container-name` (_mandatory_) + +The name of the GESContainer to add a child to + +**Possible types**: `string` + +--- + +#### `child-name` (_optional_) + +The name of the child to add to @container-name + +**Possible types**: `string` + +**Default**: NULL + +--- + +#### `child-type` (_optional_) + +The type of the child to create + +**Possible types**: `string` + +**Default**: NULL + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: + + * `position`: The current position in the stream + + * `duration`: The duration of the stream + +**Possible types**: `double,string` + +**Default**: 0.0 + +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. + +**Possible types**: `string` + +**Default**: (null) + +--- + +## container-remove-child + + +``` validate-scenario +container-remove-child, + child-name=(string), + container-name=(string), + [project-uri=(string)], + [playback-time=(double,string)]; +``` + +Remove a child from @container-name. + +**Implementer namespace**: ges + +### Parameters + +#### `child-name` (_mandatory_) + +The name of the child to reomve from @container-name + +**Possible types**: `string` + +--- + +#### `container-name` (_mandatory_) + +The name of the GESContainer to remove a child from + +**Possible types**: `string` + +--- + +#### `project-uri` (_optional_) + +The project URI with the serialized timeline to execute the action on + +**Possible types**: `string` + +**Default**: (null) -### Parameters +--- - Parameters: +#### `playback-time` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +The playback time at which the action will be executed - Possible variables: +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` - Default: 0.0 - -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +**Default**: 0.0 - Possible types: `string` +--- - Default: (null) +#### `on-message` (_optional_) -* `priority`:(mandatory): The priority of the layer to remove +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. -* `auto-transition`:(optional): Wheter auto-transition is activated on the new layer. +**Possible types**: `string` - Possible types: `boolean` +**Default**: (null) - Default: False +--- -## add-clip +## group ``` validate-scenario -add-clip, - [playback-time=(double,string)], - name=(string), - layer-priority=(int), - asset-id=(string), - type=(string), - [start=(double or string)], - [inpoint=(double or string)], - [duration=(double or string)]; +group, + containers=({ container-name, }), + [container-name=(string)], + [project-uri=(string)], + [playback-time=(double,string)]; ``` -Allows to add a clip to a given layer - * Implementer namespace: ges +Group containers together. + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `containers` (_mandatory_) -* `playback-time`:(optional): The playback time at which the action will be executed +Array of GESContainer names to group - Possible variables: +**Possible types**: `{ container-name, }` - * `position`: The current position in the stream +--- - * `duration`: The duration of the stream +#### `container-name` (_optional_) - Possible types: `double,string` +The name of the resulting group - Default: 0.0 +**Possible types**: `string` -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +**Default**: (null) - Possible types: `string` +--- - Default: (null) +#### `project-uri` (_optional_) -* `name`:(mandatory): The name of the clip to add +The project URI with the serialized timeline to execute the action on - Possible types: `string` +**Possible types**: `string` -* `layer-priority`:(mandatory): The priority of the clip to add +**Default**: (null) - Possible types: `int` +--- -* `asset-id`:(mandatory): The id of the asset from which to extract the clip +#### `playback-time` (_optional_) - Possible types: `string` +The playback time at which the action will be executed -* `type`:(mandatory): The type of the clip to create +**Possible variables**: - Possible types: `string` + * `position`: The current position in the stream -* `start`:(optional): The start value to set on the new GESClip. + * `duration`: The duration of the stream - Possible types: `double or string` +**Possible types**: `double,string` - Default: (null) +**Default**: 0.0 -* `inpoint`:(optional): The inpoint value to set on the new GESClip +--- - Possible types: `double or string` +#### `on-message` (_optional_) - Default: (null) +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. -* `duration`:(optional): The duration value to set on the new GESClip +**Possible types**: `string` - Possible types: `double or string` +**Default**: (null) - Default: (null) +--- -## remove-clip +## ungroup-container ``` validate-scenario -remove-clip, - [playback-time=(double,string)], - name=(string); +ungroup-container, + container-name=(string), + [project-uri=(string)], + [recursive=(boolean)], + [playback-time=(double,string)]; ``` -Allows to remove a clip from a given layer - * Implementer namespace: ges - -### Parameters - - Parameters: +Ungroup children of @container-name. -* `playback-time`:(optional): The playback time at which the action will be executed +**Implementer namespace**: ges - Possible variables: +### Parameters - * `position`: The current position in the stream +#### `container-name` (_mandatory_) - * `duration`: The duration of the stream +The name of the GESContainer to ungroup children from - Possible types: `double,string` +**Possible types**: `string` - Default: 0.0 +--- -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +#### `project-uri` (_optional_) - Possible types: `string` +The project URI with the serialized timeline to execute the action on - Default: (null) +**Possible types**: `string` -* `name`:(mandatory): The name of the clip to remove +**Default**: (null) - Possible types: `string` +--- -## serialize-project +#### `recursive` (_optional_) +Whether to recurse ungrouping or not. -``` validate-scenario -serialize-project, - [playback-time=(double,string)], - uri=(string); -``` +**Possible types**: `boolean` -serializes a project - * Implementer namespace: ges +**Default**: (null) -### Parameters +--- - Parameters: +#### `playback-time` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +The playback time at which the action will be executed - Possible variables: +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` - Default: 0.0 +**Default**: 0.0 -* `on-message`:(optional): Specify on what message type the action will be executed. +--- + +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` - Default: (null) +**Default**: (null) -* `uri`:(mandatory): The uri where to store the serialized project +--- - Possible types: `string` - -## set-child-property +## set-control-source ``` validate-scenario -set-child-property, - [playback-time=(double,string)], +set-control-source, element-name=(string), - property=(string), - value=(gvalue); + property-name=(string), + [binding-type=(string)], + [interpolation-mode=(string)], + [project-uri=(string)], + [source-type=(string)], + [playback-time=(double,string)]; ``` -Allows to change child property of an object - * Implementer namespace: ges +Adds a GstControlSource on @element-name::@property-name allowing you to then add keyframes on that property. + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `element-name` (_mandatory_) -* `playback-time`:(optional): The playback time at which the action will be executed +The name of the GESTrackElement to set the control source on - Possible variables: +**Possible types**: `string` - * `position`: The current position in the stream +--- - * `duration`: The duration of the stream +#### `property-name` (_mandatory_) - Possible types: `double,string` +The name of the property for which to set a control source - Default: 0.0 +**Possible types**: `string` -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +--- - Possible types: `string` +#### `binding-type` (_optional_) - Default: (null) +The name of the type of binding to use -* `element-name`:(mandatory): The name of the element on which to modify the property +**Possible types**: `string` - Possible types: `string` +**Default**: direct -* `property`:(mandatory): The name of the property to modify +--- - Possible types: `string` +#### `interpolation-mode` (_optional_) -* `value`:(mandatory): The value of the property +The name of the GstInterpolationMode to on the source - Possible types: `gvalue` +**Possible types**: `string` -## split-clip +**Default**: linear +--- -``` validate-scenario -split-clip, - [playback-time=(double,string)], - clip-name=(string), - position=(double or string); -``` +#### `project-uri` (_optional_) -Split a clip at a specified position. - * Implementer namespace: ges +The project URI with the serialized timeline to execute the action on -### Parameters +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `source-type` (_optional_) + +The name of the type of ControlSource to use + +**Possible types**: `string` + +**Default**: interpolation - Parameters: +--- -* `playback-time`:(optional): The playback time at which the action will be executed +#### `playback-time` (_optional_) - Possible variables: +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` - - Default: 0.0 +**Possible types**: `double,string` -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +**Default**: 0.0 - Possible types: `string` +--- - Default: (null) +#### `on-message` (_optional_) -* `clip-name`:(mandatory): The name of the clip to split +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. - Possible types: `string` +**Possible types**: `string` -* `position`:(mandatory): The position at which to split the clip +**Default**: (null) - Possible types: `double or string` +--- -## set-track-restriction-caps +## add-keyframe ``` validate-scenario -set-track-restriction-caps, - [playback-time=(double,string)], - track-type=(string), - caps=(string); +add-keyframe, + element-name=(string), + property-name=(string), + timestamp=(string or float), + value=(float), + [project-uri=(string)], + [playback-time=(double,string)]; ``` -Sets restriction caps on tracks of a specific type. - * Implementer namespace: ges +Set a keyframe on @element-name:property-name. + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `element-name` (_mandatory_) -* `playback-time`:(optional): The playback time at which the action will be executed +The name of the GESTrackElement to add a keyframe on - Possible variables: +**Possible types**: `string` - * `position`: The current position in the stream +--- - * `duration`: The duration of the stream +#### `property-name` (_mandatory_) - Possible types: `double,string` +The name of the property for which to add a keyframe on - Default: 0.0 +**Possible types**: `string` -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +--- - Possible types: `string` +#### `timestamp` (_mandatory_) - Default: (null) +The timestamp of the keyframe -* `track-type`:(mandatory): The type of track to set restriction caps on +**Possible types**: `string or float` - Possible types: `string` +--- -* `caps`:(mandatory): The caps to set on the track +#### `value` (_mandatory_) - Possible types: `string` +The value of the keyframe -## element-set-asset +**Possible types**: `float` +--- -``` validate-scenario -element-set-asset, - [playback-time=(double,string)], - element-name=(string), - asset-id=(string); -``` +#### `project-uri` (_optional_) -Sets restriction caps on tracks of a specific type. - * Implementer namespace: ges +The project URI with the serialized timeline to execute the action on -### Parameters +**Possible types**: `string` - Parameters: +**Default**: (null) -* `playback-time`:(optional): The playback time at which the action will be executed +--- - Possible variables: +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` - Default: 0.0 - -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +**Default**: 0.0 - Possible types: `string` +--- - Default: (null) +#### `on-message` (_optional_) -* `element-name`:(mandatory): The name of the TimelineElement to set an asset on +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. - Possible types: `string` +**Possible types**: `string` -* `asset-id`:(mandatory): The id of the asset from which to extract the clip +**Default**: (null) - Possible types: `string` +--- -## container-add-child +## copy-element ``` validate-scenario -container-add-child, - [playback-time=(double,string)], - container-name=(string), - [child-name=(string)], - asset-id=(string), - [child-type=(string)]; +copy-element, + element-name=(string), + position=(string or float), + [paste-name=(string)], + [project-uri=(string)], + [recurse=(boolean)], + [playback-time=(double,string)]; ``` -Add a child to @container-name. If asset-id and child-type are specified, the child will be created and added. Otherwize @child-name has to be specified and will be added to the container. - * Implementer namespace: ges - -### Parameters +Remove a child from @container-name. - Parameters: +**Implementer namespace**: ges -* `playback-time`:(optional): The playback time at which the action will be executed +### Parameters - Possible variables: +#### `element-name` (_mandatory_) - * `position`: The current position in the stream +The name of the GESTtimelineElement to copy - * `duration`: The duration of the stream +**Possible types**: `string` - Possible types: `double,string` +--- - Default: 0.0 +#### `position` (_mandatory_) -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +The time where to paste the element - Possible types: `string` +**Possible types**: `string or float` - Default: (null) +--- -* `container-name`:(mandatory): The name of the GESContainer to add a child to +#### `paste-name` (_optional_) - Possible types: `string` +The name of the copied element -* `child-name`:(optional): The name of the child to add to @container-name +**Possible types**: `string` - Possible types: `string` +**Default**: (null) - Default: NULL +--- -* `asset-id`:(mandatory): The id of the asset from which to extract the child +#### `project-uri` (_optional_) - Possible types: `string` +The project URI with the serialized timeline to execute the action on -* `child-type`:(optional): The type of the child to create +**Possible types**: `string` - Possible types: `string` +**Default**: (null) - Default: NULL +--- -## container-remove-child +#### `recurse` (_optional_) +Copy recursively or not -``` validate-scenario -container-remove-child, - [playback-time=(double,string)], - container-name=(string), - child-name=(string); -``` +**Possible types**: `boolean` -Remove a child from @container-name. - * Implementer namespace: ges +**Default**: true -### Parameters +--- - Parameters: +#### `playback-time` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +The playback time at which the action will be executed - Possible variables: +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` - - Default: 0.0 +**Possible types**: `double,string` -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +**Default**: 0.0 - Possible types: `string` +--- - Default: (null) +#### `on-message` (_optional_) -* `container-name`:(mandatory): The name of the GESContainer to remove a child from +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. - Possible types: `string` +**Possible types**: `string` -* `child-name`:(mandatory): The name of the child to reomve from @container-name +**Default**: (null) - Possible types: `string` +--- -## ungroup-container +## remove-keyframe ``` validate-scenario -ungroup-container, - [playback-time=(double,string)], - container-name=(string), - [recursive=(boolean)]; +remove-keyframe, + element-name=(string), + property-name=(string), + timestamp=(string or float), + [project-uri=(string)], + [playback-time=(double,string)]; ``` -Ungroup children of @container-name. - * Implementer namespace: ges - -### Parameters - - Parameters: +Remove a keyframe on @element-name:property-name. -* `playback-time`:(optional): The playback time at which the action will be executed +**Implementer namespace**: ges - Possible variables: +### Parameters - * `position`: The current position in the stream +#### `element-name` (_mandatory_) - * `duration`: The duration of the stream +The name of the GESTrackElement to add a keyframe on - Possible types: `double,string` +**Possible types**: `string` - Default: 0.0 +--- -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +#### `property-name` (_mandatory_) - Possible types: `string` +The name of the property for which to add a keyframe on - Default: (null) +**Possible types**: `string` -* `container-name`:(mandatory): The name of the GESContainer to ungroup children from +--- - Possible types: `string` +#### `timestamp` (_mandatory_) -* `recursive`:(optional): Wether to recurse ungrouping or not. +The timestamp of the keyframe - Possible types: `boolean` +**Possible types**: `string or float` - Default: (null) +--- -## set-control-source +#### `project-uri` (_optional_) +The project URI with the serialized timeline to execute the action on -``` validate-scenario -set-control-source, - [playback-time=(double,string)], - element-name=(string), - property-name=(string), - [binding-type=(string)], - [source-type=(string)], - [interpolation-mode=(string)]; -``` +**Possible types**: `string` -Adds a GstControlSource on @element-name::@property-name allowing you to then add keyframes on that property. - * Implementer namespace: ges +**Default**: (null) -### Parameters +--- - Parameters: +#### `playback-time` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +The playback time at which the action will be executed - Possible variables: +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` + +**Default**: 0.0 + +--- - Default: 0.0 +#### `on-message` (_optional_) -* `on-message`:(optional): Specify on what message type the action will be executed. +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` - Default: (null) +**Default**: (null) -* `element-name`:(mandatory): The name of the GESTrackElement to set the control source on +--- - Possible types: `string` - -* `property-name`:(mandatory): The name of the property for which to set a control source +## load-project - Possible types: `string` -* `binding-type`:(optional): The name of the type of binding to use +``` validate-scenario +load-project, + [serialized-content=(string)], + [uri=(string)], + [playback-time=(double,string)]; +``` - Possible types: `string` +Loads a project either from its content passed in the 'serialized-content' field or using the provided 'uri'. +Note that it will completely clean the previous timeline - Default: direct +**Implementer namespace**: ges -* `source-type`:(optional): The name of the type of ControlSource to use +### Parameters - Possible types: `string` +#### `serialized-content` (_optional_) - Default: interpolation +The full content of the XML describing project in XGES format. -* `interpolation-mode`:(optional): The name of the GstInterpolationMode to on the source +**Possible types**: `string` - Possible types: `string` +**Default**: (null) - Default: linear +--- -## add-keyframe +#### `uri` (_optional_) +The uri of the project to load (used only if serialized-content is not provided) -``` validate-scenario -add-keyframe, - [playback-time=(double,string)], - element-name=(string), - property-name=(string), - timestamp=(string or float), - value=(float); -``` +**Possible types**: `string` -Remove a child from @container-name. - * Implementer namespace: ges +**Default**: (null) -### Parameters +--- - Parameters: +#### `playback-time` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +The playback time at which the action will be executed - Possible variables: +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` - - Default: 0.0 - -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. - - Possible types: `string` - - Default: (null) - -* `element-name`:(mandatory): The name of the GESTrackElement to add a keyframe on +**Possible types**: `double,string` - Possible types: `string` +**Default**: 0.0 -* `property-name`:(mandatory): The name of the property for which to add a keyframe on +--- - Possible types: `string` +#### `on-message` (_optional_) -* `timestamp`:(mandatory): The timestamp of the keyframe +Specify on what message type the action will be executed. + If both 'playback-time' and 'on-message' is specified, the action will be executed + on whatever happens first. - Possible types: `string or float` +**Possible types**: `string` -* `value`:(mandatory): The value of the keyframe +**Default**: (null) - Possible types: `float` +--- -## copy-element +## commit ``` validate-scenario -copy-element, - [playback-time=(double,string)], - element-name=(string), - [recurse=(boolean)], - position=(string or float), - [paste-name=(string)]; +commit, + [playback-time=(double,string)]; ``` -Remove a child from @container-name. - * Implementer namespace: ges +Commit the timeline. + +**Implementer namespace**: ges ### Parameters - Parameters: +#### `playback-time` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +The playback time at which the action will be executed - Possible variables: +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` + +**Default**: 0.0 - Default: 0.0 +--- -* `on-message`:(optional): Specify on what message type the action will be executed. +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` - Default: (null) +**Default**: (null) -* `element-name`:(mandatory): The name of the GESTtimelineElement to copy +--- - Possible types: `string` +## check-ges-video-element-selector -* `recurse`:(optional): Copy recursively or not - Possible types: `boolean` +``` validate-scenario +check-ges-video-element-selector, + [colorconvert-factory=(string)], + [compositor-factory=(string)], + [convert-scale-factory=(string)], + [deinterlace-factory=(string)], + [downloader-factory=(string)], + [memory-feature=(string)], + [scale-factory=(string)], + [strict=(boolean)], + [uploader-factory=(string)], + [videoflip-factory=(string)], + [playback-time=(double,string)]; +``` - Default: true +Assert that the GESVideoElementSelector singleton resolved to the expected factories and flags. Every field is optional; fields not listed in the action are not checked. -* `position`:(mandatory): The time where to paste the element +**Implementer namespace**: ges - Possible types: `string or float` +### Parameters -* `paste-name`:(optional): The name of the copied element +#### `colorconvert-factory` (_optional_) - Possible types: `string` +Expected colorconvert factory name. - Default: (null) +**Possible types**: `string` -## remove-keyframe +**Default**: (null) +--- -``` validate-scenario -remove-keyframe, - [playback-time=(double,string)], - element-name=(string), - property-name=(string), - timestamp=(string or float); -``` +#### `compositor-factory` (_optional_) -Remove a child from @container-name. - * Implementer namespace: ges +Expected name of the selected compositor factory. -### Parameters +**Possible types**: `string` - Parameters: +**Default**: (null) -* `playback-time`:(optional): The playback time at which the action will be executed +--- - Possible variables: +#### `convert-scale-factory` (_optional_) - * `position`: The current position in the stream +Expected combined convert+scale factory name. Empty string asserts none (fallback sandwich is used). - * `duration`: The duration of the stream +**Possible types**: `string` - Possible types: `double,string` +**Default**: (null) - Default: 0.0 +--- -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +#### `deinterlace-factory` (_optional_) - Possible types: `string` +Expected deinterlace factory name. - Default: (null) +**Possible types**: `string` -* `element-name`:(mandatory): The name of the GESTrackElement to add a keyframe on +**Default**: (null) - Possible types: `string` +--- -* `property-name`:(mandatory): The name of the property for which to add a keyframe on +#### `downloader-factory` (_optional_) - Possible types: `string` +Expected downloader factory name. Empty string asserts none. -* `timestamp`:(mandatory): The timestamp of the keyframe +**Possible types**: `string` - Possible types: `string or float` +**Default**: (null) -## load-project +--- +#### `memory-feature` (_optional_) -``` validate-scenario -load-project, - [playback-time=(double,string)], - serialized-content; -``` +Expected memory feature (e.g. `memory:GLMemory`). Empty string asserts the selector is on system memory. -Loads a project either from its content passed in the serialized-content field. -Note that it will completely clean the previous timeline - * Implementer namespace: ges +**Possible types**: `string` -### Parameters +**Default**: (null) - Parameters: +--- -* `playback-time`:(optional): The playback time at which the action will be executed +#### `scale-factory` (_optional_) - Possible variables: +Expected scaler factory name. - * `position`: The current position in the stream +**Possible types**: `string` - * `duration`: The duration of the stream +**Default**: (null) - Possible types: `double,string` +--- - Default: 0.0 +#### `strict` (_optional_) -* `on-message`:(optional): Specify on what message type the action will be executed. - If both 'playback-time' and 'on-message' is specified, the action will be executed - on whatever happens first. +Expected value of ges_video_element_selector_is_strict(). - Possible types: `string` +**Possible types**: `boolean` - Default: (null) +**Default**: (null) -* `serialized-content`:(mandatory): The full content of the XML describing project in XGES formet. +--- -## commit +#### `uploader-factory` (_optional_) +Expected uploader factory name. Empty string asserts none. -``` validate-scenario -commit, - [playback-time=(double,string)]; -``` +**Possible types**: `string` -Commit the timeline. - * Implementer namespace: ges +**Default**: (null) -### Parameters +--- - Parameters: +#### `videoflip-factory` (_optional_) -* `playback-time`:(optional): The playback time at which the action will be executed +Expected videoflip factory name. - Possible variables: +**Possible types**: `string` + +**Default**: (null) + +--- + +#### `playback-time` (_optional_) + +The playback time at which the action will be executed + +**Possible variables**: * `position`: The current position in the stream * `duration`: The duration of the stream - Possible types: `double,string` +**Possible types**: `double,string` + +**Default**: 0.0 - Default: 0.0 +--- -* `on-message`:(optional): Specify on what message type the action will be executed. +#### `on-message` (_optional_) + +Specify on what message type the action will be executed. If both 'playback-time' and 'on-message' is specified, the action will be executed on whatever happens first. - Possible types: `string` +**Possible types**: `string` + +**Default**: (null) - Default: (null) +--- diff --git a/subprojects/gst-devtools/docs/gst-validate-flow.md b/subprojects/gst-devtools/docs/gst-validate-flow.md index c244bf6c3af..cdc179a3d61 100644 --- a/subprojects/gst-devtools/docs/gst-validate-flow.md +++ b/subprojects/gst-devtools/docs/gst-validate-flow.md @@ -167,7 +167,12 @@ several overrides and listening to different pads with different settings. expectation file will be required. If a validateflow config is used without specifying any other parametters, the validateflow plugin will consider that all validateflow overrides will use that value. - +* `extra-serialized-metas`: Default: 'none'. List of serializable `GstMeta` to + record in Base64. + * `none`: No serializable `GstMeta` will be recorded. + * `all`: Record every serializable `GstMeta` + * `{[, ...]}`: List of serializable `GstMeta` types to + record. ## Scenario actions diff --git a/subprojects/gst-devtools/dots-viewer/static/css/graphviz.svg.css b/subprojects/gst-devtools/dots-viewer/static/css/graphviz.svg.css index 829e1f9aa08..bbdb61627e9 100644 --- a/subprojects/gst-devtools/dots-viewer/static/css/graphviz.svg.css +++ b/subprojects/gst-devtools/dots-viewer/static/css/graphviz.svg.css @@ -97,6 +97,20 @@ body:not(.svg-light-theme) #pipeline-container svg .graph [fill="#ffffff"] { } +/* Element focused via search: pulse a glow on its cluster box */ +#graph .cluster.focused-cluster { + animation: focused-cluster-pulse 1.2s ease-in-out 3; +} +#graph .cluster.focused-cluster > polygon, +#graph .cluster.focused-cluster > path { + stroke: #4285f4 !important; + stroke-width: 3px !important; +} +@keyframes focused-cluster-pulse { + 0%, 100% { filter: drop-shadow(0 0 2px rgba(66, 133, 244, 0.5)); } + 50% { filter: drop-shadow(0 0 12px rgba(66, 133, 244, 1)); } +} + /* Caps hover tooltip content */ .caps-tooltip { font-family: monospace; font-size: 12px; line-height: 1.5; } .caps-tooltip-sep { height: 5px; } diff --git a/subprojects/gst-devtools/dots-viewer/static/index.html b/subprojects/gst-devtools/dots-viewer/static/index.html index 0d2ca7babb3..ca58f326952 100644 --- a/subprojects/gst-devtools/dots-viewer/static/index.html +++ b/subprojects/gst-devtools/dots-viewer/static/index.html @@ -200,6 +200,115 @@ border-color: #0069ff; } + .search-palette { + display: none; + position: fixed; + inset: 0; + z-index: 12000; + background: rgba(0, 0, 0, 0.45); + justify-content: center; + align-items: flex-start; + } + + .search-palette.open { + display: flex; + } + + .search-palette-box { + margin-top: 12vh; + width: 720px; + max-width: 92vw; + display: flex; + flex-direction: column; + background: #222; + border: 1px solid #505050; + border-radius: 8px; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6); + padding: 12px; + } + + .search-palette-box #search { + width: 100%; + box-sizing: border-box; + margin: 0; + font-size: 16px; + } + + #search-results { + display: none; + margin-top: 8px; + max-height: 60vh; + overflow-y: auto; + text-align: left; + } + + .search-result { + display: flex; + align-items: baseline; + gap: 10px; + padding: 6px 12px; + cursor: pointer; + border-bottom: 1px solid #333; + white-space: nowrap; + } + + .search-result:last-child { border-bottom: none; } + + .search-result:hover, + .search-result.active { + background-color: #1a4c9e; + } + + .search-result .sr-name { + color: #ffffff; + font-weight: bold; + font-family: monospace; + } + + .search-result .sr-type { + color: #80b0ff; + font-size: 12px; + } + + .search-result .sr-pipeline { + color: #b0b0b0; + font-size: 12px; + margin-left: auto; + padding-left: 20px; + flex-shrink: 0; + overflow: hidden; + text-overflow: ellipsis; + } + + .search-result .sr-pipeline::before { + content: "in "; + color: #707070; + font-style: italic; + } + + /* Pipeline (dot file) rows: distinct accent, no "in" prefix on the name. */ + .search-result.is-pipeline .sr-name { + color: #ffd479; + } + + .search-result.is-pipeline .sr-pipeline::before { + content: ""; + } + + /* Rows belonging to the pipeline currently shown in the overlay. */ + .search-result.in-current-pipeline { + border-left: 3px solid #3fb950; + padding-left: 9px; + } + + .search-result.in-current-pipeline .sr-name { + color: #7ee787; + } + + .search-result.in-current-pipeline .sr-pipeline { + color: #3fb950; + } + button { background-color: #2a2a2a; color: #e0e0e0; @@ -219,6 +328,15 @@ background-color: #404040; } + #open-search kbd { + font-family: monospace; + font-size: 11px; + background: #1a1a1a; + border: 1px solid #505050; + border-radius: 3px; + padding: 1px 4px; + } + @media screen and (max-height: 250000px) { .overlay .closebtn { text-align: right; @@ -279,7 +397,7 @@