Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-bad for 
openSUSE:Factory checked in at 2026-09-11 19:00:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-bad (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-bad.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-bad"

Fri Sep 11 19:00:37 2026 rev:205 rq:1376928 version:1.28.7

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-bad/gstreamer-plugins-bad.changes  
    2026-09-08 16:53:39.314802250 +0200
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-bad.new.1265/gstreamer-plugins-bad.changes
    2026-09-11 19:01:10.338220718 +0200
@@ -1,0 +2,30 @@
+Tue Sep  8 06:59:08 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.28.7:
+  + amc: Don't set the Hardware class in metadata for sw video
+    codecs
+  + d3d12: Fix copy-paste typos
+  + d3d12cmdqueue: Fix deadlock during GC
+  + d3d12screencapturesrc: Fix out-of-bounds access with monochrome
+    cursors
+  + dwritebaseoverlay: Fix assertion 'G_VALUE_HOLDS_UINT (value)'
+  + hip: Add missing API version suffix in library filename
+  + gstreamer-hip api_version failure
+  + hip: Fix hipcc detection on Windows with HIP SDK 7.x
+  + hipstream: Return actual device_id instead of vendor from
+    device_id getter
+  + hipmemorycopy: Add missing ifdef guard
+  + jpegparse: Fix byte order of JFIF density fields
+  + mpegdemux: restore gap sending
+  + mxfdemux: Fix keyframe detection
+  + onnx: Fix nullptr dereference on ORT init failure
+  + onnxinference: fix dead lock with wrong model file
+  + opencv: Support OpenCV 5
+  + pnmdec: Protect against bogus dimensions headers
+  + ssdtensordec: The classes were off by one
+  + tsdemux: Add 'stream-format' field for AC-4 caps
+  + validate: Use a single value type in configs lists
+  + vulkan(av1,vp9)dec: set access NONE at buffer pool allocation
+    parameters
+
+-------------------------------------------------------------------

Old:
----
  gst-plugins-bad-1.28.6.obscpio

New:
----
  gst-plugins-bad-1.28.7.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gstreamer-plugins-bad.spec ++++++
--- /var/tmp/diff_new_pack.6hYPCU/_old  2026-09-11 19:01:13.038333246 +0200
+++ /var/tmp/diff_new_pack.6hYPCU/_new  2026-09-11 19:01:13.045333537 +0200
@@ -81,7 +81,7 @@
 %endif
 
 Name:           gstreamer-plugins-bad
-Version:        1.28.6
+Version:        1.28.7
 Release:        0
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        LGPL-2.1-or-later
@@ -1264,7 +1264,7 @@
 %{_libdir}/libgstdxva-%{gst_branch}.so.0*
 
 %files -n libgsthip-1_0-0
-%{_libdir}/libgsthip.so.0*
+%{_libdir}/libgsthip-%{gst_branch}.so.0*
 
 %files -n libgstmse-1_0-0
 %{_libdir}/libgstmse-%{gst_branch}.so.0*

++++++ _service ++++++
--- /var/tmp/diff_new_pack.6hYPCU/_old  2026-09-11 19:01:13.138337413 +0200
+++ /var/tmp/diff_new_pack.6hYPCU/_new  2026-09-11 19:01:13.148337830 +0200
@@ -5,7 +5,7 @@
     <param 
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
     <param name="subdir">subprojects/gst-plugins-bad</param>
     <param name="filename">gst-plugins-bad</param>
-    <param name="revision">1.28.6</param>
+    <param name="revision">1.28.7</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">v?(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ gst-plugins-bad-1.28.6.obscpio -> gst-plugins-bad-1.28.7.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/ext/onnx/gstonnxinference.c 
new/gst-plugins-bad-1.28.7/ext/onnx/gstonnxinference.c
--- old/gst-plugins-bad-1.28.6/ext/onnx/gstonnxinference.c      2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/onnx/gstonnxinference.c      2026-09-07 
21:11:13.000000000 +0200
@@ -730,6 +730,12 @@
   gchar *tensor_name = NULL;
 
 
+  if (!api) {
+    GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+        ("ORT_API_VERSION %d not supported by ONNX runtime", ORT_API_VERSION));
+    return FALSE;
+  }
+
   GST_OBJECT_LOCK (self);
   if (self->session) {
     ret = TRUE;
@@ -737,9 +743,10 @@
   }
 
   if (self->model_file == NULL) {
+    GST_OBJECT_UNLOCK (self);
     GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL),
         ("model-file property not set"));
-    goto done;
+    goto error_no_lock;
   }
 
   modelinfo = gst_analytics_modelinfo_load (self->model_file);
@@ -749,11 +756,6 @@
         "or invalid file format.", self->model_file);
     goto error;
   }
-
-  if (self->session) {
-    ret = TRUE;
-    goto done;
-  }
   // Create environment
   OrtLoggingLevel ort_logging;
 
@@ -813,10 +815,11 @@
 
   status = api->SetSessionGraphOptimizationLevel (session_options, onnx_optim);
   if (status) {
+    GST_OBJECT_UNLOCK (self);
     GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL),
         ("Failed to set optimization level: %s",
             api->GetErrorMessage (status)));
