Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-good for 
openSUSE:Factory checked in at 2026-05-13 17:18:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-good"

Wed May 13 17:18:44 2026 rev:130 rq:1352703 version:1.28.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes
    2026-04-15 16:04:53.303782769 +0200
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.1966/gstreamer-plugins-good.changes
  2026-05-13 17:19:00.310469612 +0200
@@ -1,0 +2,28 @@
+Tue May 12 07:01:26 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.28.3:
+  + adaptivedemux/hlsdemux assertions / fixes
+  + avidemux:
+    - Fix divide by zero if VPRP contains fields==0
+    - Divide-by-Zero in vprp parser
+  + isomp4:
+    - Fix memory leak when file is corrupted
+    - qtdemux: Add bounds checks for ESDS descriptors
+  + matroska: Fix wrong object type bug
+  + qml6glsink: Fix redraw issues on buffer change
+  + qtdemux: Check for minimum stride requirements and width/height
+    constraints with uncompressed video
+  + rtspsrc:
+    - mki is optional upon crypto update
+    - mikey without mki failure
+    - include user-agent property in HTTP tunnel requests
+  + v4l2: object: Fix caps filtering in caps negotiation
+  + v4l2transform: release input buffers earlier
+  + wavparse:
+    - Remove assertion about upstream file size
+    - Recover from invalid av_bps instead of failing
+    - Assert and execute an integer overflow on invalid duration
+  + Require C std gnu11 or c11, remove custom 'restrict'
+    definition, fixing build with Qt 6.11
+
+-------------------------------------------------------------------

Old:
----
  gst-plugins-good-1.28.2.obscpio

New:
----
  gst-plugins-good-1.28.3.obscpio

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

Other differences:
------------------
++++++ gstreamer-plugins-good.spec ++++++
--- /var/tmp/diff_new_pack.DCtMQl/_old  2026-05-13 17:19:01.114503204 +0200
+++ /var/tmp/diff_new_pack.DCtMQl/_new  2026-05-13 17:19:01.118503372 +0200
@@ -33,7 +33,7 @@
 %endif
 
 Name:           gstreamer-plugins-good
-Version:        1.28.2
+Version:        1.28.3
 Release:        0
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        LGPL-2.1-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.DCtMQl/_old  2026-05-13 17:19:01.174505712 +0200
+++ /var/tmp/diff_new_pack.DCtMQl/_new  2026-05-13 17:19:01.182506046 +0200
@@ -5,7 +5,7 @@
     <param 
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
     <param name="subdir">subprojects/gst-plugins-good</param>
     <param name="filename">gst-plugins-good</param>
