Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-libav for 
openSUSE:Factory checked in at 2026-04-15 16:03:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-libav (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-libav.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-libav"

Wed Apr 15 16:03:45 2026 rev:70 rq:1346832 version:1.28.2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-libav/gstreamer-plugins-libav.changes
  2026-03-05 17:13:59.679772967 +0100
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-libav.new.21863/gstreamer-plugins-libav.changes
       2026-04-15 16:04:57.435952644 +0200
@@ -1,0 +2,6 @@
+Wed Apr  8 12:24:23 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.28.2:
+  + avviddec: Refcount codec frame associated with video frame
+
+-------------------------------------------------------------------

Old:
----
  gst-libav-1.28.1.obscpio

New:
----
  gst-libav-1.28.2.obscpio

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

Other differences:
------------------
++++++ gstreamer-plugins-libav.spec ++++++
--- /var/tmp/diff_new_pack.mr3L8h/_old  2026-04-15 16:05:00.204066443 +0200
+++ /var/tmp/diff_new_pack.mr3L8h/_new  2026-04-15 16:05:00.208066607 +0200
@@ -19,7 +19,7 @@
 %define gst_branch 1.0
 
 Name:           gstreamer-plugins-libav
-Version:        1.28.1
+Version:        1.28.2
 Release:        0
 Summary:        A ffmpeg/libav plugin for GStreamer
 License:        LGPL-2.1-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.mr3L8h/_old  2026-04-15 16:05:00.264068910 +0200
+++ /var/tmp/diff_new_pack.mr3L8h/_new  2026-04-15 16:05:00.268069074 +0200
@@ -5,7 +5,7 @@
     <param 
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
     <param name="subdir">subprojects/gst-libav</param>
     <param name="filename">gst-libav</param>
-    <param name="revision">1.28.1</param>
+    <param name="revision">1.28.2</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">v?(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ gst-libav-1.28.1.obscpio -> gst-libav-1.28.2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-libav-1.28.1/ext/libav/gstavviddec.c 
new/gst-libav-1.28.2/ext/libav/gstavviddec.c
--- old/gst-libav-1.28.1/ext/libav/gstavviddec.c        2026-02-26 
03:09:39.000000000 +0100
+++ new/gst-libav-1.28.2/ext/libav/gstavviddec.c        2026-04-07 
21:02:23.000000000 +0200
@@ -795,6 +795,68 @@
   AVBufferRef *avbuffer;
 } GstFFMpegVidDecVideoFrame;
 
+typedef struct
+{
+  /* Keep track of how many decoded frames are referencing the codec frame,
+   * so we know when we can release the codec frame from the decoder.
+   *
+   * With certain content, FFmpeg can call `get_buffer2` multiple times for the
+   * same codec frame, so we end up with multiple VidDecVideoFrames referencing
+   * the same codec frame.
+   */
+  guint refcount;
+} GstFFMpegVidDecCodecFrameData;
+
+/* Replaces the 'frame' reference of a VidDecVideoFrame to its codec frame.
+ * Consumes the passed 'frame'. Can be passed NULL as the new 'frame' to clear
+ * the reference.
+ *
+ * Unrefs an old 'frame', if any. Instead of just unreffing, will release the
+ * codec frame from the decoder if this was the last VidDecVideoFrame
+ * referencing it.
+ */
+static void
+gst_ffmpegviddec_video_frame_take_frame (GstFFMpegVidDecVideoFrame * dframe,
+    GstVideoCodecFrame * frame)
+{
+  if (dframe->frame) {
+    GstFFMpegVidDecCodecFrameData *data =
+        gst_video_codec_frame_get_user_data (dframe->frame);
+
+    data->refcount--;
+
+    GST_DEBUG_OBJECT (dframe->ffmpegdec,
+        "unreffed codec frame %p sfn # %u ref ->%u", dframe->frame,
+        dframe->frame->system_frame_number, data->refcount);
+
+    if (data->refcount == 0) {
+      GST_VIDEO_CODEC_FRAME_FLAG_UNSET (dframe->frame,
+          GST_FFMPEG_VIDEO_CODEC_FRAME_FLAG_ALLOCATED);
+      gst_video_decoder_release_frame (GST_VIDEO_DECODER (dframe->ffmpegdec),
+          dframe->frame);
+    } else {
+      gst_video_codec_frame_unref (dframe->frame);
+    }
+  }
+
+  dframe->frame = frame;
+
+  if (frame) {
+    GstFFMpegVidDecCodecFrameData *data =
+        gst_video_codec_frame_get_user_data (frame);
+
+    if (data == NULL) {
+      data = g_new0 (GstFFMpegVidDecCodecFrameData, 1);
+      gst_video_codec_frame_set_user_data (frame, data, g_free);
+    }
+    data->refcount++;
+
+    GST_DEBUG_OBJECT (dframe->ffmpegdec,
+        "reffed codec frame %p sfn # %u ref ->%u", frame,
+        frame->system_frame_number, data->refcount);
+  }
+}
+
 static GstFFMpegVidDecVideoFrame *
 gst_ffmpegviddec_video_frame_new (GstFFMpegVidDec * ffmpegdec,
     GstVideoCodecFrame * frame)