-    goto error;
+    goto error_no_lock;
   }
   // Set execution provider
   switch (self->execution_provider) {
@@ -946,7 +949,7 @@
 
   status = api->SessionGetOutputCount (self->session, &self->output_count);
   if (status) {
-    GST_ERROR_OBJECT (self, "Could to retrieve output count: %s",
+    GST_ERROR_OBJECT (self, "Failed to retrieve output count: %s",
         api->GetErrorMessage (status));
     goto error;
   }
@@ -1159,18 +1162,15 @@
 
     /* Get dimensions from ONNX */
     int64_t *shape = (int64_t *) g_alloca (card * sizeof (int64_t));
-    output_dims = (gsize *) g_malloc0 (card * sizeof (gsize));
     status = api->GetDimensions (output_tensor_info, shape, card);
     if (status) {
       GST_ERROR_OBJECT (self, "Failed to get output tensor (%s) dimensions",
           self->output_names[i]);
-      api->ReleaseStatus (status);
-      status = NULL;
-      g_free (output_dims);
       api->ReleaseTypeInfo (output_type_info);
       goto error;
     }
 
+    output_dims = (gsize *) g_malloc0 (card * sizeof (gsize));
     for (j = 0; j < card; j++) {
       output_dims[j] = shape[j] > 0 ? shape[j] : G_MAXSIZE;
     }
@@ -1319,6 +1319,8 @@
   return ret;
 
 error:
+  GST_OBJECT_UNLOCK (self);
+error_no_lock:
   if (status)
     api->ReleaseStatus (status);
   if (input_type_info)
@@ -1328,7 +1330,6 @@
 
   if (modelinfo)
     gst_analytics_modelinfo_free (modelinfo);
-  GST_OBJECT_UNLOCK (self);
 
   gst_onnx_inference_stop (trans);
   return ret;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/ext/opencv/gstcameracalibrate.cpp 
new/gst-plugins-bad-1.28.7/ext/opencv/gstcameracalibrate.cpp
--- old/gst-plugins-bad-1.28.6/ext/opencv/gstcameracalibrate.cpp        
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/opencv/gstcameracalibrate.cpp        
2026-09-07 21:11:13.000000000 +0200
@@ -85,6 +85,9 @@
 
 #include <opencv2/imgproc.hpp>
 #include <opencv2/calib3d.hpp>
+#if CV_MAJOR_VERSION >= 5
+#include <opencv2/objdetect.hpp>
+#endif
 
 #include <gst/opencv/gstopencvutils.h>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/ext/opencv/gstfaceblur.h 
new/gst-plugins-bad-1.28.7/ext/opencv/gstfaceblur.h
--- old/gst-plugins-bad-1.28.6/ext/opencv/gstfaceblur.h 2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/opencv/gstfaceblur.h 2026-09-07 
21:11:13.000000000 +0200
@@ -51,7 +51,11 @@
 #include <gst/opencv/gstopencvvideofilter.h>
 
 #include <opencv2/core.hpp>
+#if CV_MAJOR_VERSION < 5
 #include <opencv2/objdetect.hpp>
+#else
+#include <opencv2/xobjdetect.hpp>
+#endif
 
 G_BEGIN_DECLS
 /* #defines don't like whitespacey bits */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/ext/opencv/gstfacedetect.h 
new/gst-plugins-bad-1.28.7/ext/opencv/gstfacedetect.h
--- old/gst-plugins-bad-1.28.6/ext/opencv/gstfacedetect.h       2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/opencv/gstfacedetect.h       2026-09-07 
21:11:13.000000000 +0200
@@ -51,7 +51,11 @@
 
 #include <gst/gst.h>
 #include <gst/opencv/gstopencvvideofilter.h>
+#if CV_MAJOR_VERSION < 5
 #include <opencv2/objdetect.hpp>
+#else
+#include <opencv2/xobjdetect.hpp>
+#endif
 
 G_BEGIN_DECLS
 /* #defines don't like whitespacey bits */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/ext/opencv/gsthanddetect.h 
new/gst-plugins-bad-1.28.7/ext/opencv/gsthanddetect.h
--- old/gst-plugins-bad-1.28.6/ext/opencv/gsthanddetect.h       2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/opencv/gsthanddetect.h       2026-09-07 
21:11:13.000000000 +0200
@@ -48,7 +48,11 @@
 #include <gst/opencv/gstopencvvideofilter.h>
 /* opencv */
 #include <opencv2/core.hpp>
+#if CV_MAJOR_VERSION < 5
 #include <opencv2/objdetect.hpp>
+#else
+#include <opencv2/xobjdetect.hpp>
+#endif
 
 G_BEGIN_DECLS
 /* #defines don't like whitespacey bits */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/ext/opencv/gstsegmentation.cpp 
new/gst-plugins-bad-1.28.7/ext/opencv/gstsegmentation.cpp
--- old/gst-plugins-bad-1.28.6/ext/opencv/gstsegmentation.cpp   2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/opencv/gstsegmentation.cpp   2026-09-07 
21:11:13.000000000 +0200
@@ -91,6 +91,9 @@
 
 #include "gstsegmentation.h"
 #include <opencv2/imgproc.hpp>
+#if CV_MAJOR_VERSION >= 5
+#include <opencv2/geometry.hpp>
+#endif
 
 GST_DEBUG_CATEGORY_STATIC (gst_segmentation_debug);
 #define GST_CAT_DEFAULT gst_segmentation_debug
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/ext/vulkan/vkav1dec.c 
new/gst-plugins-bad-1.28.7/ext/vulkan/vkav1dec.c
--- old/gst-plugins-bad-1.28.6/ext/vulkan/vkav1dec.c    2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/vulkan/vkav1dec.c    2026-09-07 
21:11:13.000000000 +0200
@@ -384,7 +384,7 @@
 
   gst_vulkan_image_buffer_pool_config_set_allocation_params (config, usage,
       VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 
VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR,
-      VK_ACCESS_TRANSFER_WRITE_BIT);
+      VK_ACCESS_NONE);
   gst_vulkan_image_buffer_pool_config_set_decode_caps (config, profile_caps);
 
   gst_caps_unref (profile_caps);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/ext/vulkan/vkvp9dec.c 
new/gst-plugins-bad-1.28.7/ext/vulkan/vkvp9dec.c
--- old/gst-plugins-bad-1.28.6/ext/vulkan/vkvp9dec.c    2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/ext/vulkan/vkvp9dec.c    2026-09-07 
21:11:13.000000000 +0200
@@ -383,7 +383,7 @@
 
   gst_vulkan_image_buffer_pool_config_set_allocation_params (config, usage,
       VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 
VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR,
-      VK_ACCESS_TRANSFER_WRITE_BIT);
+      VK_ACCESS_NONE);
   gst_vulkan_image_buffer_pool_config_set_decode_caps (config, profile_caps);
 
   gst_caps_unref (profile_caps);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst/jpegformat/gstjpegparse.c 
new/gst-plugins-bad-1.28.7/gst/jpegformat/gstjpegparse.c
--- old/gst-plugins-bad-1.28.6/gst/jpegformat/gstjpegparse.c    2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst/jpegformat/gstjpegparse.c    2026-09-07 
21:11:13.000000000 +0200
@@ -456,13 +456,8 @@
   gst_byte_reader_init (&reader, seg->data + seg->offset, seg->size);
   gst_byte_reader_skip_unchecked (&reader, 2);
 
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
   if (!gst_byte_reader_get_uint32_le (&reader, &id))
     return FALSE;