-    <param name="revision">1.28.2</param>
+    <param name="revision">1.28.3</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">v?(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ gst-plugins-good-1.28.2.obscpio -> gst-plugins-good-1.28.3.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.28.2/ext/adaptivedemux2/gstadaptivedemux-stream.c 
new/gst-plugins-good-1.28.3/ext/adaptivedemux2/gstadaptivedemux-stream.c
--- old/gst-plugins-good-1.28.2/ext/adaptivedemux2/gstadaptivedemux-stream.c    
2026-04-07 21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/ext/adaptivedemux2/gstadaptivedemux-stream.c    
2026-05-11 19:28:12.000000000 +0200
@@ -2089,8 +2089,6 @@
   /* Restarting download, figure out new position
    * FIXME : Move this to a separate function ? */
   if (G_UNLIKELY (stream->state == GST_ADAPTIVE_DEMUX2_STREAM_STATE_RESTART)) {
-    GstClockTimeDiff stream_time = 0;
-
     GST_DEBUG_OBJECT (stream, "Activating stream after restart");
 
     if (stream->parsebin_sink != NULL) {
@@ -2103,12 +2101,14 @@
     }
 
     GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
-    stream_time = stream->start_position;
 
     GST_DEBUG_OBJECT (stream, "Restarting stream at "
-        "stream position %" GST_STIME_FORMAT, GST_STIME_ARGS (stream_time));
+        "stream position %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (stream->start_position));
+
+    if (GST_CLOCK_TIME_IS_VALID (stream->start_position)) {
+      GstClockTimeDiff stream_time = stream->start_position;
 
-    if (GST_CLOCK_STIME_IS_VALID (stream_time)) {
       /* TODO check return */
       gst_adaptive_demux2_stream_seek (stream, demux->segment.rate >= 0,
           0, stream_time, &stream_time);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.28.2/ext/adaptivedemux2/hls/gsthlsdemux-stream.c 
new/gst-plugins-good-1.28.3/ext/adaptivedemux2/hls/gsthlsdemux-stream.c
--- old/gst-plugins-good-1.28.2/ext/adaptivedemux2/hls/gsthlsdemux-stream.c     
2026-04-07 21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/ext/adaptivedemux2/hls/gsthlsdemux-stream.c     
2026-05-11 19:28:12.000000000 +0200
@@ -1466,7 +1466,10 @@
     stream->playlist_fetched = TRUE;
     stream->pending_discont = TRUE;
 
-    gst_hls_demux_reset_for_lost_sync (demux);
+    if (!gst_hls_demux_reset_for_lost_sync (demux)) {
+      GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
+          ("Failed to resynchronise streams after a discontinuity"), (NULL));
+    }
   }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.28.2/ext/adaptivedemux2/hls/gsthlsdemux.c 
new/gst-plugins-good-1.28.3/ext/adaptivedemux2/hls/gsthlsdemux.c
--- old/gst-plugins-good-1.28.2/ext/adaptivedemux2/hls/gsthlsdemux.c    
2026-04-07 21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/ext/adaptivedemux2/hls/gsthlsdemux.c    
2026-05-11 19:28:12.000000000 +0200
@@ -300,14 +300,18 @@
     GstAdaptiveDemux2Stream *stream =
         GST_ADAPTIVE_DEMUX2_STREAM (hlsdemux->main_stream);
 
-    if (stream->state != GST_ADAPTIVE_DEMUX2_STREAM_STATE_STOPPED) {
-      stream->state = GST_ADAPTIVE_DEMUX2_STREAM_STATE_WAITING_PREPARE;
+    if (stream->state == GST_ADAPTIVE_DEMUX2_STREAM_STATE_STOPPED) {
+      GST_DEBUG_OBJECT (hlsdemux,
+          "Interrupted waiting for stream to be prepared");
+      return GST_FLOW_FLUSHING;
+    }
 
-      if (!gst_adaptive_demux2_stream_wait_prepared (stream)) {
-        GST_DEBUG_OBJECT (hlsdemux,
-            "Interrupted waiting for stream to be prepared");
-        return GST_FLOW_FLUSHING;
-      }
+    stream->state = GST_ADAPTIVE_DEMUX2_STREAM_STATE_WAITING_PREPARE;
+
+    if (!gst_adaptive_demux2_stream_wait_prepared (stream)) {
+      GST_DEBUG_OBJECT (hlsdemux,
+          "Interrupted waiting for stream to be prepared");
+      return GST_FLOW_FLUSHING;
     }
   }
 
@@ -1208,7 +1212,7 @@
 
 /* Reset hlsdemux in case of live synchronization loss (i.e. when a media
  * playlist update doesn't match at all with the previous one) */
-void
+gboolean
 gst_hls_demux_reset_for_lost_sync (GstHLSDemux * hlsdemux)
 {
   GstAdaptiveDemux *demux = (GstAdaptiveDemux *) hlsdemux;
@@ -1229,7 +1233,12 @@
       GstM3U8SeekResult seek_result;
 
       /* Resynchronize the variant stream */
-      g_assert (stream->current_position != GST_CLOCK_STIME_NONE);
+      if (stream->current_position == GST_CLOCK_TIME_NONE) {
+        GST_ERROR_OBJECT (stream,
+            "Variant doesn't have a current position to recalculate sync");
+        return FALSE;
+      }
+
       if (gst_hls_media_playlist_get_starting_segment (hls_stream->playlist,
               &seek_result)) {
         hls_stream->current_segment = seek_result.segment;
@@ -1261,6 +1270,8 @@
       hls_stream->playlist_fetched = FALSE;
     }
   }
+
+  return TRUE;
 }
 
 static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.28.2/ext/adaptivedemux2/hls/gsthlsdemux.h 
new/gst-plugins-good-1.28.3/ext/adaptivedemux2/hls/gsthlsdemux.h
--- old/gst-plugins-good-1.28.2/ext/adaptivedemux2/hls/gsthlsdemux.h    
2026-04-07 21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/ext/adaptivedemux2/hls/gsthlsdemux.h    
2026-05-11 19:28:12.000000000 +0200
@@ -116,7 +116,7 @@
     GstCaps * caps, GstStreamFlags flags, GstTagList * tags);
 
 void gst_hls_demux_start_rendition_streams (GstHLSDemux * hlsdemux);
