Changes of Revision 26

gstreamer-plugins-bad-codecs.changes Changed
x
 
1
@@ -1,4 +1,9 @@
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
@@ -7,7 +7,7 @@
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
@@ -1,3 +1,171 @@
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,11 +2,11 @@
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
@@ -2416,6 +2416,137 @@
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
@@ -1,4 +1,4 @@
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
@@ -244388,37 +244388,37 @@
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
@@ -45,13 +45,13 @@
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
@@ -365,35 +365,62 @@
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
@@ -480,7 +507,9 @@
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
@@ -4820,7 +4820,7 @@
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, &copy);
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
@@ -41,7 +41,7 @@
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
@@ -1917,7 +1917,7 @@
2
       gst_event_parse_qos (event, NULL, NULL, &diff, &timestamp);
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
@@ -314,6 +314,7 @@
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
@@ -1422,8 +1423,12 @@
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
@@ -2627,6 +2632,7 @@
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
@@ -49,6 +49,7 @@
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
@@ -576,11 +577,16 @@
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
@@ -33,7 +33,8 @@
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
@@ -60,6 +61,7 @@
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
@@ -26,7 +26,10 @@
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
@@ -98,6 +98,7 @@
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
@@ -26,6 +26,19 @@
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
@@ -30,6 +30,9 @@
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
@@ -35,6 +35,16 @@
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
@@ -2449,7 +2449,7 @@
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
@@ -2463,8 +2463,14 @@
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
@@ -2518,7 +2524,7 @@
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
@@ -1,5 +1,5 @@
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
@@ -6,9 +6,9 @@
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
@@ -6,9 +6,9 @@
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
201
 
1
@@ -151,7 +151,7 @@
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
@@ -780,6 +780,7 @@
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
@@ -789,7 +790,7 @@
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
@@ -1545,6 +1546,7 @@
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
@@ -1753,6 +1755,49 @@
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
@@ -1802,6 +1847,11 @@
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
@@ -1960,9 +2010,16 @@
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
@@ -1991,14 +2048,23 @@
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
@@ -2006,26 +2072,29 @@
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
@@ -2043,28 +2112,18 @@
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
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
@@ -92,6 +92,10 @@
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
@@ -248,6 +248,22 @@
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
@@ -624,12 +640,14 @@
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
@@ -461,7 +461,7 @@
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
@@ -489,10 +489,26 @@
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
@@ -4538,6 +4538,58 @@
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
@@ -5979,6 +6031,7 @@
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