-#else
-  if (!gst_byte_reader_get_uint32_be (&reader, &id))
-    return FALSE;
-#endif
 
   if (!valid_state (parse->state, GST_JPEG_PARSER_STATE_GOT_JFIF)
       && GST_MAKE_FOURCC ('J', 'F', 'I', 'F') == id) {
@@ -480,19 +475,11 @@
       return FALSE;
 
     /* x density */
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-    if (!gst_byte_reader_get_uint16_le (&reader, &xd))
-      return FALSE;
-    /* y density */
-    if (!gst_byte_reader_get_uint16_le (&reader, &yd))
-      return FALSE;
-#else
     if (!gst_byte_reader_get_uint16_be (&reader, &xd))
       return FALSE;
     /* y density */
     if (!gst_byte_reader_get_uint16_be (&reader, &yd))
       return FALSE;
-#endif
 
     /* x thumbnail */
     if (!gst_byte_reader_get_uint8 (&reader, &xt))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst/mpegdemux/gstmpegdemux.c 
new/gst-plugins-bad-1.28.7/gst/mpegdemux/gstmpegdemux.c
--- old/gst-plugins-bad-1.28.6/gst/mpegdemux/gstmpegdemux.c     2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst/mpegdemux/gstmpegdemux.c     2026-09-07 
21:11:13.000000000 +0200
@@ -1055,6 +1055,7 @@
       stream->gap_ref_pts = time;
       if (stream->last_ts != GST_CLOCK_TIME_NONE && stream->last_ts > time)
         stream->gap_ref_pts = stream->last_ts;
+      stream->gap_ref_buffers = stream->nb_out_buffers;
     }
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst/mpegtsdemux/tsdemux.c 
new/gst-plugins-bad-1.28.7/gst/mpegtsdemux/tsdemux.c
--- old/gst-plugins-bad-1.28.6/gst/mpegtsdemux/tsdemux.c        2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst/mpegtsdemux/tsdemux.c        2026-09-07 
21:11:13.000000000 +0200
@@ -1454,7 +1454,8 @@
       if (desc) {
         GST_LOG_OBJECT (demux, "ac4 audio");
         is_audio = TRUE;
-        caps = gst_caps_new_empty_simple ("audio/x-ac4");
+        caps = gst_caps_new_simple ("audio/x-ac4",
+            "stream-format", G_TYPE_STRING, "syncframe", NULL);
         break;
       }
 
@@ -1709,7 +1710,8 @@
           break;
         case DRF_ID_AC4:
           is_audio = TRUE;
-          caps = gst_caps_new_empty_simple ("audio/x-ac4");
+          caps = gst_caps_new_simple ("audio/x-ac4",
+              "stream-format", G_TYPE_STRING, "syncframe", NULL);
           break;
         case DRF_ID_VP09:
           is_video = TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst/mxf/mxfdemux.c 
new/gst-plugins-bad-1.28.7/gst/mxf/mxfdemux.c
--- old/gst-plugins-bad-1.28.6/gst/mxf/mxfdemux.c       2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst/mxf/mxfdemux.c       2026-09-07 
21:11:13.000000000 +0200
@@ -2425,13 +2425,12 @@
           delta_entry->element_delta);
 
       /* Apply offset from slice/delta if needed */
-      if (delta_entry->slice)
+      if (delta_entry->slice) {
         stream_offset +=
             segment_index_entry->slice_offset[delta_entry->slice - 1];
-      stream_offset += delta_entry->element_delta;
-      if (delta_entry->pos_table_index == -1) {
-        entry->keyframe = (segment_index_entry->flags & 0x80) == 0x80;
       }
+      stream_offset += delta_entry->element_delta;
+      entry->keyframe = (segment_index_entry->flags & 0x80) == 0x80;
       /* FIXME : Handle fractional offset position 
(delta_entry->pos_table_offset > 0) */
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst/pnm/gstpnmutils.c 
new/gst-plugins-bad-1.28.7/gst/pnm/gstpnmutils.c
--- old/gst-plugins-bad-1.28.6/gst/pnm/gstpnmutils.c    2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst/pnm/gstpnmutils.c    2026-09-07 
21:11:13.000000000 +0200
@@ -157,6 +157,9 @@
             mngr->state = GST_PNM_INFO_MNGR_STATE_WHITE_SPACE;
             mngr->data_offset += i;
             if (mngr->info.type == GST_PNM_TYPE_BITMAP) {
+              /* Reject zero-sized images */
+              if (mngr->info.width == 0 || mngr->info.height == 0)
+                return GST_PNM_INFO_MNGR_RESULT_FAILED;
               mngr->data_offset += 1;
               mngr->info.fields |= GST_PNM_INFO_FIELDS_MAX;
               return GST_PNM_INFO_MNGR_RESULT_FINISHED;
@@ -185,6 +188,9 @@
             } else if ((mngr->info.max > 255) || (mngr->info.max < 1)) {
               return GST_PNM_INFO_MNGR_RESULT_FAILED;
             }
+            /* Reject zero-sized images */
+            if (mngr->info.width == 0 || mngr->info.height == 0)
+              return GST_PNM_INFO_MNGR_RESULT_FAILED;
             mngr->info.fields |= GST_PNM_INFO_FIELDS_MAX;
             mngr->data_offset += i + 1;
             return GST_PNM_INFO_MNGR_RESULT_FINISHED;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst/tensordecoders/gstssdtensordec.c 
new/gst-plugins-bad-1.28.7/gst/tensordecoders/gstssdtensordec.c
--- old/gst-plugins-bad-1.28.6/gst/tensordecoders/gstssdtensordec.c     
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst/tensordecoders/gstssdtensordec.c     
2026-09-07 21:11:13.000000000 +0200
@@ -591,8 +591,8 @@
 
     if (self->labels && classes_map.memory &&
         get_guint32_at_index (classes_tensor, &classes_map, i, &bclass)) {
-      if (bclass < self->labels->len)
-        label = g_array_index (self->labels, GQuark, bclass);
+      if (bclass > 0 && bclass - 1 < self->labels->len)
+        label = g_array_index (self->labels, GQuark, bclass - 1);
     }
 
     x_i = x * w;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst-libs/gst/analytics/modelinfo.c 
new/gst-plugins-bad-1.28.7/gst-libs/gst/analytics/modelinfo.c
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/analytics/modelinfo.c       
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/analytics/modelinfo.c       
2026-09-07 21:11:13.000000000 +0200
@@ -518,6 +518,11 @@
   GST_DEBUG_CATEGORY_INIT (analytics_modelinfo_debug, "modelinfo",
       0, "analytics model info");
 
+  if (!model_filename) {
+    GST_ERROR ("model_filename is NULL");
+    return NULL;
+  }
+
   filename = g_strconcat (model_filename, ".modelinfo", NULL);
   ret = g_key_file_load_from_file (kf, filename, G_KEY_FILE_NONE, NULL);
   g_free (filename);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp 
new/gst-plugins-bad-1.28.7/gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp  
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp  
2026-09-07 21:11:13.000000000 +0200
@@ -419,6 +419,9 @@
 
   GST_INFO_OBJECT (self, "Entering GC thread");
 
+  /* temporary storage to release GC data without priv->lock taken */
+  std::vector < GCDataPtr > completed_data;
+
   while (true) {
     GCDataPtr gc_data;
 
@@ -434,7 +437,7 @@
       while (!priv->gc_list.empty ()) {
         auto top = priv->gc_list.top ();
         if (top->fence_val > completed) {
-          gc_data = top;
+          gc_data = std::move (top);
           priv->gc_list.pop ();
           break;
         }
@@ -443,10 +446,13 @@
             G_GUINT64_FORMAT ", fence value %" G_GUINT64_FORMAT,
             completed, top->fence_val);
 
+        completed_data.push_back (std::move (top));
         priv->gc_list.pop ();
       }
     }
 