-void gst_hls_demux_reset_for_lost_sync (GstHLSDemux * hlsdemux);
+gboolean gst_hls_demux_reset_for_lost_sync (GstHLSDemux * hlsdemux);
 const GstHLSKey *gst_hls_demux_get_key (GstHLSDemux * demux,
     const gchar * key_url, const gchar * referer, gboolean allow_cache);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/ext/qt6/qt6glitem.cc 
new/gst-plugins-good-1.28.3/ext/qt6/qt6glitem.cc
--- old/gst-plugins-good-1.28.2/ext/qt6/qt6glitem.cc    2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/ext/qt6/qt6glitem.cc    2026-05-11 
19:28:12.000000000 +0200
@@ -337,6 +337,7 @@
     } else if (!was_bound) {
       GST_TRACE ("old buffer %p was not bound yet, unreffing", old_buffer);
       gst_buffer_unref (old_buffer);
+      texNode->markDirty(QSGNode::DirtyMaterial);
     } else {
       texNode->markDirty(QSGNode::DirtyMaterial);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/gst/avi/gstavidemux.c 
new/gst-plugins-good-1.28.3/gst/avi/gstavidemux.c
--- old/gst-plugins-good-1.28.2/gst/avi/gstavidemux.c   2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/gst/avi/gstavidemux.c   2026-05-11 
19:28:12.000000000 +0200
@@ -1806,6 +1806,12 @@
   vprp->fields = GUINT32_FROM_LE (vprp->fields);
 #endif
 
+  if (vprp->fields == 0) {
+    g_free (vprp);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+
   /* size checking */
   /* calculate fields based on size */
   k = (size - G_STRUCT_OFFSET (gst_riff_vprp, field_info)) / vprp->fields;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/gst/isomp4/qtdemux.c 
new/gst-plugins-good-1.28.3/gst/isomp4/qtdemux.c
--- old/gst-plugins-good-1.28.2/gst/isomp4/qtdemux.c    2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/gst/isomp4/qtdemux.c    2026-05-11 
19:28:12.000000000 +0200
@@ -12784,14 +12784,14 @@
   return GST_VIDEO_FORMAT_UNKNOWN;
 }
 
-static void
+static gboolean
 qtdemux_set_info_from_uncv (GstQTDemux * qtdemux,
     QtDemuxStreamStsdEntry * entry, UncompressedFrameConfigBox * uncC,
     GstVideoInfo * info)
 {
   guint32 num_components = uncC->component_count;
   guint32 row_align_size = uncC->row_align_size;
-  gint height = entry->height;
+  guint height = entry->height;
 
   if (uncC->version == 1) {
     switch (uncC->profile) {
@@ -12805,38 +12805,84 @@
       default:
         GST_WARNING_OBJECT (qtdemux, "Unsupported uncv profile: %u",
             uncC->profile);
-        return;
+        return FALSE;
     }
     info->stride[0] = entry->width * num_components;
     info->size = info->stride[0] * height;
-    return;
+    return TRUE;
   }
 
-  gint default_stride = 0;
+  guint default_stride;
+  // We only support 8/16 bit formats right now, and r210. Other formats need
+  // updating below to calculate the correct strides and sizes.
+  g_assert (uncC->components[0].bit_depth % 8 == 0
+      || info->finfo->format == GST_VIDEO_FORMAT_r210);
   if (row_align_size) {
     default_stride = row_align_size;
   } else {
-    default_stride = entry->width;
+    default_stride = (uncC->components[0].bit_depth / 8) * entry->width;
   }
 
   switch (uncC->sampling_type) {
-    case SAMPLING_444:
-      if (uncC->interleave_type == INTERLEAVE_PIXEL) {
-        if (row_align_size) {
-          info->stride[0] = row_align_size;
-        } else {
-          info->stride[0] = entry->width * num_components;
+    case SAMPLING_444:{
+      switch (uncC->interleave_type) {
+        case INTERLEAVE_PIXEL:{
+          guint min_stride =
+              (uncC->components[0].bit_depth / 8) * entry->width *
+              num_components;
+
+          // Special case for r210
+          if (info->finfo->format == GST_VIDEO_FORMAT_r210)
+            min_stride = entry->width * 4;
+
+          if (row_align_size) {
+            if (row_align_size < min_stride) {
+              GST_WARNING_OBJECT (qtdemux,
+                  "Invalid row align size %u smaller than minimum %u",
+                  row_align_size, min_stride);
+              return FALSE;
+            }
+            info->stride[0] = row_align_size;
+          } else {
+            info->stride[0] = min_stride;
+          }
+          info->size = info->stride[0] * height;
+          break;
         }
-        info->size = info->stride[0] * height;
-      } else {
-        for (gint i = 0; i < num_components; i++) {
-          info->stride[i] = default_stride;
+        case INTERLEAVE_COMPONENT:{
+          guint min_stride = (uncC->components[0].bit_depth / 8) * 
entry->width;
+          if (default_stride < min_stride) {
+            GST_WARNING_OBJECT (qtdemux,
+                "Invalid row align size %u smaller than minimum %u",
+                default_stride, min_stride);
+            return FALSE;
+          }
+
+          for (gint i = 0; i < num_components; i++) {
+            info->stride[i] = default_stride;
+          }
+          info->size = info->stride[0] * height * num_components;
+          break;
         }
-        info->size = info->stride[0] * height * num_components;
+        default:
+          return FALSE;
       }
       break;
+    }
+    case SAMPLING_422:{
+      guint min_stride = (uncC->components[0].bit_depth / 8) * entry->width;
+      if (default_stride < min_stride) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Invalid row align size %u smaller than minimum %u", 
default_stride,
+            min_stride);
+        return FALSE;
+      }
+      if (entry->width % 2 != 0) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Require even widths for 4:2:2 subsampling");
+        return FALSE;
+      }
 
-    case SAMPLING_422:
       info->stride[0] = default_stride;
       switch (uncC->interleave_type) {
         case INTERLEAVE_COMPONENT:
@@ -12846,16 +12892,31 @@
         case INTERLEAVE_MIXED:
           info->stride[1] = info->stride[0];
           break;
-        case INTERLEAVE_MULTI_Y:
-          // TODO
-          break;
         default:
-          break;                // Error
+          return FALSE;
       }
       info->size = info->stride[0] * height * 2;
       break;
+    }
+    case SAMPLING_420:{
+      guint min_stride = (uncC->components[0].bit_depth / 8) * entry->width;
+      if (default_stride < min_stride) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Invalid row align size %u smaller than minimum %u", 
default_stride,
+            min_stride);
+        return FALSE;
+      }
+      if (entry->width % 2 != 0) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Require even widths for 4:2:0 subsampling");
+        return FALSE;
+      }
+      if (entry->height % 2 != 0) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Require even heights for 4:2:0 subsampling");
+        return FALSE;
+      }
 
