Projects
home:zaitor:branches:Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Difference Between Revision 4 and
Essentials
/
gstreamer-plugins-bad-codecs
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,12 @@ ------------------------------------------------------------------- +Thu Sep 10 21:13:15 UTC 2026 - Bjørn Lie <zaitor@opensuse.org> + +- Update to versiom 1.28.7 +- Stop building rtmp support, drop pkgconfig(librtmp) + BuildRequires. The new rtmp2 plugin available in gst-bad is newer + and better. + +------------------------------------------------------------------- Tue Jul 14 09:57:29 UTC 2026 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.28.5
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.28.0 Name: gstreamer-plugins-bad-codecs -Version: 1.28.5 +Version: 1.28.7 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later @@ -35,7 +35,6 @@ BuildRequires: pkgconfig(gstreamer-codecparsers-1.0) >= %{_version} BuildRequires: pkgconfig(libde265) >= 0.9 BuildRequires: pkgconfig(libopenaptx) -BuildRequires: pkgconfig(librtmp) BuildRequires: pkgconfig(x265) Provides: gstreamer-plugins-bad-orig-addon = %{version} @@ -63,7 +62,6 @@ -Dgpl=enabled \ -Dorc=enabled \ -Dfaac=enabled \ - -Drtmp=enabled \ -Dx265=enabled \ -Dopenaptx=enabled \ %{nil} @@ -80,7 +78,6 @@ %{_libdir}/gstreamer-%{gst_branch}/libgstde265.so %{_libdir}/gstreamer-%{gst_branch}/libgstfaac.so %{_libdir}/gstreamer-%{gst_branch}/libgstopenaptx.so -%{_libdir}/gstreamer-%{gst_branch}/libgstrtmp.so %{_libdir}/gstreamer-%{gst_branch}/libgstx265.so %changelog
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ChangeLog -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ChangeLog
Changed
@@ -1,3 +1,572 @@ +=== release 1.28.7 === + +2026-09-07 20:11:13 +0100 Tim-Philipp Müller <tim@centricular.com> + + * gst-plugins-bad.doap: + * meson.build: + Release 1.28.7 + +2026-09-02 17:52:16 +0200 Stéphane Cerveau <scerveau@igalia.com> + + * ext/vulkan/vkav1dec.c: + * ext/vulkan/vkvp9dec.c: + vulkan(av1,vp9)dec: set access NONE at buffer pool allocation parameters + Fixing VUID 03915 as the decoding queue might not have transfer + capabilities, see anv driver. + See #7165 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12417> + +2026-09-03 14:28:18 -0400 Thibault Saunier <tsaunier@igalia.com> + + * tests/validate/autovideoconvert/renegotiate.validatetest: + * tests/validate/codectimestamper/h264_propagate_caps.validatetest: + * tests/validate/opencv/cvtracker.validatetest: + * tests/validate/testsrcbin/caps_spec.validatetest: + * tests/validate/vtenc/vtenc_h264.validatetest: + * tests/validate/vtenc/vtenc_h264_b_frames.validatetest: + * tests/validate/vtenc/vtenc_h265.validatetest: + * tests/validate/vtenc/vtenc_h265_b_frames.validatetest: + validate: Reindent all validatetest files + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12343> + +2026-03-03 15:02:23 +0000 Thibault Saunier <tsaunier@igalia.com> + + * tests/validate/autovideoconvert/renegotiate.validatetest: + * tests/validate/codectimestamper/h264_propagate_caps.validatetest: + * tests/validate/opencv/cvtracker.validatetest: + * tests/validate/testsrcbin/caps_spec.validatetest: + * tests/validate/vtenc/vtenc_h264.validatetest: + * tests/validate/vtenc/vtenc_h264_b_frames.validatetest: + * tests/validate/vtenc/vtenc_h265.validatetest: + * tests/validate/vtenc/vtenc_h265_b_frames.validatetest: + validateflow: auto-derive directories from test file path + Allow validateflow configs to be written as proper nested structures + instead of requiring the $(validateflow) variable expansion: + configs = { + validateflow, pad=sink:sink, buffers-checksum=true, + } + instead of: + configs = { + "$(validateflow), pad=sink:sink, buffers-checksum=true", + } + When expectations-dir or actual-results-dir are not explicitly set, + validate_flow_override_new() now derives them from the __filename__ + metadata field (already attached to each config structure by the + parser). This mirrors the path computation done in + gst_validate_structure_set_variables_from_struct_file(). + The $(validateflow) variable and the old string syntax remain fully + supported for backward compatibility. + Port all existing .validatetest files to the new syntax. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12343> + +2026-08-08 12:12:09 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: restore gap sending + Gap logic was ported from tsdemux in commit 1b762ba0129610f742b9855e435bce5444a4d553. + However, gap_ref_buffers was never updated, so it remains 0 and would therefore + prevent sending gap events on a stream once it sent a single buffer. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12400> + +2026-09-01 20:10:33 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/hip/gsthipstream.cpp: + hipstream: Return actual device_id instead of vendor from device_id getter + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12394> + +2026-09-01 14:31:58 +0200 Edward Hervey <edward@centricular.com> + + * gst/pnm/gstpnmutils.c: + * tests/check/elements/pnm.c: + pnmdec: Protect against bogus dimensions headers + Fixes https://oss-fuzz.com/testcase-detail/4567215417131008 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12390> + +2026-04-16 12:33:55 +0200 Pablo García <pgarcia@fluendo.com> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: Add 'stream-format' field for AC-4 caps + According to Annex G of the AC-4 spec, the syncframe is an optional + layer for encapsulating AC-4 raw frames. This demuxer always outputs + syncframes, but the AC-4 parser/decoder needs to know. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12371> + +2026-08-29 21:42:48 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp: + * gst-libs/gst/d3d12/gstd3d12stagingmemory.h: + d3d12: Fix copy-paste typos + Fix copy-paste typos in unpack code and staging memory header + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12368> + +2026-07-04 18:02:56 +0200 Antonio Rojas <arojas@archlinux.org> + + * ext/opencv/gstcameracalibrate.cpp: + * ext/opencv/gstfaceblur.h: + * ext/opencv/gstfacedetect.h: + * ext/opencv/gsthanddetect.h: + * ext/opencv/gstsegmentation.cpp: + * gst-libs/gst/opencv/meson.build: + opencv: Support OpenCV 5 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12363> + +2026-08-28 13:08:08 +0900 Seungha Yang <seungha@centricular.com> + + * sys/hip/gsthipmemorycopy.cpp: + hipmemorycopy: Add missing ifdef guard + All the code in gst_hip_memory_copy_before_transform() requires + GstCuda to be enabled + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12361> + +2026-08-23 12:15:51 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp: + d3d12cmdqueue: Fix deadlock during GC + Release completed GC data without lock taken since + notify can acquire other locks + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12353> + +2026-08-12 14:31:34 +0900 Seungha Yang <seungha@centricular.com> + + * gst/mxf/mxfdemux.c: + mxfdemux: Fix keyframe detection + According to ST 377-1:2019, 11.2.3, PosTableIndex in + Delta Entry Array specifies temporal reordering and is not related + to the random access flag in an Index Entry. + As it's already done in the keyframe search code above, always + respect the 0x80 random access flag when determining whether an + index entry is a keyframe + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12324> + +2026-08-21 20:26:02 +0900 Seungha Yang <seungha@centricular.com> + + * sys/hip/meson.build: + hip: Fix hipcc detection on Windows with HIP SDK 7.x + The hipcc compiler binary name was changed at some point between + 6.x and 7.x. Try to find hipcc.exe too + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12332> + +2026-06-02 12:54:33 +0200 Stéphane Cerveau <scerveau@igalia.com> + + * ext/onnx/gstonnxinference.c: + * gst-libs/gst/analytics/modelinfo.c: + onnxinference: fix dead lock with wrong model file + If the model file is not reachable, error out on resource error and + release the object lock before to avoid dead lock from + GST_ELEMENT_ERROR. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12329> + +2026-08-17 12:49:02 +0200 Stéphane Cerveau <scerveau@igalia.com> + + * ext/onnx/gstonnxinference.c: + onnxinference: drop redundant status cleanup in output loop + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12329> + +2026-08-18 12:48:42 +0530 Nirbheek Chauhan <nirbheek@centricular.com> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + * sys/androidmedia/gstamcvideodec.c: + * sys/androidmedia/gstamcvideoenc.c: + amc: Don't set the Hardware class in metadata for sw video codecs + This is required for decodebin and apps to be able to detect when hw + codecs or sw codecs are being used. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12327> + +2026-06-14 22:58:02 +0900 masa-iwm <masa.iwm@gmail.com> + + * sys/dwrite/gstdwritebaseoverlay.cpp: + dwritebaseoverlay: Fix assertion 'G_VALUE_HOLDS_UINT (value)' + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12323> + +2026-08-11 17:03:45 +0900 masa-iwm <37230118+masa-iwm@users.noreply.github.com> + + * sys/d3d12/gstd3d12dxgicapture.cpp: + d3d12screencapturesrc: Fix out-of-bounds access with monochrome cursors + Fixed an issue where attempting to capture monochrome cursors, + such as high-contrast cursors, resulted in an out-of-bounds access. + The code for d3d11screencapturesrc was correct, + and the access range has now been aligned with it. + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5259 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12320> + +2026-08-10 18:15:14 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/hip/meson.build: + hip: Add missing API version suffix in library filename + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5245 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12299> +
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/RELEASE -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.28.5 +This is GStreamer gst-plugins-bad 1.28.7 The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/docs/meson.build -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/docs/meson.build
Changed
@@ -121,7 +121,6 @@ 'codecparsers': codecparsers_gir0.full_path(), 'codecs': codecs_gir0.full_path(), 'dxva': dxva_gir0.full_path(), - 'mse': mse_gir0.full_path(), 'analytics': analytics_gir0.full_path(), } @@ -137,10 +136,14 @@ codecparsers_gir0, codecs_gir0, dxva_gir0, - mse_gir0, analytics_gir0, + if gstmse_private_test_dep.found() + libs_doc_gi_conf += {'mse': mse_gir0.full_path()} + libs_doc_depends += mse_gir0 + endif + if get_variable('gst_cuda_gir', ).length() > 0 libs_doc_gi_conf += {'cuda': gst_cuda_gir0.full_path()} libs_doc_depends += gst_cuda_gir0
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/bz2/gstbz2dec.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/bz2/gstbz2dec.h
Changed
@@ -32,8 +32,7 @@ typedef struct _GstBz2decClass GstBz2decClass; GType -gst_bz2dec_get_type (void) - G_GNUC_CONST; +gst_bz2dec_get_type (void); GST_ELEMENT_REGISTER_DECLARE (bz2dec);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/bz2/gstbz2enc.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/bz2/gstbz2enc.h
Changed
@@ -32,8 +32,7 @@ typedef struct _GstBz2encClass GstBz2encClass; GType -gst_bz2enc_get_type (void) - G_GNUC_CONST; +gst_bz2enc_get_type (void); GST_ELEMENT_REGISTER_DECLARE (bz2enc);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/dtls/gstdtlsagent.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/dtls/gstdtlsagent.h
Changed
@@ -61,7 +61,7 @@ GstObjectClass parent_class; }; -GType gst_dtls_agent_get_type(void) G_GNUC_CONST; +GType gst_dtls_agent_get_type(void); /* * Returns the certificate used by the agent.
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/dtls/gstdtlscertificate.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/dtls/gstdtlscertificate.h
Changed
@@ -60,7 +60,7 @@ GObjectClass parent_class; }; -GType gst_dtls_certificate_get_type(void) G_GNUC_CONST; +GType gst_dtls_certificate_get_type(void); /* internal */ GstDtlsCertificateInternalCertificate _gst_dtls_certificate_get_internal_certificate(GstDtlsCertificate *);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/dtls/gstdtlsconnection.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/dtls/gstdtlsconnection.c
Changed
@@ -1230,8 +1230,9 @@ internal_size = priv->bio_buffer_len - priv->bio_buffer_offset; if (!priv->bio_buffer) { - GST_LOG_OBJECT (self, "BIO: EOF"); - return 0; + GST_LOG_OBJECT (self, "BIO: no data available, retry later"); + BIO_set_retry_read (bio); + return -1; } if (!out_buffer || size <= 0) {
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/dtls/gstdtlsconnection.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/dtls/gstdtlsconnection.h
Changed
@@ -94,7 +94,7 @@ GstObjectClass parent_class; }; -GType gst_dtls_connection_get_type(void) G_GNUC_CONST; +GType gst_dtls_connection_get_type(void); gboolean gst_dtls_connection_start(GstDtlsConnection *, gboolean is_client, GError **err); void gst_dtls_connection_check_timeout(GstDtlsConnection *);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/gtk/gstgtkwaylandsink.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/gtk/gstgtkwaylandsink.c
Changed
@@ -1406,6 +1406,13 @@ } done: { + /* waylandsink is late by one frame on drop reporting. This is typically not + * an issue, unless this is a preroll, since otherwise basesink believes the + * preroll have fail and aborts the state change to playing, stalling the pipeline. + */ + if (ret == GST_BASE_SINK_FLOW_DROPPED && GST_BASE_SINK (self)->need_preroll) + ret = GST_FLOW_OK; + g_mutex_unlock (&priv->render_lock); return ret; }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/onnx/gstonnxinference.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/onnx/gstonnxinference.c
Changed
@@ -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_namesi); - 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_dimsj = shapej > 0 ? shapej : 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;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/opencv/gstcameracalibrate.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/opencv/gstcameracalibrate.cpp
Changed
@@ -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>
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/opencv/gstfaceblur.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/opencv/gstfaceblur.h
Changed
@@ -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 */
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/opencv/gstfacedetect.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/opencv/gstfacedetect.h
Changed
@@ -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 */
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/opencv/gsthanddetect.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/opencv/gsthanddetect.h
Changed
@@ -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 */
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/opencv/gstsegmentation.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/opencv/gstsegmentation.cpp
Changed
@@ -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
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/openjpeg/gstopenjpeg.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/openjpeg/gstopenjpeg.h
Changed
@@ -33,7 +33,7 @@ OPENJPEG_ERROR_MAP_READ, OPENJPEG_ERROR_MAP_WRITE, OPENJPEG_ERROR_FILL_IMAGE, - OPENJPEG_ERROR_NEGOCIATE, + OPENJPEG_ERROR_NEGOTIATE, OPENJPEG_ERROR_ALLOCATE, } OpenJPEGErrorCode;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/openjpeg/gstopenjpegdec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/openjpeg/gstopenjpegdec.c
Changed
@@ -423,13 +423,12 @@ fill_frame_packed8_4 (GstOpenJPEGDec * self, GstVideoFrame * frame, opj_image_t * image) { - gint x, y, y0, y1, w, c; + gint x, x0, x1, y, y0, y1, c; guint8 *data_out, *tmp; const gint *data_in4; - gint dstride; + gsize dstride; gint off4; - w = GST_VIDEO_FRAME_WIDTH (frame); data_out = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); dstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0); @@ -438,14 +437,24 @@ offc = 0x80 * image->compsc.sgnd; } - /* copy only the stripe content (image) to the full size frame */ + x0 = image->x0; + x1 = image->x1; y0 = image->y0; y1 = image->y1; + GST_DEBUG_OBJECT (self, "xo=%d x1=%d", x0, x1); GST_DEBUG_OBJECT (self, "yo=%d y1=%d", y0, y1); - data_out += y0 * dstride; + + if (self->num_stripes > 1) { + x0 = MIN (x0, self->output_state->info.width); + x1 = CLAMP (x1, x0, self->output_state->info.width); + y0 = MIN (y0, self->output_state->info.height); + y1 = CLAMP (y1, y0, self->output_state->info.height); + data_out += y0 * dstride; + } + for (y = y0; y < y1; y++) { tmp = data_out; - for (x = 0; x < w; x++) { + for (x = x0; x < x1; x++) { /* alpha, from 4'th input channel */ tmp0 = off3 + *data_in3; /* colour channels */ @@ -467,13 +476,12 @@ fill_frame_packed16_4 (GstOpenJPEGDec * self, GstVideoFrame * frame, opj_image_t * image) { - gint x, y, y0, y1, w, c; + gint x, x0, x1, y, y0, y1, c; guint16 *data_out, *tmp; const gint *data_in4; - gint dstride; + gsize dstride; gint shift4, off4; - w = GST_VIDEO_FRAME_WIDTH (frame); data_out = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); dstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0) / 2; @@ -485,12 +493,24 @@ 8), 0); } + x0 = image->x0; + x1 = image->x1; y0 = image->y0; y1 = image->y1; - data_out += y0 * dstride; + GST_DEBUG_OBJECT (self, "xo=%d x1=%d", x0, x1); + GST_DEBUG_OBJECT (self, "yo=%d y1=%d", y0, y1); + + if (self->num_stripes > 1) { + x0 = MIN (x0, self->output_state->info.width); + x1 = CLAMP (x1, x0, self->output_state->info.width); + y0 = MIN (y0, self->output_state->info.height); + y1 = CLAMP (y1, y0, self->output_state->info.height); + data_out += y0 * dstride; + } + for (y = y0; y < y1; y++) { tmp = data_out; - for (x = 0; x < w; x++) { + for (x = x0; x < x1; x++) { /* alpha, from 4'th input channel */ tmp0 = off3 + (*data_in3 << shift3); /* colour channels */ @@ -512,13 +532,12 @@ fill_frame_packed8_3 (GstOpenJPEGDec * self, GstVideoFrame * frame, opj_image_t * image) { - gint x, y, y0, y1, w, c; + gint x, y, x0, x1, y0, y1, c; guint8 *data_out, *tmp; const gint *data_in3; - gint dstride; + gsize dstride; gint off3; - w = GST_VIDEO_FRAME_WIDTH (frame); data_out = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); dstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0); @@ -526,12 +545,25 @@ data_inc = image->compsc.data; offc = 0x80 * image->compsc.sgnd; }; + + x0 = image->x0; + x1 = image->x1; y0 = image->y0; y1 = image->y1; - data_out += y0 * dstride; + GST_DEBUG_OBJECT (self, "xo=%d x1=%d", x0, x1); + GST_DEBUG_OBJECT (self, "yo=%d y1=%d", y0, y1); + + if (self->num_stripes > 1) { + x0 = MIN (x0, self->output_state->info.width); + x1 = CLAMP (x1, x0, self->output_state->info.width); + y0 = MIN (y0, self->output_state->info.height); + y1 = CLAMP (y1, y0, self->output_state->info.height); + data_out += y0 * dstride; + } + for (y = y0; y < y1; y++) { tmp = data_out; - for (x = 0; x < w; x++) { + for (x = x0; x < x1; x++) { tmp0 = off0 + *data_in0; tmp1 = off1 + *data_in1; tmp2 = off2 + *data_in2; @@ -590,13 +622,12 @@ fill_frame_packed8_2 (GstOpenJPEGDec * self, GstVideoFrame * frame, opj_image_t * image) { - gint x, y, y0, y1, w, c; + gint x, y, x0, x1, y0, y1, c; guint8 *data_out, *tmp; const gint *data_in2; - gint dstride; + gsize dstride; gint off2; - w = GST_VIDEO_FRAME_WIDTH (frame); data_out = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); dstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0); @@ -605,12 +636,24 @@ offc = 0x80 * image->compsc.sgnd; }; + x0 = image->x0; + x1 = image->x1; y0 = image->y0; y1 = image->y1; - data_out += y0 * dstride; + GST_DEBUG_OBJECT (self, "xo=%d x1=%d", x0, x1); + GST_DEBUG_OBJECT (self, "yo=%d y1=%d", y0, y1); + + if (self->num_stripes > 1) { + x0 = MIN (x0, self->output_state->info.width); + x1 = CLAMP (x1, x0, self->output_state->info.width); + y0 = MIN (y0, self->output_state->info.height); + y1 = CLAMP (y1, y0, self->output_state->info.height); + data_out += y0 * dstride; + } + for (y = y0; y < y1; y++) { tmp = data_out; - for (x = 0; x < w; x++) { + for (x = x0; x < x1; x++) { /* alpha, from 2nd input channel */ tmp0 = off1 + *data_in1; /* luminance, from first input channel */ @@ -630,13 +673,12 @@ fill_frame_packed16_2 (GstOpenJPEGDec * self, GstVideoFrame * frame, opj_image_t * image) { - gint x, y, y0, y1, w, c; + gint x, y, x0, x1, y0, y1, c; guint16 *data_out, *tmp; const gint *data_in2; - gint dstride; + gsize dstride; gint shift2, off2; - w = GST_VIDEO_FRAME_WIDTH (frame); data_out = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); dstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0) / 2; @@ -648,12 +690,24 @@ 8), 0); } + x0 = image->x0; + x1 = image->x1; y0 = image->y0; y1 = image->y1; - data_out += y0 * dstride; + GST_DEBUG_OBJECT (self, "xo=%d x1=%d", x0, x1);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/resindvd/gstmpegdemux.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/resindvd/gstmpegdemux.c
Changed
@@ -25,6 +25,7 @@ #include <string.h> +#include <gst/base/gstbytereader.h> #include <gst/video/video.h> #include <gst/tag/tag.h> #include <gst/pbutils/pbutils.h> @@ -1293,6 +1294,7 @@ static GstFlowReturn gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) { + GstByteReader br; const guint8 *data; guint length; guint32 scr1, scr2; @@ -1301,6 +1303,7 @@ guint64 scr_rate_d; GstClockTime new_time; guint avail = gst_adapter_available (demux->adapter); + guint8 b; GST_LOG ("parsing pack start"); @@ -1308,18 +1311,19 @@ goto need_more_data; data = gst_adapter_map (demux->adapter, PACK_START_SIZE); + gst_byte_reader_init (&br, data, PACK_START_SIZE); /* skip start code */ - data += 4; + gst_byte_reader_skip_unchecked (&br, 4); - scr1 = GST_READ_UINT32_BE (data); - scr2 = GST_READ_UINT32_BE (data + 4); + scr1 = gst_byte_reader_get_uint32_be_unchecked (&br); /* fixed length to begin with, start code and two scr values */ - length = 8 + 4; + length = 4 + 8; /* start parsing the stream */ - if ((*data & 0xc0) == 0x40) { + /* MPEG2: first 2 bits of scr1 are '01' */ + if ((scr1 & 0xc0000000) == 0x40000000) { guint32 scr_ext; guint32 next32; guint8 stuffing_bytes; @@ -1330,6 +1334,10 @@ /* mpeg2 has more data */ length += 2; + /* Peek scr2 at bytes 8-11 without advancing (next32 overlaps at bytes 10-13) */ + if (!gst_byte_reader_peek_uint32_be (&br, &scr2)) + goto fail_invalid; + /* :2=01 ! scr:3 ! marker:1==1 ! scr:15 ! marker:1==1 ! scr:15 */ /* check markers */ @@ -1339,9 +1347,8 @@ scr = ((guint64) scr1 & 0x38000000) << 3; scr |= ((guint64) scr1 & 0x03fff800) << 4; scr |= ((guint64) scr1 & 0x000003ff) << 5; - scr |= ((guint64) scr2 & 0xf8000000) >> 27; - /* marker:1==1 ! scr_ext:9 ! marker:1==1 */ + scr |= ((guint64) scr2 & 0xf8000000) >> 27; if (G_UNLIKELY ((scr2 & 0x04010000) != 0x04010000)) goto lost_sync; @@ -1357,9 +1364,14 @@ } /* SCR has been converted into units of 90Khz ticks to make it comparable to DTS/PTS, that also implies 1 tick rounding error */ - data += 6; + + /* Skip to byte 10 (scr2 peeks at bytes 8-11, next32 overlaps at bytes 10-13) */ + if (!gst_byte_reader_skip (&br, 2)) + goto fail_invalid; + /* PMR:22 ! :2==11 ! reserved:5 ! stuffing_len:3 */ - next32 = GST_READ_UINT32_BE (data); + if (!gst_byte_reader_get_uint32_be (&br, &next32)) + goto fail_invalid; if (G_UNLIKELY ((next32 & 0x00000300) != 0x00000300)) goto lost_sync; @@ -1368,13 +1380,18 @@ stuffing_bytes = (next32 & 0x07); GST_LOG_OBJECT (demux, "stuffing bytes: %d", stuffing_bytes); - data += 4; length += stuffing_bytes; while (stuffing_bytes--) { - if (*data++ != 0xff) + if (!gst_byte_reader_get_uint8 (&br, &b)) + goto fail_invalid; + if (b != 0xff) goto lost_sync; } } else { + /* MPEG-1 pack header */ + if (!gst_byte_reader_get_uint32_be (&br, &scr2)) + goto fail_invalid; + GST_DEBUG ("Found MPEG1 stream"); demux->is_mpeg2_pack = FALSE; @@ -1520,6 +1537,13 @@ ADAPTER_OFFSET_FLUSH (length); return GST_FLOW_OK; +fail_invalid: + GST_DEBUG_OBJECT (demux, "Failed to parse pack start. Skipping"); + gst_adapter_unmap (demux->adapter); + gst_adapter_flush (demux->adapter, length); + ADAPTER_OFFSET_FLUSH (length); + return GST_FLOW_LOST_SYNC; + lost_sync: { GST_DEBUG_OBJECT (demux, "lost sync"); @@ -1563,11 +1587,14 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux) { guint16 length; + guint8 byte_val; + GstByteReader br; const guint8 *data; #ifndef GST_DISABLE_GST_DEBUG gboolean csps; #endif + /* Need at least 6 bytes for start code + length */ if (gst_adapter_available (demux->adapter) < 6) goto need_more_data; @@ -1580,6 +1607,10 @@ length = GST_READ_UINT16_BE (data); GST_DEBUG_OBJECT (demux, "length %d", length); + /* Minimum header_length is 6 (96 bits of fixed header after start code + length) */ + if (G_UNLIKELY (length < 6)) + goto sys_len_error; + length += 6; gst_adapter_unmap (demux->adapter); @@ -1588,27 +1619,34 @@ data = gst_adapter_map (demux->adapter, length); + gst_byte_reader_init (&br, data, length); + /* skip start code and length */ - data += 6; + if (!gst_byte_reader_skip (&br, 6)) + goto fail_invalid; /* marker:1==1 ! rate_bound:22 | marker:1==1 */ - if ((*data & 0x80) != 0x80) + if (!gst_byte_reader_get_uint8 (&br, &byte_val)) + goto fail_invalid; + if ((byte_val & 0x80) != 0x80) goto marker_expected; { guint32 rate_bound; + guint8 b1, b2; - if ((data2 & 0x01) != 0x01) + if (!gst_byte_reader_get_uint8 (&br, &b1) || + !gst_byte_reader_get_uint8 (&br, &b2)) + goto fail_invalid; + if ((b2 & 0x01) != 0x01) goto marker_expected; - rate_bound = ((guint32) data0 & 0x7f) << 15; - rate_bound |= ((guint32) data1) << 7; - rate_bound |= ((guint32) data2 & 0xfe) >> 1; + rate_bound = ((guint32) byte_val & 0x7f) << 15; + rate_bound |= ((guint32) b1) << 7; + rate_bound |= ((guint32) b2 & 0xfe) >> 1; rate_bound *= MPEG_MUX_RATE_MULT; GST_DEBUG_OBJECT (demux, "rate bound %u", rate_bound); - - data += 3; } /* audio_bound:6==1 ! fixed:1 | constrained:1 */ @@ -1616,18 +1654,22 @@ #ifndef GST_DISABLE_GST_DEBUG guint8 audio_bound; gboolean fixed; +#endif + + if (!gst_byte_reader_get_uint8 (&br, &byte_val)) + goto fail_invalid;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/resindvd/rsndec.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/resindvd/rsndec.h
Changed
@@ -43,9 +43,9 @@ #define RSN_IS_VIDEODEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),RSN_TYPE_VIDEODEC)) #define RSN_IS_VIDEODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),RSN_TYPE_VIDEODEC)) -GType rsn_dec_get_type (void) G_GNUC_CONST; -GType rsn_audiodec_get_type (void) G_GNUC_CONST; -GType rsn_videodec_get_type (void) G_GNUC_CONST; +GType rsn_dec_get_type (void); +GType rsn_audiodec_get_type (void); +GType rsn_videodec_get_type (void); typedef struct _RsnDec RsnDec; typedef struct _RsnDecClass RsnDecClass;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/tflite/gsttfliteinference.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/tflite/gsttfliteinference.c
Changed
@@ -79,7 +79,6 @@ GstCaps *model_incaps; GstCaps *model_outcaps; - gint channels; gdouble *scales; gdouble *offsets; @@ -637,7 +636,6 @@ } - gst_clear_caps (&priv->model_incaps); priv->model_incaps = gst_caps_new_empty_simple ("video/x-raw"); if (width && height) gst_caps_set_simple (priv->model_incaps, "width", G_TYPE_INT, width, @@ -669,7 +667,6 @@ goto error; } - gst_clear_caps (&priv->model_outcaps); o_size = TfLiteInterpreterGetOutputTensorCount (priv->interpreter); if (o_size != 0) { @@ -749,6 +746,7 @@ gst_structure_set (tensor_desc, "dims-order", G_TYPE_STRING, dims_order_str, "tensor-id", G_TYPE_STRING, id, NULL); + g_free (id); gst_structure_take_value (tensor_desc, "dims", &val_dims); g_value_unset (&val); @@ -790,6 +788,10 @@ ret = TRUE; done: + if (tensors_s) + gst_structure_free (tensors_s); + if (G_IS_VALUE (&v_tensors_set) && G_VALUE_TYPE (&v_tensors_set)) + g_value_unset (&v_tensors_set); if (modelinfo) gst_analytics_modelinfo_free (modelinfo); @@ -827,6 +829,7 @@ priv->model = NULL; gst_clear_caps (&priv->model_incaps); + gst_clear_caps (&priv->model_outcaps); g_ptr_array_set_size (priv->tensor_templates, 0);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/ttml/gstttmlrender.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/ttml/gstttmlrender.h
Changed
@@ -102,7 +102,7 @@ GMutex *pango_lock; }; -GType gst_ttml_render_get_type(void) G_GNUC_CONST; +GType gst_ttml_render_get_type(void); G_END_DECLS
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/vulkan/vkav1dec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/vulkan/vkav1dec.c
Changed
@@ -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);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/vulkan/vkvp9dec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/vulkan/vkvp9dec.c
Changed
@@ -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);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/wayland/gstwaylandsink.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/wayland/gstwaylandsink.c
Changed
@@ -1251,6 +1251,13 @@ } done: { + /* waylandsink is late by one frame on drop reporting. This is typically not + * an issue, unless this is a preroll, since otherwise basesink believes the + * preroll have fail and aborts the state change to playing, stalling the pipeline. + */ + if (ret == GST_BASE_SINK_FLOW_DROPPED && GST_BASE_SINK (self)->need_preroll) + ret = GST_FLOW_OK; + g_mutex_unlock (&self->render_lock); return ret; }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/wayland/gstwaylandsink.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/wayland/gstwaylandsink.h
Changed
@@ -85,7 +85,7 @@ GstVideoSinkClass parent; }; -GType gst_wayland_sink_get_type (void) G_GNUC_CONST; +GType gst_wayland_sink_get_type (void); GST_ELEMENT_REGISTER_DECLARE (waylandsink);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/ext/webrtc/gstwebrtcbin.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/ext/webrtc/gstwebrtcbin.c
Changed
@@ -5215,7 +5215,9 @@ gboolean aux_success = FALSE; gchar *rtp_pad_name = g_strdup_printf ("send_rtp_src_%u", session_id); if (aux_sender) { - gst_object_ref_sink (aux_sender); + if (g_object_is_floating (aux_sender)) { + aux_sender = gst_object_ref_sink (aux_sender); + } if (!gst_bin_add (GST_BIN (webrtc), aux_sender)) { GST_ERROR_OBJECT (webrtc, "Unable to add aux_sender %" GST_PTR_FORMAT " to webrtcbin"
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/analytics/modelinfo.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/analytics/modelinfo.c
Changed
@@ -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);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c
Changed
@@ -781,12 +781,19 @@ gint16 deltaRps = 0; gint j, i = 0; gint dPoc; - GstH265ShortTermRefPicSetExt *stRPSEXT = &sps_ext->short_term_ref_pic_set_extstRpsIdx; + /* See num_long_term_pics in 7.4.7.1, NumDeltaPocs should not exceed + * sps_max_dec_pic_buffering_minus1 */ + const guint allowed_max_delta = + sps->max_dec_pic_buffering_minus1sps->max_sub_layers_minus1; GST_DEBUG ("parsing \"ShortTermRefPicSetParameters\""); + /* double check, already checked during max_dec_pic_buffering_minus1 parsing + * though */ + CHECK_ALLOWED_MAX (allowed_max_delta, MAX_DPB_SIZE - 1); + /* set default values for fields that might not be present in the bitstream and have valid defaults */ for (j = 0; j < 16; j++) @@ -812,6 +819,10 @@ RefRPS = &sps->short_term_ref_pic_setRefRpsIdx; stRPS->NumDeltaPocsOfRefRpsIdx = RefRPS->NumDeltaPocs; + CHECK_ALLOWED_MAX (RefRPS->NumDeltaPocs, allowed_max_delta); + CHECK_ALLOWED_MAX (RefRPS->NumPositivePics, allowed_max_delta); + CHECK_ALLOWED_MAX (RefRPS->NumNegativePics, allowed_max_delta); + for (j = 0; j <= RefRPS->NumDeltaPocs; j++) { READ_UINT8 (nr, stRPSEXT->used_by_curr_pic_flagj, 1); if (!stRPSEXT->used_by_curr_pic_flagj) @@ -823,24 +834,41 @@ for (j = (RefRPS->NumPositivePics - 1); j >= 0; j--) { dPoc = RefRPS->DeltaPocS1j + deltaRps; if (dPoc < 0 && stRPSEXT->use_delta_flagRefRPS->NumNegativePics + j) { + CHECK_ALLOWED_MAX (i, allowed_max_delta); stRPS->DeltaPocS0i = dPoc; stRPS->UsedByCurrPicS0i++ = stRPSEXT->used_by_curr_pic_flagRefRPS->NumNegativePics + j; } } + if (deltaRps < 0 && stRPSEXT->use_delta_flagRefRPS->NumDeltaPocs) { + CHECK_ALLOWED_MAX (i, allowed_max_delta); stRPS->DeltaPocS0i = deltaRps; stRPS->UsedByCurrPicS0i++ = stRPSEXT->used_by_curr_pic_flagRefRPS->NumDeltaPocs; } + for (j = 0; j < RefRPS->NumNegativePics; j++) { dPoc = RefRPS->DeltaPocS0j + deltaRps; if (dPoc < 0 && stRPSEXT->use_delta_flagj) { + /* last valid index is "allowed_max_delta - 1" due to + * UsedByCurrPicS0i++, but intentionally checking against + * allowed_max_delta here to avoid handling allowed_max_delta == 0 case. + * + * Since theoretical maximum value of allowed_max_delta is + * 15 (MAX_DPB_SIZE - 1), writing to UsedByCurrPicS0i is still + * safe because i is incremented after the write. + * + * Below NumNegativePics validation will do the final bounds check. + */ + CHECK_ALLOWED_MAX (i, allowed_max_delta); stRPS->DeltaPocS0i = dPoc; stRPS->UsedByCurrPicS0i++ = stRPSEXT->used_by_curr_pic_flagj; } } + stRPS->NumNegativePics = i; + CHECK_ALLOWED_MAX (stRPS->NumNegativePics, allowed_max_delta); /* 7-48: calculate NumPositivePics, DeltaPocS1 and UsedByCurrPicS1 */ i = 0; @@ -852,29 +880,41 @@ } } if (deltaRps > 0 && stRPSEXT->use_delta_flagRefRPS->NumDeltaPocs) { + CHECK_ALLOWED_MAX (i, allowed_max_delta); stRPS->DeltaPocS1i = deltaRps; stRPS->UsedByCurrPicS1i++ = stRPSEXT->used_by_curr_pic_flagRefRPS->NumDeltaPocs; } + for (j = 0; j < RefRPS->NumPositivePics; j++) { dPoc = RefRPS->DeltaPocS1j + deltaRps; if (dPoc > 0 && stRPSEXT->use_delta_flagRefRPS->NumNegativePics + j) { + /* last valid index is "allowed_max_delta - 1" due to + * UsedByCurrPicS1i++, but intentionally checking against + * allowed_max_delta here to avoid handling allowed_max_delta == 0 case. + * + * Since theoretical maximum value of allowed_max_delta is + * 15 (MAX_DPB_SIZE - 1), writing to UsedByCurrPicS1i is still + * safe because i is incremented after the write. + * + * Below NumPositivePics validation will do the final bounds check. + */ + CHECK_ALLOWED_MAX (i, allowed_max_delta); stRPS->DeltaPocS1i = dPoc; stRPS->UsedByCurrPicS1i++ = stRPSEXT->used_by_curr_pic_flagRefRPS->NumNegativePics + j; } } - stRPS->NumPositivePics = i; + stRPS->NumPositivePics = i; + CHECK_ALLOWED_MAX (stRPS->NumPositivePics, allowed_max_delta); } else { /* 7-49 */ - READ_UE_MAX (nr, stRPS->NumNegativePics, - sps->max_dec_pic_buffering_minus1sps->max_sub_layers_minus1); + READ_UE_MAX (nr, stRPS->NumNegativePics, allowed_max_delta); /* 7-50 */ READ_UE_MAX (nr, stRPS->NumPositivePics, - (sps->max_dec_pic_buffering_minus1sps->max_sub_layers_minus1 - - stRPS->NumNegativePics)); + (allowed_max_delta - stRPS->NumNegativePics)); for (i = 0; i < stRPS->NumNegativePics; i++) { READ_UE_MAX (nr, stRPSEXT->delta_poc_s0_minus1i, 32767); @@ -913,6 +953,7 @@ /* 7-57 */ stRPS->NumDeltaPocs = stRPS->NumPositivePics + stRPS->NumNegativePics; + CHECK_ALLOWED_MAX (stRPS->NumDeltaPocs, allowed_max_delta); return TRUE;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/codecparsers/gsth266parser.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/codecparsers/gsth266parser.c
Changed
@@ -6029,6 +6029,18 @@ return ret; } +// This is public API since 1.30 +static void +gst_h266_sei_clear (GstH266SEIMessage * sei) +{ + if (sei->payloadType == GST_H266_SEI_REGISTERED_USER_DATA) { + GstH266RegisteredUserData *rud = &sei->payload.registered_user_data; + g_free ((guint8 *) rud->data); + rud->data = NULL; + } + memset (sei, 0, sizeof (GstH266SEIMessage)); +} + static GstH266ParserResult gst_h266_parser_parse_sei_message (GstH266SEIMessage * sei, NalReader * nr, GstH266Parser * parser, guint8 nal_type, guint8 nal_tid) @@ -6150,21 +6162,10 @@ error: GST_WARNING ("error parsing \"Sei message\""); + gst_h266_sei_clear (sei); return GST_H266_PARSER_ERROR; } -// This is public API since 1.30 -static void -gst_h266_sei_clear (GstH266SEIMessage * sei) -{ - if (sei->payloadType == GST_H266_SEI_REGISTERED_USER_DATA) { - GstH266RegisteredUserData *rud = &sei->payload.registered_user_data; - g_free ((guint8 *) rud->data); - rud->data = NULL; - } - memset (sei, 0, sizeof (GstH266SEIMessage)); -} - /** * gst_h266_parser_parse_sei: * @parser: a #GstH266Parser
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/d3d12/gstd3d12cmdqueue.cpp
Changed
@@ -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); } }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp
Changed
@@ -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 ();
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/d3d12/gstd3d12stagingmemory.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/d3d12/gstd3d12stagingmemory.h
Changed
@@ -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 */
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/hip/gsthipstream.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/hip/gsthipstream.cpp
Changed
@@ -144,7 +144,7 @@ { g_return_val_if_fail (stream, G_MAXUINT); - return stream->vendor; + return stream->device_id; } /**
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/hip/meson.build -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/hip/meson.build
Changed
@@ -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,
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/opencv/meson.build -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/opencv/meson.build
Changed
@@ -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
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/vulkan/gstvkformat.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/vulkan/gstvkformat.c
Changed
@@ -130,6 +130,7 @@ #define SUB4224 { 0, 1, 1, 0 }, { 0, 0, 0, 0 } #define ASPECT_2PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT) +#define ASPECT_3PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT) /* *INDENT-OFF* */ static GstVulkanFormatInfo formats = { @@ -176,6 +177,7 @@ {FORMAT (R8, SINT), FLAG (RGB) | NE, DPTH8, PSTR4, PLANE0, OFFS0, SUB4, VK_IMAGE_ASPECT_COLOR_BIT}, {FORMAT (R8, SRGB), FLAG (RGB) | NE, DPTH8, PSTR4, PLANE0, OFFS0, SUB4, VK_IMAGE_ASPECT_COLOR_BIT}, {FORMAT (G8_B8R8_2PLANE_420, UNORM), FLAG (YUV), DPTH888, PSTR122, PLANE011, OFFS001, SUB420, ASPECT_2PLANE}, + {FORMAT (G8_B8_R8_3PLANE_420, UNORM), FLAG (YUV), DPTH888, PSTR111, PLANE012, OFFS0, SUB420, ASPECT_3PLANE}, {FORMAT_PACK (G10X6_B10X6R10X6_2PLANE_420, UNORM, 3PACK16), FLAG (YUV), DPTH10_10_10_HI, PSTR244, PLANE011, OFFS001, SUB420, ASPECT_2PLANE}, #if 0 FIXME: implement:
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/vulkan/gstvktrash.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/vulkan/gstvktrash.c
Changed
@@ -115,6 +115,23 @@ trash->user_data = user_data; } +static void +gst_vulkan_trash_reinit (GstVulkanTrash * trash, GstVulkanFence * fence, + GstVulkanTrashNotify notify, gpointer user_data) +{ + g_return_if_fail (fence != NULL); + g_return_if_fail (GST_IS_VULKAN_DEVICE (fence->device)); + g_return_if_fail (notify != NULL); + g_assert (trash->fence == NULL); + + GST_TRACE ("Reinitializing trash object %p with fence %" GST_PTR_FORMAT + " on device %" GST_PTR_FORMAT, trash, fence, fence->device); + + trash->fence = gst_vulkan_fence_ref (fence); + trash->notify = notify; + trash->user_data = user_data; +} + /** * gst_vulkan_trash_new: * @fence: a #GstVulkanFence @@ -328,7 +345,14 @@ static gpointer gst_vulkan_trash_list_alloc_impl (GstVulkanHandlePool * pool, GError ** error) { - return g_new0 (GstVulkanTrash, 1); + GstVulkanTrash *trash = g_new0 (GstVulkanTrash, 1); + + gst_mini_object_init ((GstMiniObject *) trash, 0, + gst_vulkan_trash_get_type (), NULL, + (GstMiniObjectDisposeFunction) gst_vulkan_trash_dispose, + (GstMiniObjectFreeFunction) gst_vulkan_trash_free); + + return trash; } static void @@ -393,7 +417,7 @@ pool_class = GST_VULKAN_HANDLE_POOL_GET_CLASS (trash_list); trash = pool_class->acquire (pool, NULL); - gst_vulkan_trash_init (trash, fence, notify, user_data); + gst_vulkan_trash_reinit (trash, fence, notify, user_data); trash->cache = gst_object_ref (trash_list); GST_TRACE_OBJECT (trash_list, "acquired trash object %p", trash);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-libs/gst/wayland/gstwlvideobufferpool.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-libs/gst/wayland/gstwlvideobufferpool.c
Changed
@@ -213,6 +213,7 @@ buffer_too_small: { GST_ERROR_OBJECT (self, "dumb buffer too small to store an image."); + gst_memory_unref (dma_mem); return GST_FLOW_ERROR; } }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst-plugins-bad.doap -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,26 @@ <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> + <created>2026-08-05</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.28.6.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.28.5</revision> <branch>1.28</branch> <name></name>
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/adpcmdec/adpcmdec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/adpcmdec/adpcmdec.c
Changed
@@ -108,7 +108,7 @@ return FALSE; if (!gst_structure_get_int (structure, "block_align", &dec->blocksize)) - dec->blocksize = -1; /* Not provided */ + return FALSE; if (!gst_structure_get_int (structure, "rate", &dec->rate)) return FALSE; @@ -280,7 +280,7 @@ int i, j; int sample; - if ((n_samples - dec->channels) % 8 != 0) { + if ((n_samples - dec->channels) % (8 * dec->channels) != 0) { GST_WARNING_OBJECT (dec, "Input not correct size"); return FALSE; }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/closedcaption/gsth265reorder.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/closedcaption/gsth265reorder.c
Changed
@@ -605,6 +605,18 @@ GST_LOG_OBJECT (self, "Parsed nal type: %d, offset %d, size %d", nalu->type, nalu->offset, nalu->size); + if (nalu->layer_id != 0) { + /* 7.4.2.1 + * decoders conforming to a profile specified in Annex A and not + * supporting the independent non-base layer decoding (INBLD) capability + * specified in Annex F shall ignore (i.e., remove from the bitstream + * and discard) all NAL units with values of nuh_layer_id not equal to 0 + */ + GST_LOG_OBJECT (self, "Skip nalu type %d with layer id %d", + nalu->type, nalu->layer_id); + return GST_H265_PARSER_OK; + } + memset (&decoder_nalu, 0, sizeof (GstH265ReorderNalUnit)); decoder_nalu.nalu_type = nalu->type; @@ -735,6 +747,18 @@ for (j = 0; j < array->nalu->len; j++) { GstH265NalUnit *nalu = &g_array_index (array->nalu, GstH265NalUnit, j); + if (nalu->layer_id != 0) { + /* 7.4.2.1 + * decoders conforming to a profile specified in Annex A and not + * supporting the independent non-base layer decoding (INBLD) capability + * specified in Annex F shall ignore (i.e., remove from the bitstream + * and discard) all NAL units with values of nuh_layer_id not equal to 0 + */ + GST_DEBUG_OBJECT (self, "Skip nalu type %d with layer id %d", + nalu->type, nalu->layer_id); + continue; + } + switch (nalu->type) { case GST_H265_NAL_VPS: pres = gst_h265_parser_parse_vps (parser, nalu, &vps);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/debugutils/gsttestsrcbin.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/debugutils/gsttestsrcbin.c
Changed
@@ -99,7 +99,7 @@ typedef struct _GstTestSrcBinClass GstTestSrcBinClass; /* *INDENT-OFF* */ -GType gst_test_src_bin_get_type (void) G_GNUC_CONST; +GType gst_test_src_bin_get_type (void); /* *INDENT-ON* */ struct _GstTestSrcBinClass
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/dvdspu/gstspu-vobsub.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/dvdspu/gstspu-vobsub.c
Changed
@@ -146,7 +146,7 @@ data += 1; break; case SPU_CMD_SET_COLOR:{ - if (G_UNLIKELY (data + 3 >= end)) + if (G_UNLIKELY (data + 3 > end)) return; /* Invalid SET_COLOR cmd at the end of the blk */ state->vobsub.main_idx3 = data1 >> 4; @@ -164,7 +164,7 @@ break; } case SPU_CMD_SET_ALPHA:{ - if (G_UNLIKELY (data + 3 >= end)) + if (G_UNLIKELY (data + 3 > end)) return; /* Invalid SET_ALPHA cmd at the end of the blk */ state->vobsub.main_alpha3 = data1 >> 4; @@ -184,7 +184,7 @@ case SPU_CMD_SET_DAREA:{ SpuRect *r = &state->vobsub.disp_rect; - if (G_UNLIKELY (data + 7 >= end)) + if (G_UNLIKELY (data + 7 > end)) return; /* Invalid SET_DAREA cmd at the end of the blk */ r->top = ((data4 & 0xff) << 4) | ((data5 & 0xf0) >> 4); @@ -200,7 +200,7 @@ break; } case SPU_CMD_DSPXA:{ - if (G_UNLIKELY (data + 5 >= end)) + if (G_UNLIKELY (data + 5 > end)) return; /* Invalid SET_DSPXE cmd at the end of the blk */ state->vobsub.pix_data0 = GST_READ_UINT16_BE (data + 1); @@ -219,13 +219,13 @@ guint16 field_size; GST_DEBUG_OBJECT (dvdspu, " Set Color & Contrast Change"); - if (G_UNLIKELY (data + 3 >= end)) + if (G_UNLIKELY (data + 3 > end)) return; /* Invalid CHG_COLCON cmd at the end of the blk */ data++; field_size = GST_READ_UINT16_BE (data); - if (G_UNLIKELY (data + field_size >= end)) + if (G_UNLIKELY (data + field_size > end)) return; /* Invalid CHG_COLCON cmd at the end of the blk */ gst_dvd_spu_parse_chg_colcon (dvdspu, data + 2, data + field_size); @@ -261,7 +261,7 @@ guint16 delay; guint8 *cmd_blk = start + cmd_blk_offset; - if (G_UNLIKELY (cmd_blk + 5 >= end)) { + if (G_UNLIKELY (cmd_blk + 4 > end)) { GST_DEBUG_OBJECT (dvdspu, "No valid command block"); return FALSE; /* No valid command block to read */ } @@ -290,6 +290,9 @@ g_return_if_fail (start != NULL); /* First command */ + if (start + 4 > end) + return; + next_blk = GST_READ_UINT16_BE (start + 2); cmd_blk_offset = 0; @@ -303,7 +306,7 @@ cmd_blk_offset = next_blk; - if (G_UNLIKELY (start + cmd_blk_offset + 5 >= end)) + if (G_UNLIKELY (start + cmd_blk_offset + 4 > end)) break; /* No valid command to read */ data = start + cmd_blk_offset; @@ -385,7 +388,7 @@ cmd_blk = start + state->vobsub.cur_cmd_blk; - if (G_UNLIKELY (cmd_blk + 5 >= end)) { + if (G_UNLIKELY (cmd_blk + 4 > end)) { gst_buffer_unmap (state->vobsub.buf, &map); /* Invalid. Finish the buffer and loop again */ gst_dvd_spu_finish_spu_buf (dvdspu);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/jpegformat/gstjpegparse.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/jpegformat/gstjpegparse.c
Changed
@@ -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))
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/mpegdemux/gstmpegdemux.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/mpegdemux/gstmpegdemux.c
Changed
@@ -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; } } } @@ -1720,6 +1721,7 @@ static GstFlowReturn gst_ps_demux_parse_pack_start (GstPsDemux * demux) { + GstByteReader br; const guint8 *data; guint length; guint32 scr1, scr2; @@ -1727,6 +1729,7 @@ guint64 scr_rate_n; guint64 scr_rate_d; guint avail = gst_adapter_available (demux->adapter); + guint8 b; GST_LOG ("parsing pack start"); @@ -1734,18 +1737,19 @@ goto need_more_data; data = gst_adapter_map (demux->adapter, PACK_START_SIZE); + gst_byte_reader_init (&br, data, PACK_START_SIZE); /* skip start code */ - data += 4; + gst_byte_reader_skip_unchecked (&br, 4); - scr1 = GST_READ_UINT32_BE (data); - scr2 = GST_READ_UINT32_BE (data + 4); + scr1 = gst_byte_reader_get_uint32_be_unchecked (&br); /* fixed length to begin with, start code and two scr values */ - length = 8 + 4; + length = 4 + 8; /* start parsing the stream */ - if ((*data & 0xc0) == 0x40) { + /* MPEG2: first 2 bits of scr1 are '01' */ + if ((scr1 & 0xc0000000) == 0x40000000) { guint32 scr_ext; guint32 next32; guint8 stuffing_bytes; @@ -1756,6 +1760,10 @@ /* mpeg2 has more data */ length += 2; + /* Peek scr2 at bytes 8-11 without advancing (next32 overlaps at bytes 10-13) */ + if (!gst_byte_reader_peek_uint32_be (&br, &scr2)) + goto fail_invalid; + /* :2=01 ! scr:3 ! marker:1==1 ! scr:15 ! marker:1==1 ! scr:15 */ /* check markers */ @@ -1765,9 +1773,8 @@ scr = ((guint64) scr1 & 0x38000000) << 3; scr |= ((guint64) scr1 & 0x03fff800) << 4; scr |= ((guint64) scr1 & 0x000003ff) << 5; - scr |= ((guint64) scr2 & 0xf8000000) >> 27; - /* marker:1==1 ! scr_ext:9 ! marker:1==1 */ + scr |= ((guint64) scr2 & 0xf8000000) >> 27; if (G_UNLIKELY ((scr2 & 0x04010000) != 0x04010000)) goto lost_sync; @@ -1783,9 +1790,14 @@ } /* SCR has been converted into units of 90Khz ticks to make it comparable to DTS/PTS, that also implies 1 tick rounding error */ - data += 6; + + /* Skip to byte 10 (scr2 peeks at bytes 8-11, next32 overlaps at bytes 10-13) */ + if (!gst_byte_reader_skip (&br, 2)) + goto fail_invalid; + /* PMR:22 ! :2==11 ! reserved:5 ! stuffing_len:3 */ - next32 = GST_READ_UINT32_BE (data); + if (!gst_byte_reader_get_uint32_be (&br, &next32)) + goto fail_invalid; if (G_UNLIKELY ((next32 & 0x00000300) != 0x00000300)) goto lost_sync; @@ -1794,13 +1806,18 @@ stuffing_bytes = (next32 & 0x07); GST_LOG_OBJECT (demux, "stuffing bytes: %d", stuffing_bytes); - data += 4; length += stuffing_bytes; while (stuffing_bytes--) { - if (*data++ != 0xff) + if (!gst_byte_reader_get_uint8 (&br, &b)) + goto fail_invalid; + if (b != 0xff) goto lost_sync; } } else { + /* MPEG-1 pack header */ + if (!gst_byte_reader_get_uint32_be (&br, &scr2)) + goto fail_invalid; + GST_DEBUG ("Found MPEG1 stream"); demux->is_mpeg2_pack = FALSE; @@ -1822,8 +1839,6 @@ /* marker:1==1 ! mux_rate:22 ! marker:1==1 */ new_rate = (scr2 & 0x007ffffe) >> 1; - - data += 8; } if (demux->ignore_scr) { @@ -1966,6 +1981,13 @@ return GST_FLOW_OK; +fail_invalid: + GST_DEBUG_OBJECT (demux, "Failed to parse pack start. Skipping"); + gst_adapter_unmap (demux->adapter); + gst_adapter_flush (demux->adapter, length); + ADAPTER_OFFSET_FLUSH (length); + return GST_FLOW_LOST_SYNC; + lost_sync: { GST_DEBUG_OBJECT (demux, "lost sync"); @@ -2009,11 +2031,14 @@ gst_ps_demux_parse_sys_head (GstPsDemux * demux) { guint16 length; + guint8 byte_val; + GstByteReader br; const guint8 *data; #ifndef GST_DISABLE_GST_DEBUG gboolean csps; #endif + /* Need at least 6 bytes for start code + length */ if (gst_adapter_available (demux->adapter) < 6) goto need_more_data; @@ -2026,6 +2051,10 @@ length = GST_READ_UINT16_BE (data); GST_DEBUG_OBJECT (demux, "length %d", length); + /* Minimum header_length is 6 (96 bits of fixed header after start code + length) */ + if (G_UNLIKELY (length < 6)) + goto sys_len_error; + length += 6; gst_adapter_unmap (demux->adapter); @@ -2034,27 +2063,34 @@ data = gst_adapter_map (demux->adapter, length); + gst_byte_reader_init (&br, data, length); + /* skip start code and length */ - data += 6; + if (!gst_byte_reader_skip (&br, 6)) + goto fail_invalid; /* marker:1==1 ! rate_bound:22 | marker:1==1 */ - if ((*data & 0x80) != 0x80) + if (!gst_byte_reader_get_uint8 (&br, &byte_val)) + goto fail_invalid; + if ((byte_val & 0x80) != 0x80) goto marker_expected; { guint32 rate_bound; + guint8 b1, b2; - if ((data2 & 0x01) != 0x01) + if (!gst_byte_reader_get_uint8 (&br, &b1) || + !gst_byte_reader_get_uint8 (&br, &b2)) + goto fail_invalid; + if ((b2 & 0x01) != 0x01) goto marker_expected; - rate_bound = ((guint32) data0 & 0x7f) << 15; - rate_bound |= ((guint32) data1) << 7; - rate_bound |= ((guint32) data2 & 0xfe) >> 1; + rate_bound = ((guint32) byte_val & 0x7f) << 15; + rate_bound |= ((guint32) b1) << 7; + rate_bound |= ((guint32) b2 & 0xfe) >> 1; rate_bound *= MPEG_MUX_RATE_MULT; GST_DEBUG_OBJECT (demux, "rate bound %u", rate_bound); - - data += 3; }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/mpegtsdemux/tsdemux.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/mpegtsdemux/tsdemux.c
Changed
@@ -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; @@ -3918,7 +3920,11 @@ if (((stream->continuity_counter + 1) % 16) != cc) { if (stream->state != PENDING_PACKET_EMPTY) { #ifndef GST_DISABLE_GST_DEBUG - gchar *pad_name = gst_pad_get_name (stream->pad); + gchar *pad_name = NULL; + + if (stream->pad) + pad_name = gst_pad_get_name (stream->pad); + GST_ELEMENT_WARNING_WITH_DETAILS (demux, STREAM, DEMUX, ("CONTINUITY: Mismatch packet %d, stream %d (pid 0x%04x)", cc, stream->continuity_counter, stream->stream.pid), @@ -3927,6 +3933,7 @@ G_TYPE_INT, cc, "stream", G_TYPE_INT, stream->continuity_counter, "pid", G_TYPE_UINT, stream->stream.pid, "pad-name", G_TYPE_STRING, pad_name, NULL)); + g_free (pad_name); #endif /* Clear pending state and don't process packet */
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/mxf/mxfdemux.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/mxf/mxfdemux.c
Changed
@@ -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_offsetdelta_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) */ }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/pcapparse/gstirtspparse.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/pcapparse/gstirtspparse.c
Changed
@@ -127,7 +127,6 @@ static void gst_irtsp_parse_init (GstIRTSPParse * IRTSPParse) { - gst_base_parse_set_min_frame_size (GST_BASE_PARSE (IRTSPParse), 1); gst_irtsp_parse_reset (IRTSPParse); } @@ -144,6 +143,7 @@ GST_DEBUG_OBJECT (parse, "starting"); + gst_base_parse_set_min_frame_size (GST_BASE_PARSE (IRTSPParse), 1); gst_irtsp_parse_reset (IRTSPParse); return TRUE;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/pnm/gstpnmdec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/pnm/gstpnmdec.c
Changed
@@ -170,7 +170,7 @@ GST_DEBUG ("Received caps from peer: %" GST_PTR_FORMAT, peercaps); if (gst_caps_is_empty (peercaps)) { gst_caps_unref (peercaps); - return FALSE; + return GST_FLOW_NOT_NEGOTIATED; } if (!gst_caps_is_fixed (peercaps)) @@ -215,6 +215,9 @@ output_state = gst_video_decoder_set_output_state (decoder, fmt, pnmdec->mngr.info.width, pnmdec->mngr.info.height, pnmdec->input_state); + if (!output_state) + return GST_FLOW_NOT_NEGOTIATED; + gst_video_codec_state_unref (output_state); if (!gst_video_decoder_negotiate (decoder)) @@ -385,7 +388,7 @@ guint i_rowstride; guint o_rowstride; GstFlowReturn r = GST_FLOW_OK; - gint bytes, i, total_bytes = 0; + gint i, total_bytes = 0; r = gst_video_decoder_allocate_output_frame (decoder, frame); if (r != GST_FLOW_OK) { @@ -406,8 +409,13 @@ GST_BUFFER_COPY_METADATA, 0, 0); if (s->mngr.info.type == GST_PNM_TYPE_BITMAP) { - bytes = (s->mngr.info.width * s->mngr.info.height + 7) / 8; - for (i = 0; i < bytes; i++) { + guint pixels = s->mngr.info.width * s->mngr.info.height; + guint full_bytes = pixels / 8; + guint remainder = pixels % 8; + guint8 mask; + + /* Process all complete bytes (8 pixels each) */ + for (i = 0; i < full_bytes; i++) { omap.datai * 8 = (imap.datai & 0x80) ? 0 : 255; omap.datai * 8 + 1 = (imap.datai & 0x40) ? 0 : 255; omap.datai * 8 + 2 = (imap.datai & 0x20) ? 0 : 255; @@ -417,7 +425,19 @@ omap.datai * 8 + 6 = (imap.datai & 0x02) ? 0 : 255; omap.datai * 8 + 7 = (imap.datai & 0x01) ? 0 : 255; } - total_bytes = bytes * 8; + + /* Process remainder pixels from the last byte */ + if (remainder > 0) { + guint8 b = imap.datafull_bytes; + guint8 *dst = omap.data + full_bytes * 8; + mask = 0x80; + for (i = 0; i < remainder; i++) { + dsti = (b & mask) ? 0 : 255; + mask >>= 1; + } + } + + total_bytes = pixels; } else /* Need to convert from PNM rowstride to GStreamer rowstride */ if (s->mngr.info.width % 4 != 0) { @@ -529,6 +549,9 @@ r = GST_FLOW_OK; goto out; case GST_PNM_INFO_MNGR_RESULT_FINISHED: + offset = s->mngr.data_offset; + if (size < offset) + goto need_more_data; r = gst_pnmdec_negotiate (decoder); if (r != GST_FLOW_OK) @@ -541,7 +564,6 @@ GST_DEBUG_OBJECT (s, "Allocating output frame of size %u", s->size); s->buf = gst_buffer_new_and_alloc (s->size); } - offset = s->mngr.data_offset; gst_adapter_flush (adapter, offset); size = size - offset; }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/pnm/gstpnmdec.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/pnm/gstpnmdec.h
Changed
@@ -53,7 +53,7 @@ GstVideoDecoderClass parent_class ; }; -GType gst_pnmdec_get_type (void) G_GNUC_CONST; +GType gst_pnmdec_get_type (void); GST_ELEMENT_REGISTER_DECLARE (pnmdec); G_END_DECLS
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/pnm/gstpnmenc.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/pnm/gstpnmenc.h
Changed
@@ -50,7 +50,7 @@ GstVideoEncoderClass parent; }; -GType gst_pnmenc_get_type (void) G_GNUC_CONST; +GType gst_pnmenc_get_type (void); GST_ELEMENT_REGISTER_DECLARE (pnmenc); G_END_DECLS
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/pnm/gstpnmutils.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/pnm/gstpnmutils.c
Changed
@@ -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;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/tensordecoders/gstssdtensordec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/tensordecoders/gstssdtensordec.c
Changed
@@ -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;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/transcode/gst-cpu-throttling-clock.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/transcode/gst-cpu-throttling-clock.h
Changed
@@ -31,7 +31,7 @@ typedef struct _GstCpuThrottlingClockClass GstCpuThrottlingClockClass; typedef struct _GstCpuThrottlingClockPrivate GstCpuThrottlingClockPrivate; -GType gst_cpu_throttling_clock_get_type (void) G_GNUC_CONST; +GType gst_cpu_throttling_clock_get_type (void); #define GST_TYPE_CPU_THROTTLING_CLOCK (gst_cpu_throttling_clock_get_type ()) #define GST_CPU_THROTTLING_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CPU_THROTTLING_CLOCK, GstCpuThrottlingClock))
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/videoparsers/gstdiracparse.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/videoparsers/gstdiracparse.c
Changed
@@ -140,6 +140,7 @@ { gst_base_parse_set_min_frame_size (GST_BASE_PARSE (diracparse), 13); gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (diracparse), FALSE); + gst_base_parse_set_infer_ts (GST_BASE_PARSE (diracparse), FALSE); GST_PAD_SET_ACCEPT_INTERSECT (GST_BASE_PARSE_SINK_PAD (diracparse)); GST_PAD_SET_ACCEPT_TEMPLATE (GST_BASE_PARSE_SINK_PAD (diracparse)); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/videoparsers/gsth263parse.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/videoparsers/gsth263parse.c
Changed
@@ -98,6 +98,8 @@ static void gst_h263_parse_init (GstH263Parse * h263parse) { + gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (h263parse), FALSE); + gst_base_parse_set_infer_ts (GST_BASE_PARSE (h263parse), FALSE); GST_PAD_SET_ACCEPT_INTERSECT (GST_BASE_PARSE_SINK_PAD (h263parse)); GST_PAD_SET_ACCEPT_TEMPLATE (GST_BASE_PARSE_SINK_PAD (h263parse)); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/gst/videoparsers/gstvc1parse.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/gst/videoparsers/gstvc1parse.c
Changed
@@ -247,11 +247,6 @@ static void gst_vc1_parse_init (GstVC1Parse * vc1parse) { - /* Default values for stream-format=raw, i.e. - * raw VC1 frames with startcodes */ - gst_base_parse_set_syncable (GST_BASE_PARSE (vc1parse), TRUE); - gst_base_parse_set_has_timing_info (GST_BASE_PARSE (vc1parse), FALSE); - gst_vc1_parse_reset (vc1parse); GST_PAD_SET_ACCEPT_INTERSECT (GST_BASE_PARSE_SINK_PAD (vc1parse)); GST_PAD_SET_ACCEPT_TEMPLATE (GST_BASE_PARSE_SINK_PAD (vc1parse)); @@ -307,6 +302,11 @@ GST_DEBUG_OBJECT (parse, "start"); gst_vc1_parse_reset (vc1parse); + /* Default values for stream-format=raw, i.e. + * raw VC1 frames with startcodes */ + gst_base_parse_set_syncable (GST_BASE_PARSE (vc1parse), TRUE); + gst_base_parse_set_has_timing_info (GST_BASE_PARSE (vc1parse), FALSE); + vc1parse->detecting_stream_format = TRUE; return TRUE;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/meson.build -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.28.5', + version : '1.28.7', meson_version : '>= 1.4', default_options : 'warning_level=1', 'buildtype=debugoptimized', @@ -535,7 +535,8 @@ gnome = import('gnome') build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled()) gir_init_section = '--add-init-section=extern void gst_init(gint*,gchar**);' + \ - 'g_setenv("GST_REGISTRY_1.0", "@0@", TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \ + 'g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);' + \ + 'g_setenv("GST_REGISTRY_1_0", "@0@", TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \ 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \ 'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \ 'g_setenv("GST_TRACERS", "", TRUE);' + \
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/po/gst-plugins-bad-1.0.pot -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.28.5\n" +"Project-Id-Version: gst-plugins-bad-1.28.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-08 23:42+0200\n" +"POT-Creation-Date: 2026-09-07 20:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/po/gst-plugins-bad.pot -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.28.5\n" +"Project-Id-Version: gst-plugins-bad-1.28.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-08 23:42+0200\n" +"POT-Creation-Date: 2026-09-07 20:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/release-notes-1.28.md -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/release-notes-1.28.md
Changed
@@ -2,11 +2,11 @@ GStreamer 1.28.0 was originally released on 27 January 2026. -The latest bug-fix release in the stable 1.28 series is 1.28.5(#1.28.5) and was released on 08 July 2026. +The latest bug-fix release in the stable 1.28 series is 1.28.7(#1.28.7) and was released on 07 September 2026. See https://gstreamer.freedesktop.org/releases/1.28/latest for the latest version of this document. -*Last updated: Wednesday 08 July 2026, 23:00 UTC (log)gitlog* +*Last updated: Monday 07 September 2026, 20:00 UTC (log)gitlog* latest: https://gstreamer.freedesktop.org/releases/1.28/ gitlog: https://gitlab.freedesktop.org/gstreamer/www/commits/main/src/htdocs/releases/1.28/release-notes-1.28.md @@ -2590,6 +2590,356 @@ - List of Merge Requests applied in 1.28.5(https://gitlab.freedesktop.org/groups/gstreamer/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged&milestone_title=1.28.5) - List of Issues fixed in 1.28.5(https://gitlab.freedesktop.org/groups/gstreamer/-/work_items?scope=all&utf8=%E2%9C%93&state=closed&milestone_title=1.28.5) +<a id="1.28.6"></a> + +### 1.28.6 + +The sixth 1.28 bug-fix release (1.28.6) was released on 05 August 2026. + +This release only contains bugfixes and important security fixessecurity. +It *should* be safe to update from 1.28.x and we recommend you do so at your +earliest convenience. + +security: https://gstreamer.freedesktop.org/security/ + +#### Highlighted bugfixes in 1.28.6 + + - Various security fixessecurity and playback fixes + - playbin3, playbin: fix stalls after re-enabling previously disabled subtitles + - Fix regression in core if a pad is re-linked while changed sticky events are being pushed + - dtls/webrtc: fix some issues with OpenSSL 4.0.0 + - RTP retransmission bitrate estimation fixes + - Fix RTP depayloading of SMPTE ST291 frames with multiple ANC packets + - Add H.266 muxing support to the Rust (f)mp4 muxers + - Better handling of input buffers without timestamps in Rust (f)mp4 muxers + - webrtcsink H.264 level/profile negotiation fixes and support for nvv4l2h265enc encoder + - SMPTE ST2038 ancillary metadata and closed caption combiner improvements + - Fix SEI insertion into H.265/HEVC streams with alpha + - Windows D3D11 WinRT screen capture element fixes + - Improved coded buffer size handling for VA encoders + - Textaccumulate: various tweaks how the element outputs text, plus better handling of French punctuation + - hlssink3: improved handling of input buffers without timestamps + - Fix build against FFmpeg 9.0 + - cerbero: fix Windows packages binary size increase regression; upgrade libsrt recipe to 1.5.6 + - Various bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements + +#### gstreamer + + - baseparse: Don't reset infer_ts/pts_interpolate subclass configuration in reset() and related fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12102) + - cpuid: fix AArch64 NEON detection to check HWCAP_ASIMD, not HWCAP_NEON(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12224) + - pad: fix livelock when pushing changed sticky events when the pad is re-linked(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12142) + - valve: Don't send a reconfigure even when setting the `drop` property to the same value(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12082) + - meson: Make the g-ir-scanner init section consistent across modules(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163) + - meson: use dependency('dl') instead of cc.find_library('dl')(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12154) + +#### gst-plugins-base + + - gl/eagl: Fix GstGLUIView leak from duplicate __bridge_retained(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12118) + - playsink: don't wait for text pad block during reconfiguration(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12178) + - typefind: Actually register various forgotten typefinders(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12098) + - meson: Make the g-ir-scanner init section consistent across modules(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163) + - Remove incorrect G_GNUC_CONST annotation for _get_type() functions and some other functions(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157) + +#### gst-plugins-good + + - aacparse: Don't assert on parsing errors or insufficient data(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12143) + - avidemux: Make sure enough data is available when parsing FUJIFILM strd and various other fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12241) + - matroskademux: Make sure enough data is available when parsing FLAC headers(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12242) + - rtph264depay: rtph265depay: Limit the maximum fragmentation unit size(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12244) + - rtpqcelpdepay: Handle changes in interleave value correctly(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12237) + - rtpsource: fix bitrate estimation for RTX(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12171) + - v4l2: Use MPLANE flag to determine n_v4l_planes directly(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12177) + - y4mdec: Some parsing fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12122) + - tests: qtmux: drain to EOS before teardown in test_caps_renego(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12200) + - Remove incorrect G_GNUC_CONST annotation for _get_type() functions and some other functions(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157) + +#### gst-plugins-bad + + - adpcmdec: Fix IMA ADPCM input size check to match with the actual code(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12245) + - baseparse: Don't reset infer_ts/pts_interpolate subclass configuration in reset() and related fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12102) + - d3d11winrtcapture: Fix incorrect capture height(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12115) + - dtls: make BIO read signal retry instead of EOF when no data(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12191) + - dtls: New DTLS test failure with OpenSSL 4.0.0(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5234) + - dvdspu: Fix too strict off-by-one bounds check in a couple of places(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12126) + - h263parse: diracparse: Sync baseparse configuration with other compressed video parsers(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12096) + - h265parser: Fix out-of-bounds writes in RPS parsing(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12239) + - h265seiinserter: Fix HEVC with alpha stream handling(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12189) + - h266parser: fix SEI parsing error handler(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12132) + - meson: Make the g-ir-scanner init section consistent across modules(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163) + - mpegpsdemux: Use byte readers for parsing data and make sure enough data is available(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12183) + - openjpegdec: Various issues related to striped mode and image origins, plus memory leaks(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12246) + - pnmdec: Don't assert if creating the output state fails and don't flush more data than is available(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12124) + - tfliteinference: fix leaks(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11404) + - tsdemux: Don't assert if stream pad was not yet created(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12162) + - vabaseenc: clamp driver-reported coded size to the coded buffer size(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12123) + - vtdec: Don't register the hw-only variant on simulators(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12112) + - vulkantrash: avoid reinitializing trash objects multiple times(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12117) + - waylandsink: Omit reporting drop frame on preroll(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12037) + - webrtcbin: fix possible floating leak for post-aux(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12085) + - wlvideobufferpool: Fix memory leak in gst_wl_video_buffer_pool_alloc_buffer(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12160) + - docs: Fix build when mse library is disabled(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12113) + - Remove incorrect G_GNUC_CONST annotation for _get_type() functions and some other functions(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157) + +#### gst-plugins-ugly + + - asfdemux: Avoid integer overflows during bounds checks(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12243) + - dvdsubdec: Clip subpicture rectangle to the frame size(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12240) + - rtpasfdepay: Drop packets that are larger than the negotiated maximum packet size and various other fixes(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12236) + +#### GStreamer Rust plugins + + - hlsbasesink: Don't unwrap() running_time when a segment is added(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3175) + - hlssink3: don't unwrap() PTS of a fragment's first buffer(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3193) + - isobmff: Add support for video/x-h266(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3165) + - isofmp4mux: use previous highest PTS when none are available(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3180) + - rtp: fix overflowing adds(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3187) + - rtpsmpte291depay: Fix depayloading frames with multiple ANC packets(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3161) + - rtprecv: fix deadlock handling RTCP packet in buffer list(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3190) + - st2038combiner: Fix off-by-one when ST-2038 pads are skewed(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3156) + - textaccumulate: output joined single buffer, add list as meta(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3150) + - webrtc: add support for nvv4l2h265enc(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3160) + - webrtcsink: handle level-asymmetry-allowed when answering(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3184) + - meson: Work around openssl-sys detection bug on Windows(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3158) + - meson: Sort entries for deterministic build results(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3209) + - Clippy and cargo test fixes(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3182) + - Fix some hotdoc markdown code blocks in various docs(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3172) + +#### gst-libav + + - Fix build failure with FFmpeg 9.0(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12221) + - libav: FFmpeg 9.0 Build Failure(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5251) + - avdemux: Close demuxer on pad deactivation instead of state change and don't use uninitialized audio channel positions(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12099) + - avdemux: Use a dynamic-sized array for the AVStreams(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12238) + +#### gst-rtsp-server + + - rtsp-server: fix racy leak in test_pool_thread_copy under valgrind(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12201) + - meson: Make the g-ir-scanner init section consistent across modules(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163) + +#### gstreamer-sharp + + - No changes + +#### gst-python + + - meson: use dependency('dl') instead of cc.find_library('dl')(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12154) + +#### gst-editing-services + + - meson: Make the g-ir-scanner init section consistent across modules(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163) + - Remove incorrect G_GNUC_CONST annotation for _get_type() functions and some other functions(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157) + +#### gst-devtools, gst-validate + gst-integration-testsuites + + - meson: Make the g-ir-scanner init section consistent across modules and fix validate g-ir-scanner invocation so that it doesn't load any plugins(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163) + - meson: use dependency('dl') instead of cc.find_library('dl')(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12154) + - Remove incorrect G_GNUC_CONST annotation for _get_type() functions and some other functions(https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157) + +#### gst-examples + + - No changes + +#### gstreamer-docs + + - No changes + +#### Development build environment + + - No changes + +#### Cerbero build tool and packaging changes in 1.28.6 + + - gst-plugins-rs: Don't incorrectly package .lib plugin static libs, fixing package binary size regression(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2307) + - windows inno installer: add support for v7(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2316) + - soundtouch: download the tarball from surina.net vice codeberg.org(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2302) + - srt: upgrade to 1.5.6(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2310) + - windows.config: fix Windows MinGW cross compilation for certain Rust recipes(https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/2304) + +#### Contributors to 1.28.6 + +Albert Sjölund, Bernhard M. Wiedemann, Charles Turner, Diego Nieto, +Emiel Van Severen, François Laignel, Gareth Sylvester-Bradley, He Junyan, +Ingmar Steen, Jan Schmidt, Jeongkeun Kim, Jerome Colle, Jihoon Lee, +L. E. Segovia, Maksim Nikolaev, Marcus Hanestad, Mathieu Duponchelle, +Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Piotr Brzeziński, Qi Hou, Reilly Brogan, Sanchayan Maity, Sebastian Dröge, +Seungha Yang, Seyi Kuforiji, Thibault Saunier, Tim-Philipp Müller, +Tjitte de Wert, + +... and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +#### List of merge requests and issues fixed in 1.28.6 + +- List of Merge Requests applied in 1.28.6(https://gitlab.freedesktop.org/groups/gstreamer/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged&milestone_title=1.28.6)
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/androidmedia/gstamc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/androidmedia/gstamc.c
Changed
@@ -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.") ||
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/androidmedia/gstamc.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/androidmedia/gstamc.h
Changed
@@ -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);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/androidmedia/gstamcvideodec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/androidmedia/gstamcvideodec.c
Changed
@@ -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 <sebastian.droege@collabora.co.uk>"); g_free (longname); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/androidmedia/gstamcvideoenc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/androidmedia/gstamcvideoenc.c
Changed
@@ -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 <sebastian.droege@collabora.co.uk>"); g_free (longname); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/applemedia/vtdec.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/applemedia/vtdec.c
Changed
@@ -2317,7 +2317,7 @@ gst_vtdec_init_once (); -#if !TARGET_OS_WATCH +#if !TARGET_OS_WATCH && !TARGET_OS_SIMULATOR #if MAC_OS_X_VERSION_MAX_ALLOWED < 140000 if (__builtin_available (macOS 10.9, iOS 17.0, tvOS 17.0, *)) #else @@ -2329,7 +2329,7 @@ return gst_element_register (plugin, "vtdec", rank, GST_TYPE_VTDEC); } -#if !TARGET_OS_WATCH +#if !TARGET_OS_WATCH && !TARGET_OS_SIMULATOR static gboolean gst_vtdec_register_vtdec_hw (GstPlugin * plugin) { @@ -2349,7 +2349,7 @@ #endif GST_ELEMENT_REGISTER_DEFINE_CUSTOM (vtdec, gst_vtdec_register_vtdec); -#if !TARGET_OS_WATCH +#if !TARGET_OS_WATCH && !TARGET_OS_SIMULATOR GST_ELEMENT_REGISTER_DEFINE_CUSTOM (vtdec_hw, gst_vtdec_register_vtdec_hw); #endif @@ -2358,7 +2358,7 @@ { gboolean ret = FALSE; -#if !TARGET_OS_WATCH +#if !TARGET_OS_WATCH && !TARGET_OS_SIMULATOR ret |= GST_ELEMENT_REGISTER (vtdec_hw, plugin); #endif ret |= GST_ELEMENT_REGISTER (vtdec, plugin);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/d3d11/gstd3d11winrtcapture.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/d3d11/gstd3d11winrtcapture.cpp
Changed
@@ -968,7 +968,7 @@ self->height = desc.Height; if (!self->window_handle || !self->client_only) { self->capture_width = self->width; - self->capture_height = self->capture_height; + self->capture_height = self->height; } size_changed = TRUE;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/d3d12/gstd3d12dxgicapture.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/d3d12/gstd3d12dxgicapture.cpp
Changed
@@ -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_buffersrc_pos >> (7 - (col % 8))) & 0x1; - auto xor_mask = (shape_buffersrc_pos + size >> (7 - (col % 8))) & 0x1; + auto xor_mask = (shape_buffersrc_pos + mask_offset >> (7 - (col % 8))) & 0x1; auto dst_pos = (row * stride_) + (col * pstride); if (and_mask) {
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/dwrite/gstdwritebaseoverlay.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/dwrite/gstdwritebaseoverlay.cpp
Changed
@@ -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;
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/hip/gsthipmemorycopy.cpp -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/hip/gsthipmemorycopy.cpp
Changed
@@ -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 *
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/hip/meson.build -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/hip/meson.build
Changed
@@ -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
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/kms/gstkmsallocator.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/kms/gstkmsallocator.h
Changed
@@ -71,7 +71,7 @@ GstAllocatorClass parent_class; }; -GType gst_kms_allocator_get_type (void) G_GNUC_CONST; +GType gst_kms_allocator_get_type (void); gboolean gst_is_kms_memory (GstMemory *mem); guint32 gst_kms_memory_get_fb_id (GstMemory *mem);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/kms/gstkmsbufferpool.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/kms/gstkmsbufferpool.h
Changed
@@ -75,7 +75,7 @@ GstVideoBufferPoolClass parent_class; }; -GType gst_kms_buffer_pool_get_type (void) G_GNUC_CONST; +GType gst_kms_buffer_pool_get_type (void); GstBufferPool *gst_kms_buffer_pool_new (void);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/kms/gstkmssink.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/kms/gstkmssink.h
Changed
@@ -114,7 +114,7 @@ GstVideoSinkClass parent_class; }; -GType gst_kms_sink_get_type (void) G_GNUC_CONST; +GType gst_kms_sink_get_type (void); GST_ELEMENT_REGISTER_DECLARE (kmssink); G_END_DECLS
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvaav1enc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvaav1enc.c
Changed
@@ -2512,6 +2512,9 @@ We do not calculate SpeedAdj and do not consider still_picture. */ base->codedbuf_size = un_compressed_size / self->cr; + base->codedbuf_size = gst_va_base_enc_adjust_coded_buffer_size (base, + base->codedbuf_size, self->rc.rc_ctrl_mode, self->rc.target_bitrate_bits); + GST_INFO_OBJECT (self, "Calculate codedbuf size: %u", base->codedbuf_size); } @@ -3967,6 +3970,7 @@ GstVaAV1EncFrame *frame_enc; GstBuffer *buf = NULL; guint num; + gboolean corrupt = FALSE; g_assert ((_enc_frame (last_frame)->flags & FRAME_TYPE_REPEAT) == 0); g_assert ((_enc_frame (last_frame)->flags & FRAME_FLAG_NOT_SHOW) == 0); @@ -3998,10 +4002,15 @@ goto error; } + if (frame_enc->base.picture->corrupt) + corrupt = TRUE; + offset += frame_size; } frame_enc = _enc_frame (last_frame); + /* If any frame is corrupt, make the whole TU as corrupt. */ + frame_enc->base.picture->corrupt |= corrupt; if (frame_enc->cached_frame_header_size > 0) { memcpy (data + offset, frame_enc->cached_frame_header,
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvabaseenc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvabaseenc.c
Changed
@@ -264,36 +264,165 @@ return gst_va_buffer_importer_import (&importer, inbuf, buf); } -GstBuffer * -gst_va_base_enc_create_output_buffer (GstVaBaseEnc * base, - GstVaEncodePicture * picture, const guint8 * prefix_data, - guint prefix_data_len) +guint +gst_va_base_enc_adjust_coded_buffer_size (GstVaBaseEnc * base, + guint codedbuf_size, guint32 rc_ctrl_mode, guint bitrate_bits) +{ + guint64 want = 0; + + /* Underflow is not allowed in CBR mode, so the driver may pad + * every frame up to the per-frame budget (bitrate/framerate). + * We double that budget to ensure safety. */ + if (rc_ctrl_mode == VA_RC_CBR && bitrate_bits > 0) { + gint fps_n = GST_VIDEO_INFO_FPS_N (&base->in_info); + gint fps_d = GST_VIDEO_INFO_FPS_D (&base->in_info); + + /* variable or unknown framerate, assume a default bitrate */ + if (fps_n <= 0 || fps_d <= 0) { + fps_n = 30; + fps_d = 1; + } + + want = 2 * (gst_util_uint64_scale (bitrate_bits, fps_d, fps_n) / 8); + if (codedbuf_size < want) { + codedbuf_size = MIN (want, (guint64) G_MAXINT); + GST_INFO_OBJECT (base, "Raise codedbuf size to %u", codedbuf_size); + } + } + + return codedbuf_size; +} + +/* We can not fully trust the segment information reported by the driver. + * Some buggy driver may set seg->buf or seg->buf+seg->size outside of our + * coded_buffer and cause crash. + * Our check policy is making sure each seg->buf and seg->buf+seg->size + * inside base_addr to base_addr+codedbuf_size, where most of the time + * base_addr is the address of the first seg->buf in seg_list. + */ +static guint +gst_va_base_enc_get_segment_safe_size (GstVaBaseEnc * base, + const guint8 * base_addr, VACodedBufferSegment * seg, gboolean * corrupt) +{ + const guint8 *buf = seg->buf; + + if (!seg->size) + return seg->size; + + if (seg->status & VA_CODED_BUF_STATUS_BAD_BITSTREAM) { + GST_WARNING_OBJECT (base, "coded buffer segment flagged as corrupt by the " + "driver (status %#x)", seg->status); + *corrupt = TRUE; + seg->size = 0; + return 0; + } + + if (seg->status & VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK) { + GST_WARNING_OBJECT (base, "coded buffer segment flagged as overflow by the " + "driver (status %#x)", seg->status); + *corrupt = TRUE; + } + + if (!buf || buf < base_addr || buf >= base_addr + base->codedbuf_size) { + GST_WARNING_OBJECT (base, "coded buffer segment start at (%p, %u bytes) is " + "out of range", buf, seg->size); + *corrupt = TRUE; + seg->size = 0; + return 0; + } + + /* clamp the reported size to what remains inside the mapping */ + if (buf + seg->size > base_addr + base->codedbuf_size) { + GST_WARNING_OBJECT (base, "coded buffer segment (%p, %u bytes) overflows, " + "clamp it", buf, seg->size); + *corrupt = TRUE; + + seg->size = base->codedbuf_size - (guint) (buf - base_addr); + } + + return seg->size; +} + +static gboolean +gst_va_base_enc_map_coded_buffer (GstVaBaseEnc * base, + GstVaEncodePicture * picture, VACodedBufferSegment ** seg_list) { - guint coded_size; - goffset offset; - GstBuffer *buf = NULL; VASurfaceID surface; - VACodedBufferSegment *seg, *seg_list; + VACodedBufferSegment *segs = NULL; - /* Wait for encoding to finish */ surface = gst_va_encode_picture_get_raw_surface (picture); + /* Wait for encoding to finish */ if (!va_sync_surface (base->display, surface)) - goto error; + return FALSE; - seg_list = NULL; if (!va_map_buffer (base->display, picture->coded_buffer, - GST_MAP_READ, (gpointer *) & seg_list)) - goto error; + GST_MAP_READ, (gpointer *) & segs)) + return FALSE; - if (!seg_list) { + if (!segs) { va_unmap_buffer (base->display, picture->coded_buffer); GST_WARNING_OBJECT (base, "coded buffer has no segment list"); - goto error; + return FALSE; + } + + *seg_list = segs; + return TRUE; +} + +static gboolean +gst_va_base_enc_map_and_measure_coded_buffer (GstVaBaseEnc * base, + GstVaEncodePicture * picture, VACodedBufferSegment ** seg_list, + guint * coded_size) +{ + const guint8 *base_addr; + VACodedBufferSegment *seg; + + if (!gst_va_base_enc_map_coded_buffer (base, picture, seg_list)) + return FALSE; + + base_addr = (*seg_list)->buf; + *coded_size = 0; + for (seg = *seg_list; seg; seg = seg->next) + *coded_size += gst_va_base_enc_get_segment_safe_size (base, base_addr, seg, + &picture->corrupt); + + return TRUE; +} + +static guint +gst_va_base_enc_copy_coded_segments (VACodedBufferSegment * seg_list, + const guint8 * prefix_data, guint prefix_data_len, guint8 * dst) +{ + VACodedBufferSegment *seg; + guint offset = 0; + + if (prefix_data) { + g_assert (prefix_data_len > 0); + memcpy (dst, prefix_data, prefix_data_len); + offset = prefix_data_len; } - coded_size = 0; - for (seg = seg_list; seg; seg = seg->next) - coded_size += seg->size; + for (seg = seg_list; seg; seg = seg->next) { + memcpy (dst + offset, seg->buf, seg->size); + offset += seg->size; + } + + return offset; +} + +GstBuffer * +gst_va_base_enc_create_output_buffer (GstVaBaseEnc * base, + GstVaEncodePicture * picture, const guint8 * prefix_data, + guint prefix_data_len) +{ + guint coded_size; + GstBuffer *buf = NULL; + GstMapInfo info; + VACodedBufferSegment *seg_list = NULL; + + if (!gst_va_base_enc_map_and_measure_coded_buffer (base, picture, &seg_list, + &coded_size)) + return NULL; buf = gst_video_encoder_allocate_output_buffer (GST_VIDEO_ENCODER_CAST (base), coded_size + prefix_data_len); @@ -301,35 +430,23 @@ va_unmap_buffer (base->display, picture->coded_buffer); GST_ERROR_OBJECT (base, "Failed to allocate output buffer, size %d", coded_size); - goto error; + return NULL; } - offset = 0; - if (prefix_data) { - g_assert (prefix_data_len > 0); - gst_buffer_fill (buf, offset, prefix_data, prefix_data_len); - offset += prefix_data_len; + if (!gst_buffer_map (buf, &info, GST_MAP_WRITE)) { + gst_clear_buffer (&buf); + va_unmap_buffer (base->display, picture->coded_buffer);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvabaseenc.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvabaseenc.h
Changed
@@ -146,6 +146,10 @@ void gst_va_base_enc_add_codec_tag (GstVaBaseEnc * base, const gchar * codec_name); void gst_va_base_enc_reset_state (GstVaBaseEnc * base); +guint gst_va_base_enc_adjust_coded_buffer_size (GstVaBaseEnc * base, + guint codedbuf_size, + guint32 rc_ctrl_mode, + guint bitrate_bits); GstBuffer * gst_va_base_enc_create_output_buffer (GstVaBaseEnc * base, GstVaEncodePicture * picture, const guint8 * prefix_data,
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvaencoder.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvaencoder.c
Changed
@@ -1229,6 +1229,7 @@ pic->raw_buffer = gst_buffer_ref (raw_buffer); pic->reconstruct_buffer = reconstruct_buffer; pic->coded_buffer = coded_buffer; + pic->corrupt = FALSE; pic->params = g_array_sized_new (FALSE, FALSE, sizeof (VABufferID), 8);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvaencoder.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvaencoder.h
Changed
@@ -40,6 +40,7 @@ GstBuffer *reconstruct_buffer; VABufferID coded_buffer; + gboolean corrupt; }; gboolean gst_va_encoder_is_open (GstVaEncoder * self);
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvafilter.h -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvafilter.h
Changed
@@ -58,10 +58,10 @@ }; #define GST_TYPE_VA_SCALE_METHOD gst_va_scale_method_get_type() -GType gst_va_scale_method_get_type (void) G_GNUC_CONST; +GType gst_va_scale_method_get_type (void); #define GST_TYPE_VA_INTERPOLATION_METHOD gst_va_interpolation_method_get_type() -GType gst_va_interpolation_method_get_type (void) G_GNUC_CONST; +GType gst_va_interpolation_method_get_type (void); typedef struct _GstVaSample GstVaSample; struct _GstVaSample
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvah264enc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvah264enc.c
Changed
@@ -1289,6 +1289,9 @@ /* Add 5% for safety */ base->codedbuf_size = (guint) ((gfloat) codedbuf_size * 1.05); + base->codedbuf_size = gst_va_base_enc_adjust_coded_buffer_size (base, + base->codedbuf_size, self->rc.rc_ctrl_mode, self->rc.target_bitrate_bits); + GST_DEBUG_OBJECT (self, "Calculate codedbuf size: %u", base->codedbuf_size); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvah265enc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvah265enc.c
Changed
@@ -3770,7 +3770,8 @@ codedbuf_size += self->partition.num_slices * (4 + GST_ROUND_UP_8 (MAX_SLICE_HDR_SIZE + MAX_SHORT_TERM_REFPICSET_SIZE) / 8); - base->codedbuf_size = codedbuf_size; + base->codedbuf_size = gst_va_base_enc_adjust_coded_buffer_size (base, + codedbuf_size, self->rc.rc_ctrl_mode, self->rc.target_bitrate_bits); GST_INFO_OBJECT (self, "Calculate codedbuf size: %u", base->codedbuf_size); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvavp8enc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvavp8enc.c
Changed
@@ -335,6 +335,10 @@ /* Safe choice, 2 times 4:2:0 framesize plus header. */ base->codedbuf_size = 3 * width * height + 1278; + + base->codedbuf_size = gst_va_base_enc_adjust_coded_buffer_size (base, + base->codedbuf_size, self->rc.rc_ctrl_mode, self->rc.target_bitrate_bits); + GST_INFO_OBJECT (self, "Calculate codedbuf size: %u", base->codedbuf_size); }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/sys/va/gstvavp9enc.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/sys/va/gstvavp9enc.c
Changed
@@ -1768,7 +1768,8 @@ codedbuf_size = codedbuf_size / 2; } - base->codedbuf_size = codedbuf_size; + base->codedbuf_size = gst_va_base_enc_adjust_coded_buffer_size (base, + codedbuf_size, self->rc.rc_ctrl_mode, self->rc.target_bitrate_bits); GST_INFO_OBJECT (self, "Calculate codedbuf size: %u", base->codedbuf_size); } @@ -2560,6 +2561,7 @@ GstBuffer *buf = NULL; gint frame_sizeGST_VP9_MAX_FRAMES_IN_SUPERFRAME = { 0, }; guint num; + gboolean corrupt = FALSE; g_assert ((_enc_frame (last_frame)->flags & FRAME_TYPE_REPEAT) == 0); g_assert ((_enc_frame (last_frame)->flags & FRAME_FLAG_NOT_SHOW) == 0); @@ -2585,10 +2587,16 @@ goto error; } + if (frame_enc->base.picture->corrupt) + corrupt = TRUE; + offset += frame_sizenum; } frame_enc = _enc_frame (last_frame); + /* If any frame is corrupt, make the whole super frame as corrupt. */ + frame_enc->base.picture->corrupt |= corrupt; + frame_sizenum = gst_va_base_enc_copy_output_data (base, frame_enc->base.picture, data + offset, total_sz - offset); if (frame_sizenum <= 0) {
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/check/elements/pnm.c -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/check/elements/pnm.c
Changed
@@ -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) headersi, strlen (headersi), 0, strlen (headersi), + 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'", headersi); + fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR, + "expected error, got %s for header '%s'", + GST_MESSAGE_TYPE_NAME (msg), headersi); + 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; }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/autovideoconvert/renegotiate.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/autovideoconvert/renegotiate.validatetest
Changed
@@ -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, }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/codectimestamper/h264_propagate_caps.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/codectimestamper/h264_propagate_caps.validatetest
Changed
@@ -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, + }, } - -
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/opencv/cvtracker.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/opencv/cvtracker.validatetest
Changed
@@ -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
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/testsrcbin/caps_spec.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/testsrcbin/caps_spec.validatetest
Changed
@@ -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, }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/vtenc/vtenc_h264.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/vtenc/vtenc_h264.validatetest
Changed
@@ -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, }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/vtenc/vtenc_h264_b_frames.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/vtenc/vtenc_h264_b_frames.validatetest
Changed
@@ -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, }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/vtenc/vtenc_h265.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/vtenc/vtenc_h265.validatetest
Changed
@@ -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, }
View file
_service:download_files:gst-plugins-bad-1.28.5.tar.xz/tests/validate/vtenc/vtenc_h265_b_frames.validatetest -> _service:download_files:gst-plugins-bad-1.28.7.tar.xz/tests/validate/vtenc/vtenc_h265_b_frames.validatetest
Changed
@@ -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, }
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.