+    completed_data.clear ();
+
     if (gc_data) {
       GST_LOG_OBJECT (self, "Waiting for fence data %" G_GUINT64_FORMAT,
           gc_data->fence_val);
@@ -546,13 +552,8 @@
     }
 
     {
-      if (priv->gc_thread != g_thread_self ()) {
-        std::lock_guard < std::mutex > lk (priv->lock);
-        gc_list = priv->gc_list;
-        priv->gc_list = { };
-      } else {
-        priv->gc_list = { };
-      }
+      std::lock_guard < std::mutex > lk (priv->lock);
+      gc_list.swap (priv->gc_list);
     }
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp 
new/gst-plugins-bad-1.28.7/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp  
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp  
2026-09-07 21:11:13.000000000 +0200
@@ -275,7 +275,7 @@
   priv->tg_y = (guint) ceil (priv->in_info.height / (float) bytecode.y_unit);
 
   priv->x_unit = bytecode.x_unit;
-  priv->y_unit = bytecode.x_unit;
+  priv->y_unit = bytecode.y_unit;
 
   D3D12_COMPUTE_PIPELINE_STATE_DESC pso_desc = { };
   pso_desc.pRootSignature = priv->rs_typed.Get ();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst-libs/gst/d3d12/gstd3d12stagingmemory.h 
new/gst-plugins-bad-1.28.7/gst-libs/gst/d3d12/gstd3d12stagingmemory.h
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/d3d12/gstd3d12stagingmemory.h       
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/d3d12/gstd3d12stagingmemory.h       
2026-09-07 21:11:13.000000000 +0200
@@ -28,12 +28,12 @@
 #define GST_D3D12_STAGING_MEMORY_CAST(obj)          ((GstD3D12StagingMemory 
*)obj)
 
 #define GST_TYPE_D3D12_STAGING_ALLOCATOR            
(gst_d3d12_staging_allocator_get_type())
-#define GST_D3D12_STAGING_ALLOCATOR(obj)            
(G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_D3D12_STAGING_ALLOCATOR, 
GstD3D12Allocator))
-#define GST_D3D12_STAGING_ALLOCATOR_CLASS(klass)    
(G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_D3D12_STAGING_ALLOCATOR, 
GstD3D12AllocatorClass))
+#define GST_D3D12_STAGING_ALLOCATOR(obj)            
(G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_D3D12_STAGING_ALLOCATOR, 
GstD3D12StagingAllocator))
+#define GST_D3D12_STAGING_ALLOCATOR_CLASS(klass)    
(G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_D3D12_STAGING_ALLOCATOR, 
GstD3D12StagingAllocatorClass))
 #define GST_IS_D3D12_STAGING_ALLOCATOR(obj)         
(G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_D3D12_STAGING_ALLOCATOR))
 #define GST_IS_D3D12_STAGING_ALLOCATOR_CLASS(klass) 