-    case SAMPLING_420:
       info->stride[0] = default_stride;
       switch (uncC->interleave_type) {
         case INTERLEAVE_COMPONENT:
@@ -12866,12 +12927,25 @@
           info->stride[1] = info->stride[0];
           break;
         default:
-          break;                // Error
+          return FALSE;
       }
       info->size = info->stride[0] * height * 3 / 2;
       break;
+    }
+    case SAMPLING_411:{
+      guint min_stride = (uncC->components[0].bit_depth / 8) * entry->width;
+      if (default_stride < min_stride) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Invalid row align size %u smaller than minimum %u", 
default_stride,
+            min_stride);
+        return FALSE;
+      }
+      if (entry->width % 4 != 0) {
+        GST_WARNING_OBJECT (qtdemux,
+            "Require widths that are an integer multiple of 4 for 4:1:1 
subsampling");
+        return FALSE;
+      }
 
-    case SAMPLING_411:
       info->stride[0] = default_stride;
       switch (uncC->interleave_type) {
         case INTERLEAVE_COMPONENT:
@@ -12881,17 +12955,17 @@
         case INTERLEAVE_MIXED:
           info->stride[1] = info->stride[0];
           break;
-        case INTERLEAVE_MULTI_Y:
-          // TODO
         default:
-          break;                // Error
+          return FALSE;
       }
       info->size = info->stride[0] * height * 3 / 2;
       break;
+    }
     default:
-      break;
+      return FALSE;
   }
 
