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-07-12 16:20:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old)
and /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.1991 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-good"
Sun Jul 12 16:20:52 2026 rev:132 rq:1364878 version:1.28.5
Changes:
--------
---
/work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes
2026-06-13 18:47:21.093464529 +0200
+++
/work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.1991/gstreamer-plugins-good.changes
2026-07-12 16:21:30.480718762 +0200
@@ -1,0 +2,25 @@
+Thu Jul 9 17:47:07 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.28.5:
+ + flacenc: Fix g_object_notify on loose-mid-side-stereo property
+ + gdkpixbufdec: Drop rank to NONE and handle resolution/format
+ changes
+ + gdkpixbufdec: stop advertising Sun and Andrew raster formats
+ + gdkpixbufdec announces unsupported raster mediatypes
+ + matroskademux: Don't pass non-GstElement pointers to
+ GST_ELEMENT_ERROR
+ + matroska: Update lzo decompression implementation from latest
+ ffmpeg
+ + mp4mux: fix AC-3 template caps so muxer can accept input from
+ ac3parse
+ + pngdec: fix wrong macro being used for ICC support test
+ + qtmoovrecover: Validate box sizes
+ + rtpceltdepay: error out if anyone tries to use this element
+ + rtpjpegdepay: Ensure that quantization table is big enough
+ + rtpsbcdepay: Check for available data in the adapter before
+ getting data
+ + shapewipe: Fix missing mutex unlock in shutdown path
+ + wavparse: Avoid NULL pointer dereference when parsing adtl in
+ push mode
+
+-------------------------------------------------------------------
Old:
----
gst-plugins-good-1.28.4.obscpio
New:
----
gst-plugins-good-1.28.5.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gstreamer-plugins-good.spec ++++++
--- /var/tmp/diff_new_pack.T7vOoB/_old 2026-07-12 16:21:31.336747615 +0200
+++ /var/tmp/diff_new_pack.T7vOoB/_new 2026-07-12 16:21:31.336747615 +0200
@@ -33,7 +33,7 @@
%endif
Name: gstreamer-plugins-good
-Version: 1.28.4
+Version: 1.28.5
Release: 0
Summary: GStreamer Streaming-Media Framework Plug-Ins
License: LGPL-2.1-or-later
++++++ _service ++++++
--- /var/tmp/diff_new_pack.T7vOoB/_old 2026-07-12 16:21:31.372748828 +0200
+++ /var/tmp/diff_new_pack.T7vOoB/_new 2026-07-12 16:21:31.376748963 +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.4</param>
+ <param name="revision">1.28.5</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.4.obscpio -> gst-plugins-good-1.28.5.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/docs/gst_plugins_cache.json
new/gst-plugins-good-1.28.5/docs/gst_plugins_cache.json
--- old/gst-plugins-good-1.28.4/docs/gst_plugins_cache.json 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/docs/gst_plugins_cache.json 2026-07-08
23:42:39.000000000 +0200
@@ -7682,7 +7682,7 @@
"long-name": "GdkPixbuf image decoder",
"pad-templates": {
"sink": {
- "caps":
"image/png:\nimage/x-icon:\napplication/x-navi-animation:\nimage/x-cmu-raster:\nimage/x-sun-raster:\nimage/x-pixmap:\nimage/tiff:\nimage/x-portable-anymap:\nimage/x-portable-bitmap:\nimage/x-portable-graymap:\nimage/x-portable-pixmap:\nimage/bmp:\nimage/x-bmp:\nimage/x-MS-bmp:\nimage/vnd.wap.wbmp:\nimage/x-bitmap:\nimage/x-tga:\nimage/x-pcx:\nimage/svg:\nimage/svg+xml:\n",
+ "caps":
"image/png:\nimage/x-icon:\napplication/x-navi-animation:\nimage/x-pixmap:\nimage/tiff:\nimage/x-portable-anymap:\nimage/x-portable-bitmap:\nimage/x-portable-graymap:\nimage/x-portable-pixmap:\nimage/bmp:\nimage/x-bmp:\nimage/x-MS-bmp:\nimage/vnd.wap.wbmp:\nimage/x-bitmap:\nimage/x-tga:\nimage/x-pcx:\nimage/svg:\nimage/svg+xml:\n",
"direction": "sink",
"presence": "always"
},
@@ -7692,7 +7692,7 @@
"presence": "always"
}
},
- "rank": "secondary"
+ "rank": "none"
},
"gdkpixbufoverlay": {
"author": "Tim-Philipp Müller <tim centricular net>",
@@ -8695,7 +8695,7 @@
"long-name": "MP4 Muxer",
"pad-templates": {
"audio_%%u": {
- "caps": "audio/mpeg:\n mpegversion: 1\n
layer: [ 1, 3 ]\n channels: [ 1, 2 ]\n rate: [ 1, 2147483647
]\naudio/mpeg:\n mpegversion: 4\n stream-format: raw\n channels: [ 1,
8 ]\n rate: [ 1, 2147483647 ]\naudio/x-ac3:\n channels: [ 1, 6
]\n rate: [ 1, 2147483647 ]\naudio/x-eac3:\n alignment:
iec61937\n parsed: true\n channels: [ 1, 16 ]\n rate: [
1, 2147483647 ]\naudio/x-alac:\n channels: [ 1, 2 ]\n rate: [
1, 2147483647 ]\naudio/x-opus:\nchannel-mapping-family: [ 0, 255 ]\n
channels: [ 1, 8 ]\n rate: [ 1, 2147483647 ]\n",
+ "caps": "audio/mpeg:\n mpegversion: 1\n
layer: [ 1, 3 ]\n channels: [ 1, 2 ]\n rate: [ 1, 2147483647
]\naudio/mpeg:\n mpegversion: 4\n stream-format: raw\n channels: [ 1,
8 ]\n rate: [ 1, 2147483647 ]\naudio/x-ac3:\n channels: [ 1, 6
]\n rate: [ 1, 2147483647 ]\naudio/x-eac3:\n alignment:
iec61937\n framed: true\n channels: [ 1, 16 ]\n rate: [
1, 2147483647 ]\naudio/x-alac:\n channels: [ 1, 2 ]\n rate: [
1, 2147483647 ]\naudio/x-opus:\nchannel-mapping-family: [ 0, 255 ]\n
channels: [ 1, 8 ]\n rate: [ 1, 2147483647 ]\n",
"direction": "sink",
"presence": "request",
"type": "GstQTMuxPad"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/ext/flac/gstflacenc.c
new/gst-plugins-good-1.28.5/ext/flac/gstflacenc.c
--- old/gst-plugins-good-1.28.4/ext/flac/gstflacenc.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/ext/flac/gstflacenc.c 2026-07-08
23:42:39.000000000 +0200
@@ -1035,24 +1035,24 @@
if (GST_AUDIO_INFO_CHANNELS (info) == 2
|| GST_AUDIO_INFO_CHANNELS (info) == 0) {
- DO_UPDATE (do_mid_side_stereo, mid_side, "mid_side_stereo");
- DO_UPDATE (loose_mid_side_stereo, loose_mid_side, "loose_mid_side");
+ DO_UPDATE (do_mid_side_stereo, mid_side, "mid-side-stereo");
+ DO_UPDATE (loose_mid_side_stereo, loose_mid_side, "loose-mid-side-stereo");
}
DO_UPDATE (blocksize, blocksize, "blocksize");
- DO_UPDATE (max_lpc_order, max_lpc_order, "max_lpc_order");
- DO_UPDATE (qlp_coeff_precision, qlp_coeff_precision, "qlp_coeff_precision");
+ DO_UPDATE (max_lpc_order, max_lpc_order, "max-lpc-order");
+ DO_UPDATE (qlp_coeff_precision, qlp_coeff_precision, "qlp-coeff-precision");
DO_UPDATE (do_qlp_coeff_prec_search, qlp_coeff_prec_search,
- "qlp_coeff_prec_search");
- DO_UPDATE (do_escape_coding, escape_coding, "escape_coding");
+ "qlp-coeff-prec-search");
+ DO_UPDATE (do_escape_coding, escape_coding, "escape-coding");
DO_UPDATE (do_exhaustive_model_search, exhaustive_model_search,
- "exhaustive_model_search");
+ "exhaustive-model-search");
DO_UPDATE (min_residual_partition_order, min_residual_partition_order,
- "min_residual_partition_order");
+ "min-residual-partition-order");
DO_UPDATE (max_residual_partition_order, max_residual_partition_order,
- "max_residual_partition_order");
+ "max-residual-partition-order");
DO_UPDATE (rice_parameter_search_dist, rice_parameter_search_dist,
- "rice_parameter_search_dist");
+ "rice-parameter-search-dist");
#undef DO_UPDATE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-good-1.28.4/ext/gdk_pixbuf/gstgdkpixbufdec.c
new/gst-plugins-good-1.28.5/ext/gdk_pixbuf/gstgdkpixbufdec.c
--- old/gst-plugins-good-1.28.4/ext/gdk_pixbuf/gstgdkpixbufdec.c
2026-06-12 14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/ext/gdk_pixbuf/gstgdkpixbufdec.c
2026-07-08 23:42:39.000000000 +0200
@@ -42,8 +42,6 @@
/*"image/gif; " disabled because we can't handle animated gifs */
"image/x-icon; "
"application/x-navi-animation; "
- "image/x-cmu-raster; "
- "image/x-sun-raster; "
"image/x-pixmap; "
"image/tiff; "
"image/x-portable-anymap; "
@@ -76,8 +74,7 @@
#define gst_gdk_pixbuf_dec_parent_class parent_class
G_DEFINE_TYPE (GstGdkPixbufDec, gst_gdk_pixbuf_dec, GST_TYPE_ELEMENT);
GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gdkpixbufdec, "gdkpixbufdec",
- GST_RANK_SECONDARY, GST_TYPE_GDK_PIXBUF_DEC,
- gdk_pixbuf_element_init (plugin));
+ GST_RANK_NONE, GST_TYPE_GDK_PIXBUF_DEC, gdk_pixbuf_element_init (plugin));
static gboolean
gst_gdk_pixbuf_dec_sink_setcaps (GstGdkPixbufDec * filter, GstCaps * caps)
@@ -293,6 +290,7 @@
gint width, height;
gint n_channels;
GstVideoFrame frame;
+ GstVideoFormat fmt;
pixbuf = gdk_pixbuf_loader_get_pixbuf (filter->pixbuf_loader);
if (pixbuf == NULL)
@@ -301,26 +299,26 @@
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
- if (GST_VIDEO_INFO_FORMAT (&filter->info) == GST_VIDEO_FORMAT_UNKNOWN) {
+ n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+ switch (n_channels) {
+ case 3:
+ fmt = GST_VIDEO_FORMAT_RGB;
+ break;
+ case 4:
+ fmt = GST_VIDEO_FORMAT_RGBA;
+ break;
+ default:
+ goto channels_not_supported;
+ }
+
+ if (GST_VIDEO_INFO_FORMAT (&filter->info) != fmt ||
+ GST_VIDEO_INFO_WIDTH (&filter->info) != width ||
+ GST_VIDEO_INFO_HEIGHT (&filter->info) != height) {
GstVideoInfo info;
- GstVideoFormat fmt;
GList *l;
GST_DEBUG ("Set size to %dx%d", width, height);
- n_channels = gdk_pixbuf_get_n_channels (pixbuf);
- switch (n_channels) {
- case 3:
- fmt = GST_VIDEO_FORMAT_RGB;
- break;
- case 4:
- fmt = GST_VIDEO_FORMAT_RGBA;
- break;
- default:
- goto channels_not_supported;
- }
-
-
gst_video_info_init (&info);
if (!gst_video_info_set_format (&info, fmt, width, height))
goto format_not_supported;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/ext/gdk_pixbuf/meson.build
new/gst-plugins-good-1.28.5/ext/gdk_pixbuf/meson.build
--- old/gst-plugins-good-1.28.4/ext/gdk_pixbuf/meson.build 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/ext/gdk_pixbuf/meson.build 2026-07-08
23:42:39.000000000 +0200
@@ -23,7 +23,7 @@
'gdkpixbuf': pathsep.join(doc_sources)
}
-gdkpixbuf_dep = dependency('gdk-pixbuf-2.0', version : '>=2.8.0', required :
get_option('gdk-pixbuf'))
+gdkpixbuf_dep = dependency('gdk-pixbuf-2.0', version : '>=2.32.1', required :
get_option('gdk-pixbuf'))
if gdkpixbuf_dep.found()
gstgdkpixbuf = library('gstgdkpixbuf',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/ext/libpng/gstpngdec.c
new/gst-plugins-good-1.28.5/ext/libpng/gstpngdec.c
--- old/gst-plugins-good-1.28.4/ext/libpng/gstpngdec.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/ext/libpng/gstpngdec.c 2026-07-08
23:42:39.000000000 +0200
@@ -344,7 +344,7 @@
}
gst_video_codec_state_unref (pngdec->output_state);
}
-#ifdef HAVE_LIBPNG_1_5
+#if PNG_LIBPNG_VER >= 10500
if ((pngdec->color_type & PNG_COLOR_MASK_COLOR)
&& !(pngdec->color_type & PNG_COLOR_MASK_PALETTE)
&& png_get_valid (pngdec->png, pngdec->info, PNG_INFO_iCCP)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/isomp4/atomsrecovery.c
new/gst-plugins-good-1.28.5/gst/isomp4/atomsrecovery.c
--- old/gst-plugins-good-1.28.4/gst/isomp4/atomsrecovery.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/isomp4/atomsrecovery.c 2026-07-08
23:42:39.000000000 +0200
@@ -283,6 +283,8 @@
if (!read_atom_header (moovrf->file, &fourcc, &size)) {
return FALSE;
}
+ if (size < 8)
+ return FALSE;
if (fourcc != FOURCC_ftyp) {
/* we might have a prefix here */
@@ -294,6 +296,8 @@
/* now read the ftyp */
if (!read_atom_header (moovrf->file, &fourcc, &size))
return FALSE;
+ if (size < 8)
+ return FALSE;
}
/* this has to be the ftyp */
@@ -315,12 +319,25 @@
/* check for sanity */
if (fourcc != FOURCC_mvhd)
return FALSE;
+ if (size < 8)
+ return FALSE;
moovrf->mvhd_size = size;
moovrf->mvhd_pos = ftell (moovrf->file) - 8;
+ guint8 version;
+ if (fread (&version, 1, 1, moovrf->file) != 1)
+ return FALSE;
+ if (version != 0) {
+ GST_WARNING ("Version %d mvhd not supported", version);
+ return FALSE;
+ }
+
+ if (size != 108)
+ return FALSE;
+
/* skip the remaining of the mvhd in the file */
- return fseek (moovrf->file, size - 8, SEEK_CUR) == 0;
+ return fseek (moovrf->file, size - 8 - 1, SEEK_CUR) == 0;
}
static gboolean
@@ -357,6 +374,8 @@
case FOURCC_ftyp:
case FOURCC_free:
case FOURCC_udta:
+ if (size < 8)
+ return FALSE;
if (fseek (file, size - 8, SEEK_CUR) != 0) {
goto file_seek_error;
}
@@ -486,6 +505,8 @@
return FALSE;
if (fourcc != expected_fourcc)
return FALSE;
+ if (size < 8)
+ return FALSE;
return (fseek (moovrf->file, size - 8, SEEK_CUR) == 0);
}
@@ -502,11 +523,24 @@
return FALSE;
if (fourcc != FOURCC_tkhd)
return FALSE;
+ if (size < 8)
+ return FALSE;
trakrd->tkhd_file_offset = ftell (moovrf->file) - 8;
- /* move 8 bytes forward to the trak_id pos */
- if (fseek (moovrf->file, 12, SEEK_CUR) != 0)
+ guint8 version;
+ if (fread (&version, 1, 1, moovrf->file) != 1)
+ return FALSE;
+ if (version != 0) {
+ GST_WARNING ("Version %d tkhd not supported", version);
+ return FALSE;
+ }
+
+ if (size != 92)
+ return FALSE;
+
+ /* move 12-1 bytes forward to the trak_id pos */
+ if (fseek (moovrf->file, 12 - 1, SEEK_CUR) != 0)
return FALSE;
if (fread (data, 1, 4, moovrf->file) != 4)
return FALSE;
@@ -530,6 +564,8 @@
return FALSE;
if (fourcc != FOURCC_stbl)
return FALSE;
+ if (size < 8)
+ return FALSE;
trakrd->stbl_file_offset = ftell (moovrf->file) - 8;
trakrd->stbl_size = size;
@@ -539,12 +575,17 @@
return FALSE;
if (fourcc != FOURCC_stsd)
return FALSE;
+ if (auxsize < 8)
+ return FALSE;
if (fseek (moovrf->file, auxsize - 8, SEEK_CUR) != 0)
return FALSE;
trakrd->stsd_size = auxsize;
trakrd->post_stsd_offset = ftell (moovrf->file);
+ if (trakrd->stbl_size < trakrd->post_stsd_offset - trakrd->stbl_file_offset)
+ return FALSE;
+
/* as this is the last atom we parse, we don't skip forward */
return TRUE;
@@ -556,11 +597,14 @@
guint32 size;
guint32 fourcc;
guint32 auxsize;
+ guint64 offset;
if (!read_atom_header (moovrf->file, &fourcc, &size))
return FALSE;
if (fourcc != FOURCC_minf)
return FALSE;
+ if (size < 8)
+ return FALSE;
trakrd->minf_file_offset = ftell (moovrf->file) - 8;
trakrd->minf_size = size;
@@ -571,17 +615,23 @@
if (fourcc != FOURCC_vmhd && fourcc != FOURCC_smhd && fourcc != FOURCC_hmhd
&&
fourcc != FOURCC_gmhd)
return FALSE;
+ if (auxsize < 8)
+ return FALSE;
if (fseek (moovrf->file, auxsize - 8, SEEK_CUR))
return FALSE;
/* skip a possible hdlr and the following dinf */
if (!read_atom_header (moovrf->file, &fourcc, &auxsize))
return FALSE;
+ if (auxsize < 8)
+ return FALSE;
if (fourcc == FOURCC_hdlr) {
if (fseek (moovrf->file, auxsize - 8, SEEK_CUR))
return FALSE;
if (!read_atom_header (moovrf->file, &fourcc, &auxsize))
return FALSE;
+ if (auxsize < 8)
+ return FALSE;
}
if (fourcc != FOURCC_dinf)
return FALSE;
@@ -592,6 +642,10 @@
if (!moov_recov_parse_stbl (moovrf, trakrd))
return FALSE;
+ offset = ftell (moovrf->file);
+ if (trakrd->minf_size < offset - trakrd->minf_file_offset)
+ return FALSE;
+
return TRUE;
}
@@ -607,11 +661,24 @@
return FALSE;
if (fourcc != FOURCC_mdhd)
return FALSE;
+ if (size < 8)
+ return FALSE;
trakrd->mdhd_file_offset = ftell (moovrf->file) - 8;
+ guint8 version;
+ if (fread (&version, 1, 1, moovrf->file) != 1)
+ return FALSE;
+ if (version != 0) {
+ GST_WARNING ("Version %d mdhd not supported", version);
+ return FALSE;
+ }
+
+ if (size != 32)
+ return FALSE;
+
/* get the timescale */
- if (fseek (moovrf->file, 12, SEEK_CUR) != 0)
+ if (fseek (moovrf->file, 12 - 1, SEEK_CUR) != 0)
return FALSE;
if (fread (data, 1, 4, moovrf->file) != 4)
return FALSE;
@@ -626,12 +693,15 @@
{
guint32 size;
guint32 fourcc;
+ guint64 offset;
/* make sure we are on a tkhd atom */
if (!read_atom_header (moovrf->file, &fourcc, &size))
return FALSE;
if (fourcc != FOURCC_mdia)
return FALSE;
+ if (size < 8)
+ return FALSE;
trakrd->mdia_file_offset = ftell (moovrf->file) - 8;
trakrd->mdia_size = size;
@@ -643,6 +713,11 @@
return FALSE;
if (!moov_recov_parse_minf (moovrf, trakrd))
return FALSE;
+
+ offset = ftell (moovrf->file);
+ if (trakrd->mdia_size < offset - trakrd->mdia_file_offset)
+ return FALSE;
+
return TRUE;
}
@@ -665,6 +740,8 @@
if (fourcc != FOURCC_trak) {
return FALSE;
}
+ if (size < 8)
+ return FALSE;
trakrd->trak_size = size;
/* now we should have a trak header 'tkhd' */
@@ -683,6 +760,9 @@
return FALSE;
trakrd->extra_atoms_offset = ftell (moovrf->file);
+ if (trakrd->trak_size < trakrd->extra_atoms_offset - offset)
+ return FALSE;
+
trakrd->extra_atoms_size = size - (trakrd->extra_atoms_offset - offset);
trakrd->file_offset = offset;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/isomp4/gstqtmuxmap.c
new/gst-plugins-good-1.28.5/gst/isomp4/gstqtmuxmap.c
--- old/gst-plugins-good-1.28.4/gst/isomp4/gstqtmuxmap.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/isomp4/gstqtmuxmap.c 2026-07-08
23:42:39.000000000 +0200
@@ -153,7 +153,7 @@
#define EAC3_CAPS \
"audio/x-eac3, " \
"alignment = (string) iec61937, " \
- "parsed = (boolean) true, " \
+ "framed = (boolean) true, " \
COMMON_AUDIO_CAPS (16, MAX)
#define AMR_CAPS \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/matroska/lzo.c
new/gst-plugins-good-1.28.5/gst/matroska/lzo.c
--- old/gst-plugins-good-1.28.4/gst/matroska/lzo.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/matroska/lzo.c 2026-07-08
23:42:39.000000000 +0200
@@ -18,29 +18,34 @@
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gst/gst.h>
-#include <stdlib.h>
+
+#include <limits.h>
+#include <stdint.h>
#include <string.h>
+
#include "lzo.h"
-/*! define if we may write up to 12 bytes beyond the output buffer */
-/* #define OUTBUF_PADDED 1 */
-/*! define if we may read up to 8 bytes beyond the input buffer */
-/* #define INBUF_PADDED 1 */
+/// Define if we may write up to 12 bytes beyond the output buffer.
+// #define OUTBUF_PADDED 1
+/// Define if we may read up to 8 bytes beyond the input buffer.
+// #define INBUF_PADDED 1
+
typedef struct LZOContext
{
- const guint8 *in, *in_end;
- guint8 *out_start, *out, *out_end;
+ const uint8_t *in, *in_end;
+ uint8_t *out_start, *out, *out_end;
int error;
} LZOContext;
/*
- * \brief read one byte from input buffer, avoiding overrun
- * \return byte read
+ * @brief Reads one byte from the input buffer, avoiding an overrun.
+ * @return byte read
*/
static inline int
get_byte (LZOContext * c)
@@ -58,45 +63,222 @@
#endif
/*
- * \brief decode a length value in the coding used by lzo
- * \param x previous byte value
- * \param mask bits used from x
- * \return decoded length value
+ * @brief Decodes a length value in the coding used by lzo.
+ * @param x previous byte value
+ * @param mask bits used from x
+ * @return decoded length value
*/
static inline int
get_len (LZOContext * c, int x, int mask)
{
int cnt = x & mask;
if (!cnt) {
- while (!(x = get_byte (c)))
+ while (!(x = get_byte (c))) {
+ if (cnt >= INT_MAX - 1000) {
+ c->error |= LZO_ERROR;
+ break;
+ }
cnt += 255;
+ }
cnt += mask + x;
}
return cnt;
}
-/*#define UNALIGNED_LOADSTORE */
-#define BUILTIN_MEMCPY
-#ifdef UNALIGNED_LOADSTORE
-#define COPY2(d, s) *(guint16 *)(d) = *(guint16 *)(s);
-#define COPY4(d, s) *(guint32 *)(d) = *(guint32 *)(s);
-#elif defined(BUILTIN_MEMCPY)
-#define COPY2(d, s) memcpy(d, s, 2);
-#define COPY4(d, s) memcpy(d, s, 4);
+#ifndef AV_RB16
+# define AV_RB16(x) \
+ ((((const uint8_t*)(x))[0] << 8) | \
+ ((const uint8_t*)(x))[1])
+#endif
+#ifndef AV_WB16
+# define AV_WB16(p, val) do { \
+ uint16_t d = (val); \
+ ((uint8_t*)(p))[1] = (d); \
+ ((uint8_t*)(p))[0] = (d)>>8; \
+ } while(0)
+#endif
+
+#ifndef AV_RL16
+# define AV_RL16(x) \
+ ((((const uint8_t*)(x))[1] << 8) | \
+ ((const uint8_t*)(x))[0])
+#endif
+#ifndef AV_WL16
+# define AV_WL16(p, val) do { \
+ uint16_t d = (val); \
+ ((uint8_t*)(p))[0] = (d); \
+ ((uint8_t*)(p))[1] = (d)>>8; \
+ } while(0)
+#endif
+
+#ifndef AV_RB32
+# define AV_RB32(x) \
+ (((uint32_t)((const uint8_t*)(x))[0] << 24) | \
+ (((const uint8_t*)(x))[1] << 16) | \
+ (((const uint8_t*)(x))[2] << 8) | \
+ ((const uint8_t*)(x))[3])
+#endif
+#ifndef AV_WB32
+# define AV_WB32(p, val) do { \
+ uint32_t d = (val); \
+ ((uint8_t*)(p))[3] = (d); \
+ ((uint8_t*)(p))[2] = (d)>>8; \
+ ((uint8_t*)(p))[1] = (d)>>16; \
+ ((uint8_t*)(p))[0] = (d)>>24; \
+ } while(0)
+#endif
+
+#ifndef AV_RL32
+# define AV_RL32(x) \
+ (((uint32_t)((const uint8_t*)(x))[3] << 24) | \
+ (((const uint8_t*)(x))[2] << 16) | \
+ (((const uint8_t*)(x))[1] << 8) | \
+ ((const uint8_t*)(x))[0])
+#endif
+#ifndef AV_WL32
+# define AV_WL32(p, val) do { \
+ uint32_t d = (val); \
+ ((uint8_t*)(p))[0] = (d); \
+ ((uint8_t*)(p))[1] = (d)>>8; \
+ ((uint8_t*)(p))[2] = (d)>>16; \
+ ((uint8_t*)(p))[3] = (d)>>24; \
+ } while(0)
+#endif
+
+#ifndef AV_RB64
+# define AV_RB64(x) \
+ (((uint64_t)((const uint8_t*)(x))[0] << 56) | \
+ ((uint64_t)((const uint8_t*)(x))[1] << 48) | \
+ ((uint64_t)((const uint8_t*)(x))[2] << 40) | \
+ ((uint64_t)((const uint8_t*)(x))[3] << 32) | \
+ ((uint64_t)((const uint8_t*)(x))[4] << 24) | \
+ ((uint64_t)((const uint8_t*)(x))[5] << 16) | \
+ ((uint64_t)((const uint8_t*)(x))[6] << 8) | \
+ (uint64_t)((const uint8_t*)(x))[7])
+#endif
+#ifndef AV_WB64
+# define AV_WB64(p, val) do { \
+ uint64_t d = (val); \
+ ((uint8_t*)(p))[7] = (d); \
+ ((uint8_t*)(p))[6] = (d)>>8; \
+ ((uint8_t*)(p))[5] = (d)>>16; \
+ ((uint8_t*)(p))[4] = (d)>>24; \
+ ((uint8_t*)(p))[3] = (d)>>32; \
+ ((uint8_t*)(p))[2] = (d)>>40; \
+ ((uint8_t*)(p))[1] = (d)>>48; \
+ ((uint8_t*)(p))[0] = (d)>>56; \
+ } while(0)
+#endif
+
+#ifndef AV_RL64
+# define AV_RL64(x) \
+ (((uint64_t)((const uint8_t*)(x))[7] << 56) | \
+ ((uint64_t)((const uint8_t*)(x))[6] << 48) | \
+ ((uint64_t)((const uint8_t*)(x))[5] << 40) | \
+ ((uint64_t)((const uint8_t*)(x))[4] << 32) | \
+ ((uint64_t)((const uint8_t*)(x))[3] << 24) | \
+ ((uint64_t)((const uint8_t*)(x))[2] << 16) | \
+ ((uint64_t)((const uint8_t*)(x))[1] << 8) | \
+ (uint64_t)((const uint8_t*)(x))[0])
+#endif
+#ifndef AV_WL64
+# define AV_WL64(p, val) do { \
+ uint64_t d = (val); \
+ ((uint8_t*)(p))[0] = (d); \
+ ((uint8_t*)(p))[1] = (d)>>8; \
+ ((uint8_t*)(p))[2] = (d)>>16; \
+ ((uint8_t*)(p))[3] = (d)>>24; \
+ ((uint8_t*)(p))[4] = (d)>>32; \
+ ((uint8_t*)(p))[5] = (d)>>40; \
+ ((uint8_t*)(p))[6] = (d)>>48; \
+ ((uint8_t*)(p))[7] = (d)>>56; \
+ } while(0)
+#endif
+
+#ifndef AV_RB24
+# define AV_RB24(x) \
+ ((((const uint8_t*)(x))[0] << 16) | \
+ (((const uint8_t*)(x))[1] << 8) | \
+ ((const uint8_t*)(x))[2])
+#endif
+#ifndef AV_WB24
+# define AV_WB24(p, d) do { \
+ ((uint8_t*)(p))[2] = (d); \
+ ((uint8_t*)(p))[1] = (d)>>8; \
+ ((uint8_t*)(p))[0] = (d)>>16; \
+ } while(0)
+#endif
+
+#ifndef AV_RL24
+# define AV_RL24(x) \
+ ((((const uint8_t*)(x))[2] << 16) | \
+ (((const uint8_t*)(x))[1] << 8) | \
+ ((const uint8_t*)(x))[0])
+#endif
+#ifndef AV_WL24
+# define AV_WL24(p, d) do { \
+ ((uint8_t*)(p))[0] = (d); \
+ ((uint8_t*)(p))[1] = (d)>>8; \
+ ((uint8_t*)(p))[2] = (d)>>16; \
+ } while(0)
+#endif
+
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+# define AV_RN(s, p) AV_RB##s(p)
+# define AV_WN(s, p, v) AV_WB##s(p, v)
#else
-#define COPY2(d, s) (d)[0] = (s)[0]; (d)[1] = (s)[1];
-#define COPY4(d, s) (d)[0] = (s)[0]; (d)[1] = (s)[1]; (d)[2] = (s)[2]; (d)[3]
= (s)[3];
+# define AV_RN(s, p) AV_RL##s(p)
+# define AV_WN(s, p, v) AV_WL##s(p, v)
+#endif
+
+#ifndef AV_RN16
+# define AV_RN16(p) AV_RN(16, p)
+#endif
+
+#ifndef AV_RN32
+# define AV_RN32(p) AV_RN(32, p)
+#endif
+
+#ifndef AV_RN64
+# define AV_RN64(p) AV_RN(64, p)
+#endif
+
+#ifndef AV_WN16
+# define AV_WN16(p, v) AV_WN(16, p, v)
+#endif
+
+#ifndef AV_WN32
+# define AV_WN32(p, v) AV_WN(32, p, v)
+#endif
+
+#ifndef AV_WN64
+# define AV_WN64(p, v) AV_WN(64, p, v)
+#endif
+
+#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s));
+
+#ifndef AV_COPY16U
+# define AV_COPY16U(d, s) AV_COPYU(16, d, s)
+#endif
+
+#ifndef AV_COPY32U
+# define AV_COPY32U(d, s) AV_COPYU(32, d, s)
+#endif
+
+#ifndef AV_COPY64U
+# define AV_COPY64U(d, s) AV_COPYU(64, d, s)
#endif
/*
- * \brief copy bytes from input to output buffer with checking
- * \param cnt number of bytes to copy, must be >= 0
+ * @brief Copies bytes from input to output buffer with checking.
+ * @param cnt number of bytes to copy, must be >= 0
*/
static inline void
copy (LZOContext * c, int cnt)
{
- register const guint8 *src = c->in;
- register guint8 *dst = c->out;
+ register const uint8_t *src = c->in;
+ register uint8_t *dst = c->out;
+ g_assert (cnt >= 0);
if (cnt > c->in_end - src) {
cnt = MAX (c->in_end - src, 0);
c->error |= LZO_INPUT_DEPLETED;
@@ -106,7 +288,7 @@
c->error |= LZO_OUTPUT_FULL;
}
#if defined(INBUF_PADDED) && defined(OUTBUF_PADDED)
- COPY4 (dst, src);
+ COPY32U (dst, src);
src += 4;
dst += 4;
cnt -= 4;
@@ -117,48 +299,112 @@
c->out = dst + cnt;
}
-/*
- * \brief copy previously decoded bytes to current position
- * \param back how many bytes back we start
- * \param cnt number of bytes to copy, must be >= 0
- *
- * cnt > back is valid, this will copy the bytes we just copied,
- * thus creating a repeating pattern with a period length of back.
- */
-static inline void
-copy_backptr (LZOContext * c, int back, int cnt)
+static void
+fill16 (uint8_t * dst, int len)
{
- register const guint8 *src = &c->out[-back];
- register guint8 *dst = c->out;
- if (src < c->out_start || src > dst) {
- c->error |= LZO_INVALID_BACKPTR;
- return;
+ uint32_t v = AV_RN16 (dst - 2);
+
+ v |= v << 16;
+
+ while (len >= 4) {
+ AV_WN32 (dst, v);
+ dst += 4;
+ len -= 4;
}
- if (cnt > c->out_end - dst) {
- cnt = MAX (c->out_end - dst, 0);
- c->error |= LZO_OUTPUT_FULL;
+
+ while (len--) {
+ *dst = dst[-2];
+ dst++;
}
+}
+
+static void
+fill24 (uint8_t * dst, int len)
+{
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ uint32_t v = AV_RB24 (dst - 3);
+ uint32_t a = v << 8 | v >> 16;
+ uint32_t b = v << 16 | v >> 8;
+ uint32_t c = v << 24 | v;
+#else
+ uint32_t v = AV_RL24 (dst - 3);
+ uint32_t a = v | v << 24;
+ uint32_t b = v >> 8 | v << 16;
+ uint32_t c = v >> 16 | v << 8;
+#endif
+
+ while (len >= 12) {
+ AV_WN32 (dst, a);
+ AV_WN32 (dst + 4, b);
+ AV_WN32 (dst + 8, c);
+ dst += 12;
+ len -= 12;
+ }
+
+ if (len >= 4) {
+ AV_WN32 (dst, a);
+ dst += 4;
+ len -= 4;
+ }
+
+ if (len >= 4) {
+ AV_WN32 (dst, b);
+ dst += 4;
+ len -= 4;
+ }
+
+ while (len--) {
+ *dst = dst[-3];
+ dst++;
+ }
+}
+
+static void
+fill32 (uint8_t * dst, int len)
+{
+ uint32_t v = AV_RN32 (dst - 4);
+
+#if GLIB_SIZEOF_VOID_P >= 8
+ uint64_t v2 = v + ((uint64_t) v << 32);
+ while (len >= 32) {
+ AV_WN64 (dst, v2);
+ AV_WN64 (dst + 8, v2);
+ AV_WN64 (dst + 16, v2);
+ AV_WN64 (dst + 24, v2);
+ dst += 32;
+ len -= 32;
+ }
+#endif
+
+ while (len >= 4) {
+ AV_WN32 (dst, v);
+ dst += 4;
+ len -= 4;
+ }
+
+ while (len--) {
+ *dst = dst[-4];
+ dst++;
+ }
+}
+
+static void
+av_memcpy_backptr (uint8_t * dst, int back, int cnt)
+{
+ const uint8_t *src = &dst[-back];
+ if (!back)
+ return;
+
if (back == 1) {
memset (dst, *src, cnt);
- dst += cnt;
+ } else if (back == 2) {
+ fill16 (dst, cnt);
+ } else if (back == 3) {
+ fill24 (dst, cnt);
+ } else if (back == 4) {
+ fill32 (dst, cnt);
} else {
-#ifdef OUTBUF_PADDED
- COPY2 (dst, src);
- COPY2 (dst + 2, src + 2);
- src += 4;
- dst += 4;
- cnt -= 4;
- if (cnt > 0) {
- COPY2 (dst, src);
- COPY2 (dst + 2, src + 2);
- COPY2 (dst + 4, src + 4);
- COPY2 (dst + 6, src + 6);
- src += 8;
- dst += 8;
- cnt -= 8;
- }
-#endif
- if (cnt > 0) {
+ if (cnt >= 16) {
int blocklen = back;
while (cnt > blocklen) {
memcpy (dst, src, blocklen);
@@ -167,33 +413,75 @@
blocklen <<= 1;
}
memcpy (dst, src, cnt);
+ return;
}
- dst += cnt;
+ if (cnt >= 8) {
+ AV_COPY32U (dst, src);
+ AV_COPY32U (dst + 4, src + 4);
+ src += 8;
+ dst += 8;
+ cnt -= 8;
+ }
+ if (cnt >= 4) {
+ AV_COPY32U (dst, src);
+ src += 4;
+ dst += 4;
+ cnt -= 4;
+ }
+ if (cnt >= 2) {
+ AV_COPY16U (dst, src);
+ src += 2;
+ dst += 2;
+ cnt -= 2;
+ }
+ if (cnt)
+ *dst = *src;
}
- c->out = dst;
}
/*
- * \brief decode LZO 1x compressed data
- * \param out output buffer
- * \param outlen size of output buffer, number of bytes left are returned here
- * \param in input buffer
- * \param inlen size of input buffer, number of bytes left are returned here
- * \return 0 on success, otherwise error flags, see lzo.h
+ * @brief Copies previously decoded bytes to current position.
+ * @param back how many bytes back we start, must be > 0
+ * @param cnt number of bytes to copy, must be > 0
*
- * make sure all buffers are appropriately padded, in must provide
- * LZO_INPUT_PADDING, out must provide LZO_OUTPUT_PADDING additional bytes
+ * cnt > back is valid, this will copy the bytes we just copied,
+ * thus creating a repeating pattern with a period length of back.
*/
+static inline void
+copy_backptr (LZOContext * c, int back, int cnt)
+{
+ register uint8_t *dst = c->out;
+ g_assert (cnt > 0);
+ if (dst - c->out_start < back) {
+ c->error |= LZO_INVALID_BACKPTR;
+ return;
+ }
+ if (cnt > c->out_end - dst) {
+ cnt = MAX (c->out_end - dst, 0);
+ c->error |= LZO_OUTPUT_FULL;
+ }
+ av_memcpy_backptr (dst, back, cnt);
+ c->out = dst + cnt;
+}
+
int
lzo1x_decode (void *out, int *outlen, const void *in, int *inlen)
{
int state = 0;
int x;
LZOContext c;
+ if (*outlen <= 0 || *inlen <= 0) {
+ int res = 0;
+ if (*outlen <= 0)
+ res |= LZO_OUTPUT_FULL;
+ if (*inlen <= 0)
+ res |= LZO_INPUT_DEPLETED;
+ return res;
+ }
c.in = in;
- c.in_end = (const guint8 *) in + *inlen;
+ c.in_end = (const uint8_t *) in + *inlen;
c.out = c.out_start = out;
- c.out_end = (guint8 *) out + *outlen;
+ c.out_end = (uint8_t *) out + *outlen;
c.error = 0;
x = GETB (c);
if (x > 17) {
@@ -248,45 +536,3 @@
*outlen = c.out_end - c.out;
return c.error;
}
-
-#ifdef TEST
-#include <stdio.h>
-#include <lzo/lzo1x.h>
-#include "log.h"
-#define MAXSZ (10*1024*1024)
-int
-main (int argc, char *argv[])
-{
- FILE *in = fopen (argv[1], "rb");
- guint8 *orig = av_malloc (MAXSZ + 16);
- guint8 *comp = av_malloc (2 * MAXSZ + 16);
- guint8 *decomp = av_malloc (MAXSZ + 16);
- gsize s = fread (orig, 1, MAXSZ, in);
- lzo_uint clen = 0;
- long tmp[LZO1X_MEM_COMPRESS];
- int inlen, outlen;
- int i;
- av_log_level = AV_LOG_DEBUG;
- lzo1x_999_compress (orig, s, comp, &clen, tmp);
- for (i = 0; i < 300; i++) {
- START_TIMER inlen = clen;
- outlen = MAXSZ;
-#ifdef LIBLZO
- if (lzo1x_decompress_safe (comp, inlen, decomp, &outlen, NULL))
-#elif defined(LIBLZO_UNSAFE)
- if (lzo1x_decompress (comp, inlen, decomp, &outlen, NULL))
-#else
- if (lzo1x_decode (decomp, &outlen, comp, &inlen))
-#endif
- av_log (NULL, AV_LOG_ERROR, "decompression error\n");
- STOP_TIMER ("lzod")
- }
- if (memcmp (orig, decomp, s))
- av_log (NULL, AV_LOG_ERROR, "decompression incorrect\n");
- else
- av_log (NULL, AV_LOG_ERROR, "decompression ok\n");
-
- fclose (in);
- return 0;
-}
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/matroska/lzo.h
new/gst-plugins-good-1.28.5/gst/matroska/lzo.h
--- old/gst-plugins-good-1.28.4/gst/matroska/lzo.h 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/matroska/lzo.h 2026-07-08
23:42:39.000000000 +0200
@@ -19,17 +19,48 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef FFMPEG_LZO_H
-#define FFMPEG_LZO_H
+#ifndef AVUTIL_LZO_H
+#define AVUTIL_LZO_H
-#define LZO_INPUT_DEPLETED 1
-#define LZO_OUTPUT_FULL 2
+/*
+ * @defgroup lavu_lzo LZO
+ * @ingroup lavu_crypto
+ *
+ * @{
+ */
+
+#include <stdint.h>
+
+/* @name Error flags returned by av_lzo1x_decode
+ * @{ */
+/// end of the input buffer reached before decoding finished
+#define LZO_INPUT_DEPLETED 1
+/// decoded data did not fit into output buffer
+#define LZO_OUTPUT_FULL 2
+/// a reference to previously decoded data was wrong
#define LZO_INVALID_BACKPTR 4
-#define LZO_ERROR 8
+/// a non-specific error in the compressed bitstream
+#define LZO_ERROR 8
+/* @} */
-#define LZO_INPUT_PADDING 8
+#define LZO_INPUT_PADDING 8
#define LZO_OUTPUT_PADDING 12
+/*
+ * @brief Decodes LZO 1x compressed data.
+ * @param out output buffer
+ * @param outlen size of output buffer, number of bytes left are returned here
+ * @param in input buffer
+ * @param inlen size of input buffer, number of bytes left are returned here
+ * @return 0 on success, otherwise a combination of the error flags above
+ *
+ * Make sure all buffers are appropriately padded, in must provide
+ * LZO_INPUT_PADDING, out must provide LZO_OUTPUT_PADDING additional bytes.
+ */
int lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
-#endif /* FFMPEG_LZO_H */
+/*
+ * @}
+ */
+
+#endif /* AVUTIL_LZO_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-good-1.28.4/gst/matroska/matroska-read-common.c
new/gst-plugins-good-1.28.5/gst/matroska/matroska-read-common.c
--- old/gst-plugins-good-1.28.4/gst/matroska/matroska-read-common.c
2026-06-12 14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/matroska/matroska-read-common.c
2026-07-08 23:42:39.000000000 +0200
@@ -1609,14 +1609,14 @@
}
ret = GST_FLOW_OK;
} else {
- GST_ELEMENT_ERROR (common, STREAM, DEMUX, (NULL),
- ("Demuxer version (2) is too old to read %s version %d",
+ GST_ELEMENT_ERROR (GST_OBJECT_PARENT (common->sinkpad), STREAM, DEMUX,
+ (NULL), ("Demuxer version (2) is too old to read %s version %d",
GST_STR_NULL (doctype), version));
ret = GST_FLOW_ERROR;
}
} else {
- GST_ELEMENT_ERROR (common, STREAM, WRONG_TYPE, (NULL),
- ("Input is not a matroska stream (doctype=%s)", doctype));
+ GST_ELEMENT_ERROR (GST_OBJECT_PARENT (common->sinkpad), STREAM, WRONG_TYPE,
+ (NULL), ("Input is not a matroska stream (doctype=%s)", doctype));
ret = GST_FLOW_ERROR;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/rtp/gstrtpceltdepay.c
new/gst-plugins-good-1.28.5/gst/rtp/gstrtpceltdepay.c
--- old/gst-plugins-good-1.28.4/gst/rtp/gstrtpceltdepay.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/rtp/gstrtpceltdepay.c 2026-07-08
23:42:39.000000000 +0200
@@ -71,6 +71,8 @@
GstRTPBuffer * rtp);
static gboolean gst_rtp_celt_depay_setcaps (GstRTPBaseDepayload * depayload,
GstCaps * caps);
+static GstStateChangeReturn gst_rtp_celt_depay_change_state (GstElement *
+ element, GstStateChange transition);
#define gst_rtp_celt_depay_parent_class parent_class
G_DEFINE_TYPE (GstRtpCELTDepay, gst_rtp_celt_depay,
@@ -99,6 +101,8 @@
"Extracts CELT audio from RTP packets",
"Wim Taymans <[email protected]>");
+ gstelement_class->change_state = gst_rtp_celt_depay_change_state;
+
gstrtpbasedepayload_class->process_rtp_packet = gst_rtp_celt_depay_process;
gstrtpbasedepayload_class->set_caps = gst_rtp_celt_depay_setcaps;
}
@@ -108,16 +112,22 @@
{
}
+#if 0
/* len 4 bytes LE,
* vendor string (len bytes),
* user_len 4 (0) bytes LE
*/
static const gchar gst_rtp_celt_comment[] =
"\045\0\0\0Depayloaded with GStreamer celtdepay\0\0\0\0";
+#endif
static gboolean
gst_rtp_celt_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
{
+ // See comment below
+ return FALSE;
+
+#if 0
GstStructure *structure;
GstRtpCELTDepay *rtpceltdepay;
gint clock_rate, nb_channels = 0, frame_size = 0;
@@ -194,11 +204,29 @@
GST_ERROR_OBJECT (depayload, "no clock-rate specified");
return FALSE;
}
+#endif
}
static GstBuffer *
gst_rtp_celt_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer *
rtp)
{
+ /* There is no plausible reason this code should ever be executed in 2026
+ * seeing that this was an experimental audio codec that never really gained
+ * adoption and was superseded by (and included in) Opus more than a decade
+ * ago. There are no decoders or encoders in GStreamer for this, and the
+ * RTP mapping RFC never made it out of draft state either.
+ *
+ * We simply return here as defensive measure.
+ *
+ * We post an error message in the state change function, so this processing
+ * function should never be reached, we just ifdef the code out for clarity.
+ *
+ * If anyone actually does have a legitimate need for this and can provide
+ * sample streams, we will happily implement a depayloader in Rust.
+ */
+ return NULL;
+
+#if 0
GstBuffer *outbuf = NULL;
guint8 *payload;
guint offset, pos, payload_len, total_size, size;
@@ -268,4 +296,32 @@
}
return NULL;
+#endif
+}
+
+static GstStateChangeReturn
+gst_rtp_celt_depay_change_state (GstElement * element,
+ GstStateChange transition)
+{
+ GstStateChangeReturn ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ GST_ELEMENT_ERROR (element, STREAM, DECODE,
+ ("This element should not be used."),
+ ("Please report an issue if you encounter this message."));
+ return GST_STATE_CHANGE_FAILURE;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+ return ret;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/rtp/gstrtpjpegdepay.c
new/gst-plugins-good-1.28.5/gst/rtp/gstrtpjpegdepay.c
--- old/gst-plugins-good-1.28.4/gst/rtp/gstrtpjpegdepay.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/rtp/gstrtpjpegdepay.c 2026-07-08
23:42:39.000000000 +0200
@@ -505,7 +505,8 @@
gint Q;
guint type, width, height;
guint16 dri, precision, length;
- guint8 *qtable;
+ guint8 *qtable = NULL;
+ gsize qtable_len = 0;
rtpjpegdepay = GST_RTP_JPEG_DEPAY (depayload);
@@ -611,10 +612,13 @@
if (length > payload_len)
goto empty_packet;
- if (length > 0)
+ if (length > 0) {
qtable = payload;
- else
+ qtable_len = length;
+ } else {
qtable = rtpjpegdepay->qtables[Q];
+ qtable_len = 128;
+ }
payload += length;
header_len += length;
@@ -652,6 +656,7 @@
if (Q < 128) {
/* no quant table, see if we have one cached */
qtable = rtpjpegdepay->qtables[Q];
+ qtable_len = 128;
if (!qtable) {
GST_DEBUG_OBJECT (rtpjpegdepay, "making Q %d table", Q);
/* make and cache the table */
@@ -674,6 +679,10 @@
if (!qtable)
goto no_qtable;
+ if (((precision & 1) ? 128 : 64) + ((precision & 2) ? 128 : 64) !=
+ qtable_len)
+ goto wrong_qtable;
+
/* max header length, should be big enough */
outbuf = gst_buffer_new_and_alloc (1000);
gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
@@ -756,6 +765,12 @@
gst_rtp_base_depayload_dropped (depayload);
return NULL;
}
+wrong_qtable:
+ {
+ GST_WARNING_OBJECT (rtpjpegdepay, "wrong qtable for precision");
+ gst_rtp_base_depayload_dropped (depayload);
+ return NULL;
+ }
invalid_packet:
{
GST_WARNING_OBJECT (rtpjpegdepay, "invalid packet");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/rtp/gstrtpsbcdepay.c
new/gst-plugins-good-1.28.5/gst/rtp/gstrtpsbcdepay.c
--- old/gst-plugins-good-1.28.4/gst/rtp/gstrtpsbcdepay.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/rtp/gstrtpsbcdepay.c 2026-07-08
23:42:39.000000000 +0200
@@ -303,6 +303,8 @@
payload = gst_rtp_buffer_get_payload (rtp);
payload_len = gst_rtp_buffer_get_payload_len (rtp);
+ if (payload_len < 1)
+ goto bad_packet;
fragment = payload[0] & 0x80;
start = payload[0] & 0x40;
@@ -331,19 +333,26 @@
}
gst_adapter_push (depay->adapter, data);
+ data = NULL;
if (last) {
- gint framelen, samples;
- guint8 header[4];
-
- data = gst_adapter_take_buffer (depay->adapter,
- gst_adapter_available (depay->adapter));
- gst_rtp_drop_non_audio_meta (depay, data);
-
- if (gst_buffer_extract (data, 0, &header, 4) != 4 ||
- gst_rtp_sbc_depay_get_params (depay, header,
- payload_len, &framelen, &samples) < 0) {
- gst_buffer_unref (data);
+ if (gst_adapter_available (depay->adapter)) {
+ gint framelen;
+ guint8 header[4];
+
+ data = gst_adapter_take_buffer (depay->adapter,
+ gst_adapter_available (depay->adapter));
+ gst_rtp_drop_non_audio_meta (depay, data);
+
+ if (gst_buffer_extract (data, 0, &header, 4) != 4 ||
+ gst_rtp_sbc_depay_get_params (depay, header,
+ payload_len, &framelen, &samples) < 0) {
+ gst_buffer_unref (data);
+ data = NULL;
+ goto bad_packet;
+ }
+ } else {
+ data = NULL;
goto bad_packet;
}
} else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/shapewipe/gstshapewipe.c
new/gst-plugins-good-1.28.5/gst/shapewipe/gstshapewipe.c
--- old/gst-plugins-good-1.28.4/gst/shapewipe/gstshapewipe.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/shapewipe/gstshapewipe.c 2026-07-08
23:42:39.000000000 +0200
@@ -926,6 +926,7 @@
shutdown:
{
GST_DEBUG_OBJECT (self, "Shutting down");
+ g_mutex_unlock (&self->mask_mutex);
gst_buffer_unref (buffer);
return GST_FLOW_FLUSHING;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst/wavparse/gstwavparse.c
new/gst-plugins-good-1.28.5/gst/wavparse/gstwavparse.c
--- old/gst-plugins-good-1.28.4/gst/wavparse/gstwavparse.c 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst/wavparse/gstwavparse.c 2026-07-08
23:42:39.000000000 +0200
@@ -1614,6 +1614,9 @@
if (wav->streaming) {
const guint8 *data = NULL;
+ if (!gst_wavparse_peek_chunk (wav, &tag, &size)) {
+ goto exit;
+ }
gst_adapter_flush (wav->adapter, 12);
wav->offset += 12;
data = gst_adapter_map (wav->adapter, data_size);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/gst-plugins-good.doap
new/gst-plugins-good-1.28.5/gst-plugins-good.doap
--- old/gst-plugins-good-1.28.4/gst-plugins-good.doap 2026-06-12
14:19:43.000000000 +0200
+++ new/gst-plugins-good-1.28.5/gst-plugins-good.doap 2026-07-08
23:42:39.000000000 +0200
@@ -34,6 +34,16 @@
<release>
<Version>
+ <revision>1.28.5</revision>
+ <branch>1.28</branch>
+ <name></name>
+ <created>2026-07-08</created>
+ <file-release
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.28.5.tar.xz"
/>
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.28.4</revision>
<branch>1.28</branch>
<name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-good-1.28.4/meson.build
new/gst-plugins-good-1.28.5/meson.build
--- old/gst-plugins-good-1.28.4/meson.build 2026-06-12 14:19:43.000000000
+0200
+++ new/gst-plugins-good-1.28.5/meson.build 2026-07-08 23:42:39.000000000
+0200
@@ -1,5 +1,5 @@
project('gst-plugins-good', 'c',
- version : '1.28.4',
+ version : '1.28.5',
meson_version : '>= 1.4',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized',
++++++ gst-plugins-good.obsinfo ++++++
--- /var/tmp/diff_new_pack.T7vOoB/_old 2026-07-12 16:21:33.564822713 +0200
+++ /var/tmp/diff_new_pack.T7vOoB/_new 2026-07-12 16:21:33.588823522 +0200
@@ -1,5 +1,5 @@
name: gst-plugins-good
-version: 1.28.4
-mtime: 1781266783
-commit: b46f881eaa8126eddfd21b5ae5512f8d4ff36255
+version: 1.28.5
+mtime: 1783546959
+commit: 727ceb91886862d200f423baf36cde2bb7ce5b4d