@@ -803,7 +865,7 @@
 
   dframe = g_new0 (GstFFMpegVidDecVideoFrame, 1);
   dframe->ffmpegdec = ffmpegdec;
-  dframe->frame = frame;
+  gst_ffmpegviddec_video_frame_take_frame (dframe, frame);
 
   GST_DEBUG_OBJECT (ffmpegdec, "new video frame %p for sfn # %d", dframe,
       frame->system_frame_number);
@@ -816,13 +878,11 @@
     GstFFMpegVidDecVideoFrame * frame)
 {
   GST_DEBUG_OBJECT (ffmpegdec, "free video frame %p for sfn # %d", frame,
-      frame->frame->system_frame_number);
+      frame->frame ? frame->frame->system_frame_number : -1);
 
   if (frame->mapped)
     gst_video_frame_unmap (&frame->vframe);
-  GST_VIDEO_CODEC_FRAME_FLAG_UNSET (frame->frame,
-      GST_FFMPEG_VIDEO_CODEC_FRAME_FLAG_ALLOCATED);
-  gst_video_decoder_release_frame (GST_VIDEO_DECODER (ffmpegdec), 
frame->frame);
+  gst_ffmpegviddec_video_frame_take_frame (frame, NULL);
   gst_buffer_replace (&frame->buffer, NULL);
   if (frame->avbuffer) {
     av_buffer_unref (&frame->avbuffer);
@@ -1077,7 +1137,7 @@
   if (picture->opaque) {
     GST_DEBUG_OBJECT (ffmpegdec, "Re-using opaque %p", picture->opaque);
     dframe = picture->opaque;
-    dframe->frame = frame;
+    gst_ffmpegviddec_video_frame_take_frame (dframe, frame);
   } else {
     picture->opaque = dframe =
         gst_ffmpegviddec_video_frame_new (ffmpegdec, frame);
@@ -1996,6 +2056,9 @@
   output_frame = gst_video_codec_frame_ref (out_dframe->frame);
 #endif
 
+  GST_LOG_OBJECT (ffmpegdec, "Got frame from ffmpeg, sfn # %"
+      G_GUINT32_FORMAT, output_frame->system_frame_number);
+
   /* also give back a buffer allocated by the frame, if any */
   if (out_dframe) {
     gst_buffer_replace (&output_frame->output_buffer, out_dframe->buffer);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-libav-1.28.1/gst-libav.doap 
new/gst-libav-1.28.2/gst-libav.doap
--- old/gst-libav-1.28.1/gst-libav.doap 2026-02-26 03:09:39.000000000 +0100
+++ new/gst-libav-1.28.2/gst-libav.doap 2026-04-07 21:02:23.000000000 +0200
@@ -34,6 +34,16 @@
 
  <release>
   <Version>
+   <revision>1.28.2</revision>
+   <branch>1.28</branch>
+   <name></name>
+   <created>2026-04-07</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.28.2.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.28.1</revision>
    <branch>1.28</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-libav-1.28.1/meson.build 
new/gst-libav-1.28.2/meson.build
--- old/gst-libav-1.28.1/meson.build    2026-02-26 03:09:39.000000000 +0100
+++ new/gst-libav-1.28.2/meson.build    2026-04-07 21:02:23.000000000 +0200
@@ -1,5 +1,5 @@
 project('gst-libav', 'c',
-  version : '1.28.1',
+  version : '1.28.2',
   meson_version : '>= 1.4',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])

++++++ gst-libav.obsinfo ++++++
--- /var/tmp/diff_new_pack.mr3L8h/_old  2026-04-15 16:05:00.840092590 +0200
+++ /var/tmp/diff_new_pack.mr3L8h/_new  2026-04-15 16:05:00.884094399 +0200
@@ -1,5 +1,5 @@
 name: gst-libav
-version: 1.28.1
-mtime: 1772071779
-commit: dcb37e20147e3b59344bab1e1cbb57e908cc6b92
+version: 1.28.2
+mtime: 1775588543
+commit: 43421c2a5b8ac5cceb52b11749df40301e1de5c0
 

Reply via email to