+  return TRUE;
 }
 
 /* *INDENT-OFF* */
@@ -16615,6 +16689,7 @@
           dops = qtdemux_tree_get_child_by_type (stsd_entry, FOURCC_dops);
           if (dops == NULL) {
             GST_WARNING_OBJECT (qtdemux, "Opus Specific Box not found");
+            g_free (codec);
             goto corrupt_file;
           }
 
@@ -16640,12 +16715,14 @@
           if (len < offset + dops_len) {
             GST_WARNING_OBJECT (qtdemux,
                 "Opus Sample Entry has bogus size %" G_GUINT32_FORMAT, len);
+            g_free (codec);
             goto corrupt_file;
           }
           if (dops_len < 19) {
             GST_WARNING_OBJECT (qtdemux,
                 "Opus Specific Box has bogus size %" G_GUINT32_FORMAT,
                 dops_len);
+            g_free (codec);
             goto corrupt_file;
           }
 
@@ -16658,6 +16735,7 @@
               GST_WARNING_OBJECT (qtdemux,
                   "Opus Specific Box has bogus size %" G_GUINT32_FORMAT,
                   dops_len);
+              g_free (codec);
               goto corrupt_file;
             }
 
@@ -16680,6 +16758,7 @@
             GST_WARNING_OBJECT (qtdemux,
                 "Opus unexpected nb of channels %d without channel mapping",
                 n_channels);
+            g_free (codec);
             goto corrupt_file;
           }
 