(G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_D3D12_STAGING_ALLOCATOR))
-#define GST_D3D12_STAGING_ALLOCATOR_GET_CLASS(obj)  
(G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_D3D12_STAGING_ALLOCATOR, 
GstD3D12AllocatorClass))
-#define GST_D3D12_STAGING_ALLOCATOR_CAST(obj)       ((GstD3D12Allocator *)obj)
+#define GST_D3D12_STAGING_ALLOCATOR_GET_CLASS(obj)  
(G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_D3D12_STAGING_ALLOCATOR, 
GstD3D12StagingAllocatorClass))
+#define GST_D3D12_STAGING_ALLOCATOR_CAST(obj)       ((GstD3D12StagingAllocator 
*)obj)
 
 /**
  * GST_D3D12_STAGING_MEMORY_NAME:
@@ -104,7 +104,7 @@
 /**
  * GstD3D12StagingAllocatorClass:
  *
- * Opaque GstD3D12AllocatorClass struct
+ * Opaque GstD3D12StagingAllocatorClass struct
  *
  * Since: 1.28
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst-libs/gst/hip/gsthipstream.cpp 
new/gst-plugins-bad-1.28.7/gst-libs/gst/hip/gsthipstream.cpp
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/hip/gsthipstream.cpp        
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/hip/gsthipstream.cpp        
2026-09-07 21:11:13.000000000 +0200
@@ -144,7 +144,7 @@
 {
   g_return_val_if_fail (stream, G_MAXUINT);
 
-  return stream->vendor;
+  return stream->device_id;
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst-libs/gst/hip/meson.build 
new/gst-plugins-bad-1.28.7/gst-libs/gst/hip/meson.build
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/hip/meson.build     2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/hip/meson.build     2026-09-07 
21:11:13.000000000 +0200
@@ -74,7 +74,8 @@
 hipstub_incdir = include_directories('./stub')
 
 pkg_name = 'gstreamer-hip-' + api_version
-gsthip = library('gsthip', hip_sources,
+gsthip = library('gsthip-' + api_version,
+  hip_sources,
   c_args : gst_plugins_bad_args + extra_args,
   cpp_args: gst_plugins_bad_args + extra_args,
   include_directories : [configinc, libsinc, hipstub_incdir],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/gst-libs/gst/opencv/meson.build 
new/gst-plugins-bad-1.28.7/gst-libs/gst/opencv/meson.build
--- old/gst-plugins-bad-1.28.6/gst-libs/gst/opencv/meson.build  2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-libs/gst/opencv/meson.build  2026-09-07 
21:11:13.000000000 +0200
@@ -32,9 +32,12 @@
 gstopencv_cargs = []
 opencv_dep = dependency('opencv', version : ['>= 3.0.0', '< 3.5.0'], required 
: false, include_type: 'system' )
 if not opencv_dep.found()
-  opencv_dep = dependency('opencv4', version : ['>= 4.0.0'], required : 
opencv_opt, include_type: 'system')
+  opencv_dep = dependency('opencv4', version : ['>= 4.0.0'], required : false, 
include_type: 'system')
   if not opencv_dep.found()
-    subdir_done()
+    opencv_dep = dependency('opencv5', version : ['>= 5.0.0'], required : 
opencv_opt, include_type: 'system')
+    if not opencv_dep.found()
+      subdir_done()
+    endif
   endif
 endif
 
@@ -65,7 +68,7 @@
 # Use prefix from pkg-config to be compatible with cross-compilation
 fsmod = import('fs')
 opencv_path_name = ''
-foreach d : ['opencv', 'OpenCV', 'opencv4']
+foreach d : ['opencv', 'OpenCV', 'opencv4', 'opencv5']
   if fsmod.is_dir(opencv_prefix / 'share' / d)
     opencv_path_name = d
     break
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/gst-plugins-bad.doap 
new/gst-plugins-bad-1.28.7/gst-plugins-bad.doap
--- old/gst-plugins-bad-1.28.6/gst-plugins-bad.doap     2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/gst-plugins-bad.doap     2026-09-07 
21:11:13.000000000 +0200
@@ -35,6 +35,16 @@
 
  <release>
   <Version>
+   <revision>1.28.7</revision>
+   <branch>1.28</branch>
+   <name></name>
+   <created>2026-09-07</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.28.7.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.28.6</revision>
    <branch>1.28</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/meson.build 
new/gst-plugins-bad-1.28.7/meson.build
--- old/gst-plugins-bad-1.28.6/meson.build      2026-08-05 13:59:39.000000000 
+0200
+++ new/gst-plugins-bad-1.28.7/meson.build      2026-09-07 21:11:13.000000000 
+0200
@@ -1,5 +1,5 @@
 project('gst-plugins-bad', 'c', 'cpp',
-  version : '1.28.6',
+  version : '1.28.7',
   meson_version : '>= 1.4',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamc.c 
new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamc.c
--- old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamc.c        2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamc.c        2026-09-07 
21:11:13.000000000 +0200
@@ -76,6 +76,52 @@
   }
 }
 
+/* Whether a video codec is hardware-accelerated. Used for both the element
+ * rank and the "Hardware" element klass. */
+gboolean
+gst_amc_codec_info_is_hardware (const GstAmcCodecInfo * codec_info)
+{
+  switch (codec_info->accel) {
+    case AMC_CODEC_ACCEL_IS_HW:
+      return TRUE;
+    case AMC_CODEC_ACCEL_IS_SW:
+      return FALSE;
+    case AMC_CODEC_ACCEL_IS_UNKNOWN:
+      /* Android version is too old, could not auto-detect hw-accel status.
+       * Try guessing from the name.
+       *
+       * Amlogic/Exynos hardware video codecs end in .encoder/.decoder:
+       *  c2.amlogic.avc.decoder
+       *  c2.amlogic.avc.encoder
+       *  c2.amlogic.hevc.decoder
+       *  c2.amlogic.av1.decoder
+       *  c2.exynos.h264.decoder
+       *  c2.exynos.h264.encoder
+       *  c2.exynos.hevc.decoder
+       *  c2.exynos.hevc.encoder
+       *  c2.exynos.vp9.decoder
+       *  c2.exynos.vp9.encoder
+       * NOTE: c2.google.av1.decoder can be a hw decoder, but it's only
+       *       available in newer Android versions and codec_info->accel
+       *       will work reliably there.
+       * Software video codecs end in .sw or .secure (usually?):
+       *  c2.amlogic.vp8.decoder.sw
+       *  c2.amlogic.wmv3.decoder.sw
+       *  c2.amlogic.avc.decoder.secure
+       * As an aside, software audio codecs look like this:
+       *  c2.amlogic.audio.decoder.mp2
+       *  c2.amlogic.audio.decoder.eac3
+       * But this guess is only used for video.
+       */
+      return (g_str_has_prefix (codec_info->name, "c2.amlogic") ||
+          g_str_has_prefix (codec_info->name, "c2.exynos")) &&
+          (g_str_has_suffix (codec_info->name, "decoder") ||
+          g_str_has_suffix (codec_info->name, "encoder"));
+  }
+
+  return FALSE;
+}
+
 static gboolean
 scan_codecs (GstPlugin * plugin)
 {
@@ -1837,50 +1883,10 @@
         /* Give PRIMARY+1 rank to all hardware-accelerated video codecs and
          * MARGINAL to sw video codecs, because any gstreamer-native codecs
          * compiled-in may be higher quality */
-        switch (codec_info->accel) {
-          case AMC_CODEC_ACCEL_IS_HW:
-            rank = GST_RANK_PRIMARY + 1;
-            break;
-          case AMC_CODEC_ACCEL_IS_SW:
-            rank = GST_RANK_MARGINAL;
-            break;
-          case AMC_CODEC_ACCEL_IS_UNKNOWN:
-            /* Android version is too old, could not auto-detect hw-accel
-             * status. Try guessing from the name.
-             *
-             * Amlogic/Exynos hardware video codecs end in .encoder/.decoder:
-             *  c2.amlogic.avc.decoder
-             *  c2.amlogic.avc.encoder
-             *  c2.amlogic.hevc.decoder
-             *  c2.amlogic.av1.decoder
-             *  c2.exynos.h264.decoder
-             *  c2.exynos.h264.encoder
-             *  c2.exynos.hevc.decoder
-             *  c2.exynos.hevc.encoder
-             *  c2.exynos.vp9.decoder
-             *  c2.exynos.vp9.encoder
-             * NOTE: c2.google.av1.decoder can be a hw decoder, but it's only
-             *       available in newer Android versions and codec_info->accel
-             *       will work reliably there.
-             * Software video codecs end in .sw or .secure (usually?):
-             *  c2.amlogic.vp8.decoder.sw
-             *  c2.amlogic.wmv3.decoder.sw
-             *  c2.amlogic.avc.decoder.secure
-             * As an aside, software audio codecs look like this:
-             *  c2.amlogic.audio.decoder.mp2
-             *  c2.amlogic.audio.decoder.eac3
-             * But we only rank video here.
-             */
-            if ((g_str_has_prefix (codec_info->name, "c2.amlogic") ||
-                    g_str_has_prefix (codec_info->name, "c2.exynos")) &&
-                (g_str_has_suffix (codec_info->name, "decoder") ||
-                    g_str_has_suffix (codec_info->name, "encoder"))) {
-              rank = GST_RANK_PRIMARY + 1;
-            } else {
-              rank = GST_RANK_MARGINAL;
-            }
-            break;
-        }
+        if (gst_amc_codec_info_is_hardware (codec_info))
+          rank = GST_RANK_PRIMARY + 1;
+        else
+          rank = GST_RANK_MARGINAL;
       } else if (g_str_has_prefix (codec_info->name, "OMX.google.") ||
           g_str_has_prefix (codec_info->name, "c2.android.") ||
           g_str_has_prefix (codec_info->name, "c2.amlogic.") ||
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamc.h 
new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamc.h
--- old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamc.h        2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamc.h        2026-09-07 
21:11:13.000000000 +0200
@@ -63,6 +63,8 @@
 
 gboolean gst_amc_static_init (void);
 
+gboolean gst_amc_codec_info_is_hardware (const GstAmcCodecInfo * codec_info);
+
 GstVideoFormat gst_amc_color_format_to_video_format (const GstAmcCodecInfo * 
codec_info, const gchar * mime, gint color_format);
 gint gst_amc_video_format_to_color_format (const GstAmcCodecInfo * codec_info, 
const gchar * mime, GstVideoFormat video_format);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamcvideodec.c 
new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamcvideodec.c
--- old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamcvideodec.c        
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamcvideodec.c        
2026-09-07 21:11:13.000000000 +0200
@@ -393,7 +393,8 @@
   longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name);
   gst_element_class_set_metadata (element_class,
       codec_info->name,
-      "Codec/Decoder/Video/Hardware",
+      gst_amc_codec_info_is_hardware (codec_info) ?
+      "Codec/Decoder/Video/Hardware" : "Codec/Decoder/Video",
       longname, "Sebastian Dröge <[email protected]>");
   g_free (longname);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamcvideoenc.c 
