Overview
Submit package home:zait...sentials / gstreamer...d-codecs to package Essentials / gstreamer-plugins-bad-codecs
gstreamer-plugins-bad-codecs.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Sat Sep 28 08:31:55 UTC 2024 - Bjørn Lie <zaitor@opensuse.org>
4
+
5
+- Update to version 1.24.8
6
+
7
+-------------------------------------------------------------------
8
Sat Aug 24 19:53:47 UTC 2024 - Bjørn Lie <zaitor@opensuse.org>
9
10
- Update to version 1.24.7
11
gstreamer-plugins-bad-codecs.spec
Changed
10
1
2
%define _version 1.24.0
3
4
Name: gstreamer-plugins-bad-codecs
5
-Version: 1.24.7
6
+Version: 1.24.8
7
Release: 0
8
Summary: Codecs/plugins for gstreamer-plugins-bad
9
License: LGPL-2.1-or-later
10
gst-plugins-bad-1.24.7.tar.xz/ChangeLog -> gst-plugins-bad-1.24.8.tar.xz/ChangeLog
Changed
173
1
2
+=== release 1.24.8 ===
3
+
4
+2024-09-19 12:01:21 +0200 Tim-Philipp Müller <tim@centricular.com>
5
+
6
+ * NEWS:
7
+ * RELEASE:
8
+ * gst-plugins-bad.doap:
9
+ * meson.build:
10
+ Release 1.24.8
11
+
12
+2024-09-17 14:48:03 +0200 Benjamin Gaignard <benjamin.gaignard@collabora.com>
13
+
14
+ * sys/v4l2codecs/gstv4l2codech265dec.c:
15
+ v4l2codecs: h265: Minimize memory allocation
16
+ Be smarter when allocating sink and source memory pools to reduce the
17
+ memory footprint. Use gst_v4l2_decoder_get_render_delay() to know the
18
+ need number of buffers for downstream element.
19
+ Handle errors in case of memory allocation failures.
20
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7546>
21
+
22
+2024-09-17 18:31:30 +0300 Sebastian Dröge <sebastian@centricular.com>
23
+
24
+ * gst/mpegtsmux/gstbasetsmux.c:
25
+ mpegtsmux: Fix refcounting issue when selecting the best pad
26
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7539>
27
+
28
+2024-09-11 08:40:42 +0300 Sebastian Dröge <sebastian@centricular.com>
29
+
30
+ * gst/mpegtsmux/gstbasetsmux.c:
31
+ mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out
32
+ This makes sure that if upstream has different latencies that we're still
33
+ outputting buffers with increasining timestamps across the different streams
34
+ unless buffers are arriving after the latency deadline.
35
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7516>
36
+
37
+2024-09-05 22:07:24 +0300 Sebastian Dröge <sebastian@centricular.com>
38
+
39
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
40
+ video: Don't overshoot QoS earliest time by a factor of 2
41
+ By setting the earliest time to timestamp + 2 * diff there would be a difference
42
+ of 1 * diff between the current clock time and the earliest time the element
43
+ would let through in the future. If e.g. a frame is arriving 30s late at the
44
+ sink, then not just all frames up to that point would be dropped but also 30s of
45
+ frames after the current clock time.
46
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7518>
47
+
48
+2024-08-30 14:59:14 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
49
+
50
+ * gst-libs/gst/wayland/gstwldisplay.c:
51
+ * gst-libs/gst/wayland/gstwlshmallocator.c:
52
+ * gst-libs/gst/wayland/gstwlshmallocator.h:
53
+ wayland: Set a debug category for the shm allocator
54
+ None was set, which meant the debug was associated with default.
55
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7494>
56
+
57
+2024-09-09 16:27:43 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
58
+
59
+ * ext/wayland/gstwaylandsink.c:
60
+ * gst-libs/gst/wayland/gstwlcontext.c:
61
+ * gst-libs/gst/wayland/gstwlcontext.h:
62
+ wayland: Fix ABI break in WL context type name
63
+ While transforming the internals of waylandsink into a library, the
64
+ context type name was accidentally changed, causing an ABI break. Change
65
+ it back to its original (as used by the libgstgl), and add support for
66
+ the misnamed version as a backward compatibility measure.
67
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7494>
68
+
69
+2023-07-18 17:34:54 +0200 Michael Tretter <m.tretter@pengutronix.de>
70
+
71
+ * sys/uvcgadget/gstuvcsink.c:
72
+ uvcsink: set cur_caps to upstream selected caps
73
+ If the UVC gadget announces multiple formats in the descriptors the uvcsink
74
+ doesn't select the actual format but let's the UVC hosts select the format.
75
+ If the GStreamer pipeline is started before a UVC host selected the format,
76
+ upstream decides on a format until the UVC host has decided. In this case, the
77
+ current format needs to be set based on the caps from the caps event to be able
78
+ to detect if the format selection by the UVC host requires a format change on
79
+ the GStreamer pipeline.
80
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7484>
81
+
82
+2024-09-05 15:04:33 +0200 Michael Tretter <m.tretter@pengutronix.de>
83
+
84
+ * sys/uvcgadget/gstuvcsink.c:
85
+ uvcsink: skip comparison with prev_caps if they are not set
86
+ The uvcsink may be put into the READY state to start listening for UVC requests.
87
+ Therefore, the UVC host may set a streaming format before the GStreamer pipeline
88
+ is started and the uvcsink received a caps event. In this case, prev_caps will
89
+ be NULL.
90
+ If the EVENT_CAPS has not been received, skip the check if the format needs to
91
+ be changed, since the sink will be started with the format selected by the UVC
92
+ host, anyway.
93
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7484>
94
+
95
+2024-09-03 17:00:09 +0200 Piotr Brzeziński <piotr@centricular.com>
96
+
97
+ * sys/applemedia/vtenc.c:
98
+ * sys/applemedia/vtenc.h:
99
+ vtenc: Restart encoding session when certain errors are detected
100
+ Sometimes under certain loads, VT can error out with kVTVideoEncoderMalfunctionErr or kVTVideoEncoderNotAvailableNowErr.
101
+ These have been reported to happen more often than usual if CopyProperty/SetProperty() is used close to the encode call.
102
+ Both can be worked around by restarting the encoding session.
103
+ These errors can be returned either directly from VTCompressionSessionEncodeFrame() or later in the encoding callback.
104
+ This patch handles both scenarios the same way - a session restart is be attempted on the next encode_frame() call.
105
+ If the error is returned immediately by the encode call, it's possible that some correct frames will still be given to
106
+ the output callback, but for simplicity (+ because I wasn't able to verify this scenario) let's just discard those.
107
+ In addition, this commit also simplifies the beach/drop logic in enqueue_buffer.
108
+ Related bug reports in other projects:
109
+ http://www.openradar.me/45889262
110
+ https://github.com/aws/amazon-chime-sdk-ios/issues/170#issuecomment-741908622
111
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7449>
112
+
113
+2024-09-06 10:51:01 +0200 Edward Hervey <edward@centricular.com>
114
+
115
+ * gst-libs/gst/play/gstplay.c:
116
+ gstplay: Name the different bus
117
+ Makes it clearer when reading logs which one is which
118
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7471>
119
+
120
+2024-09-02 18:25:56 +0900 Hou Qi <qi.hou@nxp.com>
121
+
122
+ * gst-libs/gst/play/gstplay.c:
123
+ gstplay: check whether stream is seekable before seeking when state change
124
+ If state is changing from playing to paused, and rate is reset to 1
125
+ which causes seek position is valid, current code will do seek for
126
+ streams that are not seekable. So need to check whether stream is
127
+ seekable before seeking.
128
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7448>
129
+
130
+2024-08-29 12:01:30 +0100 Philippe Normand <philn@igalia.com>
131
+
132
+ * ext/webrtc/gstwebrtcbin.c:
133
+ * tests/check/elements/webrtcbin.c:
134
+ webrtcbin: Prevent crash when attempting to set answer on invalid SDP
135
+ If the pending remote description has an invalid BUNDLE group _parse_bundle()
136
+ triggers early return from _create_answer_task(), before ret has been
137
+ initialized, so it needs to be checked before attempting to call
138
+ gst_sdp_message_copy().
139
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7436>
140
+
141
+2024-08-21 13:23:36 +0100 Francis Quiers <fquiers@cisco.com>
142
+
143
+ * docs/plugins/gst_plugins_cache.json:
144
+ * ext/voamrwbenc/gstvoamrwbenc.c:
145
+ voamrwbenc: fix list of bitrates
146
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7418>
147
+
148
+2024-08-20 22:09:13 +1000 Jan Schmidt <jan@centricular.com>
149
+
150
+ * gst-libs/gst/player/gstplayer.c:
151
+ gstplayer: Check GstPlayerSignalDispatcher type
152
+ Before trying to retrieve a GMainContext from a provided
153
+ GstPlayerSignalDispatcher, check that it is actually
154
+ GstPlayerGMainContextSignalDispatcher. If not, use the
155
+ default GMainContext for dispatching signals via the adapter
156
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7398>
157
+
158
+2024-08-21 09:19:39 +0200 Guillaume Desmottes <guillaume.desmottes@onestream.live>
159
+
160
+ * ext/wpe/gstwpesrcbin.cpp:
161
+ wpe: fix gst-launch example
162
+ wpesrc does not have num-buffers property but wpevideosrc does.
163
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7397>
164
+
165
+2024-08-21 12:33:28 +0100 Tim-Philipp Müller <tim@centricular.com>
166
+
167
+ * meson.build:
168
+ Back to development after 1.24.7
169
+
170
=== release 1.24.7 ===
171
172
2024-08-21 12:25:15 +0100 Tim-Philipp Müller <tim@centricular.com>
173
gst-plugins-bad-1.24.7.tar.xz/NEWS -> gst-plugins-bad-1.24.8.tar.xz/NEWS
Changed
153
1
2
3
GStreamer 1.24.0 was originally released on 4 March 2024.
4
5
-The latest bug-fix release in the stable 1.24 series is 1.24.6 and was released on 21 August 2024.
6
+The latest bug-fix release in the stable 1.24 series is 1.24.8 and was released on 19 September 2024.
7
8
See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document.
9
10
-Last updated: Tuesday 20 August 2024, 20:30 UTC (log)
11
+Last updated: Thursday 19 September 2024, 00:30 UTC (log)
12
13
## Introduction
14
15
16
- List of Merge Requests applied in 1.24.7
17
- List of Issues fixed in 1.24.7
18
19
+1.24.8
20
+
21
+The eigth 1.24 bug-fix release (1.24.8) was released on 19 September 2024.
22
+
23
+This release only contains bugfixes and it should be safe to update from 1.24.x.
24
+
25
+Highlighted bugfixes in 1.24.8
26
+
27
+- decodebin3: collection handling fixes
28
+- encodebin: Fix pad removal (and smart rendering in gst-editing-services)
29
+- glimagesink: Fix cannot resize viewport when video size changed in caps
30
+- matroskamux, webmmux: fix firefox compatibility issue with Opus audio streams
31
+- mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out
32
+- splitmuxsink: Override LATENCY query to pretend to downstream that we’re not live
33
+- video: QoS event handling improvements
34
+- voamrwbenc: fix list of bitrates
35
+- vtenc: Restart encoding session when certain errors are detected
36
+- wayland: Fix ABI break in WL context type name
37
+- webrtcbin: Prevent crash when attempting to set answer on invalid SDP
38
+- cerbero: ship vp8/vp9 software encoders again, which went missing in 1.24.7; ship transcode plugin
39
+- Various bug fixes, memory leak fixes, and other stability and reliability improvements
40
+
41
+gstreamer
42
+
43
+- clock: Fix unchecked overflows in linear regression code
44
+- meta: Add missing include of gststructure.h
45
+- pad: Check data NULL-ness when probes are stopped
46
+- aggregator: Immediately return NONE from simple_get_next_time() on non-TIME segments
47
+
48
+gst-plugins-base
49
+
50
+- decodebin3: Fix collection identity check
51
+- encodebin: Fix pad removal
52
+- glimagesink: Fix cannot resize viewport when video size changed in caps
53
+- v4l2bufferpool: actually queue back the empty buffer flagged LAST
54
+- v4l2videoenc: unref buffer pool after usage properly
55
+- video: Don’t overshoot QoS earliest time by a factor of 2
56
+- meson: gst-play: link to libm
57
+
58
+gst-plugins-good
59
+
60
+- jackaudiosrc: actually use the queried ports from JACK
61
+- matroskamux: Include end padding in the block duration for Opus streams, fixing firefox compatibility
62
+- osxaudio: Avoid dangling pointer on shutdown
63
+- splitmuxsink: Override LATENCY query to pretend to downstream that we’re not live
64
+- v4l2: encoder: Add dynamic framerate support
65
+
66
+gst-plugins-bad
67
+
68
+- GstPlay: Name the different bus
69
+- GstPlay: check whether stream is seekable before seeking when state change
70
+- GstPlayer: Check GstPlayerSignalDispatcher type
71
+- mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out
72
+- mpegtsmux: Fix refcounting issue when selecting the best pad
73
+- uvcsink: fix caps event handling
74
+- v4l2codecs: h265: Minimize memory allocation
75
+- voamrwbenc: fix list of bitrates
76
+- vtenc: Restart encoding session when certain errors are detected
77
+- wayland: Fix ABI break in WL context type name
78
+- webrtcbin: Prevent crash when attempting to set answer on invalid SDP
79
+- wpe: fix gst-launch example
80
+
81
+gst-plugins-ugly
82
+
83
+- No changes
84
+
85
+GStreamer Rust plugins
86
+
87
+- No changes
88
+
89
+gst-libav
90
+
91
+- No changes
92
+
93
+gst-rtsp-server
94
+
95
+- No changes
96
+
97
+gstreamer-vaapi
98
+
99
+- No changes
100
+
101
+gstreamer-sharp
102
+
103
+- No changes
104
+
105
+gst-omx
106
+
107
+- No changes
108
+
109
+gst-python
110
+
111
+- No changes
112
+
113
+gst-editing-services
114
+
115
+- discoverer-manager: Fix race leading to assertion when stopping
116
+- structured-interface: Fix memory leak of invalid fields GList
117
+
118
+gst-devtools, gst-validate + gst-integration-testsuites
119
+
120
+- pad-monitor: Fix remaining pad function data handling
121
+- pad-monitor: Fix pad function data properly
122
+
123
+gst-examples
124
+
125
+- No changes
126
+
127
+Development build environment
128
+
129
+- meson: Update openjpeg wrap to 2.5.2, fixes a warning
130
+
131
+Cerbero build tool and packaging changes in 1.24.8
132
+
133
+- No vp8 / vp9 encoders packaged (regression)
134
+- libvpx: Fix codec detection to fix vp8enc/vp9enc elements not being shipped
135
+- gst-plugins-bad: Add missing transcode plugin
136
+
137
+Contributors to 1.24.8
138
+
139
+Andoni Morales Alastruey, Arun Raghavan, Benjamin Gaignard, Carlos Bentzen, Chao Guo, Edward Hervey, Francis Quiers, Guillaume
140
+Desmottes, Hou Qi, Jan Schmidt,, L. E. Segovia, Michael Tretter, Nicolas Dufresne, Nirbheek Chauhan, Peter Kjellerstedt,
141
+Philippe Normand, Piotr Brzeziński, Randy Li (ayaka), Sebastian Dröge, Thibault Saunier, Tim-Philipp Müller, Wim Taymans,
142
+
143
+… and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all!
144
+
145
+List of merge requests and issues fixed in 1.24.8
146
+
147
+- List of Merge Requests applied in 1.24.8
148
+- List of Issues fixed in 1.24.8
149
+
150
Schedule for 1.26
151
152
Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26
153
gst-plugins-bad-1.24.7.tar.xz/RELEASE -> gst-plugins-bad-1.24.8.tar.xz/RELEASE
Changed
7
1
2
-This is GStreamer gst-plugins-bad 1.24.7.
3
+This is GStreamer gst-plugins-bad 1.24.8.
4
5
The GStreamer team is thrilled to announce a new major feature release
6
of your favourite cross-platform multimedia framework!
7
gst-plugins-bad-1.24.7.tar.xz/docs/plugins/gst_plugins_cache.json -> gst-plugins-bad-1.24.8.tar.xz/docs/plugins/gst_plugins_cache.json
Changed
46
1
2
{
3
"desc": "MR1425",
4
"name": "MR1425",
5
- "value": "2"
6
+ "value": "3"
7
},
8
{
9
"desc": "MR1585",
10
"name": "MR1585",
11
- "value": "3"
12
+ "value": "4"
13
},
14
{
15
"desc": "MR1825",
16
"name": "MR1825",
17
- "value": "4"
18
+ "value": "5"
19
},
20
{
21
"desc": "MR1985",
22
"name": "MR1985",
23
- "value": "5"
24
+ "value": "6"
25
},
26
{
27
"desc": "MR2305",
28
"name": "MR2305",
29
- "value": "6"
30
+ "value": "7"
31
},
32
{
33
"desc": "MR2385",
34
"name": "MR2385",
35
- "value": "7"
36
+ "value": "8"
37
},
38
{
39
"desc": "MRDTX",
40
"name": "MRDTX",
41
- "value": "8"
42
+ "value": "9"
43
}
44
45
}
46
gst-plugins-bad-1.24.7.tar.xz/ext/voamrwbenc/gstvoamrwbenc.c -> gst-plugins-bad-1.24.8.tar.xz/ext/voamrwbenc/gstvoamrwbenc.c
Changed
22
1
2
#define MR660 0
3
#define MR885 1
4
#define MR1265 2
5
-#define MR1425 2
6
-#define MR1585 3
7
-#define MR1825 4
8
-#define MR1985 5
9
-#define MR2305 6
10
-#define MR2385 7
11
-#define MRDTX 8
12
+#define MR1425 3
13
+#define MR1585 4
14
+#define MR1825 5
15
+#define MR1985 6
16
+#define MR2305 7
17
+#define MR2385 8
18
+#define MRDTX 9
19
20
#define L_FRAME16k 320 /* Frame size at 16kHz */
21
22
gst-plugins-bad-1.24.7.tar.xz/ext/wayland/gstwaylandsink.c -> gst-plugins-bad-1.24.8.tar.xz/ext/wayland/gstwaylandsink.c
Changed
92
1
2
}
3
4
static gboolean
5
-gst_wayland_sink_find_display (GstWaylandSink * self)
6
+gst_wayland_sink_query_context (GstWaylandSink * self, const gchar * type)
7
{
8
GstQuery *query;
9
+ gboolean ret;
10
+
11
+ query = gst_query_new_context (type);
12
+ ret = gst_pad_peer_query (GST_VIDEO_SINK_PAD (self), query);
13
+
14
+ if (ret) {
15
+ GstContext *context = NULL;
16
+ gst_query_parse_context (query, &context);
17
+ gst_wayland_sink_set_display_from_context (self, context);
18
+ }
19
+
20
+ gst_query_unref (query);
21
+ return ret;
22
+}
23
+
24
+static gboolean
25
+gst_wayland_sink_post_need_context (GstWaylandSink * self, const gchar * type)
26
+{
27
GstMessage *msg;
28
- GstContext *context = NULL;
29
+
30
+ /* now ask the application to set the display handle */
31
+ msg = gst_message_new_need_context (GST_OBJECT_CAST (self), type);
32
+
33
+ g_mutex_unlock (&self->display_lock);
34
+ gst_element_post_message (GST_ELEMENT_CAST (self), msg);
35
+ /* at this point we expect gst_wayland_sink_set_context
36
+ * to get called and fill self->display */
37
+ g_mutex_lock (&self->display_lock);
38
+
39
+ return self->display != NULL;
40
+}
41
+
42
+static gboolean
43
+gst_wayland_sink_find_display (GstWaylandSink * self)
44
+{
45
GError *error = NULL;
46
gboolean ret = TRUE;
47
48
g_mutex_lock (&self->display_lock);
49
50
if (!self->display) {
51
- /* first query upstream for the needed display handle */
52
- query = gst_query_new_context (GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE);
53
- if (gst_pad_peer_query (GST_VIDEO_SINK_PAD (self), query)) {
54
- gst_query_parse_context (query, &context);
55
- gst_wayland_sink_set_display_from_context (self, context);
56
+ if (!gst_wayland_sink_query_context (self,
57
+ GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE)) {
58
+ gst_wayland_sink_query_context (self,
59
+ GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE);
60
}
61
- gst_query_unref (query);
62
63
if (G_LIKELY (!self->display)) {
64
- /* now ask the application to set the display handle */
65
- msg = gst_message_new_need_context (GST_OBJECT_CAST (self),
66
- GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE);
67
-
68
- g_mutex_unlock (&self->display_lock);
69
- gst_element_post_message (GST_ELEMENT_CAST (self), msg);
70
- /* at this point we expect gst_wayland_sink_set_context
71
- * to get called and fill self->display */
72
- g_mutex_lock (&self->display_lock);
73
+ if (!gst_wayland_sink_post_need_context (self,
74
+ GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE)) {
75
+ gst_wayland_sink_post_need_context (self,
76
+ GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE);
77
+ }
78
79
if (!self->display) {
80
/* if the application didn't set a display, let's create it ourselves */
81
82
GstWaylandSink *self = GST_WAYLAND_SINK (element);
83
84
if (gst_context_has_context_type (context,
85
- GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE)) {
86
+ GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE) ||
87
+ gst_context_has_context_type (context,
88
+ GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE)) {
89
g_mutex_lock (&self->display_lock);
90
if (G_LIKELY (!self->display)) {
91
gst_wayland_sink_set_display_from_context (self, context);
92
gst-plugins-bad-1.24.7.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.24.8.tar.xz/ext/webrtc/gstwebrtcbin.c
Changed
10
1
2
webrtc->priv->last_generated_offer = NULL;
3
if (webrtc->priv->last_generated_answer)
4
gst_webrtc_session_description_free (webrtc->priv->last_generated_answer);
5
- {
6
+ if (ret) {
7
GstSDPMessage *copy;
8
gst_sdp_message_copy (ret, ©);
9
webrtc->priv->last_generated_answer =
10
gst-plugins-bad-1.24.7.tar.xz/ext/wpe/gstwpesrcbin.cpp -> gst-plugins-bad-1.24.8.tar.xz/ext/wpe/gstwpesrcbin.cpp
Changed
10
1
2
* ### Save the first 50 video frames generated for the GStreamer website as PNG files in /tmp
3
*
4
* ```
5
- * LIBGL_ALWAYS_SOFTWARE=true gst-launch-1.0 -v wpesrc num-buffers=50 location="https://gstreamer.freedesktop.org" ! videoconvert ! pngenc ! multifilesink location=/tmp/snapshot-%05d.png
6
+ * LIBGL_ALWAYS_SOFTWARE=true gst-launch-1.0 -v wpevideosrc num-buffers=50 location="https://gstreamer.freedesktop.org" ! videoconvert ! pngenc ! multifilesink location=/tmp/snapshot-%05d.png
7
* ```
8
*
9
*
10
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/adaptivedemux/gstadaptivedemux.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
Changed
10
1
2
gst_event_parse_qos (event, NULL, NULL, &diff, ×tamp);
3
/* Only take into account lateness if late */
4
if (diff > 0)
5
- earliest_time = timestamp + 2 * diff;
6
+ earliest_time = timestamp + MIN (2 * diff, GST_SECOND);
7
else
8
earliest_time = timestamp;
9
10
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/play/gstplay.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/play/gstplay.c
Changed
32
1
2
self->context = g_main_context_new ();
3
self->loop = g_main_loop_new (self->context, FALSE);
4
self->api_bus = gst_bus_new ();
5
+ gst_object_set_name (GST_OBJECT (self->api_bus), "api_bus");
6
7
/* *INDENT-OFF* */
8
self->config = gst_structure_new_id (QUARK_CONFIG,
9
10
}
11
12
if (self->seek_position != GST_CLOCK_TIME_NONE) {
13
- GST_DEBUG_OBJECT (self, "Seeking now that we reached PAUSED state");
14
- gst_play_seek_internal_locked (self);
15
+ if (!self->media_info->seekable) {
16
+ GST_DEBUG_OBJECT (self, "Media is not seekable");
17
+ } else {
18
+ GST_DEBUG_OBJECT (self, "Seeking now that we reached PAUSED state");
19
+ gst_play_seek_internal_locked (self);
20
+ }
21
g_mutex_unlock (&self->lock);
22
} else if (!self->seek_pending) {
23
g_mutex_unlock (&self->lock);
24
25
}
26
27
self->bus = bus = gst_element_get_bus (self->playbin);
28
+ gst_object_set_name (GST_OBJECT (self->bus), "playbin_bus");
29
gst_bus_add_signal_watch (bus);
30
31
g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb),
32
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/player/gstplayer.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/player/gstplayer.c
Changed
31
1
2
3
#include "gstplayer.h"
4
#include "gstplayer-signal-dispatcher-private.h"
5
+#include "gstplayer-g-main-context-signal-dispatcher.h"
6
#include "gstplayer-video-renderer-private.h"
7
#include "gstplayer-media-info-private.h"
8
#include "gstplayer-wrapped-video-renderer-private.h"
9
10
if (self->signal_dispatcher != NULL) {
11
GMainContext *context = NULL;
12
13
- g_object_get (self->signal_dispatcher, "application-context", &context,
14
- NULL);
15
- self->signal_adapter =
16
- gst_play_signal_adapter_new_with_main_context (self->play, context);
17
- g_main_context_unref (context);
18
+ if (GST_IS_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER
19
+ (self->signal_dispatcher)) {
20
+ g_object_get (self->signal_dispatcher, "application-context", &context,
21
+ NULL);
22
+ self->signal_adapter =
23
+ gst_play_signal_adapter_new_with_main_context (self->play, context);
24
+ g_main_context_unref (context);
25
+ } else {
26
+ self->signal_adapter = gst_play_signal_adapter_new (self->play);
27
+ }
28
} else {
29
self->signal_adapter = gst_play_signal_adapter_new_sync_emit (self->play);
30
}
31
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlcontext.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlcontext.c
Changed
19
1
2
3
if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_NEED_CONTEXT &&
4
gst_message_parse_context_type (msg, &type)) {
5
- return !g_strcmp0 (type, GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE);
6
+ return !g_strcmp0 (type, GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE) ||
7
+ !g_strcmp0 (type, GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE);
8
}
9
10
return FALSE;
11
12
s = gst_context_get_structure (context);
13
if (gst_structure_get (s, "display", G_TYPE_POINTER, &display, NULL))
14
return display;
15
+ /* backward compatibility */
16
if (gst_structure_get (s, "handle", G_TYPE_POINTER, &display, NULL))
17
return display;
18
return NULL;
19
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlcontext.h -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlcontext.h
Changed
13
1
2
3
/* The type of GstContext used to pass the wl_display pointer
4
* from the application to the sink */
5
-#define GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE "GstWlDisplayHandleContextType"
6
+#define GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE "GstWaylandDisplayHandleContextType"
7
+
8
+/* Accidental naming, used for implementing backward compatibility */
9
+#define GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE "GstWlDisplayHandleContextType"
10
11
GST_WL_API
12
gboolean gst_is_wl_display_handle_need_context_message (GstMessage * msg);
13
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwldisplay.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwldisplay.c
Changed
9
1
2
g_rec_mutex_init (&priv->sync_mutex);
3
4
gst_wl_linux_dmabuf_init_once ();
5
+ gst_wl_shm_init_once ();
6
gst_shm_allocator_init_once ();
7
gst_wl_videoformat_init_once ();
8
}
9
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.c
Changed
21
1
2
3
#include "gstwlshmallocator.h"
4
5
+GST_DEBUG_CATEGORY (gst_wl_shm_debug);
6
+#define GST_CAT_DEFAULT gst_wl_shm_debug
7
+
8
+void
9
+gst_wl_shm_init_once (void)
10
+{
11
+ static gsize _init = 0;
12
+
13
+ if (g_once_init_enter (&_init)) {
14
+ GST_DEBUG_CATEGORY_INIT (gst_wl_shm_debug, "wl_shm", 0, "wl_shm library");
15
+ g_once_init_leave (&_init, 1);
16
+ }
17
+}
18
19
static gboolean
20
gst_wl_shm_validate_video_info (const GstVideoInfo * vinfo)
21
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.h -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.h
Changed
11
1
2
G_BEGIN_DECLS
3
4
GST_WL_API
5
+void gst_wl_shm_init_once (void);
6
+
7
+GST_WL_API
8
struct wl_buffer * gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem,
9
GstWlDisplay * display, const GstVideoInfo * info);
10
11
gst-plugins-bad-1.24.7.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.24.8.tar.xz/gst-plugins-bad.doap
Changed
18
1
2
3
<release>
4
<Version>
5
+ <revision>1.24.8</revision>
6
+ <branch>1.24</branch>
7
+ <name></name>
8
+ <created>2024-09-19</created>
9
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.24.8.tar.xz" />
10
+ </Version>
11
+ </release>
12
+
13
+ <release>
14
+ <Version>
15
<revision>1.24.7</revision>
16
<branch>1.24</branch>
17
<name></name>
18
gst-plugins-bad-1.24.7.tar.xz/gst/mpegtsmux/gstbasetsmux.c -> gst-plugins-bad-1.24.8.tar.xz/gst/mpegtsmux/gstbasetsmux.c
Changed
35
1
2
}
3
4
static GstBaseTsMuxPad *
5
-gst_base_ts_mux_find_best_pad (GstAggregator * aggregator)
6
+gst_base_ts_mux_find_best_pad (GstAggregator * aggregator, gboolean timeout)
7
{
8
GstBaseTsMuxPad *best = NULL;
9
GstClockTime best_ts = GST_CLOCK_TIME_NONE;
10
11
GstBuffer *buffer;
12
13
buffer = gst_aggregator_pad_peek_buffer (apad);
14
- if (!buffer)
15
+ if (!buffer) {
16
+ if (!timeout && !GST_PAD_IS_EOS (apad)) {
17
+ best = NULL;
18
+ best_ts = GST_CLOCK_TIME_NONE;
19
+ break;
20
+ }
21
continue;
22
+ }
23
if (best_ts == GST_CLOCK_TIME_NONE) {
24
best = tpad;
25
best_ts = GST_BUFFER_DTS_OR_PTS (buffer);
26
27
{
28
GstBaseTsMux *mux = GST_BASE_TS_MUX (agg);
29
GstFlowReturn ret = GST_FLOW_OK;
30
- GstBaseTsMuxPad *best = gst_base_ts_mux_find_best_pad (agg);
31
+ GstBaseTsMuxPad *best = gst_base_ts_mux_find_best_pad (agg, timeout);
32
GstCaps *caps;
33
34
/* set caps on the srcpad if no caps were set yet */
35
gst-plugins-bad-1.24.7.tar.xz/meson.build -> gst-plugins-bad-1.24.8.tar.xz/meson.build
Changed
8
1
2
project('gst-plugins-bad', 'c', 'cpp',
3
- version : '1.24.7',
4
+ version : '1.24.8',
5
meson_version : '>= 1.1',
6
default_options : 'warning_level=1',
7
'buildtype=debugoptimized' )
8
gst-plugins-bad-1.24.7.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.24.8.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
13
1
2
#, fuzzy
3
msgid ""
4
msgstr ""
5
-"Project-Id-Version: gst-plugins-bad-1.24.7\n"
6
+"Project-Id-Version: gst-plugins-bad-1.24.8\n"
7
"Report-Msgid-Bugs-To: \n"
8
-"POT-Creation-Date: 2024-08-21 12:27+0100\n"
9
+"POT-Creation-Date: 2024-09-19 12:02+0200\n"
10
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
"Language-Team: LANGUAGE <LL@li.org>\n"
13
gst-plugins-bad-1.24.7.tar.xz/po/gst-plugins-bad.pot -> gst-plugins-bad-1.24.8.tar.xz/po/gst-plugins-bad.pot
Changed
13
1
2
#, fuzzy
3
msgid ""
4
msgstr ""
5
-"Project-Id-Version: gst-plugins-bad-1.24.7\n"
6
+"Project-Id-Version: gst-plugins-bad-1.24.8\n"
7
"Report-Msgid-Bugs-To: \n"
8
-"POT-Creation-Date: 2024-08-21 12:27+0100\n"
9
+"POT-Creation-Date: 2024-09-19 12:02+0200\n"
10
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
"Language-Team: LANGUAGE <LL@li.org>\n"
13
gst-plugins-bad-1.24.7.tar.xz/sys/applemedia/vtenc.c -> gst-plugins-bad-1.24.8.tar.xz/sys/applemedia/vtenc.c
Changed
214
1
2
3
static gboolean gst_vtenc_start (GstVideoEncoder * enc);
4
static gboolean gst_vtenc_stop (GstVideoEncoder * enc);
5
-static void gst_vtenc_loop (GstVTEnc * self);
6
+static void gst_vtenc_output_loop (GstVTEnc * self);
7
static gboolean gst_vtenc_set_format (GstVideoEncoder * enc,
8
GstVideoCodecState * input_state);
9
static GstFlowReturn gst_vtenc_handle_frame (GstVideoEncoder * enc,
10
11
12
self->is_flushing = FALSE;
13
self->downstream_ret = GST_FLOW_OK;
14
+ g_atomic_int_set (&self->require_restart, FALSE);
15
16
self->output_queue = gst_queue_array_new (VTENC_OUTPUT_QUEUE_SIZE);
17
/* Set clear_func to unref all remaining frames in gst_queue_array_free() */
18
19
/* Create the output task, but pause it immediately */
20
self->pause_task = TRUE;
21
if (!gst_pad_start_task (GST_VIDEO_ENCODER_SRC_PAD (enc),
22
- (GstTaskFunction) gst_vtenc_loop, self, NULL)) {
23
+ (GstTaskFunction) gst_vtenc_output_loop, self, NULL)) {
24
GST_ERROR_OBJECT (self, "failed to start output thread");
25
return FALSE;
26
}
27
28
static void
29
gst_vtenc_destroy_session (GstVTEnc * self, VTCompressionSessionRef * session)
30
{
31
+ GST_DEBUG_OBJECT (self, "Destroying VT session");
32
VTCompressionSessionInvalidate (*session);
33
if (*session != NULL) {
34
CFRelease (*session);
35
36
}
37
}
38
39
+static Boolean
40
+gst_vtenc_is_recoverable_error (OSStatus status)
41
+{
42
+ return status == kVTVideoEncoderMalfunctionErr
43
+ || status == kVTVideoEncoderNotAvailableNowErr;
44
+}
45
+
46
+static void
47
+gst_vtenc_restart_session (GstVTEnc * self)
48
+{
49
+ OSStatus status;
50
+ VTCompressionSessionRef session;
51
+
52
+ /* We need to push out all frames still inside the encoder,
53
+ * otherwise destroy_session() will wait for all callbacks to fire
54
+ * and very likely deadlock due to the object lock being taken */
55
+ GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
56
+ status = VTCompressionSessionCompleteFrames (self->session,
57
+ kCMTimePositiveInfinity);
58
+ if (status != noErr) {
59
+ GST_WARNING_OBJECT (self,
60
+ "Error when emptying encoder before restart: %d, will retry on next frame encode",
61
+ (int) status);
62
+ GST_VIDEO_ENCODER_STREAM_LOCK (self);
63
+ return;
64
+ } else {
65
+ GST_DEBUG_OBJECT (self, "All frames out, restarting encoder session");
66
+ }
67
+ GST_VIDEO_ENCODER_STREAM_LOCK (self);
68
+
69
+ GST_OBJECT_LOCK (self);
70
+ gst_vtenc_destroy_session (self, &self->session);
71
+ GST_OBJECT_UNLOCK (self);
72
+
73
+ session = gst_vtenc_create_session (self);
74
+
75
+ GST_OBJECT_LOCK (self);
76
+ self->session = session;
77
+ GST_OBJECT_UNLOCK (self);
78
+
79
+ g_atomic_int_set (&self->require_restart, FALSE);
80
+}
81
+
82
static GstFlowReturn
83
gst_vtenc_encode_frame (GstVTEnc * self, GstVideoCodecFrame * frame)
84
{
85
86
}
87
}
88
89
+ /* Flushes all remaining frames out of the encoder
90
+ * and recreates the encoding session. */
91
+ if (g_atomic_int_get (&self->require_restart))
92
+ gst_vtenc_restart_session (self);
93
+
94
if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) {
95
GST_INFO_OBJECT (self, "received force-keyframe-event, will force intra");
96
frame_props = self->keyframe_props;
97
98
GINT_TO_POINTER (frame->system_frame_number), NULL);
99
GST_VIDEO_ENCODER_STREAM_LOCK (self);
100
101
- if (vt_status != noErr) {
102
- GST_WARNING_OBJECT (self, "VTCompressionSessionEncodeFrame returned %d",
103
- (int) vt_status);
104
+ if (gst_vtenc_is_recoverable_error (vt_status)) {
105
+ GST_ELEMENT_WARNING (self, LIBRARY, ENCODE, (NULL),
106
+ ("Failed to encode frame %d: %d, restarting session on next frame encode",
107
+ frame->system_frame_number, (int) vt_status));
108
+
109
+ g_atomic_int_set (&self->require_restart, TRUE);
110
+ } else if (vt_status != noErr) {
111
+ GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL),
112
+ ("Failed to encode frame %d: %d", frame->system_frame_number,
113
+ (int) vt_status));
114
}
115
116
gst_video_codec_frame_unref (frame);
117
118
{
119
GstVTEnc *self = outputCallbackRefCon;
120
GstVideoCodecFrame *frame;
121
- gboolean is_flushing;
122
123
frame =
124
gst_video_encoder_get_frame (GST_VIDEO_ENCODER_CAST (self),
125
GPOINTER_TO_INT (sourceFrameRefCon));
126
127
+ if (g_atomic_int_get (&self->require_restart)) {
128
+ GST_DEBUG_OBJECT (self, "Ignoring frame because of scheduled restart");
129
+ goto drop;
130
+ }
131
+
132
if (status != noErr) {
133
- if (frame) {
134
+ if (gst_vtenc_is_recoverable_error (status)) {
135
+ GST_ELEMENT_WARNING (self, LIBRARY, ENCODE, (NULL),
136
+ ("Failed to encode frame (%d), restarting session on next frame encode",
137
+ (int) status));
138
+ g_atomic_int_set (&self->require_restart, TRUE);
139
+ } else if (frame) {
140
GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL),
141
("Failed to encode frame %d: %d", frame->system_frame_number,
142
(int) status));
143
144
GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL),
145
("Failed to encode (frame unknown): %d", (int) status));
146
}
147
- goto beach;
148
+
149
+ goto drop;
150
}
151
152
if (!frame) {
153
GST_WARNING_OBJECT (self, "No corresponding frame found!");
154
- goto beach;
155
+ return;
156
}
157
158
g_mutex_lock (&self->queue_mutex);
159
- is_flushing = self->is_flushing;
160
- g_mutex_unlock (&self->queue_mutex);
161
- if (is_flushing) {
162
+ if (self->is_flushing) {
163
GST_DEBUG_OBJECT (self, "Ignoring frame %d because we're flushing",
164
frame->system_frame_number);
165
- goto beach;
166
+
167
+ gst_video_codec_frame_unref (frame);
168
+ g_mutex_unlock (&self->queue_mutex);
169
+ return;
170
}
171
+ g_mutex_unlock (&self->queue_mutex);
172
173
/* This may happen if we don't have enough bitrate */
174
if (sampleBuffer == NULL)
175
- goto beach;
176
+ goto drop;
177
178
if (gst_vtenc_buffer_is_keyframe (self, sampleBuffer))
179
GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
180
181
VTENC_OUTPUT_QUEUE_SIZE) {
182
g_cond_wait (&self->queue_cond, &self->queue_mutex);
183
}
184
- g_mutex_unlock (&self->queue_mutex);
185
-
186
-beach:
187
- if (!frame)
188
- return;
189
-
190
- g_mutex_lock (&self->queue_mutex);
191
- if (self->is_flushing) {
192
- /* We can discard the frame here, no need to have the output loop do that */
193
- gst_video_codec_frame_unref (frame);
194
- g_mutex_unlock (&self->queue_mutex);
195
- return;
196
- }
197
198
- /* Buffer-less frames will be discarded in the output loop */
199
gst_queue_array_push_tail (self->output_queue, frame);
200
g_cond_signal (&self->queue_cond);
201
g_mutex_unlock (&self->queue_mutex);
202
+ return;
203
+
204
+drop:
205
+ gst_video_codec_frame_unref (frame);
206
}
207
208
static void
209
-gst_vtenc_loop (GstVTEnc * self)
210
+gst_vtenc_output_loop (GstVTEnc * self)
211
{
212
GstVideoCodecFrame *outframe;
213
GstCoreMediaMeta *meta;
214
gst-plugins-bad-1.24.7.tar.xz/sys/applemedia/vtenc.h -> gst-plugins-bad-1.24.8.tar.xz/sys/applemedia/vtenc.h
Changed
12
1
2
gboolean negotiate_downstream;
3
gboolean is_flushing;
4
gboolean pause_task;
5
+
6
+ /* If we get an EncoderMalfunctionErr or similar, we restart the session
7
+ * before the next encode call */
8
+ gboolean require_restart;
9
};
10
11
void gst_vtenc_register_elements (GstPlugin * plugin);
12
gst-plugins-bad-1.24.7.tar.xz/sys/uvcgadget/gstuvcsink.c -> gst-plugins-bad-1.24.8.tar.xz/sys/uvcgadget/gstuvcsink.c
Changed
44
1
2
case GST_EVENT_CAPS:
3
GST_DEBUG_OBJECT (self, "Handling %" GST_PTR_FORMAT, event);
4
5
+ /* If the UVC host did not yet commit a format, the cur_caps may contain
6
+ * all probed caps. In this case, the element is not able to detect, if
7
+ * the caps have changed when the stream is enabled. Take the caps from
8
+ * upstream to be able to detect a change.
9
+ */
10
+ if (!GST_CAPS_IS_SIMPLE (self->cur_caps)) {
11
+ GstCaps *caps;
12
+
13
+ gst_event_parse_caps (event, &caps);
14
+ gst_caps_replace (&self->cur_caps, caps);
15
+
16
+ GST_DEBUG_OBJECT (self,
17
+ "UVC host didn't select a format, yet. Using upstream %"
18
+ GST_PTR_FORMAT, self->cur_caps);
19
+ }
20
+
21
/* EVENT CAPS signals that the buffers after the event will use new caps.
22
* If the UVC host requested a new format, we now must start the stream.
23
*/
24
25
gst_caps_unref (configured_caps);
26
27
prev_caps = gst_pad_get_current_caps (self->sinkpad);
28
- if (!gst_caps_is_subset (prev_caps, self->cur_caps)) {
29
- self->caps_changed = TRUE;
30
- GST_DEBUG_OBJECT (self,
31
- "caps changed from %" GST_PTR_FORMAT, prev_caps);
32
+ if (prev_caps) {
33
+ if (!gst_caps_is_subset (prev_caps, self->cur_caps)) {
34
+ self->caps_changed = TRUE;
35
+ GST_DEBUG_OBJECT (self,
36
+ "caps changed from %" GST_PTR_FORMAT, prev_caps);
37
+ }
38
+ gst_caps_unref (prev_caps);
39
}
40
- gst_caps_unref (prev_caps);
41
}
42
break;
43
default:
44
gst-plugins-bad-1.24.7.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c -> gst-plugins-bad-1.24.8.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c
Changed
39
1
2
{
3
GstV4l2CodecH265Dec *self = GST_V4L2_CODEC_H265_DEC (decoder);
4
GstCaps *caps = NULL;
5
- guint min = 0;
6
+ guint min = 0, num_bitstream;
7
8
if (self->streaming)
9
goto no_internal_changes;
10
11
12
min = MAX (2, min);
13
14
+ num_bitstream = 1 +
15
+ MAX (1, gst_v4l2_decoder_get_render_delay (self->decoder));
16
+
17
self->sink_allocator = gst_v4l2_codec_allocator_new (self->decoder,
18
- GST_PAD_SINK, self->min_pool_size + 2);
19
+ GST_PAD_SINK, num_bitstream);
20
+ if (!self->sink_allocator) {
21
+ GST_ELEMENT_ERROR (self, RESOURCE, NO_SPACE_LEFT,
22
+ ("Not enough memory to allocate sink buffers."), (NULL));
23
+ return FALSE;
24
+ }
25
+
26
self->src_allocator = gst_v4l2_codec_allocator_new (self->decoder,
27
- GST_PAD_SRC, self->min_pool_size + min + 1);
28
+ GST_PAD_SRC, self->min_pool_size + min);
29
+ if (!self->src_allocator) {
30
+ GST_ELEMENT_ERROR (self, RESOURCE, NO_SPACE_LEFT,
31
+ ("Not enough memory to allocate source buffers."), (NULL));
32
+ g_clear_object (&self->sink_allocator);
33
+ return FALSE;
34
+ }
35
+
36
self->src_pool = gst_v4l2_codec_pool_new (self->src_allocator, &self->vinfo);
37
38
no_internal_changes:
39
gst-plugins-bad-1.24.7.tar.xz/tests/check/elements/webrtcbin.c -> gst-plugins-bad-1.24.8.tar.xz/tests/check/elements/webrtcbin.c
Changed
68
1
2
}
3
}
4
5
+GST_START_TEST (test_invalid_bundle_in_pending_remote_description)
6
+{
7
+ GstPromise *promise;
8
+ struct test_webrtc *t = test_webrtc_new ();
9
+ const gchar *invalid_bundle = "v=0\r\n\
10
+o=thisisadapterortc 2683876491 2 IN IP4 127.0.0.1\r\n\
11
+s=-\r\n\
12
+t=0 0\r\n\
13
+a=setup:actpass\r\n\
14
+a=fingerprint:sha-256 95:B3:DB:24:83:3B:9E:3F:B0:AD:93:2D:EF:73:C9:D2:1C:68:EA:19:C6:F8:73:BA:9A:FA:34:A9:64:69:C0:D8\r\n\
15
+a=ice-ufrag:ERn4TYI2HSbtKrzQNCdp9wD2EHt4wM2O\r\n\
16
+a=ice-pwd:QxEZFuCPRwIURJPMSYNNYFr2XFNgqNkG\r\n\
17
+a=group:BUNDLE \r\n\
18
+";
19
+ GstSDPMessage *sdp;
20
+ const GstStructure *reply;
21
+ GError *error = NULL;
22
+
23
+ t->on_negotiation_needed = NULL;
24
+ t->on_offer_created = NULL;
25
+ t->on_answer_created = NULL;
26
+
27
+ gst_sdp_message_new_from_text (invalid_bundle, &sdp);
28
+ GstWebRTCSessionDescription *desc =
29
+ gst_webrtc_session_description_new (GST_WEBRTC_SDP_TYPE_OFFER,
30
+ sdp);
31
+ gst_element_set_state (t->webrtc1, GST_STATE_READY);
32
+
33
+ promise = gst_promise_new ();
34
+ g_signal_emit_by_name (t->webrtc1, "set-remote-description", desc, promise);
35
+ gst_promise_wait (promise);
36
+ gst_promise_unref (promise);
37
+ gst_webrtc_session_description_free (desc);
38
+
39
+ /* Creating an answer from SDP with invalid BUNDLE group should trigger no crash. */
40
+ promise = gst_promise_new ();
41
+ g_signal_emit_by_name (t->webrtc1, "create-answer", NULL, promise);
42
+ gst_promise_wait (promise);
43
+ reply = gst_promise_get_reply (promise);
44
+ fail_unless (gst_structure_get (reply, "error", G_TYPE_ERROR, &error, NULL));
45
+ fail_unless (g_error_matches (error, GST_WEBRTC_ERROR,
46
+ GST_WEBRTC_ERROR_SDP_SYNTAX_ERROR));
47
+ fail_unless_equals_string (error->message,
48
+ "Invalid format for BUNDLE group, expected at least one mid (BUNDLE )");
49
+ g_clear_error (&error);
50
+ gst_promise_unref (promise);
51
+
52
+ test_webrtc_free (t);
53
+}
54
+
55
+GST_END_TEST;
56
+
57
static void
58
new_jitterbuffer_set_fast_start (GstElement * rtpbin,
59
GstElement * rtpjitterbuffer, guint session_id, guint ssrc,
60
61
tcase_add_test (tc, test_msid);
62
tcase_add_test (tc, test_ice_end_of_candidates);
63
tcase_add_test (tc, test_sdp_session_setup_attribute);
64
+ tcase_add_test (tc, test_invalid_bundle_in_pending_remote_description);
65
if (sctpenc && sctpdec) {
66
tcase_add_test (tc, test_data_channel_create);
67
tcase_add_test (tc, test_data_channel_create_two_channels);
68
Refresh
No build results available
Refresh
No rpmlint results available
Login required, please
login
or
signup
in order to comment