@@ -18451,6 +18530,11 @@
 
     switch (tag) {
       case ES_DESCRIPTOR_TAG:
+        if (len < 3) {
+          GST_WARNING_OBJECT (qtdemux, "ES descriptor too short (%d < 3)", 
len);
+          ptr += len;
+          break;
+        }
         GST_DEBUG_OBJECT (qtdemux, "ID 0x%04x", QT_UINT16 (ptr));
         GST_DEBUG_OBJECT (qtdemux, "priority 0x%04x", QT_UINT8 (ptr + 2));
         ptr += 3;
@@ -18458,6 +18542,13 @@
       case DECODER_CONFIG_DESC_TAG:{
         guint max_bitrate, avg_bitrate;
 
+        if (len < 13) {
+          GST_WARNING_OBJECT (qtdemux,
+              "Decoder config descriptor too short (%d < 13)", len);
+          ptr += len;
+          break;
+        }
+
         object_type_id = QT_UINT8 (ptr);
         stream_type = QT_UINT8 (ptr + 1) >> 2;
         max_bitrate = QT_UINT32 (ptr + 5);
@@ -18519,6 +18610,12 @@
         ptr += len;
         break;
       case SL_CONFIG_DESC_TAG:
+        if (len < 1) {
+          GST_WARNING_OBJECT (qtdemux,
+              "SL config descriptor too short (%d < 1)", len);
+          ptr += len;
+          break;
+        }
         GST_DEBUG_OBJECT (qtdemux, "data %02x", QT_UINT8 (ptr));
         ptr += 1;
         break;
@@ -19337,10 +19434,13 @@
 
       format = qtdemux_get_format_from_uncv (qtdemux, &uncC, &cmpd);
       if (format != GST_VIDEO_FORMAT_UNKNOWN) {
+        stream->alignment = 32;
+
         gst_video_info_set_format (&stream->pre_info, format, entry->width,
             entry->height);
-        qtdemux_set_info_from_uncv (qtdemux, entry, &uncC, &stream->pre_info);
-        stream->alignment = 32;
+        if (!qtdemux_set_info_from_uncv (qtdemux, entry, &uncC,
+                &stream->pre_info))
+          format = GST_VIDEO_FORMAT_UNKNOWN;
       }
 
       /* Free Memory */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/gst/matroska/ebml-read.c 
new/gst-plugins-good-1.28.3/gst/matroska/ebml-read.c
--- old/gst-plugins-good-1.28.2/gst/matroska/ebml-read.c        2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/gst/matroska/ebml-read.c        2026-05-11 
19:28:12.000000000 +0200
@@ -602,7 +602,7 @@
 
   for (iter = str; *iter != '\0'; iter++) {
     if (G_UNLIKELY (*iter & 0x80)) {
-      GST_ERROR_OBJECT (ebml,
+      GST_ERROR_OBJECT (ebml->el,
           "Invalid ASCII string at offset %" G_GUINT64_FORMAT, oldoff);
       g_free (str);
       return GST_FLOW_ERROR;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/gst/rtsp/gstrtspsrc.c 
new/gst-plugins-good-1.28.3/gst/rtsp/gstrtspsrc.c
--- old/gst-plugins-good-1.28.2/gst/rtsp/gstrtspsrc.c   2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/gst/rtsp/gstrtspsrc.c   2026-05-11 
19:28:12.000000000 +0200
@@ -4217,12 +4217,12 @@
 }
 
 static void
-update_srtcp_params (GstRTSPStream * stream)
+update_srtcp_params (GstRTSPStream * stream, gboolean update)
 {
   GstStructure *s = gst_caps_get_structure (stream->srtcpparams, 0);
   if (s) {
     GstBuffer *buf;
-    GstBuffer *mki_buf;
+    GstBuffer *mki_buf = NULL;
     const gchar *str;
     GType ciphertype, authtype;
     GValue rtcp_cipher = G_VALUE_INIT, rtcp_auth = G_VALUE_INIT;
@@ -4239,6 +4239,22 @@
     gst_structure_get (s, "srtp-key", GST_TYPE_BUFFER, &buf, NULL);
     gst_structure_get (s, "mki", GST_TYPE_BUFFER, &mki_buf, NULL);
 
+    if (update) {
+      GstBuffer *current_mki_buf = NULL;
+
+      g_object_get (stream->srtpenc, "mki", &current_mki_buf, NULL);
+
+      if ((current_mki_buf != NULL) != (mki_buf != NULL)) {
+        GstRTSPSrc *rtspsrc = GST_RTSPSRC (stream->parent);
+        GST_WARNING_OBJECT (rtspsrc,
+            "Mixed MKI and non-MKI keys detected in the same SRTP session. "
+            "Current key has %s MKI, new key has %s MKI",
+            current_mki_buf ? "an" : "no", mki_buf ? "an" : "no");
+      }
+
+      gst_clear_buffer (&current_mki_buf);
+    }
+
     g_object_set_property (G_OBJECT (stream->srtpenc), "rtp-cipher",
         &rtcp_cipher);
     g_object_set_property (G_OBJECT (stream->srtpenc), "rtp-auth", &rtcp_auth);
@@ -4251,7 +4267,7 @@
     g_value_unset (&rtcp_cipher);
     g_value_unset (&rtcp_auth);
     gst_buffer_unref (buf);
-    gst_buffer_unref (mki_buf);
+    gst_clear_buffer (&mki_buf);
   }
 }
 
@@ -4294,7 +4310,7 @@
       gst_caps_unref (stream->srtcpparams);
 
     stream->srtcpparams = signal_get_srtcp_params (rtspsrc, stream);
-    update_srtcp_params (stream);
+    update_srtcp_params (stream, TRUE);
   } else {
     GST_ERROR_OBJECT (rtspsrc, "No MIKEYs for stream with id %u", stream->id);
     return NULL;
@@ -4414,7 +4430,7 @@
     }
 
     /* get RTCP crypto parameters from caps */
-    update_srtcp_params (stream);
+    update_srtcp_params (stream, FALSE);
   }
   name = g_strdup_printf ("rtcp_sink_%d", session);
   pad = gst_element_request_pad_simple (stream->srtpenc, name);
@@ -5806,6 +5822,15 @@
         gst_rtsp_connection_set_tunneled (info->connection, TRUE);
         gst_rtsp_connection_set_ignore_x_server_reply (info->connection,
             src->ignore_x_server_reply);
+
+        if (src->user_agent) {
+          GString *user_agent = g_string_new (src->user_agent);
+
+          g_string_replace (user_agent, "{VERSION}", PACKAGE_VERSION, 0);
+          gst_rtsp_connection_add_extra_http_request_header (info->connection,
+              "User-Agent", user_agent->str);
+          g_string_free (user_agent, TRUE);
+        }
       }
 
       if (src->proxy_host) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/gst/wavparse/gstwavparse.c 
new/gst-plugins-good-1.28.3/gst/wavparse/gstwavparse.c
--- old/gst-plugins-good-1.28.2/gst/wavparse/gstwavparse.c      2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/gst/wavparse/gstwavparse.c      2026-05-11 
19:28:12.000000000 +0200
@@ -1258,7 +1258,17 @@
       case GST_RIFF_WAVE_FORMAT_PCM:
         if (wav->blockalign > wav->channels * ((wav->depth + 7) / 8))
           goto invalid_blockalign;
-        /* fall through */
+        /* For PCM, av_bps is fully determined by blockalign * rate. Some
+         * writers produce bogus av_bps values; recompute instead of failing
+         * so playback and seeking work correctly. */
+        if (wav->av_bps != wav->blockalign * wav->rate) {
+          GST_WARNING_OBJECT (wav,
+              "Stream claims av_bps = %u, expected %u for PCM - recomputing",
+              wav->av_bps, wav->blockalign * wav->rate);
+          wav->av_bps = wav->blockalign * wav->rate;
+        }
+        wav->bps = wav->av_bps;
+        break;
       default:
         if (wav->av_bps > wav->blockalign * wav->rate)
           goto invalid_bps;
@@ -1360,11 +1370,14 @@
     }
 
     /* Clip to upstream size if known */