new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamcvideoenc.c
--- old/gst-plugins-bad-1.28.6/sys/androidmedia/gstamcvideoenc.c        
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/androidmedia/gstamcvideoenc.c        
2026-09-07 21:11:13.000000000 +0200
@@ -525,7 +525,8 @@
   longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name);
   gst_element_class_set_metadata (element_class,
       codec_info->name,
-      "Codec/Encoder/Video/Hardware",
+      gst_amc_codec_info_is_hardware (codec_info) ?
+      "Codec/Encoder/Video/Hardware" : "Codec/Encoder/Video",
       longname, "Sebastian Dröge <[email protected]>");
   g_free (longname);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/sys/d3d12/gstd3d12dxgicapture.cpp 
new/gst-plugins-bad-1.28.7/sys/d3d12/gstd3d12dxgicapture.cpp
--- old/gst-plugins-bad-1.28.6/sys/d3d12/gstd3d12dxgicapture.cpp        
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/d3d12/gstd3d12dxgicapture.cpp        
2026-09-07 21:11:13.000000000 +0200
@@ -256,6 +256,7 @@
     stride_ = width_ * 4;
     UINT pstride = 4;
     auto size = height_ * stride_;
+    auto mask_offset = height_ * shape_info.Pitch;
     texture_.resize (size);
     xor_texture_.resize (size);
 
