Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 51
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Wed Oct 14 22:27:31 UTC 2026 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.28.8 + +------------------------------------------------------------------- Thu Oct 8 12:39:19 UTC 2026 - Bjørn Lie <zaitor@opensuse.org> - Drop openaptx plugin (and BuildRequires), now available in
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.28.0 Name: gstreamer-plugins-bad-codecs -Version: 1.28.7 +Version: 1.28.8 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ChangeLog -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ChangeLog
Changed
@@ -1,3 +1,347 @@ +=== release 1.28.8 === + +2026-10-08 17:20:32 +0200 Tim-Philipp Müller <tim@centricular.com> + + * gst-plugins-bad.doap: + * meson.build: + Release 1.28.8 + +2026-06-19 09:43:52 -0400 Xavier Claessens <xclaessens@netflix.com> + + * gst-libs/gst/webrtc/nice/nice.c: + webrtc: nice: Fix crash when failing to get local credentials + `nice_agent_get_local_credentials()` can return TRUE while leaving + `ufrag` and `password` uninitialised. See: + https://gitlab.freedesktop.org/libnice/libnice/-/merge_requests/351 + Even when it returns FALSE, there is no guarantee that `ufrag` and + `password` have been set to NULL. Initialize them to NULL to avoid using + uninitialized memory. + Fixes: #5138 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12454> + +2026-09-22 16:56:55 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * tests/examples/vulkan/vulkanenc.c: + example: vulkanenc: fix string deallocation + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12573> + +2026-09-15 16:57:31 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * tests/check/libs/vkvideoencodeav1.c: + tests: vulkan: free parser only if it's instantiated + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12573> + +2026-09-22 18:04:56 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * ext/vulkan/vkh265dec.c: + vulkanh265dec: fix the level conversion + Because the numbers weren't correct. Regardless, in NVIDIA, fluster's number + remains the same. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12575> + +2026-09-22 18:05:16 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * ext/vulkan/vkh264dec.c: + vulkanh264dec: use level symbols rather numbers + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12575> + +2026-09-24 14:43:03 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * gst-libs/gst/vulkan/gstvkencoder-private.c: + vulkan: encoder: synchronize reference pictures before encoding + Add explicit dependency and frame barriers for each referenced DPB buffer, for + non-layered DPB buffer encoders. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12570> + +2026-09-10 18:01:43 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * gst-libs/gst/vulkan/gstvkencoder-private.c: + vulkan: encoder: release DPB slot 0 when clearing a picture + The encode path assigns slot indices starting at 0, but + gst_vulkan_encoder_picture_clear() only released slots whose index was > 0, so + any DBP picture bound to slot 0 is leaked. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12570> + +2026-10-08 12:50:00 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/hip/gsthipevent.cpp: + hipevent: Fix device ID getter + Return device ID instead of vendor ID + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12669> + +2026-09-23 21:17:02 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/closedcaption/gstcccombiner.c: + closedcaption: Use truncated length when converting CEA608 S334-1A data too + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5309 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12661> + +2026-09-23 19:22:19 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/closedcaption/ccutils.c: + closedcaption: Use truncated length when converting CEA708 data too + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5264 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12661> + +2026-10-01 16:04:49 -0700 Finlay Moss <fin@cofibrant.ai> + + * ext/rsvg/gstrsvgdec.c: + rsvgdec: Fix out-of-bounds read when scanning for SVG end tag + gst_rsvg_dec_parse() scans backwards for an end tag starting at + i = size - 6. That leaves room for the 6-byte "</svg>" comparison, but + the subsequent comparison against the 10-byte "</svg:svg>" literal reads + 10 bytes from data + i, which runs up to 4 bytes past the end of the + mapped adapter buffer for the first iterations (i > size - 10). + Guard the 10-byte memcmp with an explicit bounds check so it only runs + when at least 10 bytes are available from the current offset. + Found with ASan via the gst-discoverer fuzz target; reproducible with a + 41-byte SVG (e.g. '<svg xmlns="http://www.w3.org/2000/svg"/>'). + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12660> + +2026-10-07 11:43:10 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/hip/gsthipmemory.cpp: + hipmemory: Fix typo in doc + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12636> + +2026-10-07 12:05:18 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/hip/gsthipmemory.cpp: + hipmemory: Fix possible leak in GstAllocator::mem_copy + Add missing unref in error path + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12636> + +2026-10-03 16:07:31 +0900 Seungha Yang <seungha@centricular.com> + + * sys/nvcodec/gstnvh264dec.cpp: + nvh264dec: Fix top field POC in DPB entry + Fix copy/paste typo. Use top_field_order_cnt when filling + the top field POC from the complementary field. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12608> + +2022-04-13 13:42:14 +0000 Abdulla Anam <abduanam@amazon.com> + + * gst-libs/gst/mpegts/gst-atsc-section.c: + mpegts: fix GError usage in a loop + After the first error occurred, the variable wasn't re-initialized to + NULL for subsequent iterations. + Also narrow the scope of the err variable. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12605> + +2026-10-01 10:40:32 -0600 Jeremy Whiting <jeremy.whiting@collabora.com> + + * ext/analyticsoverlay/gstobjectdetectionoverlay.c: + * ext/analyticsoverlay/gstsegmentationoverlay.c: + analyticsoverlay: Clear pointers in stop to not leak + A CI valgrind test saw object detection overlay isn't properly + clearing the composition pointer. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12595> + +2026-09-29 07:44:04 -0600 Jeremy Whiting <jeremy.whiting@collabora.com> + + * ext/analyticsoverlay/gstsegmentationoverlay.c: + * tests/check/elements/segmentationoverlay.c: + * tests/check/meson.build: + segmentationoverlay: Fix off-by-one bug and add test + Every canvas row was drawn from the mask row meant + for the row below, and the last row was never written, + so it showed uninitialized memory. + The row pointers are now set before each row is drawn instead + of after. + It was introduced in + 2ce06a7736 "segmentationoverlay: Respect video meta strides". + Also adds a test to check that it doesn't regress later. + This bug also is on 1.28 so should be cherry-picked there. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12595> + +2026-09-24 01:28:35 +1000 Jan Schmidt <jan@centricular.com> + + * ext/analyticsoverlay/gstsegmentationoverlay.c: + segmentationoverlay: Respect video meta strides + Don't assume tightly packed data when reading or generating + video buffers. We have video meta, and can use the correct + stride + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12566> + +2026-05-20 13:12:15 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/va/gstvafilter.c: + va: compositor: Fix alpha blending with Intel driver + On Intel driver, the driver will only perform a blend rather then a copy if the + blend state pointer is not null. Pass a pointer to a zero-initialized blend + state in order to enable alpha blending by default. + Fixes #5114 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12557> + +2026-09-25 18:49:16 +0100 Tim-Philipp Müller <tim@centricular.com> + + * ext/vmaf/gstvmafelement.c: + vmaf: use GST_PARAM_DOC_SHOW_DEFAULT for "threads" property + .. so that when the docs get regenerated it doesn't just put in + the number of cores of whatever the CI runner happens to have at + the time. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12556> + +2026-09-25 18:47:29 +0100 Tim-Philipp Müller <tim@centricular.com> + + * ext/vmaf/gstvmafelement.c: + vmaf: use G_PARAM_STATIC_STRINGS for property registrations + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12556> + +2026-03-25 13:21:57 +0000 Tim-Philipp Müller <tim@centricular.com> + + * docs/plugins/gst_plugins_cache.json: + * ext/vmaf/gstvmafelement.c: + vmaf: change "threads" property default to 0 for automatic + .. determination of number of machine CPUs. + Fixes hard-coding the CPU value of the CI runner in the docs. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12556> +
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/RELEASE -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.28.7 +This is GStreamer gst-plugins-bad 1.28.8 The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/docs/plugins/gst_plugins_cache.json -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/docs/plugins/gst_plugins_cache.json
Changed
@@ -256062,12 +256062,12 @@ "writable": true }, "threads": { - "blurb": "The number of threads", + "blurb": "The number of threads (0 = automatic)", "conditionally-available": false, "construct": false, "construct-only": false, "controllable": false, - "default": "8", + "default": "0", "max": "2147483647", "min": "0", "mutable": "null",
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/analyticsoverlay/gstobjectdetectionoverlay.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/analyticsoverlay/gstobjectdetectionoverlay.c
Changed
@@ -714,6 +714,7 @@ g_clear_object (&overlay->pango_layout); g_clear_object (&overlay->pango_context); gst_clear_buffer (&overlay->canvas); + g_clear_pointer (&overlay->composition, gst_video_overlay_composition_unref); return TRUE; }
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/analyticsoverlay/gstsegmentationoverlay.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/analyticsoverlay/gstsegmentationoverlay.c
Changed
@@ -540,6 +540,8 @@ { GstSegmentationOverlay *overlay = GST_SEGMENTATION_OVERLAY (trans); gst_clear_buffer (&overlay->canvas); + g_clear_pointer (&overlay->composition, gst_video_overlay_composition_unref); + overlay->upstream_composition = NULL; g_free (overlay->color_table); overlay->color_table = NULL; g_free (overlay->mask_filter); @@ -638,8 +640,13 @@ GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, canvas_w, canvas_h); /* Allocate buffer to store canvas */ canvas = gst_buffer_new_and_alloc (canvas_info.size); - cvmeta = gst_buffer_add_video_meta (canvas, GST_VIDEO_FRAME_FLAG_NONE, - GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, canvas_w, canvas_h); + cvmeta = gst_buffer_add_video_meta_full (canvas, + GST_VIDEO_FRAME_FLAG_NONE, + GST_VIDEO_INFO_FORMAT (&canvas_info), + GST_VIDEO_INFO_WIDTH (&canvas_info), + GST_VIDEO_INFO_HEIGHT (&canvas_info), + GST_VIDEO_INFO_N_PLANES (&canvas_info), + canvas_info.offset, canvas_info.stride); /* Keep an handle on canvas to free it if required */ gst_buffer_replace (&overlay->canvas, canvas); @@ -735,11 +742,11 @@ static void gst_segmentation_overlay_resampling (GstSegmentationOverlay * overlay, - gint32 * canvas_data, guint8 * mask_data, GstVideoMeta * cvmeta, + guint8 * canvas_data, guint8 * mask_data, GstVideoMeta * cvmeta, GstVideoMeta * mvmeta) { gsize mask_col_idx, mask_line_idx, last_mask_line_idx = -1; - gint32 *cline = canvas_data, *pcline = NULL; + gint32 *cline = (gint32 *) canvas_data, *pcline = NULL; guint8 *mline = mask_data; gsize color_count = overlay->color_table_size + 1; guint32 *color_table = overlay->color_table; @@ -749,8 +756,10 @@ #define MASK_FILTER(val) (mask_filter == NULL || mask_filter mline val) for (gint cl = 0; cl < cvmeta->height; cl++) { + cline = (gint32 *) (canvas_data + cl * cvmeta->stride0); mask_line_idx = (cl * mvmeta->height) / cvmeta->height; if (last_mask_line_idx != mask_line_idx) { + mline = mask_data + (mask_line_idx * mvmeta->stride0); mask_col_idx = 0; for (gint cc = 0; cc < cvmeta->width; cc++) { mask_col_idx = (cc * mvmeta->width) / cvmeta->width; @@ -760,16 +769,14 @@ clinecc = overlay->bg_color; } } + last_mask_line_idx = mask_line_idx; + pcline = cline; } else { /* If current line would be generate from the same line from the mask * as the previous line in canvas we can simply copy the previous * line into the current line */ memcpy (cline, pcline, sizeof (guint32) * cvmeta->width); } - last_mask_line_idx = mask_line_idx; - pcline = cline; - cline += cvmeta->width; - mline = (mask_line_idx * mvmeta->width) + mask_data; } } @@ -789,7 +796,7 @@ gst_buffer_map (mask, &mmap, GST_MAP_READ); gst_segmentation_overlay_resampling (overlay, - (gint32 *) cmap->data, mmap.data, cvmeta, mvmeta); + cmap->data, mmap.data, cvmeta, mvmeta); gst_buffer_unmap (mask, &mmap); } gst_buffer_unref (mask);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/avtp/gstavtpcvfdepay.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/avtp/gstavtpcvfdepay.c
Changed
@@ -196,6 +196,15 @@ goto end; } + /* The H.264 NAL unit type is read from the first byte of h264_data, so we + * need at least one byte of H.264 data in addition to the header */ + if (G_UNLIKELY (map->size < AVTP_CVF_H264_HEADER_SIZE + 1)) { + GST_DEBUG_OBJECT (avtpcvfdepay, + "Incomplete H.264 payload, expected it to have size of %zd, got %zd", + AVTP_CVF_H264_HEADER_SIZE + 1, map->size); + goto end; + } + pdu = (struct avtp_stream_pdu *) map->data; r = avtp_pdu_get ((struct avtp_common_pdu *) pdu, AVTP_FIELD_SUBTYPE, &val32);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/avtp/gstavtprvfdepay.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/avtp/gstavtprvfdepay.c
Changed
@@ -307,6 +307,14 @@ goto end; } + if (G_UNLIKELY (val <= sizeof (uint64_t))) { + GST_DEBUG_OBJECT (avtprvfdepay, + "Stream data length %" G_GUINT64_FORMAT + " too small, must be greater than %" G_GSIZE_FORMAT, + val, sizeof (uint64_t)); + goto end; + } + GST_DEBUG_OBJECT (avtprvfdepay, "Data length of the video format %" G_GSIZE_FORMAT, val); avtprvfdepay->stream_data_length = (guint) val;
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/rsvg/gstrsvgdec.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/rsvg/gstrsvgdec.c
Changed
@@ -358,7 +358,7 @@ size = i + 6; break; } - if (memcmp (data + i, "</svg:svg>", 10) == 0) { + if (i + 10 <= size && memcmp (data + i, "</svg:svg>", 10) == 0) { completed = TRUE; size = i + 10; break;
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/vmaf/gstvmafelement.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/vmaf/gstvmafelement.c
Changed
@@ -119,7 +119,7 @@ #define DEFAULT_MS_SSIM FALSE #define DEFAULT_FRAME_MESSAGING FALSE #define DEFAULT_POOL_METHOD VMAF_POOL_METHOD_MEAN -#define DEFAULT_NUM_THREADS g_get_num_processors() +#define DEFAULT_NUM_THREADS 0 #define DEFAULT_SUBSAMPLE 1 #define DEFAULT_CONF_INT FALSE #define DEFAULT_VMAF_LOG_LEVEL VMAF_LOG_LEVEL_NONE @@ -338,11 +338,16 @@ gboolean result = TRUE; VmafFeatureDictionary *d = NULL; enum VmafModelFlags flags = VMAF_MODEL_FLAGS_DEFAULT; + guint n_threads = self->vmaf_config_num_threads; + + if (n_threads == 0) { + n_threads = g_get_num_processors (); + } + VmafModelConfig model_cfg = { 0 }; VmafConfiguration cfg = { .log_level = self->vmaf_config_log_level, - .n_threads = - self->vmaf_config_frame_messaging ? 0 : self->vmaf_config_num_threads, + .n_threads = self->vmaf_config_frame_messaging ? 0 : n_threads, .n_subsample = self->vmaf_config_subsample, }; @@ -1111,36 +1116,41 @@ g_param_spec_string ("model-filename", "model-filename", "Model *.pkl abs filename, or file version for built in models", - DEFAULT_MODEL_FILENAME, G_PARAM_READWRITE)); + DEFAULT_MODEL_FILENAME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DISABLE_CLIP, g_param_spec_boolean ("disable-clip", "disable-clip", "Disable clipping VMAF values", - DEFAULT_DISABLE_CLIP, G_PARAM_READWRITE)); + DEFAULT_DISABLE_CLIP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ENABLE_TRANSFORM, g_param_spec_boolean ("enable-transform", "enable-transform", "Enable transform VMAF scores", - DEFAULT_ENABLE_TRANSFORM, G_PARAM_READWRITE)); + DEFAULT_ENABLE_TRANSFORM, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PHONE_MODEL, g_param_spec_boolean ("phone-model", "phone-model", - "Use VMAF phone model", DEFAULT_PHONE_MODEL, G_PARAM_READWRITE)); + "Use VMAF phone model", DEFAULT_PHONE_MODEL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PSNR, g_param_spec_boolean ("psnr", "psnr", - "Estimate PSNR", DEFAULT_PSNR, G_PARAM_READWRITE)); + "Estimate PSNR", DEFAULT_PSNR, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SSIM, g_param_spec_boolean ("ssim", "ssim", - "Estimate SSIM", DEFAULT_SSIM, G_PARAM_READWRITE)); + "Estimate SSIM", DEFAULT_SSIM, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MS_SSIM, g_param_spec_boolean ("ms-ssim", "ms-ssim", - "Estimate MS-SSIM", DEFAULT_MS_SSIM, G_PARAM_READWRITE)); + "Estimate MS-SSIM", DEFAULT_MS_SSIM, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_POOL_METHOD, g_param_spec_enum ("pool-method", "pool-method", @@ -1150,31 +1160,36 @@ g_object_class_install_property (gobject_class, PROP_NUM_THREADS, g_param_spec_uint ("threads", "threads", - "The number of threads", - 0, G_MAXINT, DEFAULT_NUM_THREADS, G_PARAM_READWRITE)); + "The number of threads (0 = automatic)", + 0, G_MAXINT, DEFAULT_NUM_THREADS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_DOC_SHOW_DEFAULT)); g_object_class_install_property (gobject_class, PROP_SUBSAMPLE, g_param_spec_uint ("subsample", "subsample", "Computing on one of every N frames", - 1, 128, DEFAULT_SUBSAMPLE, G_PARAM_READWRITE)); + 1, 128, DEFAULT_SUBSAMPLE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CONF_INT, g_param_spec_boolean ("conf-interval", "conf-interval", - "Enable confidence intervals", DEFAULT_CONF_INT, G_PARAM_READWRITE)); + "Enable confidence intervals", DEFAULT_CONF_INT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FRAME_MESSAGING, g_param_spec_boolean ("frame-message", "frame-message", "Enable frame level score messaging", DEFAULT_FRAME_MESSAGING, - G_PARAM_READWRITE)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_VMAF_RESULTS_FILENAME, g_param_spec_string ("results-filename", "results-filename", "VMAF results filename for scores", - DEFAULT_VMAF_RESULTS_FILENAME, G_PARAM_READWRITE)); + DEFAULT_VMAF_RESULTS_FILENAME, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_VMAF_RESULTS_FORMAT, g_param_spec_enum ("results-format", "results-format",
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/vulkan/vkh264dec.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/vulkan/vkh264dec.c
Changed
@@ -512,44 +512,45 @@ _get_h264_level_idc (int level_idc) { switch (level_idc) { - case 10: + case GST_H264_LEVEL_L1: + case GST_H264_LEVEL_L1B: return STD_VIDEO_H264_LEVEL_IDC_1_0; - case 11: + case GST_H264_LEVEL_L1_1: return STD_VIDEO_H264_LEVEL_IDC_1_1; - case 12: + case GST_H264_LEVEL_L1_2: return STD_VIDEO_H264_LEVEL_IDC_1_2; - case 13: + case GST_H264_LEVEL_L1_3: return STD_VIDEO_H264_LEVEL_IDC_1_3; - case 20: + case GST_H264_LEVEL_L2: return STD_VIDEO_H264_LEVEL_IDC_2_0; - case 21: + case GST_H264_LEVEL_L2_1: return STD_VIDEO_H264_LEVEL_IDC_2_1; - case 22: + case GST_H264_LEVEL_L2_2: return STD_VIDEO_H264_LEVEL_IDC_2_2; - case 30: + case GST_H264_LEVEL_L3: return STD_VIDEO_H264_LEVEL_IDC_3_0; - case 31: + case GST_H264_LEVEL_L3_1: return STD_VIDEO_H264_LEVEL_IDC_3_1; - case 32: + case GST_H264_LEVEL_L3_2: return STD_VIDEO_H264_LEVEL_IDC_3_2; - case 40: + case GST_H264_LEVEL_L4: return STD_VIDEO_H264_LEVEL_IDC_4_0; - case 41: + case GST_H264_LEVEL_L4_1: return STD_VIDEO_H264_LEVEL_IDC_4_1; - case 42: + case GST_H264_LEVEL_L4_2: return STD_VIDEO_H264_LEVEL_IDC_4_2; - case 50: + case GST_H264_LEVEL_L5: return STD_VIDEO_H264_LEVEL_IDC_5_0; - case 51: + case GST_H264_LEVEL_L5_1: return STD_VIDEO_H264_LEVEL_IDC_5_1; - case 52: + case GST_H264_LEVEL_L5_2: return STD_VIDEO_H264_LEVEL_IDC_5_2; - case 60: + case GST_H264_LEVEL_L6: return STD_VIDEO_H264_LEVEL_IDC_6_0; - case 61: + case GST_H264_LEVEL_L6_1: return STD_VIDEO_H264_LEVEL_IDC_6_1; default: - case 62: + case GST_H264_LEVEL_L6_2: return STD_VIDEO_H264_LEVEL_IDC_6_2; } }
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/vulkan/vkh265dec.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/ext/vulkan/vkh265dec.c
Changed
@@ -744,32 +744,32 @@ _get_h265_level_idc (int level_idc) { switch (level_idc) { - case 10: + case GST_H265_LEVEL_L1: return STD_VIDEO_H265_LEVEL_IDC_1_0; - case 20: + case GST_H265_LEVEL_L2: return STD_VIDEO_H265_LEVEL_IDC_2_0; - case 21: + case GST_H265_LEVEL_L2_1: return STD_VIDEO_H265_LEVEL_IDC_2_1; - case 30: + case GST_H265_LEVEL_L3: return STD_VIDEO_H265_LEVEL_IDC_3_0; - case 31: + case GST_H265_LEVEL_L3_1: return STD_VIDEO_H265_LEVEL_IDC_3_1; - case 40: + case GST_H265_LEVEL_L4: return STD_VIDEO_H265_LEVEL_IDC_4_0; - case 41: + case GST_H265_LEVEL_L4_1: return STD_VIDEO_H265_LEVEL_IDC_4_1; - case 50: + case GST_H265_LEVEL_L5: return STD_VIDEO_H265_LEVEL_IDC_5_0; - case 51: + case GST_H265_LEVEL_L5_1: return STD_VIDEO_H265_LEVEL_IDC_5_1; - case 52: + case GST_H265_LEVEL_L5_2: return STD_VIDEO_H265_LEVEL_IDC_5_2; - case 60: + case GST_H265_LEVEL_L6: return STD_VIDEO_H265_LEVEL_IDC_6_0; - case 61: + case GST_H265_LEVEL_L6_1: return STD_VIDEO_H265_LEVEL_IDC_6_1; default: - case 62: + case GST_H265_LEVEL_L6_2: return STD_VIDEO_H265_LEVEL_IDC_6_2; } }
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/hip/gsthipevent.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst-libs/gst/hip/gsthipevent.cpp
Changed
@@ -267,7 +267,7 @@ { g_return_val_if_fail (event, G_MAXUINT); - return event->vendor; + return event->device_id; } /**
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/hip/gsthipmemory.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst-libs/gst/hip/gsthipmemory.cpp
Changed
@@ -490,6 +490,7 @@ GST_ERROR_OBJECT (self, "Failed to set device"); gst_memory_unmap (mem, &src_info); gst_memory_unmap (copy, &dst_info); + gst_memory_unref (copy); return nullptr; } @@ -863,7 +864,7 @@ /** * gst_hip_allocator_set_active: - * @allocator: a #GstCudaAllocator + * @allocator: a #GstHipAllocator * @active: the new active state * * Controls the active state of @allocator.
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/mpegts/gst-atsc-section.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst-libs/gst/mpegts/gst-atsc-section.c
Changed
@@ -140,7 +140,6 @@ guint32 tmp32; guint16 descriptors_loop_length, tmp16; guint i; - GError *err = NULL; vct = g_new0 (GstMpegtsAtscVCT, 1); @@ -167,6 +166,7 @@ for (i = 0; i < source_nb; i++) { GstMpegtsAtscVCTSource *source; + GError *err = NULL; /* minimum 32 bytes for a entry, 2 bytes second descriptor loop-length, 4 bytes crc */ @@ -182,7 +182,7 @@ GST_WARNING ("Failed to convert VCT Source short_name to utf-8: %d %s", err->code, err->message); GST_MEMDUMP ("UTF-16 string", data, 14); - g_error_free (err); + g_clear_error (&err); } data += 14;
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/vulkan/gstvkencoder-private.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst-libs/gst/vulkan/gstvkencoder-private.c
Changed
@@ -222,6 +222,9 @@ size_aligned = GST_ROUND_UP_N (size, priv->caps.caps.minBitstreamBufferSizeAlignment); + /* No slot attributed yet; -1 avoids releasing a live slot in clear(). */ + pic->dpb_slot.slotIndex = -1; + if (priv->layered_dpb) { g_assert (priv->layered_buffer); pic->dpb_buffer = gst_buffer_ref (priv->layered_buffer); @@ -275,7 +278,7 @@ priv = gst_vulkan_encoder_get_instance_private (self); - if (pic->dpb_slot.slotIndex > 0) { + if (pic->dpb_slot.slotIndex >= 0) { priv->slotspic->dpb_slot.slotIndex = NULL; pic->dpb_slot.slotIndex = -1; } @@ -1040,6 +1043,24 @@ priv->callbacks_user_data); } +static gboolean +_add_dpb_dependency_and_barrier (GstVulkanOperation * exec, GstBuffer * buffer, + VkAccessFlags2 access) +{ + if (!gst_vulkan_operation_add_dependency_frame (exec, buffer, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR)) + return FALSE; + + if (!gst_vulkan_operation_add_frame_barrier (exec, buffer, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR, access, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR, NULL)) + return FALSE; + + return TRUE; +} + /** * gst_vulkan_encoder_encode: * @self: a #GstVulkanEncoder @@ -1216,14 +1237,16 @@ VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR, NULL); - gst_vulkan_operation_add_dependency_frame (priv->exec, pic->dpb_buffer, - VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR); - gst_vulkan_operation_add_frame_barrier (priv->exec, pic->dpb_buffer, - VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR, - VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, - VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR, NULL); + /* this also adds the layered dpb if it's the case */ + _add_dpb_dependency_and_barrier (priv->exec, pic->dpb_buffer, + VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR); + + if (!priv->layered_dpb) { + for (i = 0; i < nb_refs; i++) { + _add_dpb_dependency_and_barrier (priv->exec, ref_picsi->dpb_buffer, + VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR); + } + } barriers = gst_vulkan_operation_retrieve_image_barriers (priv->exec);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/webrtc/nice/nice.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst-libs/gst/webrtc/nice/nice.c
Changed
@@ -636,13 +636,14 @@ { if (!candidate->username || !candidate->password) { - gboolean got_credentials; - gchar *ufrag, *password; + gchar *ufrag = NULL, *password = NULL; - got_credentials = - nice_agent_get_local_credentials (agent, candidate->stream_id, &ufrag, - &password); - g_warn_if_fail (got_credentials); + if (!nice_agent_get_local_credentials (agent, candidate->stream_id, &ufrag, + &password)) { + g_warning ("Failed to get local credentials for stream %u", + candidate->stream_id); + return; + } if (!candidate->username) candidate->username = ufrag;
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-plugins-bad.doap -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.28.8</revision> + <branch>1.28</branch> + <name></name> + <created>2026-10-08</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.28.8.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.28.7</revision> <branch>1.28</branch> <name></name>
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/adpcmenc/adpcmenc.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/adpcmenc/adpcmenc.c
Changed
@@ -152,6 +152,19 @@ switch (enc->layout) { case LAYOUT_ADPCM_DVI: layout = "dvi"; + /* The encode loop writes 4 bytes per channel (8 samples) per + * iteration, so the block must hold the per-channel header plus a + * whole number of those chunks. Non-aligned block sizes would leave a + * partial, uninitialized chunk and do not correspond to any real + * ADPCM stream. */ + if (enc->blocksize <= DVI_IMA_HEADER_SIZE * enc->channels + || (enc->blocksize - DVI_IMA_HEADER_SIZE * enc->channels) + % (4 * enc->channels) != 0) { + GST_WARNING_OBJECT (enc, + "block size %d is not valid for %d channel(s)", enc->blocksize, + enc->channels); + return FALSE; + } /* IMA ADPCM includes a 4-byte header per channel, */ sample_bytes = enc->blocksize - (DVI_IMA_HEADER_SIZE * enc->channels); /* two samples per byte, plus a single sample in the header. */ @@ -304,7 +317,14 @@ */ write_pos = HEADER_SIZE * enc->channels; read_pos = enc->channels; /* the first sample is in the header. */ - while (write_pos < enc->blocksize) { + /* Each iteration below consumes 8 * channels input samples + * (CHANNEL_CHUNK_SIZE == 8). Stop before an iteration that would read + * past the samples_per_block * channels samples the base class + * provides; otherwise block sizes whose data area is not a multiple + * of the chunk size cause an out-of-bounds read on the input. */ + while (write_pos < enc->blocksize + && read_pos + 8 * enc->channels <= + enc->samples_per_block * enc->channels) { gint8 CHANNEL_CHUNK_SIZE = 8; for (channel = 0; channel < enc->channels; channel++) { /* convert eight samples (four bytes) per channel, then swap */
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/closedcaption/ccutils.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/closedcaption/ccutils.c
Changed
@@ -550,7 +550,7 @@ continue; } - if (cc_type & 0x10) + if (cc_type & 0x02) started_ccp = TRUE; if (!cc_valid) @@ -674,13 +674,20 @@ cea608_2_len = MAX_CEA608_LEN; } + if (cc_data_len > MAX_CDP_PACKET_LEN) { + GST_WARNING_OBJECT (buf, + "Truncating CEA708 cc_data of %u bytes to %u bytes", + cc_data_len, MAX_CDP_PACKET_LEN); + cc_data_len = MAX_CDP_PACKET_LEN; + } + if (cea608_1 && cea608_1_len > 0) { guint out_i = 0; for (i = 0; i < cea608_1_len / 2; i++) { - if (!remove_cea608_padding || cea608_1i != 0x80 - || cea608_1i + 1 != 0x80) { - cea608_1_copyout_i++ = cea608_1i; - cea608_1_copyout_i++ = cea608_1i + 1; + if (!remove_cea608_padding || cea608_1i * 2 != 0x80 + || cea608_1i * 2 + 1 != 0x80) { + cea608_1_copyout_i++ = cea608_1i * 2; + cea608_1_copyout_i++ = cea608_1i * 2 + 1; } } cea608_1_len = out_i; @@ -691,10 +698,10 @@ if (cea608_2 && cea608_2_len > 0) { guint out_i = 0; for (i = 0; i < cea608_2_len / 2; i++) { - if (!remove_cea608_padding || cea608_2i != 0x80 - || cea608_2i + 1 != 0x80) { - cea608_2_copyout_i++ = cea608_2i; - cea608_2_copyout_i++ = cea608_2i + 1; + if (!remove_cea608_padding || cea608_2i * 2 != 0x80 + || cea608_2i * 2 + 1 != 0x80) { + cea608_2_copyout_i++ = cea608_2i * 2; + cea608_2_copyout_i++ = cea608_2i * 2 + 1; } } cea608_2_len = out_i; @@ -724,6 +731,13 @@ guint cea608_2_len = MAX_CEA608_LEN; int ccp_offset; + if (cc_data_len > MAX_CDP_PACKET_LEN) { + GST_WARNING_OBJECT (buf, + "Truncating CEA708 cc_data of %u bytes to %u bytes", + cc_data_len, MAX_CDP_PACKET_LEN); + cc_data_len = MAX_CDP_PACKET_LEN; + } + memcpy (cc_data_copy, cc_data, cc_data_len); cc_data_len = compact_cc_data (cc_data_copy, cc_data_len);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/closedcaption/gstcccombiner.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/closedcaption/gstcccombiner.c
Changed
@@ -261,7 +261,7 @@ schedule_cea608_s334_1a (GstCCCombiner * self, guint8 * data, guint len, GstClockTime pts, GstClockTime duration) { - guint8 field0_data3, field1_data3; + guint8 field0_dataMAX_CEA608_LEN, field1_dataMAX_CEA608_LEN; guint field0_len = 0, field1_len = 0; guint i; @@ -271,6 +271,12 @@ len = len - (len % 3); } + if (2 * (len / 3) > MAX_CEA608_LEN) { + GST_WARNING ("Truncating CEA608 s334-1a data of %u bytes to %u bytes", + len, MAX_CEA608_LEN * 3 / 2); + len = MAX_CEA608_LEN * 3 / 2; + } + for (i = 0; i < len / 3; i++) { if (datai * 3 & 0x80) { if (datai * 3 + 1 == 0x80 && datai * 3 + 2 == 0x80)
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/gdp/dataprotocol.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/gdp/dataprotocol.c
Changed
@@ -582,6 +582,11 @@ g_return_val_if_fail (payload != NULL, NULL); + if (GST_DP_HEADER_PAYLOAD_LENGTH (header) < 32) { + GST_WARNING ("GDP 0.2 SEEK event payload too short"); + return NULL; + } + /* FIXME, read rate */ rate = 1.0; format = (GstFormat) GST_READ_UINT32_BE (payload);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/jpegformat/gstjpegparse.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/jpegformat/gstjpegparse.c
Changed
@@ -961,9 +961,9 @@ buf = (const gchar *) data; /* buggy avid, it puts EOI only at every 10th frame */ - if (g_str_has_prefix (buf, "AVID")) { + if (size >= 4 && memcmp (buf, "AVID", 4) == 0) { parse_avid (parse, data, size); - } else if (g_str_has_prefix (buf, "MULTISCOPE II")) { + } else if (size >= 13 && memcmp (buf, "MULTISCOPE II", 13) == 0) { parse->par_num = 1; parse->par_den = 2; parse->multiscope = TRUE;
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/mxf/mxfaes-bwf.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/mxf/mxfaes-bwf.c
Changed
@@ -1079,6 +1079,11 @@ metadata_class->type = 0x0147; } +static const MXFUL aiff_aifc_essence_container_label = { { + 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, 0x0d, 0x01, 0x13, 0x01, + 0x01, 0x04, 0x01, 0x00} +}; + static gboolean mxf_is_aes_bwf_essence_track (const MXFMetadataFileDescriptor * d) { @@ -1092,7 +1097,9 @@ key->u14 == 0x02 || key->u14 == 0x03 || key->u14 == 0x04 || key->u14 == 0x08 || key->u14 == 0x09 || - key->u14 == 0x0a || key->u14 == 0x0b)); + key->u14 == 0x0a || key->u14 == 0x0b)) || + /* AAF AIFF-AIFC */ + (mxf_ul_is_equal (key, &aiff_aifc_essence_container_label)); } static MXFEssenceWrapping @@ -1175,7 +1182,23 @@ return GST_FLOW_OK; } +static GstFlowReturn +mxf_aiff_handle_essence_element (const MXFUL * key, GstBuffer * buffer, + GstCaps * caps, MXFMetadataTimelineTrack * track, + gpointer mapping_data, GstBuffer ** outbuf) +{ + *outbuf = buffer; + + /* FIXME: Same as BWF? */ + if (key->u12 != 0x16 || (key->u14 != 0x01 && key->u14 != 0x02 + && key->u14 != 0x0b)) { + GST_ERROR ("Invalid AIFF-AIFC essence element"); + return GST_FLOW_ERROR; + } + /* FIXME: check if the size is a multiply of the unit size, ... */ + return GST_FLOW_OK; +} /* SMPTE RP224 */ static const MXFUL mxf_sound_essence_compression_uncompressed = @@ -1384,12 +1407,71 @@ } static GstCaps * +mxf_aiff_create_caps (MXFMetadataTimelineTrack * track, + MXFMetadataGenericSoundEssenceDescriptor * descriptor, GstTagList ** tags, + gboolean * intra_only, MXFEssenceElementHandleFunc * handler, + gpointer * mapping_data) +{ + GstCaps *ret = NULL; + MXFMetadataWaveAudioEssenceDescriptor *wa_descriptor = NULL; + gchar *codec_name = NULL; + GstAudioFormat audio_format; + guint block_align; + + if (MXF_IS_METADATA_WAVE_AUDIO_ESSENCE_DESCRIPTOR (descriptor)) + wa_descriptor = (MXFMetadataWaveAudioEssenceDescriptor *) descriptor; + + /* FIXME: set a channel layout */ + + if (descriptor->channel_count == 0 || + descriptor->quantization_bits == 0 || + descriptor->audio_sampling_rate.n == 0 || + descriptor->audio_sampling_rate.d == 0) { + GST_ERROR ("Invalid descriptor"); + return NULL; + } + if (wa_descriptor && wa_descriptor->block_align != 0) + block_align = wa_descriptor->block_align; + else + block_align = + (GST_ROUND_UP_8 (descriptor->quantization_bits) * + descriptor->channel_count) / 8; + + audio_format = + gst_audio_format_build_integer (block_align != descriptor->channel_count, + G_BIG_ENDIAN, (block_align / descriptor->channel_count) * 8, + (block_align / descriptor->channel_count) * 8); + ret = + mxf_metadata_generic_sound_essence_descriptor_create_caps (descriptor, + &audio_format); + + codec_name = + g_strdup_printf ("Uncompressed %u-bit AIFF-AIFC audio", + (block_align / descriptor->channel_count) * 8); + + if (!*tags) + *tags = gst_tag_list_new_empty (); + + gst_tag_list_add (*tags, GST_TAG_MERGE_APPEND, GST_TAG_AUDIO_CODEC, + codec_name, GST_TAG_BITRATE, + (gint) (block_align * 8 * + mxf_fraction_to_double (&descriptor->audio_sampling_rate)) / + (descriptor->channel_count), NULL); + g_free (codec_name); + + *handler = mxf_aiff_handle_essence_element; + *intra_only = TRUE; + + return ret; +} + +static GstCaps * mxf_aes_bwf_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags, gboolean * intra_only, MXFEssenceElementHandleFunc * handler, gpointer * mapping_data) { MXFMetadataGenericSoundEssenceDescriptor *s = NULL; - gboolean bwf = FALSE; + gboolean bwf = FALSE, aiff = FALSE; guint i; g_return_val_if_fail (track != NULL, NULL); @@ -1405,6 +1487,16 @@ if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent. descriptori) + && (mxf_ul_is_equal (&track->parent.descriptori->essence_container, + &aiff_aifc_essence_container_label))) { + + s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent. + descriptori; + bwf = FALSE; + aiff = TRUE; + break; + } else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent. + descriptori) && (track->parent.descriptori->essence_container.u14 == 0x01 || track->parent.descriptori->essence_container.u14 == 0x02 || track->parent.descriptori->essence_container.u14 == 0x08 @@ -1412,6 +1504,7 @@ s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent. descriptori; bwf = TRUE; + aiff = FALSE; break; } else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent. @@ -1424,6 +1517,7 @@ s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent. descriptori; bwf = FALSE; + aiff = FALSE; break; } } @@ -1434,6 +1528,9 @@ } else if (bwf) { return mxf_bwf_create_caps (track, s, tags, intra_only, handler, mapping_data); + } else if (aiff) { + return mxf_aiff_create_caps (track, s, tags, intra_only, handler, + mapping_data); } else { return mxf_aes3_create_caps (track, s, tags, intra_only, handler, mapping_data);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/mxf/mxfmux.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/gst/mxf/mxfmux.c
Changed
@@ -1390,6 +1390,10 @@ } } + segment = + &g_array_index (mux->index_table, MXFIndexTableSegment, + mux->current_index_pos); + /* Leave temporal offset initialized at 0, above code will set it as necessary */ ; if (is_keyframe)
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/meson.build -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.28.7', + version : '1.28.8', meson_version : '>= 1.4', default_options : 'warning_level=1', 'buildtype=debugoptimized',
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/po/gst-plugins-bad-1.0.pot -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.28.7\n" +"Project-Id-Version: gst-plugins-bad-1.28.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-07 20:11+0100\n" +"POT-Creation-Date: 2026-10-08 17:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/po/gst-plugins-bad.pot -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.28.7\n" +"Project-Id-Version: gst-plugins-bad-1.28.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-07 20:11+0100\n" +"POT-Creation-Date: 2026-10-08 17:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/release-notes-1.28.md -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/release-notes-1.28.md
Changed
@@ -2,11 +2,11 @@ GStreamer 1.28.0 was originally released on 27 January 2026. -The latest bug-fix release in the stable 1.28 series is 1.28.7(#1.28.7) and was released on 07 September 2026. +The latest bug-fix release in the stable 1.28 series is 1.28.8(#1.28.8) and was released on 08 October 2026. See https://gstreamer.freedesktop.org/releases/1.28/latest for the latest version of this document. -*Last updated: Monday 07 September 2026, 20:00 UTC (log)gitlog* +*Last updated: Thursday 08 October 2026, 17:00 UTC (log)gitlog* latest: https://gstreamer.freedesktop.org/releases/1.28/ gitlog: https://gitlab.freedesktop.org/gstreamer/www/commits/main/src/htdocs/releases/1.28/release-notes-1.28.md @@ -2801,6 +2801,7 @@ - st2038anc: parity bit handling fixes for ST 291 ADF words - video converter and videoconvertscale fixes - mpegdemux: restore gap event sending in MPEG-PS demuxer + - typefinding: fix typefinding regressions for ogg and text files - Fix x264enc high bit depth support in binary packages - Various bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements @@ -2940,6 +2941,189 @@ - List of Merge Requests applied in 1.28.7(https://gitlab.freedesktop.org/groups/gstreamer/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged&milestone_title=1.28.7) - List of Issues fixed in 1.28.7(https://gitlab.freedesktop.org/groups/gstreamer/-/work_items?scope=all&utf8=%E2%9C%93&state=closed&milestone_title=1.28.7) +<a id="1.28.8"></a> + +### 1.28.8 + +The eight 1.28 bug-fix release (1.28.8) was released on 08 October 2026. + +This release only contains bugfixes and important security fixessecurity. +It *should* be safe to update from 1.28.x and we recommend you do so at your +earliest convenience. + +security: https://gstreamer.freedesktop.org/security/ + +#### Highlighted bugfixes in 1.28.8 + + - Various security fixessecurity and playback fixes + - Fix adaptivedemux2 HLS and DASH playback regression + - Fix FLAC audio seeking regression + - Various RTP depayloader and RTSP client SDP handling fixes + - MXF demuxer: Added support for reading AAF AIFF-AIFC audio + - VA-API compositor: Fix alpha blending with Intel driver + - Windows media audio/video seeking improvements + - AMD AMF AV1 video encoder force-keyframe fixes + - Fix endless drain in some FFmpeg wrapper audio encoders and support dual mono + - hlssink3 improvements + - ISOBMFF dash/iso/fmp4 muxer fixes for timestamp rollover in 2036 + - cerbero: Rework checksum verification to allow mirror retries + - Various bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements + +#### gstreamer + + - baseparse: Fix accumulating of detection buffers(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12489) + - buffer: Don't leave buffers with dangling memory pointers if appending memory fails(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12616) + - buffer: Prevent NULL pointer dereferences when deserializing reference timestamp meta(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12652) + - value: fix crash when comparing mixed-type lists(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12649) + - ptp: Fix build failures with Rust 1.99(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12617) + +#### gst-plugins-base + + - appsink: Reset EOS state on PAUSED → READY(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12663) + - audio-resampler-neon: handle Thumb1-only builds correctly(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12501) + - audio-resampler-neon: Follow-up from "fix Thumb encoding and use Clang O2 calculation for strides"(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5280) + - audio: video: Validate audio/video meta deserialization & other meta deserialization fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12652) + - audioconverter: guard against NULL input in do_convert_out(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12517) + - sdpmessage: Avoid sign bit when hex-escaping chars(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12532) + - udmabuf: Open device with O_RDONLY instead O_RDWR(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12567) + - videoconvertscale: Take GstVideoMeta into account when converting(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12516) + +#### gst-plugins-good + + - adaptivedemux2: Drain downloadhelper main context with the main context as the thread default(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12472) + - adaptivedemux2: SIGABRT in downloadhelper_stop() draining transfer context(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5296) + - adaptivedemux2: Remove redundant hls_dep fallback, re-enabling unit tests(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12553) + - audiofx: Miscellaneous FIR filter fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12615) + - flacparse: regression since 1.28 - valid FLAC errors out with "Internal data stream error" after a seek(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5314) + - flacparse: Fix resyncing after a seek(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12574) + - matroska: Use the display unit for storing the display aspect ratio more accurately(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12572) + - matroskamux: DisplayWidth rounding loses aspect ratio for non-integer PARs(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5272) + - matroskademux: fix crash caused by bogus xiph codec data packet sizes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12658) + - qtmux: preserve earliest reordered presentation time(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12635) + - rtph265depay: Check for short packets before processing them(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12655) + - rtph265pay: unmap the RTP header before appending the payload(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12547) + - rtpsession: Ignore SDES priv RTCP packets with invalid lengths(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12659) + - rtp: Various small (RTP and not) depayloader fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12533) + - rtpL8depay, rtpL16depay, rtpL24depay: fix out of bounds write for high channel count(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12657) + - rtspsrc: Fix handling of missing control attribute with multiple media sections(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12504) + - rtspsrc: SIGSEGV in gst_rtspsrc_setup_streams_start() when an SDP media section has no a=control attribute(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5270) + - v4l2: fix guint overflow in calculate_max_sizeimage(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12494) + - v4l2: object: Don't corrupt the caller's filter caps when probing(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12537) + +#### gst-plugins-bad + + - adpcmenc: stop the IMA encode loop before reading past the input frame(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12515) + - amfav1enc: Force a key frame on force-key-unit(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12524) + - ccutils: Miscellaneous parsing fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12543) + - closedcaption: Use truncated length when converting CEA708 / CEA608 S334-1A data too(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12661) + - d3d12: Various GstBaseTransform::transform_meta() related fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12480) + - jpegparse: handle missing NUL terminator in COM segment(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12526) + - hipevent: Fix device ID getter(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12669) + - hipmemory: Fix minor leak and typo(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12636) + - mpegts: fix GError usage in a loop(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12605) + - mxfdemux: Add support for reading AAF AIFF-AIFC audio(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12453) + - mxfmux: Fix possible crash when adding a new segment due to frame reordering(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12506) + - nvh264dec: Fix top field POC in DPB entry(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12608) + - rsvgdec: Fix out-of-bounds read when scanning for SVG end tag(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12660) + - rtp: Various small (RTP and not) depayloader fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12533) + - segmentationoverlay: Fix off-by-one bug and add test(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12595) + - segmentationoverlay: Respect video meta strides(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12566) + - va: compositor: Fix alpha blending with Intel driver(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12557) + - vmaf: use GST_PARAM_DOC_SHOW_DEFAULT for "threads" property(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12556) + - vulkan h26x enc/dec misc fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12575) + - vulkan: encoder: DPB slots and DBP barrier fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12570) + - vulkan: tests: examples fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12573) + - webrtc/nice: Fix crash in nice_candidate_free during gather(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12454) + +#### gst-plugins-ugly + + - asfdemux: Explicitly set packet to zero if seek_time is zero(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12505) + - asfdemux: Clamp simple index entry count against the available data size(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12656) + - rtpasfdepay: Ignore zero-length ASF packets(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12533) + +#### GStreamer Rust plugins + + - fmp4mux: Fix racy test_large_gop_split_at_fragment_boundary_chunked test(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3252) + - gifdec: error out if a frameless GIF is somehow supplied(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3268) + - gifdec: error out if a frameless GIF is somehow supplied, try 2(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3281) + - HLS sink improvements(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3285) + - isobmff: Fix NTP seconds roll-over past 2036(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3288) + - raptorq: Downgrade to 2.0.0 again(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3256) + - reqwesthttpsrc: Handle empty response chunks(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3274) + - rtspsrc2: Fix handling of scheme and parameter parsing(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3237) + - Reapply "Switch to aws-lc-rs"(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3273) + - Update dependencies(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3272) + - meson: Skip validate-plugins if gstreamer-validate-1.0 is missing(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3279) + +#### gst-libav + + - avaudenc: Fix endless drain of encoders that support flushing(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12571) + - avcodecmap: Take the dual mono case into account(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12578) + - avenc_tta: Allow up to 16 channels and use that in the 16 channel test(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12590) + - Disable OMX encoders and decoders(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12488) + +#### gst-rtsp-server + + - rtsp-stream: Use updated string length when stripping invalid characters(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12654) + +#### gstreamer-sharp + + - No changes + +#### gst-python + + - No changes + +#### gst-editing-services + + - No changes + +#### gst-devtools, gst-validate + gst-integration-testsuites + + - No changes + +#### gst-examples + + - No changes + +#### gstreamer-docs + + - No changes + +#### Development build environment + + - No changes + +#### Cerbero build tool and packaging changes in 1.28.8 + + - cerbero: Retry in another case when cargo-cinstall fails on Windows(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2351) + - cerbero: Rework checksum verification to allow mirror retries(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2360) + - config, filesprovider: make Python module capture version agnostic(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2359) + - filesprovider seems to only pick up one pyd file when multiple are present(https://gitlab.freedesktop.org/gstreamer/cerbero/-/work_items/572) + - glib-networking: Update to 2.90.0 with OpenSSL backend threading fixes(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2353) + - libpng: fix assorted MSVC linking issues(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2355) + - soundtouch.recipe: Use the fdo mirror for tarballs(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2352) + - util: consider 2025 Server as Windows 11(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2349) + +#### Contributors to 1.28.8 + +Abdulla Anam, Amyspark, Brendan McGrath, Bruno Fournier, David Lincoln, +Finlay Moss, Hunter Ford, Jan Schmidt, Jeremy Whiting, Josef Kolář, +Kushal Arora, L. E. Segovia, Maksim Nikolaev, Marcus Hanestad, +Maxandre Ogeret, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Piotr Brzeziński, Robert Mader, Qi Hou, Remus Lazar, Sanchayan Maity, +Sebastian Dröge, Seungha Yang, Thibault Saunier, Tim-Philipp Müller, +Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Xabier Rodriguez Calvar, +Xavier Claessens, Zhaoxuan Zhai,
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/amfcodec/gstamfav1enc.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/sys/amfcodec/gstamfav1enc.cpp
Changed
@@ -1438,7 +1438,7 @@ AMF_RESULT result; if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) { - amf_int64 type = (amf_int64) AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_NONE; + amf_int64 type = (amf_int64) AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_KEY; result = surf->SetProperty (AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE, type); if (result != AMF_OK) { GST_WARNING_OBJECT (encoder, "Failed to set force frame type, result %"
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/d3d12/gstd3d12basefilter.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/sys/d3d12/gstd3d12basefilter.cpp
Changed
@@ -27,9 +27,6 @@ GST_DEBUG_CATEGORY_STATIC (gst_d3d12_base_filter_debug); #define GST_CAT_DEFAULT gst_d3d12_base_filter_debug -#define META_TAG_VIDEO meta_tag_video_quark -static GQuark meta_tag_video_quark; - enum { PROP_0, @@ -137,7 +134,6 @@ gst_type_mark_as_plugin_api (GST_TYPE_D3D12_BASE_FILTER, (GstPluginAPIFlags) 0); - meta_tag_video_quark = g_quark_from_static_string (GST_META_TAG_VIDEO_STR); } static void @@ -359,14 +355,16 @@ GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf) { const GstMetaInfo *info = meta->info; - const gchar *const *tags; - - tags = gst_meta_api_type_get_tags (info->api); - - if (!tags || (g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, META_TAG_VIDEO))) { + const gchar *valid_tags = { + GST_META_TAG_VIDEO_STR, + GST_META_TAG_VIDEO_ORIENTATION_STR, + GST_META_TAG_VIDEO_SIZE_STR, + GST_META_TAG_VIDEO_COLORSPACE_STR, + nullptr + }; + + if (gst_meta_api_type_tags_contain_only (info->api, valid_tags)) return TRUE; - } return GST_BASE_TRANSFORM_CLASS (parent_class)->transform_meta (trans, outbuf, meta, inbuf);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/d3d12/gstd3d12convert.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/sys/d3d12/gstd3d12convert.cpp
Changed
@@ -114,6 +114,10 @@ GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, GST_D3D12_ALL_FORMATS))); +static GQuark _size_quark; +static GQuark _scale_quark; +static GQuark _matrix_quark; + enum { PROP_SAMPLING_METHOD = 1, @@ -351,6 +355,10 @@ (GstPluginAPIFlags) 0); gst_type_mark_as_plugin_api (GST_TYPE_D3D12_SAMPLING_METHOD, (GstPluginAPIFlags) 0); + + _size_quark = g_quark_from_static_string (GST_META_TAG_VIDEO_SIZE_STR); + _scale_quark = gst_video_meta_transform_scale_get_quark (); + _matrix_quark = gst_video_meta_transform_matrix_get_quark (); } static void @@ -547,8 +555,6 @@ GstCapsFeatures *f; gint i, n; GstCaps *res; - GstCapsFeatures *feature = - gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_D3D12_MEMORY); res = gst_caps_new_empty (); @@ -565,14 +571,13 @@ st = gst_structure_copy (st); /* Only remove format info for the cases when we can actually convert */ if (!gst_caps_features_is_any (f) - && gst_caps_features_is_equal (f, feature)) { + && gst_caps_features_contains (f, GST_CAPS_FEATURE_MEMORY_D3D12_MEMORY)) { gst_structure_remove_fields (st, "format", "colorimetry", "chroma-site", NULL); } gst_caps_append_structure_full (res, st, gst_caps_features_copy (f)); } - gst_caps_features_free (feature); return res; } @@ -584,8 +589,6 @@ GstCapsFeatures *f; gint i, n; GstCaps *res; - GstCapsFeatures *feature = - gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_D3D12_MEMORY); res = gst_caps_new_empty (); @@ -602,7 +605,7 @@ st = gst_structure_copy (st); /* Only remove format info for the cases when we can actually convert */ if (!gst_caps_features_is_any (f) - && gst_caps_features_is_equal (f, feature)) { + && gst_caps_features_contains (f, GST_CAPS_FEATURE_MEMORY_D3D12_MEMORY)) { gst_structure_set (st, "width", GST_TYPE_INT_RANGE, 1, G_MAXINT, "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); @@ -615,7 +618,6 @@ gst_caps_append_structure_full (res, st, gst_caps_features_copy (f)); } - gst_caps_features_free (feature); return res; } @@ -627,9 +629,6 @@ GstCapsFeatures *f; gint i, n; GstCaps *res; - GstCapsFeatures *feature = - gst_caps_features_new_single_static_str - (GST_CAPS_FEATURE_MEMORY_D3D12_MEMORY); res = gst_caps_new_empty (); @@ -646,7 +645,7 @@ st = gst_structure_copy (st); /* Only remove format info for the cases when we can actually convert */ if (!gst_caps_features_is_any (f) - && gst_caps_features_is_equal (f, feature)) { + && gst_caps_features_contains (f, GST_CAPS_FEATURE_MEMORY_D3D12_MEMORY)) { gst_structure_set (st, "width", GST_TYPE_INT_RANGE, 1, G_MAXINT, "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, nullptr); /* if pixel aspect ratio, make a range of it */ @@ -660,7 +659,6 @@ gst_caps_append_structure_full (res, st, gst_caps_features_copy (f)); } - gst_caps_features_free (feature); return res; } @@ -1849,11 +1847,51 @@ * shader or video processor object. Then the conversion object will * consider source cropping area automatically */ - if (meta->info->api == GST_VIDEO_CROP_META_API_TYPE) + const auto info = meta->info; + if (info->api == GST_VIDEO_CROP_META_API_TYPE) + return FALSE; + + const gchar *valid_tags = { + GST_META_TAG_VIDEO_STR, + GST_META_TAG_VIDEO_ORIENTATION_STR, + GST_META_TAG_VIDEO_SIZE_STR, + nullptr + }; + + if (!gst_meta_api_type_tags_contain_only (info->api, valid_tags)) return FALSE; - return GST_BASE_TRANSFORM_CLASS (parent_class)->transform_meta (trans, - outbuf, meta, inbuf); + if (gst_meta_api_type_has_tag (info->api, _size_quark)) { + if (info->transform_func) { + auto base = GST_D3D12_BASE_FILTER (trans); + auto self = GST_D3D12_BASE_CONVERT (trans); + auto priv = self->priv; + + GstVideoMetaTransformMatrix trans_matrix; + GstVideoMetaTransform trans = { &base->in_info, &base->out_info }; + const GstVideoRectangle in_rectangle = { 0, 0, + GST_VIDEO_INFO_WIDTH (&base->in_info), + GST_VIDEO_INFO_HEIGHT (&base->in_info) + }; + const GstVideoRectangle out_rectangle = { + (gint) priv->out_rect.left, + (gint) priv->out_rect.top, + (gint) (priv->out_rect.right - priv->out_rect.left), + (gint) (priv->out_rect.bottom - priv->out_rect.top), + }; + + gst_video_meta_transform_matrix_init (&trans_matrix, + &base->in_info, &in_rectangle, &base->out_info, &out_rectangle); + + if (!info->transform_func (outbuf, meta, inbuf, _matrix_quark, + &trans_matrix)) + info->transform_func (outbuf, meta, inbuf, _scale_quark, &trans); + } + + return FALSE; + } + + return TRUE; } static void
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/d3d12/gstd3d12memorycopy.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/sys/d3d12/gstd3d12memorycopy.cpp
Changed
@@ -45,9 +45,6 @@ GST_DEBUG_CATEGORY_STATIC (gst_d3d12_memory_copy_debug); #define GST_CAT_DEFAULT gst_d3d12_memory_copy_debug -#define META_TAG_VIDEO meta_tag_video_quark -static GQuark meta_tag_video_quark; - #ifdef HAVE_GST_D3D11 #define SINK_STATIC_CAPS \ GST_VIDEO_CAPS_MAKE_WITH_FEATURES \ @@ -490,8 +487,6 @@ GST_DEBUG_FUNCPTR (gst_d3d12_memory_copy_before_transform); trans_class->transform = GST_DEBUG_FUNCPTR (gst_d3d12_memory_copy_transform); - meta_tag_video_quark = g_quark_from_static_string (GST_META_TAG_VIDEO_STR); - gst_type_mark_as_plugin_api (GST_TYPE_D3D12_MEMORY_COPY, (GstPluginAPIFlags) 0); gst_type_mark_as_plugin_api (GST_TYPE_D3D12_MEMCPY_CMD_QUEUE_TYPE, @@ -963,8 +958,19 @@ guint i = 0; for (i = 0; i < n; i++) { - gst_caps_set_features (tmp, i, - gst_caps_features_new_single_static_str (feature_name)); + auto orig_features = gst_caps_get_features (tmp, i); + + if (gst_caps_features_is_any (orig_features)) + continue; + + auto features = gst_caps_features_new_static_str (feature_name, nullptr); + if (gst_caps_features_contains (orig_features, + GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION)) { + gst_caps_features_add (features, + GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION); + } + + gst_caps_set_features (tmp, i, features); } return tmp; @@ -1362,14 +1368,16 @@ GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf) { const GstMetaInfo *info = meta->info; - const gchar *const *tags; - - tags = gst_meta_api_type_get_tags (info->api); + const gchar *valid_tags = { + GST_META_TAG_VIDEO_STR, + GST_META_TAG_VIDEO_ORIENTATION_STR, + GST_META_TAG_VIDEO_SIZE_STR, + GST_META_TAG_VIDEO_COLORSPACE_STR, + nullptr + }; - if (!tags || (g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, META_TAG_VIDEO))) { + if (gst_meta_api_type_tags_contain_only (info->api, valid_tags)) return TRUE; - } return GST_BASE_TRANSFORM_CLASS (parent_class)->transform_meta (trans, outbuf, meta, inbuf);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/nvcodec/gstnvh264dec.cpp -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/sys/nvcodec/gstnvh264dec.cpp
Changed
@@ -880,7 +880,7 @@ dpb->FieldOrderCnt1 = ref->bottom_field_order_cnt; dpb->used_for_reference = 0x2; if (ref->other_field) { - dpb->FieldOrderCnt0 = ref->other_field->bottom_field_order_cnt; + dpb->FieldOrderCnt0 = ref->other_field->top_field_order_cnt; dpb->used_for_reference |= 0x1; } else { dpb->FieldOrderCnt0 = 0;
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvafilter.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/sys/va/gstvafilter.c
Changed
@@ -1883,9 +1883,9 @@ && sample->premultiplied_alpha) { blend.flags |= VA_BLEND_PREMULTIPLIED_ALPHA; } - if (blend.flags != 0) { - params.blend_state = &blend; - } + + /* Ensure we do a blend operation and not a copy blit */ + params.blend_state = &blend; status = vaCreateBuffer (dpy, self->context, VAProcPipelineParameterBufferType, sizeof (params), 1, ¶ms,
View file
_service:download_files:gst-plugins-bad-1.28.8.tar.xz/tests/check/elements/segmentationoverlay.c
Added
@@ -0,0 +1,153 @@ +/* + * GStreamer segmentationoverlay tests + * Copyright (C) 2026 Collabora Ltd. + * author: Jeremy Whiting <jeremy.whiting@collabora.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include <gst/check/gstcheck.h> +#include <gst/check/gstharness.h> +#include <gst/video/video.h> + +#include <gst/analytics/analytics.h> + +#define FRAME_WIDTH 4 +/* Mask rows are 1 pixel wide but padded to a 4 byte stride. */ +#define MASK_STRIDE 4 + +/* Push one black BGRA frame carrying a segmentation mask that covers the + * whole frame, one pixel wide and with the region id of each mask row given in + * @mask_rows, and check each frame row shows the region of the mask row it is + * scaled from: two frame rows must look the same exactly when their mask rows + * carry the same region. */ +static void +check_mask_rows_map_to_frame_rows (const guint8 * mask_rows, + guint mask_height, guint frame_height) +{ + GstHarness *h; + GstBuffer *in, *out, *mask; + GstAnalyticsRelationMeta *rmeta; + GstAnalyticsSegmentationMtd seg_mtd; + guint region_ids256; + gsize region_count = 0; + guint8 *mask_data; + gsize offsetGST_VIDEO_MAX_PLANES = { 0 }; + gint strideGST_VIDEO_MAX_PLANES = { MASK_STRIDE }; + gsize frame_size = FRAME_WIDTH * frame_height * 4; + guint32 *first_pixel; + GstMapInfo map; + gchar *caps; + + h = gst_harness_new ("segmentationoverlay"); + caps = g_strdup_printf ("video/x-raw,format=BGRA,width=%d,height=%u," + "framerate=30/1", FRAME_WIDTH, frame_height); + gst_harness_set_caps_str (h, caps, caps); + g_free (caps); + + mask_data = g_malloc0 (mask_height * MASK_STRIDE); + for (guint r = 0; r < mask_height; r++) { + gboolean seen = FALSE; + + mask_datar * MASK_STRIDE = mask_rowsr; + for (gsize i = 0; i < region_count; i++) + seen |= region_idsi == mask_rowsr; + if (!seen) + region_idsregion_count++ = mask_rowsr; + } + mask = gst_buffer_new_wrapped (mask_data, mask_height * MASK_STRIDE); + gst_buffer_add_video_meta_full (mask, GST_VIDEO_FRAME_FLAG_NONE, + GST_VIDEO_FORMAT_GRAY8, 1, mask_height, 1, offset, stride); + + in = gst_buffer_new_and_alloc (frame_size); + gst_buffer_memset (in, 0, 0, frame_size); + rmeta = gst_buffer_add_analytics_relation_meta (in); + /* Takes ownership of the mask. */ + fail_unless (gst_analytics_relation_meta_add_segmentation_mtd (rmeta, mask, + GST_SEGMENTATION_TYPE_SEMANTIC, region_count, region_ids, 0, 0, + FRAME_WIDTH, frame_height, &seg_mtd)); + + out = gst_harness_push_and_pull (h, in); + fail_unless (out != NULL); + + /* Mask rows are 1 pixel wide, so the first pixel stands for the frame row. */ + first_pixel = g_new (guint32, frame_height); + fail_unless (gst_buffer_map (out, &map, GST_MAP_READ)); + for (guint y = 0; y < frame_height; y++) + memcpy (&first_pixely, map.data + y * FRAME_WIDTH * 4, 4); + gst_buffer_unmap (out, &map); + + for (guint a = 0; a < frame_height; a++) { + guint8 region_a = mask_rows(a * mask_height) / frame_height; + + for (guint b = a + 1; b < frame_height; b++) { + guint8 region_b = mask_rows(b * mask_height) / frame_height; + + if (region_a == region_b) { + fail_unless (first_pixela == first_pixelb, + "frame rows %u and %u should both show region %u, got %08x and " + "%08x", a, b, region_a, first_pixela, first_pixelb); + } else { + fail_if (first_pixela == first_pixelb, + "frame rows %u and %u show the same color but should show " + "regions %u and %u", a, b, region_a, region_b); + } + } + } + + g_free (first_pixel); + gst_buffer_unref (out); + gst_harness_teardown (h); +} + +/* Each mask row covers two frame rows. */ +GST_START_TEST (test_mask_upscale_rows) +{ + static const guint8 mask_rows = { 1, 2, 3, 4 }; + + check_mask_rows_map_to_frame_rows (mask_rows, G_N_ELEMENTS (mask_rows), 8); +} + +GST_END_TEST; + +/* Every other mask row is used. The last frame row repeats the region of the + * first, so it must match it exactly (and cannot be left undrawn). */ +GST_START_TEST (test_mask_downscale_rows) +{ + static const guint8 mask_rows = { 1, 1, 2, 2, 3, 3, 1, 1 }; + + check_mask_rows_map_to_frame_rows (mask_rows, G_N_ELEMENTS (mask_rows), 4); +} + +GST_END_TEST; + +static Suite * +segmentationoverlay_suite (void) +{ + Suite *s; + TCase *tc_chain; + + s = suite_create ("segmentationoverlay"); + tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_mask_upscale_rows); + tcase_add_test (tc_chain, test_mask_downscale_rows); + + return s; +} + +GST_CHECK_MAIN (segmentationoverlay);
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/check/libs/vkvideoencodeav1.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/tests/check/libs/vkvideoencodeav1.c
Changed
@@ -613,8 +613,10 @@ } gst_clear_object (&video_queue); gst_clear_object (&graphics_queue); - gst_av1_parser_free (parser); - parser = NULL; + if (parser) { + gst_av1_parser_free (parser); + parser = NULL; + } } static void
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/check/meson.build -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/tests/check/meson.build
Changed
@@ -78,6 +78,7 @@ 'elements/rtpsrc.c', get_option('rtp').disabled(), 'elements/rtpsink.c', get_option('rtp').disabled(), 'elements/sdpdemux.c', get_option('sdp').disabled(), gstsdp_dep, + 'elements/segmentationoverlay.c', not gstanalyticsoverlay_ext_dep.found(), gstanalytics_dep, gstvideo_dep, 'elements/srt.c', not srt_dep.found(), srt_dep, 'elements/srtp.c', not srtp_dep.found(), srtp_dep, 'elements/switchbin.c', get_option('switchbin').disabled(),
View file
_service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/examples/vulkan/vulkanenc.c -> _service:download_files:gst-plugins-bad-1.28.8.tar.xz/tests/examples/vulkan/vulkanenc.c
Changed
@@ -452,13 +452,14 @@ break; } - g_free (codec); - if (idx == G_N_ELEMENTS (elements_map)) { gst_printerrln ("Unsupported codec: %s", codec); + g_free (codec); exit (1); } + g_free (codec); + pipeline = gst_pipeline_new (NULL); MAKE_ELEMENT_AND_ADD (src, "videotestsrc");
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.