-    if (upstream_size > 0 && size + 8 + wav->offset > upstream_size) {
-      GST_WARNING_OBJECT (wav, "Clipping chunk size to file size");
-      g_assert (upstream_size >= wav->offset);
-      g_assert (upstream_size - wav->offset >= 8);
-      size = upstream_size - wav->offset - 8;
+    if (upstream_size > 0) {
+      if (upstream_size < wav->offset + 8) {
+        GST_WARNING_OBJECT (wav, "Bogus file size");
+        upstream_size = -1;
+      } else if (size > upstream_size - wav->offset - 8) {
+        GST_WARNING_OBJECT (wav, "Clipping chunk size to file size");
+        size = upstream_size - wav->offset - 8;
+      }
     }
 
     /* wav is a st00pid format, we don't know for sure where data starts.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/gst-plugins-good.doap 
new/gst-plugins-good-1.28.3/gst-plugins-good.doap
--- old/gst-plugins-good-1.28.2/gst-plugins-good.doap   2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/gst-plugins-good.doap   2026-05-11 
19:28:12.000000000 +0200
@@ -34,6 +34,16 @@
 
  <release>
   <Version>
+   <revision>1.28.3</revision>
+   <branch>1.28</branch>
+   <name></name>
+   <created>2026-05-11</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.28.3.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.28.2</revision>
    <branch>1.28</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/meson.build 
new/gst-plugins-good-1.28.3/meson.build
--- old/gst-plugins-good-1.28.2/meson.build     2026-04-07 21:02:23.000000000 
+0200
+++ new/gst-plugins-good-1.28.3/meson.build     2026-05-11 19:28:12.000000000 
+0200
@@ -1,8 +1,9 @@
 project('gst-plugins-good', 'c',
-  version : '1.28.2',
+  version : '1.28.3',
   meson_version : '>= 1.4',
   default_options : [ 'warning_level=1',
-                      'buildtype=debugoptimized' ])
+                      'buildtype=debugoptimized',
+                      'c_std=gnu11,c11' ])
 
 gst_version = meson.project_version()
 version_arr = gst_version.split('.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-good-1.28.2/sys/osxaudio/gstosxcoreaudiocommon.h 
new/gst-plugins-good-1.28.3/sys/osxaudio/gstosxcoreaudiocommon.h
--- old/gst-plugins-good-1.28.2/sys/osxaudio/gstosxcoreaudiocommon.h    
2026-04-07 21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/sys/osxaudio/gstosxcoreaudiocommon.h    
2026-05-11 19:28:12.000000000 +0200
@@ -28,6 +28,9 @@
 
 G_BEGIN_DECLS
 
+/* Master was renamed to Main in Xcode 13, and Master was deprecated */
+#define kAudioObjectPropertyElementMain 0
+
 typedef struct
 {
   GMutex lock;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2bufferpool.c 
new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2bufferpool.c
--- old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2bufferpool.c    2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2bufferpool.c    2026-05-11 
19:28:12.000000000 +0200
@@ -1929,6 +1929,30 @@
 }
 
 /**
+ * gst_v4l2_buffer_pool_release_buffers:
+ * @pool: a #GstBufferPool
+ *
+ * Dequeue and release all buffers that are ready. This can be used for output
+ * devices or the output side of M2M devices to release buffers for use in the
+ * upstream pipeline.
+ *
+ * Must be called with the stream lock held.
+ */
+void
+gst_v4l2_buffer_pool_release_buffers (GstV4l2BufferPool * pool)
+{
+  GstBufferPool *bpool = GST_BUFFER_POOL_CAST (pool);
+  GstBuffer *buffer;
+  gboolean outstanding;
+
+  while (gst_v4l2_buffer_pool_dqbuf (pool, &buffer, &outstanding,
+          FALSE) == GST_FLOW_OK) {
+    if (!outstanding)
+      gst_v4l2_buffer_pool_complete_release_buffer (bpool, buffer, FALSE);
+  }
+}
+
+/**
  * gst_v4l2_buffer_pool_process:
  * @bpool: a #GstBufferPool
  * @buf: a #GstBuffer, maybe be replaced
@@ -2202,12 +2226,7 @@
           gst_clear_buffer (&to_queue);
 
           /* release as many buffer as possible */
-          while (gst_v4l2_buffer_pool_dqbuf (pool, &buffer, &outstanding,
-                  FALSE) == GST_FLOW_OK) {
-            if (!outstanding)
-              gst_v4l2_buffer_pool_complete_release_buffer (bpool, buffer,
-                  FALSE);
-          }
+          gst_v4l2_buffer_pool_release_buffers (pool);
 
           num_queued = g_atomic_int_get (&pool->num_queued);
           if (num_queued >= pool->min_latency && num_queued > split_count) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2bufferpool.h 
new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2bufferpool.h
--- old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2bufferpool.h    2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2bufferpool.h    2026-05-11 
19:28:12.000000000 +0200
@@ -122,6 +122,8 @@
 
 void                gst_v4l2_buffer_pool_enable_resolution_change 
(GstV4l2BufferPool *self);
 
+void                gst_v4l2_buffer_pool_release_buffers (GstV4l2BufferPool * 
pool);
+
 G_END_DECLS
 
 #endif /*__GST_V4L2_BUFFER_POOL_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2object.c 
new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2object.c
--- old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2object.c        2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2object.c        2026-05-11 
19:28:12.000000000 +0200
@@ -5446,7 +5446,12 @@
       if (dmabuf_tmpl) {
         gst_caps_append_structure (format_caps,
             gst_structure_copy (dmabuf_tmpl));
-        add_alternate_variant (v4l2object, format_caps, dmabuf_tmpl, NULL);
+        gst_caps_set_features (filter, 0,
+            gst_caps_features_new_single_static_str
+            (GST_CAPS_FEATURE_MEMORY_DMABUF));
+        add_alternate_variant (v4l2object, format_caps, dmabuf_tmpl,
+            gst_caps_features_new_single_static_str
+            (GST_CAPS_FEATURE_MEMORY_DMABUF));
       }
 
       if (sysmem_tmpl) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2transform.c 
new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2transform.c
--- old/gst-plugins-good-1.28.2/sys/v4l2/gstv4l2transform.c     2026-04-07 
21:02:23.000000000 +0200
+++ new/gst-plugins-good-1.28.3/sys/v4l2/gstv4l2transform.c     2026-05-11 
19:28:12.000000000 +0200
@@ -986,6 +986,13 @@
 
   } while (ret == GST_V4L2_FLOW_CORRUPTED_BUFFER);
 
+  if (pool)
+    g_object_unref (pool);
+
+  pool = gst_v4l2_object_get_buffer_pool (self->v4l2output);
+  /* release the output buffer that is no longer needed */
+  gst_v4l2_buffer_pool_release_buffers (GST_V4L2_BUFFER_POOL (pool));
+
   if (ret != GST_FLOW_OK) {
     gst_buffer_unref (*outbuf);
     *outbuf = NULL;

++++++ gst-plugins-good.obsinfo ++++++
--- /var/tmp/diff_new_pack.DCtMQl/_old  2026-05-13 17:19:03.606607322 +0200
+++ /var/tmp/diff_new_pack.DCtMQl/_new  2026-05-13 17:19:03.610607490 +0200
@@ -1,5 +1,5 @@
 name: gst-plugins-good
-version: 1.28.2
-mtime: 1775588543
-commit: 43421c2a5b8ac5cceb52b11749df40301e1de5c0
+version: 1.28.3
+mtime: 1778520492
+commit: 62d8936e70b11a2e21ea3c68b7672b675e142945
 

Reply via email to