@@ -267,7 +268,7 @@
       for (UINT col = 0; col < width_; col++) {
         auto src_pos = (row * shape_info.Pitch) + (col / 8);
         auto and_mask = (shape_buffer[src_pos] >> (7 - (col % 8))) & 0x1;
-        auto xor_mask = (shape_buffer[src_pos + size] >> (7 - (col % 8))) & 
0x1;
+        auto xor_mask = (shape_buffer[src_pos + mask_offset] >> (7 - (col % 
8))) & 0x1;
         auto dst_pos = (row * stride_) + (col * pstride);
 
         if (and_mask) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/sys/dwrite/gstdwritebaseoverlay.cpp 
new/gst-plugins-bad-1.28.7/sys/dwrite/gstdwritebaseoverlay.cpp
--- old/gst-plugins-bad-1.28.6/sys/dwrite/gstdwritebaseoverlay.cpp      
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/dwrite/gstdwritebaseoverlay.cpp      
2026-09-07 21:11:13.000000000 +0200
@@ -334,7 +334,7 @@
     }
     case PROP_AUTO_RESIZE:
     {
-      gboolean auto_resize = g_value_get_uint (value);
+      gboolean auto_resize = g_value_get_boolean (value);
       if (auto_resize != priv->auto_resize) {
         priv->auto_resize = auto_resize;
         priv->text_format = nullptr;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/sys/hip/gsthipmemorycopy.cpp 
new/gst-plugins-bad-1.28.7/sys/hip/gsthipmemorycopy.cpp
--- old/gst-plugins-bad-1.28.6/sys/hip/gsthipmemorycopy.cpp     2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/hip/gsthipmemorycopy.cpp     2026-09-07 
21:11:13.000000000 +0200
@@ -588,6 +588,7 @@
 gst_hip_memory_copy_before_transform (GstBaseTransform * trans,
     GstBuffer * buffer)
 {
+#ifdef HAVE_GST_CUDA
   auto self = GST_HIP_MEMORY_COPY (trans);
   auto priv = self->priv;
 
@@ -678,6 +679,7 @@
     gst_hip_memory_copy_set_caps (trans, priv->in_caps, priv->out_caps);
     gst_base_transform_reconfigure_src (trans);
   }
+#endif
 }
 
 static GstCaps *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/sys/hip/meson.build 
new/gst-plugins-bad-1.28.7/sys/hip/meson.build
--- old/gst-plugins-bad-1.28.6/sys/hip/meson.build      2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/sys/hip/meson.build      2026-09-07 
21:11:13.000000000 +0200
@@ -34,12 +34,12 @@
 have_nvcc = false
 if not hip_precompile_amd_opt.disabled() and not meson.is_cross_build()
   if host_system == 'windows'
-    hipcc = find_program('hipcc.bin', required: false)
+    hipcc = find_program('hipcc.bin', 'hipcc.exe', required: false)
     if not hipcc.found()
       hip_root = run_command(python3, '-c', 'import os; 
print(os.environ.get("HIP_PATH"))', check: false).stdout().strip()
       if hip_root != '' and hip_root != 'None'
         hip_bin_path = join_paths(hip_root, 'bin')
-        hipcc = find_program('hipcc.bin',
+        hipcc = find_program('hipcc.bin', 'hipcc.exe',
                               dirs: [hip_bin_path],
                               required: hip_precompile_amd_opt)
       endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.28.6/tests/check/elements/pnm.c 
new/gst-plugins-bad-1.28.7/tests/check/elements/pnm.c
--- old/gst-plugins-bad-1.28.6/tests/check/elements/pnm.c       2026-08-05 
13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/tests/check/elements/pnm.c       2026-09-07 
21:11:13.000000000 +0200
@@ -104,6 +104,59 @@
 
 GST_END_TEST;
 
+/* Push PNM data whose header declares zero dimensions and make sure the
+ * decoder fails cleanly with a stream error instead of negotiating a
+ * 0x0 output state (which trips a critical in the video decoder base
+ * class). P6 fails at the max field, P4 (bitmap) at the height field. */
+GST_START_TEST (test_pnmdec_zero_dimensions)
+{
+  const gchar *headers[] = {
+    "P6\n0 0\n255\n0123456789",
+    "P4\n0 0\nxx"
+  };
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (headers); i++) {
+    GstElement *pipeline;
+    GstElement *src;
+    GstBus *bus;
+    GstMessage *msg;
+    GstFlowReturn ret;
+    GstBuffer *buf;
+
+    pipeline = gst_parse_launch ("appsrc name=src ! pnmdec ! fakesink", NULL);
+    fail_unless (pipeline != NULL);
+
+    src = gst_bin_get_by_name (GST_BIN (pipeline), "src");
+    bus = gst_element_get_bus (pipeline);
+
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+    buf = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+        (gpointer) headers[i], strlen (headers[i]), 0, strlen (headers[i]),
+        NULL, NULL);
+    g_signal_emit_by_name (src, "push-buffer", buf, &ret);
+    gst_buffer_unref (buf);
+
+    /* No critical so far; the check log handler would have failed the
+     * test already otherwise */
+    msg = gst_bus_timed_pop_filtered (bus, 5 * GST_SECOND,
+        GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
+    fail_unless (msg != NULL, "no error message for header '%s'", headers[i]);
+    fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR,
+        "expected error, got %s for header '%s'",
+        GST_MESSAGE_TYPE_NAME (msg), headers[i]);
+    gst_message_unref (msg);
+
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (bus);
+    gst_object_unref (src);
+    gst_object_unref (pipeline);
+  }
+}
+
+GST_END_TEST;
+
 static Suite *
 pnm_suite (void)
 {
@@ -112,6 +165,7 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_pnm_enc_dec);
+  tcase_add_test (tc_chain, test_pnmdec_zero_dimensions);
 
   return s;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/autovideoconvert/renegotiate.validatetest
 
new/gst-plugins-bad-1.28.7/tests/validate/autovideoconvert/renegotiate.validatetest
--- 
old/gst-plugins-bad-1.28.6/tests/validate/autovideoconvert/renegotiate.validatetest
 2026-08-05 13:59:39.000000000 +0200
+++ 
new/gst-plugins-bad-1.28.7/tests/validate/autovideoconvert/renegotiate.validatetest
 2026-09-07 21:11:13.000000000 +0200
@@ -1,22 +1,22 @@
 meta,
-    args = {
+    args={
         "gltestsrc ! gldownload ! autovideoconvert name=convert ! capsfilter 
name=capsfilter caps=\"video/x-raw(memory:GLMemory)\" ! fakevideosink 
name=sink",
     },
-    configs = {
-       "$(validateflow), pad=\"^convert:src$\", record-buffers=true, 
ignored-fields=\"stream-start={stream-id,group-id,stream},buffer={meta}\"",
+    configs={
+        [validateflow,
+            pad="^convert:src$",
+            record-buffers=true,
+            
ignored-fields="stream-start={stream-id,group-id,stream},buffer={meta}"],
     }
 
 crank-clock, repeat=2
 wait, on-clock=true
 foreach,
-    caps = <
-            "video/x-raw",
-            "video/x-raw(memory:GLMemory)",
-            "video/x-raw",
-           >,
-    actions = {
+    caps=<"video/x-raw", "video/x-raw(memory:GLMemory)", "video/x-raw">,
+    actions={
         [checkpoint, text="Setup capsfilter caps=$(caps)"],
-        [set-properties, capsfilter::caps="$(caps)"],
+        [set-properties,
+            capsfilter::caps="$(caps)"],
         [crank-clock, repeat=2],
         [wait, on-clock=true],
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/codectimestamper/h264_propagate_caps.validatetest
 
new/gst-plugins-bad-1.28.7/tests/validate/codectimestamper/h264_propagate_caps.validatetest
--- 
old/gst-plugins-bad-1.28.6/tests/validate/codectimestamper/h264_propagate_caps.validatetest
 2026-08-05 13:59:39.000000000 +0200
+++ 
new/gst-plugins-bad-1.28.7/tests/validate/codectimestamper/h264_propagate_caps.validatetest
 2026-09-07 21:11:13.000000000 +0200
@@ -1,9 +1,15 @@
 meta,
-    args = {
+    args={
         "videotestsrc num-buffers=1 ! 
video/x-raw,width=1920,height=1080,format=I420 ! videoscale  ! x264enc 
tune=zerolatency ! h264timestamper ! video/x-h264,width=50,height=50 ! fakesink 
name=sink",
     },
-    configs = {
-        "$(validateflow), pad=sink:sink, buffers-checksum=as-id, 
caps-properties={width, height}, ignored-event-types={tag}",
+    configs={
+        [validateflow,
+            pad=sink:sink,
+            buffers-checksum=as-id,
+            caps-properties={
+                width, height,
+            },
+            ignored-event-types={
+                tag,
+            }],
     }
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/opencv/cvtracker.validatetest 
new/gst-plugins-bad-1.28.7/tests/validate/opencv/cvtracker.validatetest
--- old/gst-plugins-bad-1.28.6/tests/validate/opencv/cvtracker.validatetest     
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/tests/validate/opencv/cvtracker.validatetest     
2026-09-07 21:11:13.000000000 +0200
@@ -1,8 +1,8 @@
 meta,
-    args = {
+    args={
         "videotestsrc pattern=ball animation-mode=frames num-buffers=90 ! 
video/x-raw,framerate=30/1,width=320,height=240 ! cvtracker name=tracker 
object-initial-x=135 object-initial-y=95 object-initial-width=50 
object-initial-height=50 algorithm=1 ! videoconvert ! $(videosink) sync=true",
     },
-    configs = {
-       "$(validateflow), pad=tracker:src, record-buffers=true",
+    configs={
+        [validateflow, pad=tracker:src, record-buffers=true],
     }
-crank-clock, repeat=91
\ No newline at end of file
+crank-clock, repeat=91
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/testsrcbin/caps_spec.validatetest 
new/gst-plugins-bad-1.28.7/tests/validate/testsrcbin/caps_spec.validatetest
--- old/gst-plugins-bad-1.28.6/tests/validate/testsrcbin/caps_spec.validatetest 
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/tests/validate/testsrcbin/caps_spec.validatetest 
2026-09-07 21:11:13.000000000 +0200
@@ -1,7 +1,7 @@
 meta,
-    args = {
+    args={
         
"testbin://video,caps=[video/x-raw,width=1920,height=1080],num-buffers=1 ! 
fakesink",
     },
-    configs = {
-        "$(validateflow), pad=testsrcbin0:video_src_0",
+    configs={
+        [validateflow, pad=testsrcbin0:video_src_0],
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h264.validatetest 
new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h264.validatetest
--- old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h264.validatetest     
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h264.validatetest     
2026-09-07 21:11:13.000000000 +0200
@@ -1,7 +1,7 @@
 meta,
-    args = {
+    args={
         "videotestsrc num-buffers=5 ! 
video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc 
allow-frame-reordering=false ! fakesink",
     },
-    configs = {
-       "$(validateflow), pad=enc:src, record-buffers=true",
+    configs={
+        [validateflow, pad=enc:src, record-buffers=true],
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h264_b_frames.validatetest
 
new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h264_b_frames.validatetest
--- 
old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h264_b_frames.validatetest
    2026-08-05 13:59:39.000000000 +0200
+++ 
new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h264_b_frames.validatetest
    2026-09-07 21:11:13.000000000 +0200
@@ -1,7 +1,7 @@
 meta,
-    args = {
+    args={
         "videotestsrc num-buffers=5 ! 
video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc 
allow-frame-reordering=true ! fakesink",
     },
-    configs = {
-       "$(validateflow), pad=enc:src, record-buffers=true",
+    configs={
+        [validateflow, pad=enc:src, record-buffers=true],
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h265.validatetest 
new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h265.validatetest
--- old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h265.validatetest     
2026-08-05 13:59:39.000000000 +0200
+++ new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h265.validatetest     
2026-09-07 21:11:13.000000000 +0200
@@ -1,7 +1,7 @@
 meta,
-    args = {
+    args={
         "videotestsrc num-buffers=5 ! 
video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc 
allow-frame-reordering=false ! fakesink",
     },
-    configs = {
-       "$(validateflow), pad=enc:src, record-buffers=true",
+    configs={
+        [validateflow, pad=enc:src, record-buffers=true],
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h265_b_frames.validatetest
 
new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h265_b_frames.validatetest
--- 
old/gst-plugins-bad-1.28.6/tests/validate/vtenc/vtenc_h265_b_frames.validatetest
    2026-08-05 13:59:39.000000000 +0200
+++ 
new/gst-plugins-bad-1.28.7/tests/validate/vtenc/vtenc_h265_b_frames.validatetest
    2026-09-07 21:11:13.000000000 +0200
@@ -1,7 +1,7 @@
 meta,
-    args = {
+    args={
         "videotestsrc num-buffers=5 ! 
video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc 
allow-frame-reordering=true ! fakesink",
     },
-    configs = {
-       "$(validateflow), pad=enc:src, record-buffers=true",
+    configs={
+        [validateflow, pad=enc:src, record-buffers=true],
     }

++++++ gst-plugins-bad.obsinfo ++++++
--- /var/tmp/diff_new_pack.6hYPCU/_old  2026-09-11 19:01:17.898535795 +0200
+++ /var/tmp/diff_new_pack.6hYPCU/_new  2026-09-11 19:01:17.903536004 +0200
@@ -1,5 +1,5 @@
 name: gst-plugins-bad
-version: 1.28.6
-mtime: 1785931179
-commit: 2d3e05cbdad68e47d645f548899b432dc9fb4473
+version: 1.28.7
+mtime: 1788808273
+commit: 070125524a8422e29d3b69a372ed4f62fd343ffa
 

Reply via email to