Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
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 + very useful when connecting to RTSP cameras that will never get + updates to fix certificate errors. + Relevant upstream merge requests / issues: + https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2214 + https://gitlab.gnome.org/GNOME/glib-networking/-/issues/179 + https://gitlab.gnome.org/GNOME/glib-networking/-/merge_requests/193 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2818> + +2022-05-25 16:03:22 +0530 Nirbheek Chauhan <nirbheek@centricular.com> + + * ext/dtls/gstdtlscertificate.c: + dtls: Disable OpenSSL 3.0 deprecation warnings for now + Fedora 36 ships with OpenSSL 3.0, which deprecates all low-level APIs, + so this code needs to be rewritten. There is no easy fix in the + porting guide, and it recommends disabling the warnings if you can't + use the high-level API. + https://wiki.openssl.org/index.php/OpenSSL_3.0#Upgrading_to_OpenSSL_3.0_from_OpenSSL_1.1.1 + Here's the replacement API: + https://www.openssl.org/docs/man3.0/man7/migration_guide.html#Deprecated-low-level-object-creation + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2818> + +2022-07-29 02:36:40 +0900 Seungha Yang <seungha@centricular.com> + + * sys/wasapi2/gstwasapi2ringbuffer.cpp: + wasapi2: Fix initial mute/volume setting + Fix up volume/mute change flag setting + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2817> + +2022-07-21 16:11:03 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/audiobuffersplit/gstaudiobuffersplit.c: + audiobuffersplit: Actually store number of samples to drop in gapless mode + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2783> + +2022-07-21 16:10:18 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/audiobuffersplit/gstaudiobuffersplit.c: + audiobuffersplit: Use input running time for comparison instead of the currently tracked running time + Otherwise gapless mode would do completely wrong calculations on + discontinuities and cause input/output to drift slowly. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2783> + +2022-07-21 13:38:22 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/audiobuffersplit/gstaudiobuffersplit.c: + audiobuffersplit: Combine two if expressions to reduce indentation + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2783> + +2022-07-06 16:14:13 +0300 Jordan Petridis <jordan@centricular.com> + + * ext/openmpt/gstopenmptdec.c: + openmpt: update from now deprecated api + https://lib.openmpt.org/doc/classopenmpt_1_1module.html#ab2695af0baa274054f5687741fa7c05b + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2779> + +2022-06-30 11:04:29 +0200 Ignazio Pillai <ignazp@amazon.com> + + * sys/wasapi/gstwasapiutil.c: + wasapi: Implement default audio channel mask + Some multichannel capture devices does not provide a channel mask value + which will result in a pipeline failure due to the empty channel mask. + Implemented the same fix used for wasapi2 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1204 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2714> + +2022-07-07 02:17:56 +0900 Seungha Yang <seungha@centricular.com> + + * gst/proxy/gstproxysink.c: + proxysink: Fix GstProxySrc leak + Clear weak pointer to peer src when disposing. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2774> + +2022-07-06 03:14:25 +0900 Seungha Yang <seungha@centricular.com> + + * gst/proxy/gstproxysink.c: + * gst/proxy/gstproxysink.h: + * tests/check/elements/proxysink.c: + * tests/check/meson.build: + proxysink: Make sure stream-start and caps events are forwarded + There might be a sequence of event and buffer flow: + - Got stream-start/caps/segment events + - Got flush events + - And then buffers with a new segment event + In the above case, stream-start and caps event might not be reached to + peer proxysrc if peer proxysrc is not ready to receive them. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2774> + +2022-06-30 09:09:02 +0300 Sebastian Dröge <sebastian@centricular.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Reject caps that are not valid for creating an SDP media. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2705> + +2022-06-29 10:55:13 +0100 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + coding style: allow declarations after statement + See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1243/ + and https://gitlab.freedesktop.org/gstreamer/gstreamer-project/-/issues/78 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2702> + +2022-06-28 17:40:56 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11videosink.cpp: + d3d11videosink: Fix for force-aspect-ratio setting when rendering on shared texture + Set specified force-aspect-ratio value on window object + in case of shared texture rendering as well + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1304 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2701> + +2022-06-25 19:50:10 +0100 Tim-Philipp Müller <tim@centricular.com> + + * tests/check/meson.build: + tests: skip unit tests for dependency-less elements that have been disabled + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1136 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2672> + +2022-06-28 01:29:06 +0100 Tim-Philipp Müller <tim@centricular.com> + + * ext/opus/gstopusheader.h: + dv, opusparse: fix duplicate symbols in static build + Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1262 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2673> + +2022-06-23 14:31:10 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * sys/va/gstvaallocator.c: + va: allocator: Use always lseek to get dmabuf size. + Gallium drivers historically have reported strange dmabuf sizes, from always + zero to the whole frame (multiple fds). The simplest solution is to use lseek + SEEK_END to get the prime descriptor size. + Also the allocator raises a warning if both values differ in order to report + it to driver. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2657> + +2022-06-08 09:02:52 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/va/gstvaallocator.c: + va: allocator: Fix translation of VADRMPRIMESurfaceDescriptor + VADRMPRIMESurfaceDescriptor structure describes the offsets from the + point of view of the specific handle (DMABuf). While GstVideoInfo + (and the meta) describes offsets from the point of the view of the + GstBuffer, an aggregate of all the GstMemory (1 per handle). + This changes combined with Mesa Fix(https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16813) + fixes decoding failure with AMD driver. + Fixes #1223 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2657> + +2022-03-24 21:39:30 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvah265dec.c: + va: h265dec: Fix a crash because of missing reference frame. + Some problematic H265 stream may miss the reference frame in the DPB, + and get some message like: "No short term reference picture for xxx". + So there may be empty entries in ref_pic_list0/1 when passing to + decode_slice() function of sub class. We need to check the NULL pointer. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2647> + +2022-06-18 04:05:53 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11decoder.h: + d3d11decoder: Check 16K resolution support + 16K decoding is supported by some GPUs + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2633> + +2022-06-15 15:06:20 -0400 Olivier Crête <olivier.crete@collabora.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Limit sink query to sink pads + This allows the reception of streams that don't exactly match + the codec preferences. In particular, the ssrc in the codec preferences + is local sender SSRC, the other side is expected to send a different SSRC. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2632> + +2022-06-16 00:59:00 +0100 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2619> + === release 1.20.3 === 2022-06-15 23:36:18 +0100 Tim-Philipp Müller <tim@centricular.com> + * ChangeLog: * NEWS: * RELEASE: * gst-plugins-bad.doap:
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 + files with broken BlockAlign field in the headers +- nvdec: Fix for HEVC decoding when coded resolution is larger than + display resolution +- openh264: Register debug categories earlier +- openh264enc: Fix constrained-high encoding +- openmpt: update from now deprecated api +- GstPlay: missing cleanup for g_autoptr +- player/play: Fix object construction and various leaks +- player: Plug a memory leak +- proxysink: Make sure stream-start and caps events are forwarded, and + fix memory leak +- tsdemux: Don’t trigger a program change when falling back to + ignore-pcr behaviour +- va: allocator: Fix translation of VADRMPRIMESurfaceDescriptor +- va: h265dec: Fix a crash because of missing reference frame. +- vah265dec: Decoder segfaults on seek +- wasapi: Implement default audio channel mask +- wasapi2: Fix initial mute/volume setting +- webrtcbin: Limit sink query to sink pads +- webrtcbin: Fix pointer dereference before null check +- webrtc: Make sure to return NULL when validating TURN server fails +- tests: skip unit tests for dependency-less elements that have been + disabled + +gst-plugins-ugly + +- tests: skip unit tests for dependency-less elements that have been + disabled + +gst-libav + +- avauddec: fix regression with WMA files, would throw an error at EOS +- avauddec: fix unnecessary reconfiguration if the audio layout isn’t + specified +- libav: Fix for APNG encoder property registration +- Failure to decode end of WMA file + +gst-rtsp-server + +- gst-rtsp-server: Fix pushing backlog to client +- rtsp-server: stream: Don’t loop forever if binding to the multicast + address fails + +gstreamer-vaapi + +- vaapi: Handle when no encoders/decoders available. +- vaapi: Crash in gst_vaapidecode_class_init() when no + decoders/encoders available + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- python: Do not call gst_init when it is already is_initialized + +gst-editing-services + +- Deadlock in ges because of recursive gst_init() call +- ges/gstframepositioner: don’t create one compositor per frame meta +- nle: clear seek event properly + +gst-examples: + +- examples/webrtc/signalling: Fix compatibility with Python 3.10 + +Development build environment + gst-full build + +- build: Fix some compiler warnings by upgrading wraps +- dv, opusparse: fix duplicate symbols in static build +- Fix fedora 36 warnings - OpenSSL 3.0 deprecations + GLib 2.72 + tls-validation deprecations +- Various macOS build fixes +- meson: Improve certifi documentation on macOS + +Cerbero build tool and packaging changes in 1.20.4 + +- Add Ubuntu 22.04 Jammy Jellyfish +- Add gst-rtsp-server library to the macOS framework +- cerbero: Quick fix for gen-cache breakage +- macos: Fix the install_name for the GStreamer framework +- Download using powershell on Windows and rework download func +- macos: Add arm64 to the metadata for the installer +- cerbero: Allow building on Linux ARM64 +- pkg-config.recipe: Add to core platform files list +- git: Fix issue with last security patch +- distros: Fix CentOS allowance +- cerbero: Print working directory for commands that are run +- cerbero: Fix license property usage example +- Fix issue getting distro_version in Debian Bookworm +- glib: Fix gio modules loading on macOS +- cmake: Fix macOS ARM64 -> x86_64 cross-compilation +- Fix logo display in macOS installer +- openssl.recipe: Fix segfault on latest macOS +- msvc: Fix for broken CRT linking at application project because of + MSVCRT linking +- cerbero: Do not add rpaths that already exist on macOS +- android: fix build with android gradle plugin 7.2 +- macOS framework is unusable starting from 1.18.0 + +Contributors to 1.20.4 + +Adrian Fiergolski, Aleksandr Slobodeniuk, Andoni Morales Alastruey, +Andrew Pritchard, Bruce Liang, Corentin Damman, Daniel Morin, Edward +Hervey, Elliot Chen, Fabian Orccon, fduncanh, Guillaume Desmottes, +Haihua Hu, He Junyan, Ignazio Pillai, James Cowgill, James Hilliard, Jan +Alexander Steffens (heftig), Jan Schmidt, Jianhui Dai, Jonas Danielsson, +Jordan Petridis, Khem Raj, Krystian Wojtas, Martin Dørum, Mart Raudsepp, +Mathieu Duponchelle, Matthew Waters, Matthias Clasen, Nicolas Dufresne, +Nirbheek Chauhan, Olivier Crête, Paweł Stawicki, Philippe Normand, +Philipp Zabel, Piotr Brzeziński, Rafael Caricio, Rafael Sobral, Raul +Tambre, Ruben Gonzalez, Sangchul Lee, Sebastian Dröge, Seungha Yang, +Stéphane Cerveau, Thibault Saunier, Tim-Philipp Müller, Tristan +Matthews, Víctor Manuel Jáquez Leal, Xavier Claessens, Zhiyuan Liu, + +… 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.20.4 + +- List of Merge Requests applied in 1.20.4 +- List of Issues fixed in 1.20.4 + Schedule for 1.22 Our next major feature release will be 1.22, and 1.21 will be the unstable development version leading up to the stable 1.22 release. The development of 1.21/1.22 will happen in the git main branch. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.22 development cycle is now confirmed, and we aim for +a 1.22.0 release in December 2022. 1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
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
.