Projects
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
Changes of Revision 8
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Wed Oct 26 13:32:09 UTC 2022 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.20.4 + +------------------------------------------------------------------- Sat Jun 25 13:49:39 UTC 2022 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.20.3
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.20.0 Name: gstreamer-plugins-bad-codecs -Version: 1.20.3 +Version: 1.20.4 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
gst-plugins-bad-1.20.3.tar.xz/ChangeLog -> gst-plugins-bad-1.20.4.tar.xz/ChangeLog
Changed
@@ -1,7 +1,387 @@ +=== release 1.20.4 === + +2022-10-12 16:39:47 +0100 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.20.4 + +2022-10-12 16:39:40 +0100 Tim-Philipp Müller <tim@centricular.com> + + * ChangeLog: + Update ChangeLogs for 1.20.4 + +2022-08-08 23:37:11 +0900 Seungha Yang <seungha@centricular.com> + + * gst/mxf/mxfaes-bwf.c: + mxfdemux: Always calculate BlockAlign of raw audio + Workaround for nBlockAlign and nBitsPerSample mismatch. Always + use the formula described in the specification for BlockAlign value + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3149> + +2022-09-14 00:58:37 +0900 Seungha Yang <seungha@centricular.com> + + * sys/nvcodec/gstnvdec.c: + nvdec: Fix for HEVC decoding when coded resolution is larger than display resolution + As documented in the SDK header, we should set coded width/height + values to the corresponding decoder configuration option, + instead of display resolution + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1438 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3143> + +2022-09-22 22:39:31 +0900 Sangchul Lee <sc11.lee@samsung.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Fix pointer dereference before null check + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3133> + +2022-10-05 15:59:03 +0900 Sangchul Lee <sc11.lee@samsung.com> + + * ext/webrtc/gstwebrtcice.c: + webrtc/nice: Make sure to return NULL when validating turn server fails + It affects 'add-turn-server' signal action and 'turn-server' property + of webrtcbin. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3124> + +2022-09-20 23:31:45 +0300 Mart Raudsepp <mart@leio.tech> + + * gst/mpegtsdemux/mpegtsbase.c: + tsdemux: Don't trigger a program change when falling back to ignore-pcr behaviour + Since commit a79a756b79aa1675e we could change to ignore-pcr automatically at 500ms + into a live stream when no PCR is seen by then. However the stream counting in + program change detection was wrongly considering ignore-pcr programs to have a + separate PCR PID, even though we are actually ignoring the PCR PID completely, + resulting in an erroneous program switch getting triggered from the different + stream count. This in turn would send an EOS and switch out the pads for what + actually is still the same program, while we intended to simply apply a + workaround for broken encoders. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3089> + +2022-03-25 14:25:02 +1100 Andrew Pritchard <andrew@vivi.io> + + * sys/androidmedia/jni/gstamcsurfacetexture-jni.c: + Fix GstAmcSurfaceTexture segfault Check that `self` and `self->callback` are defined. `self` can be set to `NULL` in `remove_listener`, and `self->callback` can be set to `NULL` inside `gst_amc_surface_texture_jni_set_on_frame_available_callback`. This can cause a segfault since the Java object can outlive the C object, and call the callback after `remove_listener` is called. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3056> + +2022-08-25 14:24:25 +0200 Piotr Brzeziński <piotr@centricular.com> + + * sys/applemedia/avfvideosrc.m: + avfvideosrc: Fix wrong default framerate value + Current default G_MAXINT is not a correct value under any circumstances. + This creates an issue with screen capture, during which we currently do + not get any framerate info causing G_MAXINT to show up, where elements + downstream can possibly misbehave - for example, `vtenc` causes + a kernel panic. + Replace with 30/1 to avoid such scenarios. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2946> + +2022-08-20 16:15:15 +0100 Philippe Normand <philn@igalia.com> + + * ext/openh264/gstopenh264dec.cpp: + * ext/openh264/gstopenh264enc.cpp: + openh264: Register debug categories earlier + Otherwise the GST_ERROR message logged in case of ABI mismatch would be done on + an uninitialized category. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2924> + +2022-08-20 16:57:27 +0100 Philippe Normand <philn@igalia.com> + + * ext/openh264/gstopenh264enc.cpp: + openh264enc: Fix constrained-high encoding + constrained-high is high without B-frames, there is no EProfileIdc for this, so + assume high instead of hitting an assert down the line. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2921> + +2022-08-14 22:31:29 -0400 Daniel Morin <daniel.morin@collabora.com> + + * gst-libs/gst/play/gstplay-media-info.h: + * gst-libs/gst/play/gstplay-signal-adapter.h: + * gst-libs/gst/play/gstplay-video-overlay-video-renderer.h: + * gst-libs/gst/play/gstplay-video-renderer.h: + * gst-libs/gst/play/gstplay-visualization.h: + gst-play: missing cleanup for g_autoptr + Without this change cleanup function for g_autoptr is not defined for + GstPlayMediaInfo, GstPlaySignalAdapter, GstPlayVideoRenderer, + GstPlayVideoOverlayVideoRenderer and GstPlayVisualization. Cleanup + function was defined in gstplay.h, but missing in other header files. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2904> + +2022-08-13 12:24:37 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/player/gstplayer-media-info.c: + player: Don't leak wrapped video info + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1373 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2881> + +2022-08-13 11:50:20 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/play/gstplay.c: + play: Make ownership of video-sink clearer in combination with floating references + And correctly handle the case of VideoRenderer::create_video_sink() not + actually returning a floating reference, which might be tricky for some + bindings. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2881> + +2022-08-13 11:49:08 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/play/gstplay.c: + play: Fix object construction + Ideally new() functions should simply call g_object_new() and not much + else, so let's do that here and handle all the construction properly in + a GObject way. + Now a play object created via g_object_new() is actually usable. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2881> + +2022-08-13 11:39:59 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/player/gstplayer.c: + player: Fix object construction + Ideally new() functions should simply call g_object_new() and not much + else, so let's do that here and handle all the construction properly in + a GObject way. + Now a player object created via g_object_new() is actually usable. + In addition, also fix the video-renderer property so that reading it + returns an object of the correct type. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2881> + +2022-08-13 11:30:35 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/player/gstplayer.c: + player: Release signal adapter on finalize + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2881> + +2022-08-12 18:24:41 +0300 Matthias Clasen <mclasen@redhat.com> + + * gst-libs/gst/player/gstplayer.c: + gstplayer: Plug a memory leak + This was showing up as a memory leak in GTK's + gstreamer media backend: + 40 bytes in 1 blocks are definitely lost in loss record 18,487 of 40,868 + at 0x484586F: malloc (vg_replace_malloc.c:381) + by 0x50D5278: g_malloc (gmem.c:125) + by 0x50EDBA5: g_slice_alloc (gslice.c:1072) + by 0x50EFBCC: g_slice_alloc0 (gslice.c:1098) + by 0x51F2F45: g_type_create_instance (gtype.c:1911) + by 0x51DAE37: g_object_new_internal (gobject.c:2011) + by 0x51DC080: g_object_new_with_properties (gobject.c:2181) + by 0x51DCB20: g_object_new (gobject.c:1821) + by 0x9855F86: UnknownInlinedFun (gstplayer-wrapped-video-renderer.c:109) + by 0x9855F86: gst_player_new (gstplayer.c:579) + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1374 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2876> + +2022-07-30 02:29:49 +0530 Nirbheek Chauhan <nirbheek@centricular.com> + + * ext/sctp/usrsctp/meson.build: + meson: Don't pass -Werror to vendored code + Do it the correct way with libusrsctp -- override the option so that + it's done in a compiler-agnostic and future-proof way. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2818> + +2022-05-25 18:40:30 +0530 Nirbheek Chauhan <nirbheek@centricular.com> + + * gst/rtmp2/gstrtmp2locationhandler.c: + * gst/rtmp2/rtmp/rtmpclient.c: + rtsp+rtmp: Forward warning added to tls-validation-flags to our users + With the 2.72 release, glib-networking developers have decided that + TLS certificate validation cannot be implemented correctly by them, so + they've deprecated it. + In a nutshell: a cert can have several validation errors, but there + are no guarantees that the TLS backend will return all those errors, + and things are made even more complicated by the fact that the list of + errors might refer to certs that are added for backwards-compat and + won't actually be used by the TLS library. + Our best option is to ignore the deprecation and pass the warning onto + users so they can make an appropriate security decision regarding + this. + We can't deprecate the tls-validation-flags property because it is
View file
gst-plugins-bad-1.20.3.tar.xz/NEWS -> gst-plugins-bad-1.20.4.tar.xz/NEWS
Changed
@@ -2,13 +2,13 @@ GStreamer 1.20.0 was originally released on 3 February 2022. -The latest bug-fix release in the 1.20 series is 1.20.3 and was released -on 15 June 2022. +The latest bug-fix release in the 1.20 series is 1.20.4 and was released +on 12 October 2022. See https://gstreamer.freedesktop.org/releases/1.20/ for the latest version of this document. -Last updated: Monday 15 June 2022, 17:00 UTC (log) +Last updated: Wednesday 12 October 2022, 15:00 UTC (log) Introduction @@ -757,7 +757,8 @@ - matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. + profile/level changes, and from 1.20.4 onwards also resolution + changes. - matroskamux: new "cluster-timestamp-offset" property, useful for use cases where the container timestamps should map to some absolute @@ -909,7 +910,7 @@ - vp8enc: finish support for temporal scalability: two new properties ("temporal-scalability-layer-flags", "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); + "temporal-scalability-target-bitrate” property (now expects bps); also make temporal scalability details available to RTP payloaders as buffer metadata. @@ -1754,7 +1755,7 @@ names of internal elements anyway. - The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent + "temporal-scalability-target-bitrate” property, which is consistent with the "target-bitrate" property. Since additional configuration is required with modern libvpx to make temporal scaling work anyway, chances are that very few people will have been using this property @@ -2503,15 +2504,293 @@ - List of Merge Requests applied in 1.20.3 - List of Issues fixed in 1.20.3 +1.20.4 + +The fourth 1.20 bug-fix release (1.20.4) was released on 12 October +2022. + +This release only contains bugfixes and it should be safe to upgrade +from 1.20.x. + +Highlighted bugfixes in 1.20.4 + +- avaudiodec: fix playback issue with WMA files, would throw an error + at EOS with FFmpeg 5.x +- Fix deadlock when loading gst-editing-services plugin +- Fix input buffering capacity in live mode for aggregator, + video/audio aggregator subclasses, muxers +- glimagesink: fix crash on Android +- subtitle handling and subtitle overlay fixes +- matroska-mux: allow width + height changes for avc3|hev1|vp8|vp9 +- rtspsrc: fix control url handling for spec compliant servers and add + fallback for incompliant servers +- WebRTC fixes +- RTP retransmission fixes +- video: fixes for formats with 4x subsampling and horizontal co-sited + chroma (Y41B, YUV9, YVU9 and IYU9) +- macOS build and packaging fixes, in particular fix finding of gio + modules on macOS for https/TLS support +- Performance improvements +- Miscellaneous bug fixes, memory leak fixes, and other stability and + reliability improvements + +gstreamer + +- buffer: drop parent meta in deep copy/foreach_metadata +- devicemonitor: Use a sync bus handler for the provider to avoid + accumulating all messages until the provider is stopped +- element: Fix requesting of pads with string templates +- gst: Protect initialization state with a recursive mutex +- gst: add missing define guard for build without gstreamer debug + logging support +- gst_init: Initialize static plugins just before dynamic plugins +- info: Parse “NONE” as a valid level name +- meta: Set the parent refcount of the GstStructure correctly +- pluginloader: Don’t hang on short reads/writes +- tracers: leaks: fix potentially invalid memory access when trying to + detect object type +- tracers: leaks: fix object-refings.class flags +- uri: When setting the same string again do nothing +- value: Don’t loop forever when serializing invalid flag + +Base Libraries + +- aggregator: fix input buffering in live mode (was too low before in + many cases) +- aggregator: fix reversed active/flushing arguments in debug log + output +- aggregator: Reset EOS flag after receiving a stream-start event + +Core Elements + +- queue2: Hold the lock when modifying sinkresult +- queue2: Fix deadlock when deactivate is called in pull mode + +gst-plugins-base + +- decodebin3: fix mutex leaks +- decodebin3: Fix memory issues with active selection list +- decodebin3, uridecodebin3, urisourcebin: Event handling fixes +- decodebin3: fix EOS event sequence +- parsebin: Avoid crash with unknown streams +- parsebin: SIGSEGV during HLS stream using souphttpsrc +- glimagesink: only allow setting the GL display/context if it is a + valid value +- glimagesink: segfault on android devices +- gstgl: Fix several memory leaks in macOS +- opusenc: improve inband-fec property documentation +- playsink: Hold a reference to the soft volume element +- pbutils: descriptions: fix gst_pb_utils_get_caps_description_flags() +- rtspurl: Use gst_uri_join_strings() in + gst_rtsp_url_get_request_uri_with_control() instead of a + hand-crafted, wrong version +- rtspconnection: protect cancellable by a mutex +- sdpmessage: Don’t set SDP medias from caps without + media/payload/clock-rate fields +- samiparse: fix handling of self-closing tags +- ssaparse: include required system headers for isspace() and sscanf() + functions +- subparse: fix crash when parsing invalid timestamps in mpl2 +- subparse fixes +- textoverlay: Don’t miscalculate text running times +- videoaggregator: always convert when user provides converter-config +- video: Fix scaling in 4x horizontal co-sited chroma (Y41B, YUV9, + YVU9 and IYU9) +- xmptag: register musicbrainz tags during init to fix critical in + jpegparse +- xvimagesink: fix image leaks in error code path +- tests: skip unit tests for dependency-less elements that have been + disabled + +Tools + +- No changes + +gst-plugins-good + +- alpha: fix stride issue when out buffer has padding on right +- isoff: Fix earliest pts field parse issue +- matroska-mux: allow width + height changes for avc3|hev1|vp8|vp9 +- qt: Fix another instance of Qt/GStreamer both defining GLsync + differently +- qtdemux: Avoid crash on reconfiguring. +- qtdemux: guard against timestamp calculation overflow in gap event + loop +- qtdemux: Don’t use invalid values from failed trex parsing +- qtdemux: possible endless loop +- rtpjitterbuffer: Only unschedule timers for late packets if they’re + not RTX packets and only once +- rtpjitterbuffer: remove lost timer for out of order packets +- rtspsrc: SETUP generates 400 Bad Request +- rtspsrc: Retry SETUP with non-compliant URL resolution on “Bad + Request” and “Not found” +- rtpst2022-1-fecenc: Drain column packets on EOS +- rtpvp8depay: If configured to wait for keyframes after packet loss, + also do that if incomplete frames are detected +- splitmuxsink: Don’t crash on EOS without buffer +- splitmuxsrc: Stop pad task before cleanup +- splitmuxsrc: don’t consider unlinked pads when deactivating part +- soup: libsoup3 makes audio streaming stop +- v4l2: fix critical when unreferencign buffer with no data +- v4l2bufferpool: Fix debug trace +- v4l2object: Add support for Apple’s full-range bt709 colorspace + variant 1:3:5:1 +- v4l2videocodec: workaround for failure to fully drain frames + preceding MIDSTREAM renegotiation +- v4l2allocator: Fix invalid imported dmabuf fd +- videoflip: Fix caps negotiation when method is selected +- build failure trying to build jack examples +- examples: don’t try and build jack examples if jack was disabled +- tests: skip unit tests for dependency-less elements that have been + disabled + +gst-plugins-bad + +- amcvideodec: fix GstAmcSurfaceTexture segfault +- audiobuffersplit: Fix drift that was introduced by wrong + calculations in gapless mode +- avfvideosrc: Fix wrong default framerate value +- audiovisualizer: fix buffer mapping to not increase refcount +- d3d11decoder: Check 16K resolution support +- d3d11videosink: Fix for force-aspect-ratio setting when rendering on + shared texture +- mxfdemux: Always calculate BlockAlign of raw audio to work around
View file
gst-plugins-bad-1.20.3.tar.xz/RELEASE -> gst-plugins-bad-1.20.4.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.20.3. +This is GStreamer gst-plugins-bad 1.20.4. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
gst-plugins-bad-1.20.3.tar.xz/ext/dtls/gstdtlscertificate.c -> gst-plugins-bad-1.20.4.tar.xz/ext/dtls/gstdtlscertificate.c
Changed
@@ -221,14 +221,24 @@ #if OPENSSL_VERSION_NUMBER < 0x10100001L rsa = RSA_generate_key (2048, RSA_F4, NULL, NULL); #else + /* + * OpenSSL 3.0 deprecated all low-level APIs, so we need to rewrite this code + * to get rid of the warnings. The porting guide explicitly recommends + * disabling the warnings if this is not feasible, so let's do that for now: + * https://wiki.openssl.org/index.php/OpenSSL_3.0#Upgrading_to_OpenSSL_3.0_from_OpenSSL_1.1.1 + */ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; rsa = RSA_new (); + G_GNUC_END_IGNORE_DEPRECATIONS; if (rsa != NULL) { BIGNUM *e = BN_new (); + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; if (e == NULL || !BN_set_word (e, RSA_F4) || !RSA_generate_key_ex (rsa, 2048, e, NULL)) { RSA_free (rsa); rsa = NULL; } + G_GNUC_END_IGNORE_DEPRECATIONS; if (e) BN_free (e); } @@ -236,16 +246,20 @@ if (!rsa) { GST_WARNING_OBJECT (self, "failed to generate RSA"); + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; EVP_PKEY_free (priv->private_key); + G_GNUC_END_IGNORE_DEPRECATIONS; priv->private_key = NULL; X509_free (priv->x509); priv->x509 = NULL; return; } + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; if (!EVP_PKEY_assign_RSA (priv->private_key, rsa)) { GST_WARNING_OBJECT (self, "failed to assign RSA"); RSA_free (rsa); + G_GNUC_END_IGNORE_DEPRECATIONS; rsa = NULL; EVP_PKEY_free (priv->private_key); priv->private_key = NULL; @@ -259,7 +273,9 @@ /* Set a random 64 bit integer as serial number */ serial_number = BN_new (); + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; BN_pseudo_rand (serial_number, 64, 0, 0); + G_GNUC_END_IGNORE_DEPRECATIONS; asn1_serial_number = X509_get_serialNumber (priv->x509); BN_to_ASN1_INTEGER (serial_number, asn1_serial_number); BN_free (serial_number);
View file
gst-plugins-bad-1.20.3.tar.xz/ext/openh264/gstopenh264dec.cpp -> gst-plugins-bad-1.20.4.tar.xz/ext/openh264/gstopenh264dec.cpp
Changed
@@ -86,10 +86,7 @@ /* class initialization */ -G_DEFINE_TYPE_WITH_CODE (GstOpenh264Dec, gst_openh264dec, - GST_TYPE_VIDEO_DECODER, - GST_DEBUG_CATEGORY_INIT (gst_openh264dec_debug_category, "openh264dec", 0, - "debug category for openh264dec element")); +G_DEFINE_TYPE (GstOpenh264Dec, gst_openh264dec, GST_TYPE_VIDEO_DECODER); GST_ELEMENT_REGISTER_DEFINE_CUSTOM (openh264dec, openh264dec_element_init); static void @@ -455,10 +452,12 @@ static gboolean openh264dec_element_init (GstPlugin * plugin) { + GST_DEBUG_CATEGORY_INIT (gst_openh264dec_debug_category, "openh264dec", 0, + "debug category for openh264dec element"); if (openh264_element_init (plugin)) return gst_element_register (plugin, "openh264dec", GST_RANK_MARGINAL, GST_TYPE_OPENH264DEC); - GST_ERROR ("Incorrect library version loaded, expecting %s", g_strCodecVer); - return FALSE; + GST_ERROR ("Incorrect library version loaded, expecting %s", g_strCodecVer); + return FALSE; }
View file
gst-plugins-bad-1.20.3.tar.xz/ext/openh264/gstopenh264enc.cpp -> gst-plugins-bad-1.20.4.tar.xz/ext/openh264/gstopenh264enc.cpp
Changed
@@ -234,10 +234,7 @@ /* class initialization */ G_DEFINE_TYPE_WITH_CODE (GstOpenh264Enc, gst_openh264enc, - GST_TYPE_VIDEO_ENCODER, - G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL); - GST_DEBUG_CATEGORY_INIT (gst_openh264enc_debug_category, "openh264enc", 0, - "debug category for openh264enc element")); + GST_TYPE_VIDEO_ENCODER, G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL)); GST_ELEMENT_REGISTER_DEFINE_CUSTOM (openh264enc, openh264enc_element_init); static void @@ -711,11 +708,12 @@ gst_structure_set (s, "profile", G_TYPE_STRING, profile, NULL); if (!g_strcmp0 (profile, "constrained-baseline") || - !g_strcmp0 (profile, "baseline")) + !g_strcmp0 (profile, "baseline")) return PRO_BASELINE; - else if (!g_strcmp0 (profile, "main")) + else if (!g_strcmp0 (profile, "main")) return PRO_MAIN; - else if (!g_strcmp0 (profile, "high")) + else if (!g_strcmp0 (profile, "high") || + !g_strcmp0 (profile, "constrained-high")) return PRO_HIGH; g_assert_not_reached (); @@ -1056,13 +1054,16 @@ return GST_FLOW_OK; } + static gboolean openh264enc_element_init (GstPlugin * plugin) { + GST_DEBUG_CATEGORY_INIT (gst_openh264enc_debug_category, "openh264enc", 0, + "debug category for openh264enc element"); if (openh264_element_init (plugin)) return gst_element_register (plugin, "openh264enc", GST_RANK_MARGINAL, - GST_TYPE_OPENH264ENC); + GST_TYPE_OPENH264ENC); - GST_ERROR ("Incorrect library version loaded, expecting %s", g_strCodecVer); - return FALSE; + GST_ERROR ("Incorrect library version loaded, expecting %s", g_strCodecVer); + return FALSE; }
View file
gst-plugins-bad-1.20.3.tar.xz/ext/openmpt/gstopenmptdec.c -> gst-plugins-bad-1.20.4.tar.xz/ext/openmpt/gstopenmptdec.c
Changed
@@ -562,8 +562,14 @@ * need to query it here, *before* any openmpt_module_select_subsong() * calls are done */ { + +#if OPENMPT_API_VERSION_AT_LEAST(0,5,0) + gchar const *subsong_cstr = + openmpt_module_ctl_get_text (openmpt_dec->mod, "subsong"); +#else gchar const *subsong_cstr = openmpt_module_ctl_get (openmpt_dec->mod, "subsong"); +#endif gchar *endptr; if (subsong_cstr != NULL) {
View file
gst-plugins-bad-1.20.3.tar.xz/ext/opus/gstopusheader.h -> gst-plugins-bad-1.20.4.tar.xz/ext/opus/gstopusheader.h
Changed
@@ -26,6 +26,10 @@ G_BEGIN_DECLS +#define gst_opus_header_is_header gst_opusparse_header_is_header +#define gst_opus_header_is_id_header gst_opusparse_header_is_id_header +#define gst_opus_header_is_comment_header gst_opusparse_header_is_comment_header + extern gboolean gst_opus_header_is_header (GstBuffer * buf, const char *magic, guint magic_size); extern gboolean gst_opus_header_is_id_header (GstBuffer * buf);
View file
gst-plugins-bad-1.20.3.tar.xz/ext/sctp/usrsctp/meson.build -> gst-plugins-bad-1.20.4.tar.xz/ext/sctp/usrsctp/meson.build
Changed
@@ -31,7 +31,6 @@ '-Wno-missing-declarations', '-Wno-old-style-definition', '-Wno-redundant-decls', - '-Wno-error', ) endif @@ -170,6 +169,7 @@ c_args: compile_args, dependencies: dependencies, include_directories: include_dirs, + override_options: 'werror=false', install: false) # Declare dependency
View file
gst-plugins-bad-1.20.3.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.20.4.tar.xz/ext/webrtc/gstwebrtcbin.c
Changed
@@ -488,8 +488,10 @@ direction, "template", template, NULL); gst_object_unref (template); - gst_pad_set_event_function (GST_PAD (pad), gst_webrtcbin_sink_event); - gst_pad_set_query_function (GST_PAD (pad), gst_webrtcbin_sink_query); + if (direction == GST_PAD_SINK) { + gst_pad_set_event_function (GST_PAD (pad), gst_webrtcbin_sink_event); + gst_pad_set_query_function (GST_PAD (pad), gst_webrtcbin_sink_query); + } gst_pad_add_probe (GST_PAD (pad), GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, webrtc_bin_pad_buffer_cb, NULL, NULL); @@ -3085,7 +3087,15 @@ /* this only looks at the first structure so we loop over the given caps * and add each structure inside it piecemeal */ - gst_sdp_media_set_media_from_caps (format, media); + if (gst_sdp_media_set_media_from_caps (format, media) != GST_SDP_OK) { + GST_ERROR_OBJECT (webrtc, + "Failed to build media from caps %" GST_PTR_FORMAT + " for transceiver %" GST_PTR_FORMAT, format, trans); + gst_caps_unref (caps); + gst_caps_unref (format); + gst_structure_free (extmap); + return FALSE; + } gst_caps_unref (format); } @@ -4125,7 +4135,13 @@ } } - gst_sdp_media_set_media_from_caps (answer_caps, media); + if (gst_sdp_media_set_media_from_caps (answer_caps, media) != GST_SDP_OK) { + GST_WARNING_OBJECT (webrtc, + "Could not build media from caps %" GST_PTR_FORMAT, answer_caps); + gst_clear_caps (&answer_caps); + gst_clear_caps (&offer_caps); + goto rejected; + } _get_rtx_target_pt_and_ssrc_from_caps (answer_caps, &target_pt, &target_ssrc); @@ -5746,6 +5762,12 @@ continue; } + if (!pad->trans) { + GST_LOG_OBJECT (pad, "doesn't have a transceiver"); + tmp = tmp->next; + continue; + } + if (pad->trans->mline >= gst_sdp_message_medias_len (sd->sdp->sdp)) { GST_DEBUG_OBJECT (pad, "not mentioned in this description. Skipping"); tmp = tmp->next; @@ -5761,12 +5783,6 @@ tmp = tmp->next; continue; } - - if (!pad->trans) { - GST_LOG_OBJECT (pad, "doesn't have a transceiver"); - tmp = tmp->next; - continue; - } new_dir = pad->trans->direction; if (new_dir != GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDONLY &&
View file
gst-plugins-bad-1.20.3.tar.xz/ext/webrtc/gstwebrtcice.c -> gst-plugins-bad-1.20.4.tar.xz/ext/webrtc/gstwebrtcice.c
Changed
@@ -928,12 +928,19 @@ } } -out: g_list_free (keys); g_free (user); g_free (pass); return uri; + +out: + g_list_free (keys); + g_free (user); + g_free (pass); + gst_uri_unref (uri); + + return NULL; } void
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/play/gstplay-media-info.h -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/play/gstplay-media-info.h
Changed
@@ -215,6 +215,10 @@ typedef struct _GstPlayMediaInfo GstPlayMediaInfo; typedef struct _GstPlayMediaInfoClass GstPlayMediaInfoClass; +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPlayMediaInfo, g_object_unref) +#endif + GST_PLAY_API GType gst_play_media_info_get_type (void);
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/play/gstplay-signal-adapter.h -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/play/gstplay-signal-adapter.h
Changed
@@ -39,6 +39,10 @@ */ #define GST_PLAY_SIGNAL_ADAPTER_CAST(obj) ((GstPlaySignalAdapter*)(obj)) +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPlaySignalAdapter, g_object_unref) +#endif + GST_PLAY_API GType gst_play_signal_adapter_get_type (void);
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/play/gstplay-video-overlay-video-renderer.h -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/play/gstplay-video-overlay-video-renderer.h
Changed
@@ -48,6 +48,10 @@ */ #define GST_PLAY_VIDEO_OVERLAY_VIDEO_RENDERER_CAST(obj) ((GstPlayVideoOverlayVideoRenderer*)(obj)) +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPlayVideoOverlayVideoRenderer, g_object_unref) +#endif + GST_PLAY_API GType gst_play_video_overlay_video_renderer_get_type (void);
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/play/gstplay-video-renderer.h -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/play/gstplay-video-renderer.h
Changed
@@ -49,6 +49,10 @@ GstElement * (*create_video_sink) (GstPlayVideoRenderer * self, GstPlay * play); }; +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPlayVideoRenderer, g_object_unref) +#endif + GST_PLAY_API GType gst_play_video_renderer_get_type (void);
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/play/gstplay-visualization.h -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/play/gstplay-visualization.h
Changed
@@ -56,6 +56,10 @@ GST_PLAY_API void gst_play_visualizations_free (GstPlayVisualization **viss); +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPlayVisualization, gst_play_visualization_free) +#endif + G_END_DECLS #endif /* __GST_PLAY_VISUALIZATION_H__ */
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/play/gstplay.c -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/play/gstplay.c
Changed
@@ -212,6 +212,8 @@ static gpointer gst_play_main (gpointer data); +static void gst_play_set_playbin_video_sink (GstPlay * self); + static void gst_play_seek_internal_locked (GstPlay * self); static void gst_play_stop_internal (GstPlay * self, gboolean transient); static gboolean gst_play_pause_internal (gpointer user_data); @@ -509,6 +511,8 @@ self->thread = g_thread_new ("GstPlay", gst_play_main, self); while (!self->loop || !g_main_loop_is_running (self->loop)) g_cond_wait (&self->cond, &self->lock); + + gst_play_set_playbin_video_sink (self); g_mutex_unlock (&self->lock); G_OBJECT_CLASS (parent_class)->constructed (object); @@ -594,11 +598,16 @@ { GstElement *video_sink = NULL; - if (self->video_renderer != NULL) + if (self->video_renderer != NULL) { video_sink = gst_play_video_renderer_create_video_sink (self->video_renderer, self); - if (video_sink) + } + + if (video_sink) { + gst_object_ref_sink (video_sink); g_object_set (self->playbin, "video-sink", video_sink, NULL); + gst_object_unref (video_sink); + } } static void @@ -612,7 +621,14 @@ g_mutex_lock (&self->lock); g_clear_object (&self->video_renderer); self->video_renderer = g_value_dup_object (value); - gst_play_set_playbin_video_sink (self); + + // When the video_renderer is a GstPlayerWrappedVideoRenderer it cannot be set + // at construction time because it requires a valid pipeline which is created + // only after GstPlay has been constructed. That is why the video renderer is + // set *after* GstPlay has been constructed. + if (self->thread) { + gst_play_set_playbin_video_sink (self); + } g_mutex_unlock (&self->lock); break; case PROP_URI:{ @@ -2648,15 +2664,8 @@ g_once (&once, gst_play_init_once, NULL); - self = g_object_new (GST_TYPE_PLAY, NULL); + self = g_object_new (GST_TYPE_PLAY, "video-renderer", video_renderer, NULL); - // When the video_renderer is a GstPlayerWrappedVideoRenderer it cannot be set - // at construction time because it requires a valid pipeline which is created - // only after GstPlay has been constructed. That is why the video renderer is - // set *after* GstPlay has been constructed. - if (video_renderer != NULL) { - g_object_set (self, "video-renderer", video_renderer, NULL); - } gst_object_ref_sink (self); if (video_renderer)
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/player/gstplayer-media-info.c -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/player/gstplayer-media-info.c
Changed
@@ -149,9 +149,21 @@ } static void +gst_player_video_info_finalize (GObject * object) +{ + GstPlayerVideoInfo *info = GST_PLAYER_VIDEO_INFO (object); + + g_clear_object (&info->info); + + G_OBJECT_CLASS (gst_player_video_info_parent_class)->finalize (object); +} + +static void gst_player_video_info_class_init (G_GNUC_UNUSED GstPlayerVideoInfoClass * klass) { - /* nothing to do here */ + GObjectClass *gobject_class = (GObjectClass *) klass; + + gobject_class->finalize = gst_player_video_info_finalize; } /**
View file
gst-plugins-bad-1.20.3.tar.xz/gst-libs/gst/player/gstplayer.c -> gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/player/gstplayer.c
Changed
@@ -157,6 +157,7 @@ /* legacy */ GstPlayerSignalDispatcher *signal_dispatcher; + GstPlayerVideoRenderer *video_renderer; }; struct _GstPlayerClass @@ -175,11 +176,12 @@ const GValue * value, GParamSpec * pspec); static void gst_player_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static void gst_player_constructed (GObject * object); static void -gst_player_init (G_GNUC_UNUSED GstPlayer * self) +gst_player_init (GstPlayer * self) { - + self->play = gst_play_new (NULL); } static void @@ -207,12 +209,13 @@ gobject_class->set_property = gst_player_set_property; gobject_class->get_property = gst_player_get_property; gobject_class->finalize = gst_player_finalize; + gobject_class->constructed = gst_player_constructed; param_specsPROP_VIDEO_RENDERER = g_param_spec_object ("video-renderer", "Video Renderer", "Video renderer to use for rendering videos", GST_TYPE_PLAYER_VIDEO_RENDERER, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); param_specsPROP_SIGNAL_DISPATCHER = g_param_spec_object ("signal-dispatcher", @@ -377,6 +380,10 @@ if (self->signal_dispatcher) g_object_unref (self->signal_dispatcher); + if (self->video_renderer) + g_object_unref (self->video_renderer); + if (self->signal_adapter) + g_object_unref (self->signal_adapter); if (self->play) gst_object_unref (self->play); @@ -393,6 +400,9 @@ case PROP_SIGNAL_DISPATCHER: self->signal_dispatcher = g_value_dup_object (value); break; + case PROP_VIDEO_RENDERER: + self->video_renderer = g_value_dup_object (value); + break; default: g_object_set_property (G_OBJECT (self->play), g_param_spec_get_name (pspec), value); @@ -407,6 +417,9 @@ GstPlayer *self = GST_PLAYER (object); switch (prop_id) { + case PROP_VIDEO_RENDERER: + g_value_set_object (value, self->video_renderer); + break; case PROP_MEDIA_INFO: g_value_take_object (value, gst_player_get_media_info (self)); break; @@ -544,47 +557,27 @@ g_signal_emit (self, signalsSIGNAL_SEEK_DONE, 0, time); } -/** - * gst_player_new: - * @video_renderer: (transfer full) (allow-none): GstPlayerVideoRenderer to use - * @signal_dispatcher: (transfer full) (allow-none): GstPlayerSignalDispatcher to use - * - * Creates a new #GstPlayer instance that uses @signal_dispatcher to dispatch - * signals to some event loop system, or emits signals directly if NULL is - * passed. See gst_player_g_main_context_signal_dispatcher_new(). - * - * Video is going to be rendered by @video_renderer, or if %NULL is provided - * no special video set up will be done and some default handling will be - * performed. - * - * Returns: (transfer full): a new #GstPlayer instance - */ -GstPlayer * -gst_player_new (GstPlayerVideoRenderer * video_renderer, - GstPlayerSignalDispatcher * signal_dispatcher) +static void +gst_player_constructed (GObject * object) { - static GOnce once = G_ONCE_INIT; - GstPlayer *self; + GstPlayer *self = GST_PLAYER (object); GstPlayerVideoRenderer *renderer = NULL; - g_once (&once, gst_player_init_once, NULL); - - self = - g_object_new (GST_TYPE_PLAYER, "signal-dispatcher", signal_dispatcher, - NULL); - - self->play = gst_play_new (NULL); + G_OBJECT_CLASS (parent_class)->constructed (object); - if (video_renderer != NULL) { - renderer = gst_player_wrapped_video_renderer_new (video_renderer, self); + if (self->video_renderer != NULL) { + renderer = + gst_player_wrapped_video_renderer_new (self->video_renderer, self); g_object_set (self->play, "video-renderer", GST_PLAY_VIDEO_RENDERER (renderer), NULL); + g_object_unref (renderer); } - if (signal_dispatcher != NULL) { + if (self->signal_dispatcher != NULL) { GMainContext *context = NULL; - g_object_get (signal_dispatcher, "application-context", &context, NULL); + g_object_get (self->signal_dispatcher, "application-context", &context, + NULL); self->signal_adapter = gst_play_signal_adapter_new_with_main_context (self->play, context); g_main_context_unref (context); @@ -592,8 +585,6 @@ self->signal_adapter = gst_play_signal_adapter_new (self->play); } - gst_object_ref_sink (self); - g_signal_connect (self->signal_adapter, "uri-loaded", G_CALLBACK (uri_loaded_cb), self); g_signal_connect (self->signal_adapter, "position-updated", @@ -619,6 +610,37 @@ self); g_signal_connect (self->signal_adapter, "seek-done", G_CALLBACK (seek_done_cb), self); +} + +/** + * gst_player_new: + * @video_renderer: (transfer full) (allow-none): GstPlayerVideoRenderer to use + * @signal_dispatcher: (transfer full) (allow-none): GstPlayerSignalDispatcher to use + * + * Creates a new #GstPlayer instance that uses @signal_dispatcher to dispatch + * signals to some event loop system, or emits signals directly if NULL is + * passed. See gst_player_g_main_context_signal_dispatcher_new(). + * + * Video is going to be rendered by @video_renderer, or if %NULL is provided + * no special video set up will be done and some default handling will be + * performed. + * + * Returns: (transfer full): a new #GstPlayer instance + */ +GstPlayer * +gst_player_new (GstPlayerVideoRenderer * video_renderer, + GstPlayerSignalDispatcher * signal_dispatcher) +{ + static GOnce once = G_ONCE_INIT; + GstPlayer *self; + + g_once (&once, gst_player_init_once, NULL); + + self = + g_object_new (GST_TYPE_PLAYER, "signal-dispatcher", signal_dispatcher, + "video-renderer", video_renderer, NULL); + + gst_object_ref_sink (self); if (video_renderer) g_object_unref (video_renderer);
View file
gst-plugins-bad-1.20.3.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.20.4.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.20.4</revision> + <branch>1.20</branch> + <name></name> + <created>2022-10-12</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.20.4.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.20.3</revision> <branch>1.20</branch> <name></name>
View file
gst-plugins-bad-1.20.3.tar.xz/gst/audiobuffersplit/gstaudiobuffersplit.c -> gst-plugins-bad-1.20.4.tar.xz/gst/audiobuffersplit/gstaudiobuffersplit.c
Changed
@@ -540,84 +540,81 @@ avail_samples, GST_SECOND, rate * self->in_segment.rate); } - if (self->gapless) { - if (self->current_offset != -1) { - GST_DEBUG_OBJECT (self, - "Got discont in gapless mode: Current running time %" GST_TIME_FORMAT - ", current end running time %" GST_TIME_FORMAT - ", running time after discont %" GST_TIME_FORMAT, - GST_TIME_ARGS (current_rt), - GST_TIME_ARGS (current_rt_end), GST_TIME_ARGS (input_rt)); + if (self->gapless && self->current_offset != -1) { + GST_DEBUG_OBJECT (self, + "Got discont in gapless mode: Current running time %" GST_TIME_FORMAT + ", current end running time %" GST_TIME_FORMAT + ", running time after discont %" GST_TIME_FORMAT, + GST_TIME_ARGS (current_rt), + GST_TIME_ARGS (current_rt_end), GST_TIME_ARGS (input_rt)); - new_offset = - gst_util_uint64_scale (current_rt - self->resync_rt, - rate * ABS (self->in_segment.rate), GST_SECOND); - if (current_rt < self->resync_rt) { - guint64 drop_samples; + new_offset = + gst_util_uint64_scale (input_rt - self->resync_rt, + rate * ABS (self->in_segment.rate), GST_SECOND); + if (input_rt < self->resync_rt) { + guint64 drop_samples; - new_offset = - gst_util_uint64_scale (self->resync_rt - - current_rt, rate * ABS (self->in_segment.rate), GST_SECOND); - drop_samples = self->current_offset + avail_samples + new_offset; + new_offset = + gst_util_uint64_scale (self->resync_rt - + input_rt, rate * ABS (self->in_segment.rate), GST_SECOND); + drop_samples = self->current_offset + avail_samples + new_offset; + GST_DEBUG_OBJECT (self, + "Dropping %" G_GUINT64_FORMAT " samples (%" GST_TIME_FORMAT ")", + drop_samples, GST_TIME_ARGS (gst_util_uint64_scale (drop_samples, + GST_SECOND, rate))); + self->drop_samples = drop_samples; + discont = FALSE; + } else if (new_offset > self->current_offset + avail_samples) { + guint64 silence_samples = + new_offset - (self->current_offset + avail_samples); + const GstAudioFormatInfo *info = gst_audio_format_get_info (format); + GstClockTime silence_time = + gst_util_uint64_scale (silence_samples, GST_SECOND, rate); + + if (silence_time > self->max_silence_time) { GST_DEBUG_OBJECT (self, - "Dropping %" G_GUINT64_FORMAT " samples (%" GST_TIME_FORMAT ")", - drop_samples, GST_TIME_ARGS (gst_util_uint64_scale (drop_samples, - GST_SECOND, rate))); - discont = FALSE; - } else if (new_offset > self->current_offset + avail_samples) { - guint64 silence_samples = - new_offset - (self->current_offset + avail_samples); - const GstAudioFormatInfo *info = gst_audio_format_get_info (format); - GstClockTime silence_time = - gst_util_uint64_scale (silence_samples, GST_SECOND, rate); - - if (silence_time > self->max_silence_time) { - GST_DEBUG_OBJECT (self, - "Not inserting %" G_GUINT64_FORMAT " samples of silence (%" - GST_TIME_FORMAT " exceeds maximum %" GST_TIME_FORMAT ")", - silence_samples, GST_TIME_ARGS (silence_time), - GST_TIME_ARGS (self->max_silence_time)); - } else { - GST_DEBUG_OBJECT (self, - "Inserting %" G_GUINT64_FORMAT " samples of silence (%" - GST_TIME_FORMAT ")", silence_samples, - GST_TIME_ARGS (silence_time)); - - /* Insert silence buffers to fill the gap in 1s chunks */ - while (silence_samples > 0) { - guint n_samples = MIN (silence_samples, rate); - GstBuffer *silence; - GstMapInfo map; - - silence = gst_buffer_new_and_alloc (n_samples * bpf); - GST_BUFFER_FLAG_SET (silence, GST_BUFFER_FLAG_GAP); - gst_buffer_map (silence, &map, GST_MAP_WRITE); - gst_audio_format_info_fill_silence (info, map.data, map.size); - gst_buffer_unmap (silence, &map); - - gst_adapter_push (self->adapter, silence); - ret = - gst_audio_buffer_split_output (self, FALSE, rate, bpf, - samples_per_buffer); - if (ret != GST_FLOW_OK) - return ret; - - silence_samples -= n_samples; - } - discont = FALSE; - } - } else if (new_offset < self->current_offset + avail_samples) { - guint64 drop_samples = - self->current_offset + avail_samples - new_offset; - + "Not inserting %" G_GUINT64_FORMAT " samples of silence (%" + GST_TIME_FORMAT " exceeds maximum %" GST_TIME_FORMAT ")", + silence_samples, GST_TIME_ARGS (silence_time), + GST_TIME_ARGS (self->max_silence_time)); + } else { GST_DEBUG_OBJECT (self, - "Dropping %" G_GUINT64_FORMAT " samples (%" GST_TIME_FORMAT ")", - drop_samples, GST_TIME_ARGS (gst_util_uint64_scale (drop_samples, - GST_SECOND, rate))); - self->drop_samples = drop_samples; + "Inserting %" G_GUINT64_FORMAT " samples of silence (%" + GST_TIME_FORMAT ")", silence_samples, GST_TIME_ARGS (silence_time)); + + /* Insert silence buffers to fill the gap in 1s chunks */ + while (silence_samples > 0) { + guint n_samples = MIN (silence_samples, rate); + GstBuffer *silence; + GstMapInfo map; + + silence = gst_buffer_new_and_alloc (n_samples * bpf); + GST_BUFFER_FLAG_SET (silence, GST_BUFFER_FLAG_GAP); + gst_buffer_map (silence, &map, GST_MAP_WRITE); + gst_audio_format_info_fill_silence (info, map.data, map.size); + gst_buffer_unmap (silence, &map); + + gst_adapter_push (self->adapter, silence); + ret = + gst_audio_buffer_split_output (self, FALSE, rate, bpf, + samples_per_buffer); + if (ret != GST_FLOW_OK) + return ret; + + silence_samples -= n_samples; + } discont = FALSE; } + } else if (new_offset < self->current_offset + avail_samples) { + guint64 drop_samples = self->current_offset + avail_samples - new_offset; + + GST_DEBUG_OBJECT (self, + "Dropping %" G_GUINT64_FORMAT " samples (%" GST_TIME_FORMAT ")", + drop_samples, GST_TIME_ARGS (gst_util_uint64_scale (drop_samples, + GST_SECOND, rate))); + self->drop_samples = drop_samples; + discont = FALSE; } }
View file
gst-plugins-bad-1.20.3.tar.xz/gst/mpegtsdemux/mpegtsbase.c -> gst-plugins-bad-1.20.4.tar.xz/gst/mpegtsdemux/mpegtsbase.c
Changed
@@ -853,8 +853,8 @@ sawpcrpid = TRUE; } - /* If the pcr is not shared with an existing stream, we'll have one extra stream */ - if (!sawpcrpid) + /* If we have a PCR PID and the pcr is not shared with an existing stream, we'll have one extra stream */ + if (!sawpcrpid && !base->ignore_pcr) nbstreams += 1; if (nbstreams != g_list_length (oldprogram->stream_list)) {
View file
gst-plugins-bad-1.20.3.tar.xz/gst/mxf/mxfaes-bwf.c -> gst-plugins-bad-1.20.4.tar.xz/gst/mxf/mxfaes-bwf.c
Changed
@@ -1270,12 +1270,13 @@ GST_ERROR ("Invalid descriptor"); return NULL; } - if (wa_descriptor && wa_descriptor->block_align != 0) - block_align = wa_descriptor->block_align; - else - block_align = - (GST_ROUND_UP_8 (descriptor->quantization_bits) * - descriptor->channel_count) / 8; + + /* XXX: block align value can be carried via audio essential descriptor but + * there are some files with broken block align value. + * Calculates the value always */ + block_align = + (GST_ROUND_UP_8 (descriptor->quantization_bits) * + descriptor->channel_count) / 8; audio_format = gst_audio_format_build_integer (block_align != @@ -1302,12 +1303,12 @@ return NULL; } - if (wa_descriptor && wa_descriptor->block_align != 0) - block_align = wa_descriptor->block_align; - else - block_align = - (GST_ROUND_UP_8 (descriptor->quantization_bits) * - descriptor->channel_count) / 8; + /* XXX: block align value can be carried via audio essential descriptor but + * there are some files with broken block align value. + * Calculates the value always */ + block_align = + (GST_ROUND_UP_8 (descriptor->quantization_bits) * + descriptor->channel_count) / 8; audio_format = gst_audio_format_build_integer (block_align !=
View file
gst-plugins-bad-1.20.3.tar.xz/gst/proxy/gstproxysink.c -> gst-plugins-bad-1.20.4.tar.xz/gst/proxy/gstproxysink.c
Changed
@@ -57,6 +57,7 @@ GST_ELEMENT_REGISTER_DEFINE (proxysink, "proxysink", GST_RANK_NONE, GST_TYPE_PROXY_SINK); +static void gst_proxy_sink_dispose (GObject * object); static gboolean gst_proxy_sink_sink_query (GstPad * pad, GstObject * parent, GstQuery * query); static GstFlowReturn gst_proxy_sink_sink_chain (GstPad * pad, @@ -76,10 +77,13 @@ static void gst_proxy_sink_class_init (GstProxySinkClass * klass) { - GstElementClass *gstelement_class = (GstElementClass *) klass; + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); GST_DEBUG_CATEGORY_INIT (gst_proxy_sink_debug, "proxysink", 0, "proxy sink"); + object_class->dispose = gst_proxy_sink_dispose; + gstelement_class->change_state = gst_proxy_sink_change_state; gstelement_class->send_event = gst_proxy_sink_send_event; gstelement_class->query = gst_proxy_sink_query; @@ -109,6 +113,16 @@ GST_OBJECT_FLAG_SET (self, GST_ELEMENT_FLAG_SINK); } +static void +gst_proxy_sink_dispose (GObject * object) +{ + GstProxySink *self = GST_PROXY_SINK (object); + + g_weak_ref_clear (&self->proxysrc); + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + static GstStateChangeReturn gst_proxy_sink_change_state (GstElement * element, GstStateChange transition) { @@ -120,6 +134,8 @@ switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: self->pending_sticky_events = FALSE; + self->sent_stream_start = FALSE; + self->sent_caps = FALSE; break; default: break; @@ -180,6 +196,7 @@ typedef struct { + GstProxySink *self; GstPad *otherpad; GstFlowReturn ret; } CopyStickyEventsData; @@ -189,12 +206,46 @@ gpointer user_data) { CopyStickyEventsData *data = user_data; + GstProxySink *self = data->self; data->ret = gst_pad_store_sticky_event (data->otherpad, *event); + switch (GST_EVENT_TYPE (*event)) { + case GST_EVENT_STREAM_START: + if (data->ret != GST_FLOW_OK) + self->sent_stream_start = FALSE; + else + self->sent_stream_start = TRUE; + break; + case GST_EVENT_CAPS: + if (data->ret != GST_FLOW_OK) + self->sent_caps = FALSE; + else + self->sent_caps = TRUE; + break; + default: + break; + } return data->ret == GST_FLOW_OK; } +static void +gst_proxy_sink_send_sticky_events (GstProxySink * self, GstPad * pad, + GstPad * otherpad) +{ + if (self->pending_sticky_events || !self->sent_stream_start || + !self->sent_caps) { + CopyStickyEventsData data; + + data.self = self; + data.otherpad = otherpad; + data.ret = GST_FLOW_OK; + + gst_pad_sticky_events_foreach (pad, copy_sticky_events, &data); + self->pending_sticky_events = data.ret != GST_FLOW_OK; + } +} + static gboolean gst_proxy_sink_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { @@ -202,10 +253,11 @@ GstProxySrc *src; gboolean ret = FALSE; gboolean sticky = GST_EVENT_IS_STICKY (event); + GstEventType event_type = GST_EVENT_TYPE (event); GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event)); - if (GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_STOP) + if (event_type == GST_EVENT_FLUSH_STOP) self->pending_sticky_events = FALSE; src = g_weak_ref_get (&self->proxysrc); @@ -213,17 +265,24 @@ GstPad *srcpad; srcpad = gst_proxy_src_get_internal_srcpad (src); - if (sticky && self->pending_sticky_events) { - CopyStickyEventsData data = { srcpad, GST_FLOW_OK }; - - gst_pad_sticky_events_foreach (pad, copy_sticky_events, &data); - self->pending_sticky_events = data.ret != GST_FLOW_OK; - } + if (sticky) + gst_proxy_sink_send_sticky_events (self, pad, srcpad); ret = gst_pad_push_event (srcpad, event); gst_object_unref (srcpad); gst_object_unref (src); + switch (event_type) { + case GST_EVENT_STREAM_START: + self->sent_stream_start = ret; + break; + case GST_EVENT_CAPS: + self->sent_caps = ret; + break; + default: + break; + } + if (!ret && sticky) { self->pending_sticky_events = TRUE; ret = TRUE; @@ -250,12 +309,7 @@ GstPad *srcpad; srcpad = gst_proxy_src_get_internal_srcpad (src); - if (self->pending_sticky_events) { - CopyStickyEventsData data = { srcpad, GST_FLOW_OK }; - - gst_pad_sticky_events_foreach (pad, copy_sticky_events, &data); - self->pending_sticky_events = data.ret != GST_FLOW_OK; - } + gst_proxy_sink_send_sticky_events (self, pad, srcpad); ret = gst_pad_push (srcpad, buffer); gst_object_unref (srcpad); @@ -286,12 +340,7 @@ GstPad *srcpad; srcpad = gst_proxy_src_get_internal_srcpad (src); - if (self->pending_sticky_events) { - CopyStickyEventsData data = { srcpad, GST_FLOW_OK }; - - gst_pad_sticky_events_foreach (pad, copy_sticky_events, &data); - self->pending_sticky_events = data.ret != GST_FLOW_OK; - } + gst_proxy_sink_send_sticky_events (self, pad, srcpad); ret = gst_pad_push_list (srcpad, list); gst_object_unref (srcpad);
View file
gst-plugins-bad-1.20.3.tar.xz/gst/proxy/gstproxysink.h -> gst-plugins-bad-1.20.4.tar.xz/gst/proxy/gstproxysink.h
Changed
@@ -48,6 +48,8 @@ /* Whether there are sticky events pending */ gboolean pending_sticky_events; + gboolean sent_stream_start; + gboolean sent_caps; }; struct _GstProxySinkClass {
View file
gst-plugins-bad-1.20.3.tar.xz/gst/rtmp2/gstrtmp2locationhandler.c -> gst-plugins-bad-1.20.4.tar.xz/gst/rtmp2/gstrtmp2locationhandler.c
Changed
@@ -84,6 +84,22 @@ g_object_interface_install_property (iface, g_param_spec_uint ("timeout", "Timeout", "RTMP timeout in seconds", 0, G_MAXUINT, DEFAULT_TIMEOUT, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstRtmpLocationHandler::tls-validation-flags: + * + * TLS certificate validation flags used to validate server + * certificate. + * + * GLib guarantees that if certificate verification fails, at least one + * error will be set, but it does not guarantee that all possible errors + * will be set. Accordingly, you may not safely decide to ignore any + * particular type of error. + * + * For example, it would be incorrect to mask %G_TLS_CERTIFICATE_EXPIRED if + * you want to allow expired certificates, because this could potentially be + * the only error flag set even if other problems exist with the + * certificate. + */ g_object_interface_install_property (iface, g_param_spec_flags ("tls-validation-flags", "TLS validation flags", "TLS validation flags to use", G_TYPE_TLS_CERTIFICATE_FLAGS,
View file
gst-plugins-bad-1.20.3.tar.xz/gst/rtmp2/rtmp/rtmpclient.c -> gst-plugins-bad-1.20.4.tar.xz/gst/rtmp2/rtmp/rtmpclient.c
Changed
@@ -426,8 +426,10 @@ GST_DEBUG ("Configuring TLS, validation flags 0x%02x", data->location.tls_flags); g_socket_client_set_tls (socket_client, TRUE); + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; g_socket_client_set_tls_validation_flags (socket_client, data->location.tls_flags); + G_GNUC_END_IGNORE_DEPRECATIONS; break; default:
View file
gst-plugins-bad-1.20.3.tar.xz/meson.build -> gst-plugins-bad-1.20.4.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.20.3', + version : '1.20.4', meson_version : '>= 0.59', default_options : 'warning_level=1', 'buildtype=debugoptimized' ) @@ -219,7 +219,6 @@ warning_c_flags = '-Wmissing-prototypes', - '-Wdeclaration-after-statement', '-Wold-style-definition',
View file
gst-plugins-bad-1.20.3.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.20.4.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gst-plugins-bad-1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-15 23:37+0100\n" +"POT-Creation-Date: 2022-10-12 16:40+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
gst-plugins-bad-1.20.3.tar.xz/sys/androidmedia/jni/gstamcsurfacetexture-jni.c -> gst-plugins-bad-1.20.4.tar.xz/sys/androidmedia/jni/gstamcsurfacetexture-jni.c
Changed
@@ -243,6 +243,8 @@ long long context, jobject surfaceTexture) { GstAmcSurfaceTextureJNI *self = JLONG_TO_GPOINTER (context); + if (!self || !self->callback) + return; self->callback (GST_AMC_SURFACE_TEXTURE (self), self->user_data); }
View file
gst-plugins-bad-1.20.3.tar.xz/sys/applemedia/avfvideosrc.m -> gst-plugins-bad-1.20.4.tar.xz/sys/applemedia/avfvideosrc.m
Changed
@@ -1089,7 +1089,7 @@ /* crank up to 11. This is what the presets do, but we don't use the presets * in ios >= 7.0 */ gst_structure_fixate_field_nearest_int (structure, "height", G_MAXINT); - gst_structure_fixate_field_nearest_fraction (structure, "framerate", G_MAXINT, 1); + gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1); return gst_caps_fixate (new_caps); }
View file
gst-plugins-bad-1.20.3.tar.xz/sys/d3d11/gstd3d11decoder.h -> gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11decoder.h
Changed
@@ -120,7 +120,7 @@ static const GstDXVAResolution gst_dxva_resolutions = { {1920, 1088}, {2560, 1440}, {3840, 2160}, {4096, 2160}, - {7680, 4320}, {8192, 4320} + {7680, 4320}, {8192, 4320}, {15360, 8640}, {16384, 8640} }; gboolean gst_d3d11_decoder_util_is_legacy_device (GstD3D11Device * device);
View file
gst-plugins-bad-1.20.3.tar.xz/sys/d3d11/gstd3d11videosink.cpp -> gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11videosink.cpp
Changed
@@ -733,7 +733,7 @@ GST_INFO_OBJECT (self, "Create dummy window for rendering on shared texture"); self->window = gst_d3d11_window_dummy_new (self->device); - return TRUE; + goto done; } if (!self->window_id) @@ -782,6 +782,7 @@ break; } +done: if (!self->window) { GST_ERROR_OBJECT (self, "Cannot create d3d11window"); return FALSE;
View file
gst-plugins-bad-1.20.3.tar.xz/sys/nvcodec/gstnvdec.c -> gst-plugins-bad-1.20.4.tar.xz/sys/nvcodec/gstnvdec.c
Changed
@@ -527,8 +527,8 @@ } GST_DEBUG_OBJECT (nvdec, "creating decoder"); - create_info.ulWidth = width; - create_info.ulHeight = height; + create_info.ulWidth = format->coded_width; + create_info.ulHeight = format->coded_height; create_info.ulNumDecodeSurfaces = nvdec->num_decode_surface; create_info.CodecType = format->codec; create_info.ChromaFormat = format->chroma_format;
View file
gst-plugins-bad-1.20.3.tar.xz/sys/va/gstvaallocator.c -> gst-plugins-bad-1.20.4.tar.xz/sys/va/gstvaallocator.c
Changed
@@ -513,6 +513,7 @@ VASurfaceID surface; guint32 i, fourcc, rt_format, export_flags; GDestroyNotify buffer_destroy = NULL; + gsize object_offset4; g_return_val_if_fail (GST_IS_VA_DMABUF_ALLOCATOR (allocator), FALSE); @@ -588,11 +589,19 @@ for (i = 0; i < desc.num_objects; i++) { gint fd = desc.objectsi.fd; - gsize size = desc.objectsi.size > 0 ? - desc.objectsi.size : _get_fd_size (fd); + /* don't rely on prime descriptor reported size since gallium drivers report + * different values */ + gsize size = _get_fd_size (fd); GstMemory *mem = gst_dmabuf_allocator_alloc (allocator, fd, size); guint64 *drm_mod = g_new (guint64, 1); + if (size != desc.objectsi.size) { + GST_WARNING_OBJECT (self, "driver bug: fd size (%" G_GSIZE_FORMAT + ") differs from object descriptor size (%" G_GUINT32_FORMAT ")", + size, desc.objectsi.size); + } + + object_offseti = gst_buffer_get_size (buffer); gst_buffer_append_memory (buffer, mem); buf->memsi = mem; @@ -615,18 +624,22 @@ drm_mod, g_free); if (G_UNLIKELY (info)) - GST_VIDEO_INFO_SIZE (info) += size; + GST_VIDEO_INFO_PLANE_OFFSET (info, i) = GST_VIDEO_INFO_SIZE (info); GST_LOG_OBJECT (self, "buffer %p: new dmabuf %d / surface %#x %dx%d " "size %" G_GSIZE_FORMAT " drm mod %#lx", buffer, fd, surface, GST_VIDEO_INFO_WIDTH (&self->info), GST_VIDEO_INFO_HEIGHT (&self->info), - GST_VIDEO_INFO_SIZE (&self->info), *drm_mod); + size, *drm_mod); } if (G_UNLIKELY (info)) { + GST_VIDEO_INFO_SIZE (info) = gst_buffer_get_size (buffer); + for (i = 0; i < desc.num_layers; i++) { g_assert (desc.layersi.num_planes == 1); - GST_VIDEO_INFO_PLANE_OFFSET (info, i) = desc.layersi.offset0; + GST_VIDEO_INFO_PLANE_OFFSET (info, i) = + object_offsetdesc.layersi.object_index0 + + desc.layersi.offset0; GST_VIDEO_INFO_PLANE_STRIDE (info, i) = desc.layersi.pitch0; } } else {
View file
gst-plugins-bad-1.20.3.tar.xz/sys/va/gstvah265dec.c -> gst-plugins-bad-1.20.4.tar.xz/sys/va/gstvah265dec.c
Changed
@@ -315,6 +315,9 @@ GstVaH265Dec *self = GST_VA_H265_DEC (decoder); guint8 i; + if (!picture) + return 0xFF; + for (i = 0; i < 15; i++) { VAPictureHEVC *ref_va_pic = &self->pic_param.base.ReferenceFramesi;
View file
gst-plugins-bad-1.20.3.tar.xz/sys/wasapi/gstwasapiutil.c -> gst-plugins-bad-1.20.4.tar.xz/sys/wasapi/gstwasapiutil.c
Changed
@@ -82,6 +82,72 @@ {0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2} }; +/* Desktop only defines */ +#ifndef KSAUDIO_SPEAKER_MONO +#define KSAUDIO_SPEAKER_MONO (SPEAKER_FRONT_CENTER) +#endif +#ifndef KSAUDIO_SPEAKER_1POINT1 +#define KSAUDIO_SPEAKER_1POINT1 (SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY) +#endif +#ifndef KSAUDIO_SPEAKER_STEREO +#define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT) +#endif +#ifndef KSAUDIO_SPEAKER_2POINT1 +#define KSAUDIO_SPEAKER_2POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_LOW_FREQUENCY) +#endif +#ifndef KSAUDIO_SPEAKER_3POINT0 +#define KSAUDIO_SPEAKER_3POINT0 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER) +#endif +#ifndef KSAUDIO_SPEAKER_3POINT1 +#define KSAUDIO_SPEAKER_3POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY) +#endif +#ifndef KSAUDIO_SPEAKER_QUAD +#define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) +#endif +#define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER) +#ifndef KSAUDIO_SPEAKER_5POINT0 +#define KSAUDIO_SPEAKER_5POINT0 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | \ + SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT) +#endif +#define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) +#ifndef KSAUDIO_SPEAKER_7POINT0 +#define KSAUDIO_SPEAKER_7POINT0 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \ + SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT) +#endif +#ifndef KSAUDIO_SPEAKER_7POINT1 +#define KSAUDIO_SPEAKER_7POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \ + SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER) +#endif + +static DWORD default_ch_masks = { + 0, + KSAUDIO_SPEAKER_MONO, + /* 2ch */ + KSAUDIO_SPEAKER_STEREO, + /* 2.1ch */ + /* KSAUDIO_SPEAKER_3POINT0 ? */ + KSAUDIO_SPEAKER_2POINT1, + /* 4ch */ + /* KSAUDIO_SPEAKER_3POINT1 or KSAUDIO_SPEAKER_SURROUND ? */ + KSAUDIO_SPEAKER_QUAD, + /* 5ch */ + KSAUDIO_SPEAKER_5POINT0, + /* 5.1ch */ + KSAUDIO_SPEAKER_5POINT1, + /* 7ch */ + KSAUDIO_SPEAKER_7POINT0, + /* 7.1ch */ + KSAUDIO_SPEAKER_7POINT1, +}; + /* *INDENT-OFF* */ static struct { @@ -705,6 +771,17 @@ DWORD dwChannelMask = format->dwChannelMask; GstAudioChannelPosition *pos = NULL; + if (nChannels > 2 && !dwChannelMask) { + GST_WARNING ("Unknown channel mask value for %d channel stream", nChannels); + + if (nChannels >= G_N_ELEMENTS (default_ch_masks)) { + GST_ERROR ("Too many channels %d", nChannels); + return 0; + } + + dwChannelMask = default_ch_masksnChannels; + } + pos = g_new (GstAudioChannelPosition, nChannels); gst_wasapi_util_channel_position_all_none (nChannels, pos);
View file
gst-plugins-bad-1.20.3.tar.xz/sys/wasapi2/gstwasapi2ringbuffer.cpp -> gst-plugins-bad-1.20.4.tar.xz/sys/wasapi2/gstwasapi2ringbuffer.cpp
Changed
@@ -1381,7 +1381,7 @@ if (buf->volume_object) hr = buf->volume_object->SetMute (mute, nullptr); else - buf->volume_changed = TRUE; + buf->mute_changed = TRUE; g_mutex_unlock (&buf->volume_lock); return S_OK; @@ -1421,7 +1421,7 @@ if (buf->volume_object) hr = buf->volume_object->SetMasterVolume (volume, nullptr); else - buf->mute_changed = TRUE; + buf->volume_changed = TRUE; g_mutex_unlock (&buf->volume_lock); return hr;
View file
gst-plugins-bad-1.20.4.tar.xz/tests/check/elements/proxysink.c
Added
@@ -0,0 +1,110 @@ +/* GStreamer + * Copyright (C) 2022 Seungha Yang <seungha@centricular.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gst/gst.h> +#include <gst/check/gstcheck.h> +#include <gst/check/gstharness.h> + +GST_START_TEST (test_flush_before_buffer) +{ + GstElement *sink, *src; + GstHarness *h_in; + GstHarness *h_out; + GstEvent *event; + GstSegment segment; + GstCaps *caps; + GstBuffer *buf; + + sink = gst_element_factory_make ("proxysink", NULL); + src = gst_element_factory_make ("proxysrc", NULL); + + g_object_set (src, "proxysink", sink, NULL); + + h_in = gst_harness_new_with_element (sink, "sink", NULL); + h_out = gst_harness_new_with_element (src, NULL, "src"); + gst_object_unref (sink); + gst_object_unref (src); + + /* Activate only input side first, then push sticky events + * without buffer */ + gst_harness_play (h_in); + + event = gst_event_new_stream_start ("proxy-test-stream-start"); + fail_unless (gst_harness_push_event (h_in, event)); + + caps = gst_caps_from_string ("foo/bar"); + event = gst_event_new_caps (caps); + gst_caps_unref (caps); + fail_unless (gst_harness_push_event (h_in, event)); + + gst_segment_init (&segment, GST_FORMAT_TIME); + event = gst_event_new_segment (&segment); + fail_unless (gst_harness_push_event (h_in, event)); + + /* Now activate output side, sticky event and buffers should be + * serialized */ + gst_harness_play (h_out); + + event = gst_event_new_flush_start (); + fail_unless (gst_harness_push_event (h_in, event)); + + event = gst_event_new_flush_stop (TRUE); + fail_unless (gst_harness_push_event (h_in, event)); + + event = gst_event_new_segment (&segment); + fail_unless (gst_harness_push_event (h_in, event)); + + buf = gst_buffer_new_and_alloc (4); + GST_BUFFER_PTS (buf) = 0; + GST_BUFFER_DTS (buf) = 0; + + /* There must be no critical warning regarding + * sticky-event and buffer flow order*/ + fail_unless_equals_int (gst_harness_push (h_in, buf), GST_FLOW_OK); + + event = gst_event_new_eos (); + fail_unless (gst_harness_push_event (h_in, event)); + + /* make sure everything has been forwarded */ + fail_unless (gst_harness_pull_until_eos (h_out, &buf)); + gst_buffer_unref (buf); + + gst_harness_teardown (h_in); + gst_harness_teardown (h_out); +} + +GST_END_TEST; + +static Suite * +proxysink_suite (void) +{ + Suite *s = suite_create ("proxysink"); + TCase *tc_basic = tcase_create ("general"); + + suite_add_tcase (s, tc_basic); + tcase_add_test (tc_basic, test_flush_before_buffer); + + return s; +} + +GST_CHECK_MAIN (proxysink);
View file
gst-plugins-bad-1.20.3.tar.xz/tests/check/meson.build -> gst-plugins-bad-1.20.4.tar.xz/tests/check/meson.build
Changed
@@ -23,49 +23,48 @@ base_tests = 'elements/aesenc.c', not aes_dep.found(), aes_dep, 'elements/aesdec.c', not aes_dep.found(), aes_dep, - 'elements/aiffparse.c', - 'elements/asfmux.c', - 'elements/autoconvert.c', - 'elements/autovideoconvert.c', - 'elements/avwait.c', - 'elements/camerabin.c', + 'elements/aiffparse.c', get_option('aiff').disabled(), + 'elements/asfmux.c', get_option('asfmux').disabled(), + 'elements/autoconvert.c', get_option('autoconvert').disabled(), + 'elements/autovideoconvert.c', get_option('autoconvert').disabled(), + 'elements/avwait.c', get_option('timecode').disabled(), + 'elements/camerabin.c', get_option('camerabin2').disabled(), 'elements/ccconverter.c', not closedcaption_dep.found(), gstvideo_dep, 'elements/cccombiner.c', not closedcaption_dep.found(), , 'elements/ccextractor.c', not closedcaption_dep.found(), , 'elements/cudaconvert.c', false, gmodule_dep, gstgl_dep, 'elements/cudafilter.c', false, gmodule_dep, gstgl_dep, 'elements/d3d11colorconvert.c', host_machine.system() != 'windows', , - 'elements/gdpdepay.c', - 'elements/gdppay.c', + 'elements/gdpdepay.c', get_option('gdp').disabled(), + 'elements/gdppay.c', get_option('gdp').disabled(), 'elements/h263parse.c', false, libparser_dep, gstcodecparsers_dep, 'elements/h264parse.c', false, libparser_dep, gstcodecparsers_dep, 'elements/h265parse.c', false, libparser_dep, gstcodecparsers_dep, 'elements/hlsdemux_m3u8.c', not hls_dep.found(), hls_dep, - 'elements/id3mux.c', - 'elements/interlace.c', + 'elements/id3mux.c', get_option('id3tag').disabled(), + 'elements/interlace.c', get_option('interlace').disabled(), 'elements/jpeg2000parse.c', false, libparser_dep, gstcodecparsers_dep, 'elements/line21.c', not closedcaption_dep.found(), , 'elements/mfvideosrc.c', host_machine.system() != 'windows', , - 'elements/mpegtsdemux.c', false, gstmpegts_dep, - 'elements/mpegtsmux.c', false, gstmpegts_dep, + 'elements/mpegtsdemux.c', get_option('mpegtsdemux').disabled(), gstmpegts_dep, + 'elements/mpegtsmux.c', get_option('mpegtsmux').disabled(), gstmpegts_dep, 'elements/mpeg4videoparse.c', false, libparser_dep, gstcodecparsers_dep, 'elements/mpegvideoparse.c', false, libparser_dep, gstcodecparsers_dep, 'elements/msdkh264enc.c', not have_msdk, msdk_dep, - 'elements/mxfdemux.c', - 'elements/mxfmux.c', - 'elements/nvenc.c', false, gmodule_dep, gstgl_dep, - 'elements/nvdec.c', not gstgl_dep.found(), gmodule_dep, gstgl_dep, + 'elements/mxfdemux.c', get_option('mxf').disabled(), + 'elements/mxfmux.c', get_option('mxf').disabled(), 'elements/svthevcenc.c', not svthevcenc_dep.found(), svthevcenc_dep, 'elements/openjpeg.c', not openjpeg_dep.found(), openjpeg_dep, 'elements/pcapparse.c', false, libparser_dep, - 'elements/pnm.c', + 'elements/pnm.c', get_option('pnm').disabled(), + 'elements/proxysink.c', get_option('proxy').disabled(), 'elements/ristrtpext.c', - 'elements/rtponvifparse.c', - 'elements/rtponviftimestamp.c', - 'elements/rtpsrc.c', - 'elements/rtpsink.c', - 'elements/switchbin.c', - 'elements/videoframe-audiolevel.c', + 'elements/rtponvifparse.c', get_option('onvif').disabled(), + 'elements/rtponviftimestamp.c', get_option('onvif').disabled(), + 'elements/rtpsrc.c', get_option('rtp').disabled(), + 'elements/rtpsink.c', get_option('rtp').disabled(), + 'elements/switchbin.c', get_option('switchbin').disabled(), + 'elements/videoframe-audiolevel.c', get_option('videoframe_audiolevel').disabled(), 'elements/viewfinderbin.c', 'elements/vp9parse.c', false, gstcodecparsers_dep, 'elements/av1parse.c', false, gstcodecparsers_dep, @@ -109,7 +108,7 @@ 'elements/avtpcvfdepay.c', not avtp_dep.found(), avtp_dep, 'elements/avtpsink.c', not avtp_dep.found(), avtp_dep, 'elements/avtpsrc.c', not avtp_dep.found(), avtp_dep, - 'elements/clockselect.c', + 'elements/clockselect.c', get_option('debugutils').disabled(), 'elements/curlhttpsink.c', not curl_dep.found(), curl_dep, 'elements/curlhttpsrc.c', not curl_dep.found(), curl_dep, gio_dep, 'elements/curlfilesink.c',
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
.