Overview

Request 5845 (accepted)

New upstream release

Submit package home:zait...sentials / gstreamer...d-codecs to package Essentials / gstreamer-plugins-bad-codecs

gstreamer-plugins-bad-codecs.changes Changed
x
 
1
@@ -1,4 +1,9 @@
2
 -------------------------------------------------------------------
3
+Fri Sep 22 17:25:19 UTC 2023 - Bjørn Lie <zaitor@opensuse.org>
4
+
5
+- Update to version 1.22.6
6
+
7
+-------------------------------------------------------------------
8
 Sat Aug 12 09:49:32 UTC 2023 - Bjørn Lie <zaitor@opensuse.org>
9
 
10
 - Update to version 1.22.5
11
gstreamer-plugins-bad-codecs.spec Changed
10
 
1
@@ -7,7 +7,7 @@
2
 %define _version 1.22.0
3
 
4
 Name:           gstreamer-plugins-bad-codecs
5
-Version:        1.22.5
6
+Version:        1.22.6
7
 Release:        0
8
 Summary:        Codecs/plugins for gstreamer-plugins-bad
9
 License:        LGPL-2.1-or-later
10
gst-plugins-bad-1.22.5.tar.xz/ChangeLog -> gst-plugins-bad-1.22.6.tar.xz/ChangeLog Changed
289
 
1
@@ -1,3 +1,287 @@
2
+=== release 1.22.6 ===
3
+
4
+2023-09-20 18:10:57 +0100  Tim-Philipp Müller <tim@centricular.com>
5
+
6
+   * NEWS:
7
+   * RELEASE:
8
+   * gst-plugins-bad.doap:
9
+   * meson.build:
10
+     Release 1.22.6
11
+
12
+2023-08-10 15:47:03 +0300  Sebastian Dröge <sebastian@centricular.com>
13
+
14
+   * gst/mxf/mxfd10.c:
15
+     mxfdemux: Check number of channels for AES3 audio
16
+     Only up to 8 channels are allowed and using a higher number would cause
17
+     integer overflows when copying the data, and lead to out of bound
18
+     writes.
19
+     Also check that each buffer is at least 4 bytes long to avoid another
20
+     overflow.
21
+     Fixes ZDI-CAN-21661, CVE-2023-40475
22
+     Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2897
23
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5365>
24
+
25
+2023-08-10 15:45:01 +0300  Sebastian Dröge <sebastian@centricular.com>
26
+
27
+   * gst/mxf/mxfup.c:
28
+     mxfdemux: Fix integer overflow causing out of bounds writes when handling invalid uncompressed video
29
+     Check ahead of time when parsing the track information whether
30
+     width, height and bpp are valid and usable without overflows.
31
+     Fixes ZDI-CAN-21660, CVE-2023-40474
32
+     Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2896
33
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5365>
34
+
35
+2023-08-09 12:49:19 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
36
+
37
+   * gst-libs/gst/codecparsers/gsth265parser.c:
38
+     h265parser: Fix possible overflow using max_sub_layers_minus1
39
+     This fixes a possible overflow that can be triggered by an invalid value of
40
+     max_sub_layers_minus1 being set in the bitstream. The bitstream uses 3 bits,
41
+     but the allowed range is 0 to 6 only.
42
+     Fixes ZDI-CAN-21768, CVE-2023-40476
43
+     Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2895
44
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5366>
45
+
46
+2023-09-11 18:12:28 +0200  Hugues Fruchet <hugues.fruchet@foss.st.com>
47
+
48
+   * gst-libs/gst/wayland/gstwlwindow.c:
49
+     waylandsink: Fix cropping for video with non-square aspect ratio
50
+     Padding of unaligned content is still visible at right with some aspect-ratio.
51
+     Fix this by giving the original content resolution to wp_viewport_set_source()
52
+     instead of pixel aspect ratio scaled one.
53
+     Fixes !5259
54
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5360>
55
+
56
+2023-09-14 01:18:59 +0900  Seungha Yang <seungha@centricular.com>
57
+
58
+   * gst-libs/gst/codecs/gsth264decoder.c:
59
+   * gst-libs/gst/codecs/gsth264picture.h:
60
+     h264decoder: Update latency dynamically
61
+     The actual number of reorder frames is unknown
62
+     unless frame reordering is disabled
63
+     (e.g., POC type 2 or constrained-* profiles).
64
+     Also derived maximum DPB size or max_num_reorder_frames in VUI
65
+     is not the upper bound of output delay.
66
+     Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2702
67
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5341>
68
+
69
+2023-08-16 13:43:56 +0000  L. E. Segovia <amy@amyspark.me>
70
+
71
+   * sys/applemedia/avsamplevideosink.m:
72
+     applemedia: Also fix inconsistent pixel format definition for NV12
73
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5203>
74
+
75
+2023-08-15 21:45:56 +0000  L. E. Segovia <amy@amyspark.me>
76
+
77
+   * sys/applemedia/coremediabuffer.c:
78
+   * sys/applemedia/corevideobuffer.c:
79
+     applemedia: Fix pixel format for I420
80
+     In Intel Macs, using full range 8-bit 4:2:0 YCbCr results in a failure on
81
+     initialization. I've validated this to be the correct pixel format with FFmpeg:
82
+     https://github.com/FFmpeg/FFmpeg/blob/8653dcaf7d665b15b40ea9a560c8171b0914a882/libavutil/hwcontext_videotoolbox.c#L45
83
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5203>
84
+
85
+2023-08-24 12:12:09 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
86
+
87
+   * sys/va/gstvadecoder.c:
88
+   * sys/va/gstvadisplay_priv.c:
89
+     va: Fix in error logs functions mismatches
90
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5340>
91
+
92
+2023-09-15 11:06:52 +1000  Matthew Waters <matthew@centricular.com>
93
+
94
+   * sys/androidmedia/gstamcvideoenc.c:
95
+     androidmedia/enc: handle codec-data before popping GstVideoCodecFrames
96
+     Issue is that when amc was producing a codec-data buffer, a
97
+     GstVideoCodecFrame was being popped off the internal queue.  This meant
98
+     that the codec-data was being associated with the first input frame and
99
+     the second (first encoded buffer) output buffer with the second input
100
+     frame.  At the end (assuming one input produces one output which seems
101
+     to hold in my testing and how the encoder is currently implemented)
102
+     there would be an input frame missing and would be pushed without any
103
+     timing information.  This would lead to e.g. muxers rejecting the buffer
104
+     without PTS and failing to mux.
105
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5335>
106
+
107
+2023-09-15 11:06:07 +1000  Matthew Waters <matthew@centricular.com>
108
+
109
+   * sys/androidmedia/gstamc-constants.h:
110
+   * sys/androidmedia/gstamcvideoenc.c:
111
+     androidmedia/enc: add fixme log about partial frames
112
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5335>
113
+
114
+2023-09-16 03:13:33 +0900  Seungha Yang <seungha@centricular.com>
115
+
116
+   * gst-libs/gst/codecparsers/gstav1parser.c:
117
+     av1parser: Fix segmentation params update
118
+     Even if the segmentation feature value is not updated,
119
+     the parsed "segmentation_update_map" and "segmentation_temporal_update"
120
+     values should not be cleared as it's referenced during lower
121
+     level bitstream parsing. Also, don't use assert() in parser
122
+     unless it's clearly impossible condition.
123
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5336>
124
+
125
+2023-08-24 17:40:42 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
126
+
127
+   * gst/rtmp2/rtmp/rtmpclient.c:
128
+     rtmp2: Allow NULL flash version, omitting the field
129
+     rtmpsink omits it by default. Allow us to do the same.
130
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5248>
131
+
132
+2023-09-05 14:15:04 +0200  Thomas Schneider <thomas.schneider@voliro.ch>
133
+
134
+   * sys/androidmedia/gstamc.c:
135
+     androidmedia: fix hevc codec profile registration
136
+     Fix the codec registration logic such that all supported
137
+     profiles are available instead of just the first in the
138
+     list.
139
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5313>
140
+
141
+2023-09-03 13:21:30 +0000  Akihiro Sagawa <sagawa.aki@gmail.com>
142
+
143
+   * gst-libs/gst/codecparsers/gstmpegvideoparser.c:
144
+     codecparsers: Fix MPEG-1 aspect ratio table
145
+     The values defined in ISO/IEC 11172-2 are different from those used so far.
146
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5300>
147
+
148
+2023-08-29 14:55:03 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
149
+
150
+   * gst-libs/gst/wayland/gstwlwindow.c:
151
+     waylandsink: Crop surfaces to their display width height
152
+     Setting the surface source rectangle has been omitted so far. As a side effect
153
+     surface created with padded width/height are being scaled down. Fix this using
154
+     the viewporter source rectangle configuration. This can later be enhanced
155
+     to support crop meta.
156
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5298>
157
+
158
+2023-08-28 20:58:22 +0900  Seungha Yang <seungha@centricular.com>
159
+
160
+   * sys/d3d11/gstd3d11convert.cpp:
161
+     d3d11convert: Passthrough allocation query on same caps
162
+     Since d3d11convert and its variant elements does not enable basetransform's
163
+     passthrough, passthrough allocation query needs to be handled
164
+     manually in order to respect downstream element's min/max buffer
165
+     requirement.
166
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5297>
167
+
168
+2023-08-23 19:27:43 +0900  Seungha Yang <seungha@centricular.com>
169
+
170
+   * sys/nvcodec/gstnvencoder.cpp:
171
+     nvencoder: Fix negotiation error when interlace-mode is unspecified
172
+     Use GST_PAD_SET_ACCEPT_INTERSECT() to accept caps without interlace-mode
173
+     field
174
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5240>
175
+
176
+2023-08-23 18:07:31 +0900  Seungha Yang <seungha@centricular.com>
177
+
178
+   * sys/win32ipc/protocol/win32ipcpipeserver.cpp:
179
+     win32ipc: Fix pipe handle leak
180
+     Named pipe handle must be closed if it's no longer needed
181
+     Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2923
182
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5231>
183
+
184
+2023-08-22 02:57:24 +0900  Seungha Yang <seungha@centricular.com>
185
+
186
+   * gst/videoparsers/gsth265parse.c:
187
+   * tests/check/elements/h265parse.c:
188
+     h265parse: Allow partially broken hvcC data
189
+     Ignores parsing error on the last nalu of the array if the nalu type
190
+     is not VPS/SPS/PPS
191
+     Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2905
192
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5220>
193
+
194
+2023-08-18 18:21:18 +1000  Jan Schmidt <jan@centricular.com>
195
+
196
+   * ext/mdns/gstmicrodnsdevice.c:
197
+     mdns: Fix a crash on context error
198
+     Make sure not to free the microdns provider context until the
199
+     device provider asks it to stop. Fixes a crash if there is
200
+     an error (such as MDNS port being busy) that makes the
201
+     mdns listener exit early.
202
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5207>
203
+
204
+2023-08-18 09:27:36 +0200  Guillaume Desmottes <guillaume.desmottes@onestream.live>
205
+
206
+   * gst/rtmp2/gstrtmp2sink.c:
207
+     rtmp2sink: fix crash if message conversion failed
208
+     The message pointer is not set so we can't display it in logs.
209
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5202>
210
+
211
+2023-08-08 01:29:40 +0900  Seungha Yang <seungha@centricular.com>
212
+
213
+   * ext/hls/gsthlssink2.c:
214
+     hlssink2: Always use forward slash separator
215
+     g_build_filename() will insert back slash on Windows, and resulting
216
+     playlist will contain media segment path with back slash if
217
+     "playlist-root" property is specified
218
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5161>
219
+
220
+2023-08-05 01:39:29 +1000  Jan Schmidt <jan@centricular.com>
221
+
222
+   * gst/audiolatency/gstaudiolatency.c:
223
+     audiolatency: Fix event refcounting bug handling latency events
224
+     Fix a refcounting bug introduced in
225
+     https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5146
226
+     If upstream returns FALSE when processing a latency event, it will
227
+     be unreffed an extra time
228
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5152>
229
+
230
+2023-08-04 17:25:26 +1000  Jan Schmidt <jan@centricular.com>
231
+
232
+   * gst/audiolatency/gstaudiolatency.c:
233
+     audiolatency: Forward latency query and event upstream
234
+     Make sure the pipeline still configures the latency that it would configure
235
+     if audiolatency was not in the pipeline.
236
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5152>
237
+
238
+2023-07-19 18:08:32 -0500  Ryan Pavlik <ryan.pavlik@collabora.com>
239
+
240
+   * sys/androidmedia/gstjniutils.c:
241
+     androidmedia: Add more null checks (of env) to JNI utilities
242
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5142>
243
+
244
+2023-07-22 10:42:39 +0100  Philippe Normand <philn@igalia.com>
245
+
246
+   * gst/transcode/gsttranscodebin.c:
247
+     transcodebin: Fixes for upstream selectable support
248
+     The upstream selectable query was not performed in all situations where we
249
+     handle the stream-start event. This could potentially lead to unlinked pads
250
+     between decodebin3 and encodebin later on.
251
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5141>
252
+
253
+2023-07-19 18:08:32 -0500  Ryan Pavlik <ryan.pavlik@collabora.com>
254
+
255
+   * sys/androidmedia/gstjniutils.c:
256
+     androidmedia: Add more null checks to JNI utilities
257
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5136>
258
+
259
+2023-07-28 14:02:22 -0500  Ryan Pavlik <ryan.pavlik@collabora.com>
260
+
261
+   * sys/androidmedia/gstamcvideodec.c:
262
+     androidmedia: Fix typo
263
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5136>
264
+
265
+2023-07-19 18:08:16 -0500  Ryan Pavlik <ryan.pavlik@collabora.com>
266
+
267
+   * sys/androidmedia/gst-android-hardware-camera.c:
268
+     androidmedia: Clear err if we don't have an optional camera field/constant
269
+     Fixes startup on devices where those fields/constants are not found.
270
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5136>
271
+
272
+2023-07-26 16:45:18 -0500  Ryan Pavlik <ryan.pavlik@collabora.com>
273
+
274
+   * ext/webrtc/gstwebrtcbin.c:
275
+     webrtc: Fix docs for create-data-channel action signal
276
+     Initial line of the doc comment was incorrect, so the nicely written
277
+     docs were not being extracted.
278
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5134>
279
+
280
+2023-07-20 16:57:47 +0100  Tim-Philipp Müller <tim@centricular.com>
281
+
282
+   * meson.build:
283
+     Back to development
284
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5082>
285
+
286
 === release 1.22.5 ===
287
 
288
 2023-07-20 15:22:48 +0100  Tim-Philipp Müller <tim@centricular.com>
289
gst-plugins-bad-1.22.5.tar.xz/NEWS -> gst-plugins-bad-1.22.6.tar.xz/NEWS Changed
185
 
1
@@ -2189,6 +2189,183 @@
2
 -   List of Merge Requests applied in 1.22.5
3
 -   List of Issues fixed in 1.22.5
4
 
5
+1.22.6
6
+
7
+The sixth 1.22 bug-fix release (1.22.6) was released on 20 September
8
+2023.
9
+
10
+This release only contains bugfixes and security fixes and it should be
11
+safe to update from 1.22.x.
12
+
13
+Highlighted bugfixes in 1.22.6
14
+
15
+-   Security fixes for the MXF demuxer and H.265 video parser
16
+-   Fix latency regression in H.264 hardware decoder base class
17
+-   androidmedia: fix HEVC codec profile registration and fix coded_data
18
+    handling
19
+-   decodebin3: fix switching from a raw stream to an encoded stream
20
+-   gst-inspect: prettier and more correct signal and action signals
21
+    printing
22
+-   rtmp2: Allow NULL flash version, omitting the field, for better RTMP
23
+    server compatibility
24
+-   rtspsrc: better compatibility with buggy RTSP servers that don’t set
25
+    a clock-rate
26
+-   rtpjitterbuffer: fix integer overflow that led to more packets being
27
+    declared lost than have been lost
28
+-   v4l2: fix video encoding regression on RPi and fix support for left
29
+    and top padding
30
+-   waylandsink: Crop surfaces to their display width height
31
+-   cerbero: recognise Manjaro; add Rust support for MSVC ARM64; cmake
32
+    detection fixes
33
+-   various bug fixes, build fixes, memory leak fixes, and other
34
+    stability and reliability improvements
35
+
36
+gstreamer
37
+
38
+-   gst-inspect: prettier and more correct signal printing, and print
39
+    action signals in g_signal_emit_by_name() format
40
+-   gst-launch: Disable fault signal handlers on macOS
41
+
42
+gst-plugins-base
43
+
44
+-   audio: Make sure to stop ringbuffer on error
45
+-   decodebin3: avoid identity, sinkpad, parsebin leakage when reset
46
+    input
47
+-   decodebin3: Ensure the slot is unlinked before linking to decoder
48
+-   sdp: fix wrong debug log error message for missing clock-rate in
49
+    caps
50
+-   sdp: Parse zero clock-rate as default
51
+
52
+gst-plugins-good
53
+
54
+-   adaptivedemux2: fix memory leak
55
+-   pulsedeviceprovider: fix incorrect usage of GST_ELEMENT_ERROR
56
+-   qt: Unbreak build with qt-egl enabled but viv_fb missing
57
+-   qt: Fix searching of qt5/qt6 tools with qmake in Meson
58
+-   qtdemux: Fix premature EOS when some files are played in push mode
59
+-   qtdemux: attach cbcs crypt info at the right moment
60
+-   rtpjitterbuffer: Avoid integer overflow in max saveable packets
61
+    calculation with negative offset
62
+-   videoflip: fix concurrent access when modifying the tag list
63
+-   v4l2: allocator: Don’t close foreign dmabuf
64
+-   v4l2: bufferpool: Fix large encoded stream regression
65
+-   v4l2: bufferpool: Problems when checking for truncated buffer
66
+-   v4l2: Fix support for left and top padding
67
+-   v4l2object: clear format lists if source change event is received
68
+
69
+gst-plugins-bad
70
+
71
+-   androidmedia/enc: handle codec-data before popping
72
+    GstVideoCodecFrames
73
+-   androidmedia: fix hevc codec profile registration
74
+-   androidmedia: Small fixes
75
+-   androidmedia: Add more null checks (of env) to JNI utilities
76
+-   applemedia: Fix pixel format for I420 and NV12
77
+-   audiolatency: Forward latency query and event upstream
78
+-   av1parser: Fix segmentation params update
79
+-   codecparsers: Fix MPEG-1 aspect ratio table
80
+-   d3d11convert: Passthrough allocation query on same caps
81
+-   h264decoder: Update latency dynamically
82
+-   h265parser: Allow partially broken hvcC data
83
+-   h265parser: Fix possible overflow using max_sub_layers_minus1
84
+-   hlssink2: Always use forward slash separator
85
+-   mdns: Fix a crash on context error
86
+-   mxfdemux: Fix integer overflow causing out of bounds writes when
87
+    handling invalid uncompressed video and check channels for AES3
88
+-   nvencoder: Fix negotiation error when interlace-mode is unspecified
89
+-   rtmp2: Allow NULL flash version, omitting the field
90
+-   rtmp2sink: fix crash if message conversion failed
91
+-   transcodebin: Fixes for upstream selectable support
92
+-   va: Fix in error logs functions mismatches
93
+-   waylandsink: Crop surfaces to their display width height
94
+-   waylandsink: Fix cropping for video with non-square aspect ratio
95
+-   webrtc: Fix docs for create-data-channel action signal
96
+-   win32ipc: Fix pipe handle leak
97
+
98
+gst-plugins-ugly
99
+
100
+-   No changes
101
+
102
+gst-plugins-rs
103
+
104
+-   fallbackswitch: locking/deadlock fixes
105
+-   onvifmetadataparse: Skip metadata frames with unrepresentable UTC
106
+    time
107
+-   transcriberbin: Configure audioresample in front of transcriber
108
+-   webrtcsink: Propagate GstContext messages
109
+-   webrtcsink: Add support for d3d11 memory and qsvh264enc
110
+-   webrtcsink: fix TWCC extension adding
111
+-   webrtcsink: don’t forget to setup encoders for discoveries
112
+-   webrtcsink: NVIDIA V4L2 encoders always require NVMM memory
113
+-   meson: Fix handling of optional deps, and don’t require Python 3.8
114
+
115
+gst-libav
116
+
117
+-   No changes
118
+
119
+gst-rtsp-server
120
+
121
+-   No changes
122
+
123
+gstreamer-vaapi
124
+
125
+-   No changes
126
+
127
+gstreamer-sharp
128
+
129
+-   No changes
130
+
131
+gst-omx
132
+
133
+-   No changes
134
+
135
+gst-python
136
+
137
+-   No changes
138
+
139
+gst-editing-services
140
+
141
+-   No changes
142
+
143
+gst-validate + gst-integration-testsuites
144
+
145
+-   gst-validate: Disable fault signal handlers on macOS
146
+
147
+gst-examples
148
+
149
+-   No changes
150
+
151
+Development build environment
152
+
153
+-   macos-bison: Update to 3.8.2 and add an ARM64 build
154
+-   wrap: update libpsl to 0.21.2
155
+
156
+Cerbero build tool and packaging changes in 1.22.6
157
+
158
+-   Add Rust support for MSVC ARM64
159
+-   Recognise PERL5LIB as a joinable Unix variable
160
+-   Recognise Manjaro as an Arch derivative
161
+-   Fix picking up cmake from build-tools
162
+
163
+Contributors to 1.22.6
164
+
165
+Akihiro Sagawa, Alicia Boya García, Guillaume Desmottes, Haihua Hu,
166
+Hugues Fruchet, Ivan Molodetskikh, Jan Alexander Steffens (heftig), Jan
167
+Schmidt, L. E. Segovia, Mathieu Duponchelle, Matthew Waters, Ming Qian,
168
+Nicolas Dufresne, Nirbheek Chauhan, Olivier Blin, Olivier Crête,
169
+Philippe Normand, Piotr Brzeziński, Robert Ayrapetyan, Ryan Pavlik,
170
+Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Stephan Seitz, Thomas
171
+Schneider, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Wang Chuan,
172
+Xabier Rodriguez Calvar,
173
+
174
+… and many others who have contributed bug reports, translations, sent
175
+suggestions or helped testing. Thank you all!
176
+
177
+List of merge requests and issues fixed in 1.22.6
178
+
179
+-   List of Merge Requests applied in 1.22.6
180
+-   List of Issues fixed in 1.22.6
181
+
182
 Schedule for 1.24
183
 
184
 Our next major feature release will be 1.24, and 1.23 will be the
185
gst-plugins-bad-1.22.5.tar.xz/RELEASE -> gst-plugins-bad-1.22.6.tar.xz/RELEASE Changed
7
 
1
@@ -1,4 +1,4 @@
2
-This is GStreamer gst-plugins-bad 1.22.5.
3
+This is GStreamer gst-plugins-bad 1.22.6.
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.22.5.tar.xz/ext/hls/gsthlssink2.c -> gst-plugins-bad-1.22.6.tar.xz/ext/hls/gsthlssink2.c Changed
12
 
1
@@ -447,7 +447,9 @@
2
             entry_location = g_path_get_basename (sink->current_location);
3
           } else {
4
             gchar *name = g_path_get_basename (sink->current_location);
5
-            entry_location = g_build_filename (sink->playlist_root, name, NULL);
6
+            /* g_build_filename() will insert back slash on Windows */
7
+            entry_location = g_build_path ("/",
8
+                sink->playlist_root, name, NULL);
9
             g_free (name);
10
           }
11
 
12
gst-plugins-bad-1.22.5.tar.xz/ext/mdns/gstmicrodnsdevice.c -> gst-plugins-bad-1.22.6.tar.xz/ext/mdns/gstmicrodnsdevice.c Changed
44
 
1
@@ -44,6 +44,7 @@
2
 struct _ListenerContext
3
 {
4
   GMutex lock;
5
+  GCond stop_cond;
6
   GstDeviceProvider *provider;
7
 
8
   /* The following fields are protected by @lock */
9
@@ -362,9 +363,18 @@
10
 done:
11
   GST_INFO_OBJECT (ctx->provider, "Done listening");
12
 
13
+  /* Wait until we're told to stop, or gst_mdns_device_provider_stop()
14
+     can access a freed context */
15
+  g_mutex_lock (&ctx->lock);
16
+  while (!ctx->stop) {
17
+    g_cond_wait (&ctx->stop_cond, &ctx->lock);
18
+  }
19
+  g_mutex_unlock (&ctx->lock);
20
+
21
   g_sequence_free (ctx->last_seen_devices);
22
   g_hash_table_unref (ctx->devices);
23
   g_mutex_clear (&ctx->lock);
24
+  g_cond_clear (&ctx->stop_cond);
25
   g_free (ctx);
26
 
27
   return NULL;
28
@@ -385,6 +395,7 @@
29
   ListenerContext *ctx = g_new0 (ListenerContext, 1);
30
 
31
   g_mutex_init (&ctx->lock);
32
+  g_cond_init (&ctx->stop_cond);
33
   ctx->provider = provider;
34
   ctx->devices =
35
       g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
36
@@ -405,6 +416,7 @@
37
 
38
   g_mutex_lock (&self->current_ctx->lock);
39
   self->current_ctx->stop = true;
40
+  g_cond_broadcast (&self->current_ctx->stop_cond);
41
   g_mutex_unlock (&self->current_ctx->lock);
42
 
43
   self->current_ctx = NULL;
44
gst-plugins-bad-1.22.5.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.22.6.tar.xz/ext/webrtc/gstwebrtcbin.c Changed
10
 
1
@@ -8945,7 +8945,7 @@
2
       G_CALLBACK (gst_webrtc_bin_add_turn_server), NULL, NULL, NULL,
3
       G_TYPE_BOOLEAN, 1, G_TYPE_STRING);
4
 
5
-  /*
6
+  /**
7
    * GstWebRTCBin::create-data-channel:
8
    * @object: the #GstWebRTCBin
9
    * @label: the label for the data channel
10
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecparsers/gstav1parser.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecparsers/gstav1parser.c Changed
51
 
1
@@ -2129,20 +2129,37 @@
2
         }
3
       }
4
     } else {
5
+      gint8 ref_idx;
6
+      GstAV1SegmenationParams *ref_seg_params;
7
+
8
       /* Copy it from prime_ref */
9
-      g_assert (frame_header->primary_ref_frame != GST_AV1_PRIMARY_REF_NONE);
10
-      g_assert (parser->state.ref_info.
11
-          entryframe_header->ref_frame_idxframe_header->primary_ref_frame.
12
-          ref_valid);
13
-      memcpy (seg_params,
14
-          &parser->state.ref_info.
15
-          entryframe_header->ref_frame_idxframe_header->
16
-                  primary_ref_frame.ref_segmentation_params,
17
-          sizeof (GstAV1SegmenationParams));
18
+      if (frame_header->primary_ref_frame >= GST_AV1_PRIMARY_REF_NONE) {
19
+        GST_WARNING ("Invalid primary_ref_frame %d",
20
+            frame_header->primary_ref_frame);
21
+        return GST_AV1_PARSER_BITSTREAM_ERROR;
22
+      }
23
 
24
-      seg_params->segmentation_update_map = 0;
25
-      seg_params->segmentation_temporal_update = 0;
26
-      seg_params->segmentation_update_data = 0;
27
+      ref_idx = frame_header->ref_frame_idxframe_header->primary_ref_frame;
28
+      if (ref_idx >= GST_AV1_NUM_REF_FRAMES || ref_idx < 0) {
29
+        GST_WARNING ("Invalid ref_frame_idx %d", ref_idx);
30
+        return GST_AV1_PARSER_BITSTREAM_ERROR;
31
+      }
32
+
33
+      if (!parser->state.ref_info.entryref_idx.ref_valid) {
34
+        GST_WARNING ("Reference frame at index %d is unavailable", ref_idx);
35
+        return GST_AV1_PARSER_BITSTREAM_ERROR;
36
+      }
37
+
38
+      ref_seg_params =
39
+          &parser->state.ref_info.entryref_idx.ref_segmentation_params;
40
+
41
+      for (i = 0; i < GST_AV1_MAX_SEGMENTS; i++) {
42
+        for (j = 0; j < GST_AV1_SEG_LVL_MAX; j++) {
43
+          seg_params->feature_enabledij =
44
+              ref_seg_params->feature_enabledij;
45
+          seg_params->feature_dataij = ref_seg_params->feature_dataij;
46
+        }
47
+      }
48
     }
49
   } else {
50
     seg_params->segmentation_update_map = 0;
51
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c Changed
17
 
1
@@ -1845,6 +1845,7 @@
2
 
3
   READ_UINT8 (&nr, vps->max_layers_minus1, 6);
4
   READ_UINT8 (&nr, vps->max_sub_layers_minus1, 3);
5
+  CHECK_ALLOWED (vps->max_sub_layers_minus1, 0, 6);
6
   READ_UINT8 (&nr, vps->temporal_id_nesting_flag, 1);
7
 
8
   /* skip reserved_0xffff_16bits */
9
@@ -2015,6 +2016,7 @@
10
   READ_UINT8 (&nr, sps->vps_id, 4);
11
 
12
   READ_UINT8 (&nr, sps->max_sub_layers_minus1, 3);
13
+  CHECK_ALLOWED (sps->max_sub_layers_minus1, 0, 6);
14
   READ_UINT8 (&nr, sps->temporal_id_nesting_flag, 1);
15
 
16
   if (!gst_h265_parse_profile_tier_level (&sps->profile_tier_level, &nr,
17
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecparsers/gstmpegvideoparser.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecparsers/gstmpegvideoparser.c Changed
18
 
1
@@ -150,13 +150,13 @@
2
     {64, 45},                   /* 3, 0.7031 16:9 625 line */
3
     {10000, 7615},              /* 4, 0.7615 */
4
     {10000, 8055},              /* 5, 0.8055 */
5
-    {32, 27},                   /* 6, 0.8437 */
6
+    {32, 27},                   /* 6, 0.8437 16:9 525 line */
7
     {10000, 8935},              /* 7, 0.8935 */
8
-    {10000, 9375},              /* 8, 0.9375 */
9
+    {10000, 9157},              /* 8, 0.9157 CCIR601, 625 line */
10
     {10000, 9815},              /* 9, 0.9815 */
11
     {10000, 10255},             /* 10, 1.0255 */
12
     {10000, 10695},             /* 11, 1.0695 */
13
-    {8, 9},                     /* 12, 1.125 */
14
+    {10000, 10950},             /* 12, 1.0950 CCIR601, 525 line */
15
     {10000, 11575},             /* 13, 1.1575 */
16
     {10000, 12015},             /* 14, 1.2015 */
17
     {0, 0},                     /* 15, invalid */
18
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecs/gsth264decoder.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecs/gsth264decoder.c Changed
112
 
1
@@ -152,6 +152,12 @@
2
   GstQueueArray *output_queue;
3
 
4
   gboolean input_state_changed;
5
+
6
+  /* Latency report params */
7
+  guint32 max_reorder_count;
8
+  guint32 last_reorder_frame_number;
9
+  gint fps_n;
10
+  gint fps_d;
11
 };
12
 
13
 typedef struct
14
@@ -407,6 +413,17 @@
15
 }
16
 
17
 static void
18
+gst_h264_decoder_reset_latency_infos (GstH264Decoder * self)
19
+{
20
+  GstH264DecoderPrivate *priv = self->priv;
21
+
22
+  priv->max_reorder_count = 0;
23
+  priv->last_reorder_frame_number = 0;
24
+  priv->fps_n = 25;
25
+  priv->fps_d = 1;
26
+}
27
+
28
+static void
29
 gst_h264_decoder_reset (GstH264Decoder * self)
30
 {
31
   GstH264DecoderPrivate *priv = self->priv;
32
@@ -420,6 +437,8 @@
33
   priv->width = 0;
34
   priv->height = 0;
35
   priv->nal_length_size = 4;
36
+
37
+  gst_h264_decoder_reset_latency_infos (self);
38
 }
39
 
40
 static gboolean
41
@@ -1285,6 +1304,9 @@
42
         gst_h264_picture_unref (picture);
43
         return ret;
44
       }
45
+
46
+      priv->last_reorder_frame_number++;
47
+      picture->reorder_frame_number = priv->last_reorder_frame_number;
48
     }
49
 
50
     /* This allows accessing the frame from the picture. */
51
@@ -1788,6 +1810,28 @@
52
 
53
   priv->last_output_poc = picture->pic_order_cnt;
54
 
55
+  if (priv->last_reorder_frame_number > picture->reorder_frame_number) {
56
+    guint64 diff = priv->last_reorder_frame_number -
57
+        picture->reorder_frame_number;
58
+    guint64 total_delay = diff + priv->preferred_output_delay;
59
+    if (diff > priv->max_reorder_count && total_delay < G_MAXUINT32) {
60
+      GstClockTime latency;
61
+
62
+      priv->max_reorder_count = (guint32) diff;
63
+      latency = gst_util_uint64_scale_int (GST_SECOND * total_delay,
64
+          priv->fps_d, priv->fps_n);
65
+
66
+      if (latency != G_MAXUINT64) {
67
+        GST_DEBUG_OBJECT (self, "Updating latency to %" GST_TIME_FORMAT
68
+            ", reorder count: %" G_GUINT64_FORMAT ", output-delay: %u",
69
+            GST_TIME_ARGS (latency), diff, priv->preferred_output_delay);
70
+
71
+        gst_video_decoder_set_latency (GST_VIDEO_DECODER (self),
72
+            latency, latency);
73
+      }
74
+    }
75
+  }
76
+
77
   frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (self),
78
       picture->system_frame_number);
79
 
80
@@ -2326,16 +2370,14 @@
81
 
82
   bump_level = get_bump_level (self);
83
   if (bump_level != GST_H264_DPB_BUMP_NORMAL_LATENCY) {
84
-    if (sps->pic_order_cnt_type == 2) {
85
-      /* POC type 2 has does not allow frame reordering */
86
-      frames_delay = 0;
87
-    } else {
88
-      guint32 max_reorder_frames =
89
-          gst_h264_dpb_get_max_num_reorder_frames (priv->dpb);
90
-      frames_delay = MIN (max_dpb_size, max_reorder_frames);
91
-    }
92
+    GST_DEBUG_OBJECT (self, "Actual latency will be updated later");
93
+    frames_delay = 0;
94
   }
95
 
96
+  priv->max_reorder_count = frames_delay;
97
+  priv->fps_n = fps_n;
98
+  priv->fps_d = fps_d;
99
+
100
   /* Consider output delay wanted by subclass */
101
   frames_delay += priv->preferred_output_delay;
102
 
103
@@ -2450,6 +2492,8 @@
104
     if (ret != GST_FLOW_OK)
105
       return ret;
106
 
107
+    gst_h264_decoder_reset_latency_infos (self);
108
+
109
     g_assert (klass->new_sequence);
110
 
111
     if (klass->get_preferred_output_delay) {
112
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecs/gsth264picture.h -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecs/gsth264picture.h Changed
11
 
1
@@ -155,6 +155,9 @@
2
 
3
   GstH264DecRefPicMarking dec_ref_pic_marking;
4
 
5
+  /* Set by decoder to trace the number of delayed output pictures */
6
+  guint32 reorder_frame_number;
7
+
8
   /* For interlaced decoding */
9
   gboolean second_field;
10
   GstH264Picture * other_field;
11
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/wayland/gstwlwindow.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/wayland/gstwlwindow.c Changed
67
 
1
@@ -63,6 +63,9 @@
2
   /* the size of the video in the buffers */
3
   gint video_width, video_height;
4
 
5
+  /* video width scaled according to par */
6
+  gint scaled_width;
7
+
8
   enum wl_output_transform buffer_transform;
9
 
10
   /* when this is not set both the area_surface and the video_surface are not
11
@@ -431,7 +434,7 @@
12
     case WL_OUTPUT_TRANSFORM_180:
13
     case WL_OUTPUT_TRANSFORM_FLIPPED:
14
     case WL_OUTPUT_TRANSFORM_FLIPPED_180:
15
-      src.w = priv->video_width;
16
+      src.w = priv->scaled_width;
17
       src.h = priv->video_height;
18
       break;
19
     case WL_OUTPUT_TRANSFORM_90:
20
@@ -439,7 +442,7 @@
21
     case WL_OUTPUT_TRANSFORM_FLIPPED_90:
22
     case WL_OUTPUT_TRANSFORM_FLIPPED_270:
23
       src.w = priv->video_height;
24
-      src.h = priv->video_width;
25
+      src.h = priv->scaled_width;
26
       break;
27
   }
28
 
29
@@ -449,6 +452,9 @@
30
   /* center the video_subsurface inside area_subsurface */
31
   if (priv->video_viewport) {
32
     gst_video_center_rect (&src, &dst, &res, TRUE);
33
+    wp_viewport_set_source (priv->video_viewport, wl_fixed_from_int (0),
34
+        wl_fixed_from_int (0), wl_fixed_from_int (priv->video_width),
35
+        wl_fixed_from_int (priv->video_height));
36
     wp_viewport_set_destination (priv->video_viewport, res.w, res.h);
37
   } else {
38
     gst_video_center_rect (&src, &dst, &res, FALSE);
39
@@ -494,8 +500,9 @@
40
   GstWlWindowPrivate *priv = gst_wl_window_get_instance_private (self);
41
 
42
   if (G_UNLIKELY (info)) {
43
-    priv->video_width =
44
+    priv->scaled_width =
45
         gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d);
46
+    priv->video_width = info->width;
47
     priv->video_height = info->height;
48
 
49
     wl_subsurface_set_sync (priv->video_subsurface);
50
@@ -608,14 +615,14 @@
51
   if (!priv->configured)
52
     return;
53
 
54
-  if (priv->video_width != 0) {
55
+  if (priv->scaled_width != 0) {
56
     wl_subsurface_set_sync (priv->video_subsurface);
57
     gst_wl_window_resize_video_surface (self, TRUE);
58
   }
59
 
60
   wl_surface_commit (priv->area_surface_wrapper);
61
 
62
-  if (priv->video_width != 0)
63
+  if (priv->scaled_width != 0)
64
     wl_subsurface_set_desync (priv->video_subsurface);
65
 }
66
 
67
gst-plugins-bad-1.22.5.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.22.6.tar.xz/gst-plugins-bad.doap Changed
18
 
1
@@ -35,6 +35,16 @@
2
 
3
  <release>
4
   <Version>
5
+   <revision>1.22.6</revision>
6
+   <branch>1.22</branch>
7
+   <name></name>
8
+   <created>2023-09-20</created>
9
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.22.6.tar.xz" />
10
+  </Version>
11
+ </release>
12
+
13
+ <release>
14
+  <Version>
15
    <revision>1.22.5</revision>
16
    <branch>1.22</branch>
17
    <name></name>
18
gst-plugins-bad-1.22.5.tar.xz/gst/audiolatency/gstaudiolatency.c -> gst-plugins-bad-1.22.6.tar.xz/gst/audiolatency/gstaudiolatency.c Changed
68
 
1
@@ -227,7 +227,9 @@
2
 
3
   templ = gst_static_pad_template_get (&src_template);
4
   srcpad = gst_element_get_static_pad (self->audiosrc, "src");
5
-  gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_BUFFER,
6
+  gst_pad_add_probe (srcpad,
7
+      GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_QUERY_UPSTREAM |
8
+      GST_PAD_PROBE_TYPE_EVENT_UPSTREAM,
9
       (GstPadProbeCallback) gst_audiolatency_src_probe, self, NULL);
10
 
11
   self->srcpad = gst_ghost_pad_new_from_template ("src", srcpad, templ);
12
@@ -383,7 +385,7 @@
13
 }
14
 
15
 static GstPadProbeReturn
16
-gst_audiolatency_src_probe (GstPad * pad, GstPadProbeInfo * info,
17
+gst_audiolatency_src_probe_buffer (GstPad * pad, GstPadProbeInfo * info,
18
     gpointer user_data)
19
 {
20
   GstAudioLatency *self = user_data;
21
@@ -425,6 +427,46 @@
22
   return GST_PAD_PROBE_OK;
23
 }
24
 
25
+static GstPadProbeReturn
26
+gst_audiolatency_src_probe (GstPad * pad, GstPadProbeInfo * info,
27
+    gpointer user_data)
28
+{
29
+  GstAudioLatency *self = user_data;
30
+
31
+  if (info->type & GST_PAD_PROBE_TYPE_BUFFER) {
32
+    return gst_audiolatency_src_probe_buffer (pad, info, user_data);
33
+  } else if (info->type & GST_PAD_PROBE_TYPE_QUERY_UPSTREAM) {
34
+    GstQuery *query = gst_pad_probe_info_get_query (info);
35
+
36
+    /* Forward latency query to the upstream sinkpad */
37
+    if (GST_QUERY_TYPE (query) == GST_QUERY_LATENCY) {
38
+      gboolean res = gst_pad_peer_query (self->sinkpad, query);
39
+      GST_LOG_OBJECT (self,
40
+          "Forwarded latency query to sinkpad. Result %d %" GST_PTR_FORMAT, res,
41
+          query);
42
+      return res ? GST_PAD_PROBE_HANDLED : GST_PAD_PROBE_DROP;
43
+    }
44
+  } else if (info->type & GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) {
45
+    GstEvent *event = gst_pad_probe_info_get_event (info);
46
+
47
+    if (GST_EVENT_TYPE (event) == GST_EVENT_LATENCY) {
48
+      gboolean res = gst_pad_push_event (self->sinkpad, event);
49
+
50
+      GST_LOG_OBJECT (self,
51
+          "Forwarded latency event to sinkpad. Result %d %" GST_PTR_FORMAT, res,
52
+          event);
53
+      if (!res) {
54
+        /* This doesn't actually do anything - pad probe handling ignores
55
+         * it, but maybe one day */
56
+        GST_PAD_PROBE_INFO_FLOW_RETURN (info) = GST_FLOW_ERROR;
57
+      }
58
+      return GST_PAD_PROBE_HANDLED;
59
+    }
60
+  }
61
+
62
+  return GST_PAD_PROBE_OK;
63
+}
64
+
65
 static GstFlowReturn
66
 gst_audiolatency_sink_chain (GstPad * pad, GstObject * parent,
67
     GstBuffer * buffer)
68
gst-plugins-bad-1.22.5.tar.xz/gst/mxf/mxfd10.c -> gst-plugins-bad-1.22.6.tar.xz/gst/mxf/mxfd10.c Changed
18
 
1
@@ -119,7 +119,7 @@
2
   gst_buffer_map (buffer, &map, GST_MAP_READ);
3
 
4
   /* Now transform raw AES3 into raw audio, see SMPTE 331M */
5
-  if ((map.size - 4) % 32 != 0) {
6
+  if (map.size < 4 || (map.size - 4) % 32 != 0) {
7
     gst_buffer_unmap (buffer, &map);
8
     GST_ERROR ("Invalid D10 sound essence buffer size");
9
     return GST_FLOW_ERROR;
10
@@ -219,6 +219,7 @@
11
     GstAudioFormat audio_format;
12
 
13
     if (s->channel_count == 0 ||
14
+        s->channel_count > 8 ||
15
         s->quantization_bits == 0 ||
16
         s->audio_sampling_rate.n == 0 || s->audio_sampling_rate.d == 0) {
17
       GST_ERROR ("Invalid descriptor");
18
gst-plugins-bad-1.22.5.tar.xz/gst/mxf/mxfup.c -> gst-plugins-bad-1.22.6.tar.xz/gst/mxf/mxfup.c Changed
90
 
1
@@ -134,6 +134,8 @@
2
     gpointer mapping_data, GstBuffer ** outbuf)
3
 {
4
   MXFUPMappingData *data = mapping_data;
5
+  gsize expected_in_stride = 0, out_stride = 0;
6
+  gsize expected_in_size = 0, out_size = 0;
7
 
8
   /* SMPTE 384M 7.1 */
9
   if (key->u12 != 0x15 || (key->u14 != 0x01 && key->u14 != 0x02
10
@@ -162,22 +164,25 @@
11
     }
12
   }
13
 
14
-  if (gst_buffer_get_size (buffer) != data->bpp * data->width * data->height) {
15
+  // Checked for overflows when parsing the descriptor
16
+  expected_in_stride = data->bpp * data->width;
17
+  out_stride = GST_ROUND_UP_4 (expected_in_stride);
18
+  expected_in_size = expected_in_stride * data->height;
19
+  out_size = out_stride * data->height;
20
+
21
+  if (gst_buffer_get_size (buffer) != expected_in_size) {
22
     GST_ERROR ("Invalid buffer size");
23
     gst_buffer_unref (buffer);
24
     return GST_FLOW_ERROR;
25
   }
26
 
27
-  if (data->bpp != 4
28
-      || GST_ROUND_UP_4 (data->width * data->bpp) != data->width * data->bpp) {
29
+  if (data->bpp != 4 || out_stride != expected_in_stride) {
30
     guint y;
31
     GstBuffer *ret;
32
     GstMapInfo inmap, outmap;
33
     guint8 *indata, *outdata;
34
 
35
-    ret =
36
-        gst_buffer_new_and_alloc (GST_ROUND_UP_4 (data->width * data->bpp) *
37
-        data->height);
38
+    ret = gst_buffer_new_and_alloc (out_size);
39
     gst_buffer_map (buffer, &inmap, GST_MAP_READ);
40
     gst_buffer_map (ret, &outmap, GST_MAP_WRITE);
41
     indata = inmap.data;
42
@@ -185,8 +190,8 @@
43
 
44
     for (y = 0; y < data->height; y++) {
45
       memcpy (outdata, indata, data->width * data->bpp);
46
-      outdata += GST_ROUND_UP_4 (data->width * data->bpp);
47
-      indata += data->width * data->bpp;
48
+      outdata += out_stride;
49
+      indata += expected_in_stride;
50
     }
51
 
52
     gst_buffer_unmap (buffer, &inmap);
53
@@ -394,6 +399,36 @@
54
     return NULL;
55
   }
56
 
57
+  if (caps) {
58
+    MXFUPMappingData *data = *mapping_data;
59
+    gsize expected_in_stride = 0, out_stride = 0;
60
+    gsize expected_in_size = 0, out_size = 0;
61
+
62
+    // Do some checking of the parameters to see if they're valid and
63
+    // we can actually work with them.
64
+    if (data->image_start_offset > data->image_end_offset) {
65
+      GST_WARNING ("Invalid image start/end offset");
66
+      g_free (data);
67
+      *mapping_data = NULL;
68
+      gst_clear_caps (&caps);
69
+
70
+      return NULL;
71
+    }
72
+
73
+    if (!g_size_checked_mul (&expected_in_stride, data->bpp, data->width) ||
74
+        (out_stride = GST_ROUND_UP_4 (expected_in_stride)) < expected_in_stride
75
+        || !g_size_checked_mul (&expected_in_size, expected_in_stride,
76
+            data->height)
77
+        || !g_size_checked_mul (&out_size, out_stride, data->height)) {
78
+      GST_ERROR ("Invalid resolution or bit depth");
79
+      g_free (data);
80
+      *mapping_data = NULL;
81
+      gst_clear_caps (&caps);
82
+
83
+      return NULL;
84
+    }
85
+  }
86
+
87
   return caps;
88
 }
89
 
90
gst-plugins-bad-1.22.5.tar.xz/gst/rtmp2/gstrtmp2sink.c -> gst-plugins-bad-1.22.6.tar.xz/gst/rtmp2/gstrtmp2sink.c Changed
19
 
1
@@ -821,7 +821,7 @@
2
 gst_rtmp2_sink_render (GstBaseSink * sink, GstBuffer * buffer)
3
 {
4
   GstRtmp2Sink *self = GST_RTMP2_SINK (sink);
5
-  GstBuffer *message;
6
+  GstBuffer *message = NULL;
7
   GstFlowReturn ret;
8
 
9
   if (G_UNLIKELY (should_drop_header (self, buffer))) {
10
@@ -833,7 +833,7 @@
11
 
12
   if (G_UNLIKELY (!buffer_to_message (self, buffer, &message))) {
13
     GST_ELEMENT_ERROR (self, STREAM, FAILED, ("Failed to convert FLV to RTMP"),
14
-        ("Failed to convert %" GST_PTR_FORMAT, message));
15
+        ("Failed to convert %" GST_PTR_FORMAT, buffer));
16
     return GST_FLOW_ERROR;
17
   }
18
 
19
gst-plugins-bad-1.22.5.tar.xz/gst/rtmp2/rtmp/rtmpclient.c -> gst-plugins-bad-1.22.6.tar.xz/gst/rtmp2/rtmp/rtmpclient.c Changed
30
 
1
@@ -602,13 +602,6 @@
2
     goto out;
3
   }
4
 
5
-  if (!flash_ver) {
6
-    g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_INITIALIZED,
7
-        "Flash version is not set");
8
-    g_object_unref (task);
9
-    goto out;
10
-  }
11
-
12
   if (data->auth_query) {
13
     const gchar *query = data->auth_query;
14
     appstr = g_strdup_printf ("%s?%s", app, query);
15
@@ -649,9 +642,11 @@
16
     gst_amf_node_append_field_string (node, "type", "nonprivate", -1);
17
   }
18
 
19
-  /* "Flash Player version. It is the same string as returned by the
20
-   * ApplicationScript getversion () function." */
21
-  gst_amf_node_append_field_string (node, "flashVer", flash_ver, -1);
22
+  if (flash_ver) {
23
+    /* "Flash Player version. It is the same string as returned by the
24
+     * ApplicationScript getversion () function." */
25
+    gst_amf_node_append_field_string (node, "flashVer", flash_ver, -1);
26
+  }
27
 
28
   /* "URL of the source SWF file making the connection."
29
    * XXX: libavformat sends "swfUrl" here, if provided. */
30
gst-plugins-bad-1.22.5.tar.xz/gst/transcode/gsttranscodebin.c -> gst-plugins-bad-1.22.6.tar.xz/gst/transcode/gsttranscodebin.c Changed
124
 
1
@@ -124,6 +124,9 @@
2
 
3
 #define DEFAULT_AVOID_REENCODING   FALSE
4
 
5
+GST_DEBUG_CATEGORY_STATIC(gst_transcodebin_debug);
6
+#define GST_CAT_DEFAULT gst_transcodebin_debug
7
+
8
 G_DEFINE_TYPE (GstTranscodeBin, gst_transcode_bin, GST_TYPE_BIN);
9
 GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (transcodebin, "transcodebin", GST_RANK_NONE,
10
       GST_TYPE_TRANSCODE_BIN, transcodebin_element_init (plugin));
11
@@ -303,6 +306,9 @@
12
   TranscodingStream *res = NULL;
13
 
14
   GST_OBJECT_LOCK (self);
15
+  GST_DEBUG_OBJECT (self,
16
+      "Looking for stream %s in %u existing transcoding streams",
17
+      stream_id, self->transcoding_streams->len);
18
   for (i = 0; i < self->transcoding_streams->len; i = i + 1) {
19
     TranscodingStream *s = self->transcoding_streams->pdatai;
20
 
21
@@ -317,6 +323,7 @@
22
 
23
 done:
24
   GST_OBJECT_UNLOCK (self);
25
+  GST_DEBUG_OBJECT (self, "Look-up result: %p", res);
26
 
27
   return res;
28
 }
29
@@ -327,6 +334,9 @@
30
   TranscodingStream *res = NULL;
31
   GstPad *encodebin_pad = get_encodebin_pad_from_stream (self, stream);
32
 
33
+  GST_DEBUG_OBJECT (self,
34
+      "Encodebin pad for stream %" GST_PTR_FORMAT " : %" GST_PTR_FORMAT, stream,
35
+      encodebin_pad);
36
   if (encodebin_pad) {
37
     GST_INFO_OBJECT (self,
38
         "Going to transcode stream %s (encodebin pad: %" GST_PTR_FORMAT ")",
39
@@ -410,6 +420,31 @@
40
   }
41
 }
42
 
43
+static void
44
+query_upstream_selectable (GstTranscodeBin * self, GstPad * pad)
45
+{
46
+  GstQuery *query;
47
+  gboolean result;
48
+
49
+  /* Query whether upstream can handle stream selection or not */
50
+  query = gst_query_new_selectable ();
51
+  result = GST_PAD_IS_SINK (pad) ? gst_pad_peer_query (pad, query)
52
+      : gst_pad_query (pad, query);
53
+  if (result) {
54
+    GST_FIXME_OBJECT (self,
55
+        "We force `transcodebin` to upstream selection"
56
+        " mode if *any* of the inputs is. This means things might break if"
57
+        " there's a mix");
58
+    gst_query_parse_selectable (query, &self->upstream_selected);
59
+    GST_DEBUG_OBJECT (pad, "Upstream is selectable : %d",
60
+        self->upstream_selected);
61
+  } else {
62
+    self->upstream_selected = FALSE;
63
+    GST_DEBUG_OBJECT (pad, "Upstream does not handle SELECTABLE query");
64
+  }
65
+  gst_query_unref (query);
66
+}
67
+
68
 static GstPadProbeReturn
69
 wait_stream_start_probe (GstPad * pad,
70
     GstPadProbeInfo * info, GstTranscodeBin * self)
71
@@ -420,6 +455,7 @@
72
   GST_INFO_OBJECT (self,
73
       "Got pad %" GST_PTR_FORMAT " with stream:: %" GST_PTR_FORMAT, pad,
74
       info->data);
75
+  query_upstream_selectable (self, pad);
76
   gst_transcode_bin_link_encodebin_pad (self, pad, info->data);
77
 
78
   return GST_PAD_PROBE_REMOVE;
79
@@ -440,6 +476,7 @@
80
     gst_event_parse_stream_start (sstart_event, &stream_id);
81
     GST_INFO_OBJECT (self, "Got pad %" GST_PTR_FORMAT " with stream ID: %s",
82
         pad, stream_id);
83
+    query_upstream_selectable (self, pad);
84
     gst_transcode_bin_link_encodebin_pad (self, pad, sstart_event);
85
     return;
86
   }
87
@@ -773,25 +810,8 @@
88
 
89
   switch (GST_EVENT_TYPE (event)) {
90
     case GST_EVENT_STREAM_START:
91
-    {
92
-      GstQuery *q = gst_query_new_selectable ();
93
-
94
-      /* Query whether upstream can handle stream selection or not */
95
-      if (gst_pad_peer_query (sinkpad, q)) {
96
-        GST_FIXME_OBJECT (self, "We force `transcodebin` to upstream selection"
97
-            " mode if *any* of the inputs is. This means things might break if"
98
-            " there's a mix");
99
-        gst_query_parse_selectable (q, &self->upstream_selected);
100
-        GST_DEBUG_OBJECT (sinkpad, "Upstream is selectable : %d",
101
-            self->upstream_selected);
102
-      } else {
103
-        self->upstream_selected = FALSE;
104
-        GST_DEBUG_OBJECT (sinkpad, "Upstream does not handle SELECTABLE query");
105
-      }
106
-      gst_query_unref (q);
107
-
108
+      query_upstream_selectable (self, sinkpad);
109
       break;
110
-    }
111
     default:
112
       break;
113
   }
114
@@ -997,6 +1017,9 @@
115
   object_class->get_property = gst_transcode_bin_get_property;
116
   object_class->set_property = gst_transcode_bin_set_property;
117
 
118
+  GST_DEBUG_CATEGORY_INIT (gst_transcodebin_debug, "transcodebin", 0,
119
+      "Transcodebin element");
120
+
121
   gstelement_klass = (GstElementClass *) klass;
122
   gstelement_klass->change_state =
123
       GST_DEBUG_FUNCPTR (gst_transcode_bin_change_state);
124
gst-plugins-bad-1.22.5.tar.xz/gst/videoparsers/gsth265parse.c -> gst-plugins-bad-1.22.6.tar.xz/gst/videoparsers/gsth265parse.c Changed
40
 
1
@@ -3180,11 +3180,14 @@
2
     off = 23;
3
 
4
     for (i = 0; i < num_nal_arrays; i++) {
5
+      guint8 nalu_type;
6
+
7
       if (off + 3 >= size) {
8
         gst_buffer_unmap (codec_data, &map);
9
         goto hvcc_too_small;
10
       }
11
 
12
+      nalu_type = dataoff & 0x3f;
13
       num_nals = GST_READ_UINT16_BE (data + off + 1);
14
       off += 3;
15
       for (j = 0; j < num_nals; j++) {
16
@@ -3192,6 +3195,15 @@
17
             data, off, size, 2, &nalu);
18
 
19
         if (parseres != GST_H265_PARSER_OK) {
20
+          if (i + 1 == num_nal_arrays && j + 1 == num_nals &&
21
+              nalu_type != GST_H265_NAL_VPS && nalu_type != GST_H265_NAL_SPS &&
22
+              nalu_type != GST_H265_NAL_PPS) {
23
+            GST_WARNING_OBJECT (h265parse,
24
+                "Couldn't parse the last nalu, type %d at array %d / %d",
25
+                nalu_type, i, j);
26
+            goto codec_data_done;
27
+          }
28
+          GST_ERROR ("aaa, %d", nalu_type);
29
           gst_buffer_unmap (codec_data, &map);
30
           goto hvcc_too_small;
31
         }
32
@@ -3200,6 +3212,7 @@
33
         off = nalu.offset + nalu.size;
34
       }
35
     }
36
+  codec_data_done:
37
     gst_buffer_unmap (codec_data, &map);
38
 
39
     /* don't confuse codec_data with inband vps/sps/pps */
40
gst-plugins-bad-1.22.5.tar.xz/meson.build -> gst-plugins-bad-1.22.6.tar.xz/meson.build Changed
8
 
1
@@ -1,5 +1,5 @@
2
 project('gst-plugins-bad', 'c', 'cpp',
3
-  version : '1.22.5',
4
+  version : '1.22.6',
5
   meson_version : '>= 0.62',
6
   default_options :  'warning_level=1',
7
                       'buildtype=debugoptimized' )
8
gst-plugins-bad-1.22.5.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.22.6.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.22.5\n"
6
+"Project-Id-Version: gst-plugins-bad-1.22.6\n"
7
 "Report-Msgid-Bugs-To: \n"
8
-"POT-Creation-Date: 2023-07-20 15:26+0100\n"
9
+"POT-Creation-Date: 2023-09-20 18:17+0100\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.22.5.tar.xz/po/gst-plugins-bad.pot -> gst-plugins-bad-1.22.6.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.22.5\n"
6
+"Project-Id-Version: gst-plugins-bad-1.22.6\n"
7
 "Report-Msgid-Bugs-To: \n"
8
-"POT-Creation-Date: 2023-07-20 15:26+0100\n"
9
+"POT-Creation-Date: 2023-09-20 18:17+0100\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.22.5.tar.xz/sys/androidmedia/gst-android-hardware-camera.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gst-android-hardware-camera.c Changed
57
 
1
@@ -979,6 +979,7 @@
2
     }
3
   } else {
4
     android_hardware_camera_parameters.EFFECT_EMBOSS = NULL;
5
+    g_clear_error (&err);
6
   }
7
 
8
   fieldID =
9
@@ -1000,6 +1001,7 @@
10
     }
11
   } else {
12
     android_hardware_camera_parameters.EFFECT_SKETCH = NULL;
13
+    g_clear_error (&err);
14
   }
15
 
16
   fieldID =
17
@@ -1021,6 +1023,7 @@
18
     }
19
   } else {
20
     android_hardware_camera_parameters.EFFECT_NEON = NULL;
21
+    g_clear_error (&err);
22
   }
23
 
24
   fieldID =
25
@@ -1519,6 +1522,7 @@
26
     }
27
   } else {
28
     android_hardware_camera_parameters.SCENE_MODE_BACKLIGHT = NULL;
29
+    g_clear_error (&err);
30
   }
31
 
32
   fieldID =
33
@@ -1540,6 +1544,7 @@
34
     }
35
   } else {
36
     android_hardware_camera_parameters.SCENE_MODE_FLOWERS = NULL;
37
+    g_clear_error (&err);
38
   }
39
 
40
   fieldID =
41
@@ -1561,6 +1566,7 @@
42
     }
43
   } else {
44
     android_hardware_camera_parameters.SCENE_MODE_AR = NULL;
45
+    g_clear_error (&err);
46
   }
47
 
48
   fieldID =
49
@@ -1582,6 +1588,7 @@
50
     }
51
   } else {
52
     android_hardware_camera_parameters.SCENE_MODE_HDR = NULL;
53
+    g_clear_error (&err);
54
   }
55
 
56
   fieldID =
57
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamc-constants.h -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamc-constants.h Changed
11
 
1
@@ -31,7 +31,8 @@
2
 {
3
   BUFFER_FLAG_SYNC_FRAME = 1,
4
   BUFFER_FLAG_CODEC_CONFIG = 2,
5
-  BUFFER_FLAG_END_OF_STREAM = 4
6
+  BUFFER_FLAG_END_OF_STREAM = 4,
7
+  BUFFER_FLAG_PARTIAL_FRAME = 8,
8
 };
9
 
10
 enum
11
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamc.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamc.c Changed
21
 
1
@@ -2372,18 +2372,13 @@
2
                   g_value_reset (&v);
3
 
4
                   encoded_ret = gst_caps_merge_structure (encoded_ret, tmp3);
5
-
6
                   have_profile_level = TRUE;
7
                 }
8
-              }
9
-
10
-              if (have_profile_level) {
11
                 gst_structure_free (tmp2);
12
               } else {
13
                 encoded_ret = gst_caps_merge_structure (encoded_ret, tmp2);
14
+                have_profile_level = TRUE;
15
               }
16
-
17
-              have_profile_level = TRUE;
18
             }
19
           }
20
 
21
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamcvideodec.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamcvideodec.c Changed
10
 
1
@@ -1134,7 +1134,7 @@
2
    *
3
    * As a result, we need to advance the ready counter somehow ourselves when
4
    * such events happen. There is no reliable way of knowing when/if the frame
5
-   * listener is going to fire.  The only uniqueu identifier,
6
+   * listener is going to fire.  The only unique identifier,
7
    * SurfaceTexture::get_timestamp seems to always return 0.
8
    *
9
    * The maximum queue size as defined in
10
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamcvideoenc.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamcvideoenc.c Changed
171
 
1
@@ -877,6 +877,16 @@
2
   if (best)
3
     gst_video_codec_frame_ref (best);
4
 
5
+  GST_DEBUG_OBJECT (self, "found best %p from %u frames", best,
6
+      g_list_length (frames));
7
+  if (best) {
8
+    GST_LOG_OBJECT (self, "best %p (input pts %" GST_TIME_FORMAT " dts %"
9
+        GST_TIME_FORMAT " frame no %" G_GUINT32_FORMAT " buffer %"
10
+        GST_PTR_FORMAT, best, GST_TIME_ARGS (best->pts),
11
+        GST_TIME_ARGS (best->dts), best->system_frame_number,
12
+        best->input_buffer);
13
+  }
14
+
15
   g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL);
16
   g_list_free (frames);
17
 
18
@@ -954,56 +964,14 @@
19
   GstFlowReturn flow_ret = GST_FLOW_OK;
20
   GstVideoEncoder *encoder = GST_VIDEO_ENCODER_CAST (self);
21
 
22
-  /* The BUFFER_FLAG_CODEC_CONFIG logic is borrowed from
23
-   * gst-omx. see *_handle_output_frame in
24
-   * gstomxvideoenc.c and gstomxh264enc.c */
25
-  if ((buffer_info->flags & BUFFER_FLAG_CODEC_CONFIG)
26
-      && buffer_info->size > 0) {
27
-
28
-    if (self->codec_data_in_bytestream) {
29
-      if (buffer_info->size > 4 &&
30
-          GST_READ_UINT32_BE (buf->data + buffer_info->offset) == 0x00000001) {
31
-        GList *l = NULL;
32
-        GstBuffer *hdrs;
33
-
34
-        GST_DEBUG_OBJECT (self, "got codecconfig in byte-stream format");
35
-
36
-        hdrs = gst_buffer_new_and_alloc (buffer_info->size);
37
-        gst_buffer_fill (hdrs, 0, buf->data + buffer_info->offset,
38
-            buffer_info->size);
39
-        GST_BUFFER_PTS (hdrs) =
40
-            gst_util_uint64_scale (buffer_info->presentation_time_us,
41
-            GST_USECOND, 1);
42
-
43
-        l = g_list_append (l, hdrs);
44
-        gst_video_encoder_set_headers (encoder, l);
45
-      }
46
-    } else {
47
-      GstBuffer *codec_data;
48
-      GstVideoCodecState *output_state =
49
-          gst_video_encoder_get_output_state (GST_VIDEO_ENCODER (self));
50
-
51
-      GST_DEBUG_OBJECT (self, "Handling codec data");
52
-
53
-      codec_data = gst_buffer_new_and_alloc (buffer_info->size);
54
-      gst_buffer_fill (codec_data, 0, buf->data + buffer_info->offset,
55
-          buffer_info->size);
56
-      output_state->codec_data = codec_data;
57
-      gst_video_codec_state_unref (output_state);
58
-
59
-      if (!gst_video_encoder_negotiate (encoder)) {
60
-        gst_video_codec_frame_unref (frame);
61
-        return GST_FLOW_NOT_NEGOTIATED;
62
-      }
63
-
64
-      return GST_FLOW_OK;
65
-    }
66
-  }
67
-
68
   if (buffer_info->size > 0) {
69
     GstBuffer *out_buf;
70
     GstPad *srcpad;
71
 
72
+    if (buffer_info->flags & BUFFER_FLAG_PARTIAL_FRAME) {
73
+      GST_FIXME_OBJECT (self, "partial frames are currently not handled");
74
+    }
75
+
76
     srcpad = GST_VIDEO_ENCODER_SRC_PAD (encoder);
77
     out_buf =
78
         gst_video_encoder_allocate_output_buffer (encoder, buffer_info->size);
79
@@ -1023,7 +991,10 @@
80
        * caps and filling it
81
        */
82
 
83
-      GST_ERROR_OBJECT (self, "No corresponding frame found");
84
+      GST_ERROR_OBJECT (self, "No corresponding frame found: buffer pts: %"
85
+          GST_TIME_FORMAT " presentation_time_us %" G_GUINT64_FORMAT,
86
+          GST_TIME_ARGS (GST_BUFFER_PTS (out_buf)),
87
+          (guint64) buffer_info->presentation_time_us);
88
       flow_ret = gst_pad_push (srcpad, out_buf);
89
     }
90
   } else if (frame) {
91
@@ -1036,9 +1007,10 @@
92
 static void
93
 gst_amc_video_enc_loop (GstAmcVideoEnc * self)
94
 {
95
+  GstVideoEncoder *encoder = GST_VIDEO_ENCODER_CAST (self);
96
   GstVideoCodecFrame *frame;
97
   GstFlowReturn flow_ret = GST_FLOW_OK;
98
-  gboolean is_eos;
99
+  gboolean is_eos, is_codec_data;
100
   GstAmcBufferInfo buffer_info;
101
   GstAmcBuffer *buf;
102
   gint idx;
103
@@ -1148,14 +1120,62 @@
104
     goto got_null_output_buffer;
105
   }
106
 
107
-  frame =
108
-      _find_nearest_frame (self,
109
-      gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND, 1));
110
+  is_codec_data = FALSE;
111
+  /* The BUFFER_FLAG_CODEC_CONFIG logic is borrowed from
112
+   * gst-omx. see *_handle_output_frame in
113
+   * gstomxvideoenc.c and gstomxh264enc.c */
114
+  if ((buffer_info.flags & BUFFER_FLAG_CODEC_CONFIG)
115
+      && buffer_info.size > 0) {
116
+
117
+    if (self->codec_data_in_bytestream) {
118
+      if (buffer_info.size > 4 &&
119
+          GST_READ_UINT32_BE (buf->data + buffer_info.offset) == 0x00000001) {
120
+        GList *l = NULL;
121
+        GstBuffer *hdrs;
122
+
123
+        GST_DEBUG_OBJECT (self, "got codecconfig in byte-stream format");
124
+
125
+        hdrs = gst_buffer_new_and_alloc (buffer_info.size);
126
+        gst_buffer_fill (hdrs, 0, buf->data + buffer_info.offset,
127
+            buffer_info.size);
128
+        GST_BUFFER_PTS (hdrs) =
129
+            gst_util_uint64_scale (buffer_info.presentation_time_us,
130
+            GST_USECOND, 1);
131
+
132
+        l = g_list_append (l, hdrs);
133
+        gst_video_encoder_set_headers (encoder, l);
134
+        is_codec_data = TRUE;
135
+      }
136
+    } else {
137
+      GstBuffer *codec_data;
138
+      GstVideoCodecState *output_state =
139
+          gst_video_encoder_get_output_state (GST_VIDEO_ENCODER (self));
140
+
141
+      GST_DEBUG_OBJECT (self, "Handling codec data");
142
+
143
+      codec_data = gst_buffer_new_and_alloc (buffer_info.size);
144
+      gst_buffer_fill (codec_data, 0, buf->data + buffer_info.offset,
145
+          buffer_info.size);
146
+      output_state->codec_data = codec_data;
147
+      gst_video_codec_state_unref (output_state);
148
+      is_codec_data = TRUE;
149
+
150
+      if (!gst_video_encoder_negotiate (encoder))
151
+        flow_ret = GST_FLOW_NOT_NEGOTIATED;
152
+    }
153
+  }
154
 
155
   is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM);
156
 
157
-  flow_ret =
158
-      gst_amc_video_enc_handle_output_frame (self, buf, &buffer_info, frame);
159
+  if (flow_ret == GST_FLOW_OK && !is_codec_data) {
160
+    frame =
161
+        _find_nearest_frame (self,
162
+        gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND,
163
+            1));
164
+
165
+    flow_ret =
166
+        gst_amc_video_enc_handle_output_frame (self, buf, &buffer_info, frame);
167
+  }
168
 
169
   gst_amc_buffer_free (buf);
170
   buf = NULL;
171
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstjniutils.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstjniutils.c Changed
35
 
1
@@ -201,6 +201,8 @@
2
 gst_amc_jni_object_make_global (JNIEnv * env, jobject object)
3
 {
4
   jobject ret;
5
+  g_return_val_if_fail (env != NULL, NULL);
6
+  g_return_val_if_fail (object != NULL, NULL);
7
 
8
   ret = (*env)->NewGlobalRef (env, object);
9
   if (!ret) {
10
@@ -215,6 +217,8 @@
11
 gst_amc_jni_object_ref (JNIEnv * env, jobject object)
12
 {
13
   jobject ret;
14
+  g_return_val_if_fail (env != NULL, NULL);
15
+  g_return_val_if_fail (object != NULL, NULL);
16
 
17
   ret = (*env)->NewGlobalRef (env, object);
18
   if (!ret) {
19
@@ -226,6 +230,7 @@
20
 void
21
 gst_amc_jni_object_unref (JNIEnv * env, jobject object)
22
 {
23
+  g_return_if_fail (env != NULL);
24
   g_return_if_fail (object != NULL);
25
 
26
   (*env)->DeleteGlobalRef (env, object);
27
@@ -234,6 +239,7 @@
28
 void
29
 gst_amc_jni_object_local_unref (JNIEnv * env, jobject object)
30
 {
31
+  g_return_if_fail (env != NULL);
32
   g_return_if_fail (object != NULL);
33
 
34
   (*env)->DeleteLocalRef (env, object);
35
gst-plugins-bad-1.22.5.tar.xz/sys/applemedia/avsamplevideosink.m -> gst-plugins-bad-1.22.6.tar.xz/sys/applemedia/avsamplevideosink.m Changed
24
 
1
@@ -288,11 +288,8 @@
2
       return kCVPixelFormatType_24RGB;
3
     case GST_VIDEO_FORMAT_BGR:
4
       return kCVPixelFormatType_24BGR;
5
-#if 0
6
-    /* FIXME doesn't seem to work */
7
     case GST_VIDEO_FORMAT_NV12:
8
       return kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
9
-#endif
10
     case GST_VIDEO_FORMAT_I420:
11
       return kCVPixelFormatType_420YpCbCr8Planar;
12
     case GST_VIDEO_FORMAT_YUY2:
13
@@ -330,10 +327,8 @@
14
       return GST_VIDEO_FORMAT_RGB;
15
     case kCVPixelFormatType_24BGR:
16
       return GST_VIDEO_FORMAT_BGR;
17
-#if 0
18
     case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
19
       return GST_VIDEO_FORMAT_NV12;
20
-#endif
21
     case kCVPixelFormatType_420YpCbCr8Planar:
22
       return GST_VIDEO_FORMAT_I420;
23
     case kCVPixelFormatType_422YpCbCr8_yuvs:
24
gst-plugins-bad-1.22.5.tar.xz/sys/applemedia/coremediabuffer.c -> gst-plugins-bad-1.22.6.tar.xz/sys/applemedia/coremediabuffer.c Changed
10
 
1
@@ -123,6 +123,8 @@
2
 gst_core_media_buffer_get_video_format (OSType format)
3
 {
4
   switch (format) {
5
+    case kCVPixelFormatType_420YpCbCr8Planar:
6
+      return GST_VIDEO_FORMAT_I420;
7
     case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
8
       return GST_VIDEO_FORMAT_NV12;
9
     case kCVPixelFormatType_422YpCbCr8_yuvs:
10
gst-plugins-bad-1.22.5.tar.xz/sys/applemedia/corevideobuffer.c -> gst-plugins-bad-1.22.6.tar.xz/sys/applemedia/corevideobuffer.c Changed
10
 
1
@@ -216,6 +216,8 @@
2
 gst_core_video_get_video_format (OSType format)
3
 {
4
   switch (format) {
5
+    case kCVPixelFormatType_420YpCbCr8Planar:
6
+      return GST_VIDEO_FORMAT_I420;
7
     case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
8
       return GST_VIDEO_FORMAT_NV12;
9
     case kCVPixelFormatType_422YpCbCr8_yuvs:
10
gst-plugins-bad-1.22.5.tar.xz/sys/d3d11/gstd3d11convert.cpp -> gst-plugins-bad-1.22.6.tar.xz/sys/d3d11/gstd3d11convert.cpp Changed
29
 
1
@@ -1189,6 +1189,7 @@
2
 gst_d3d11_base_convert_propose_allocation (GstBaseTransform * trans,
3
     GstQuery * decide_query, GstQuery * query)
4
 {
5
+  GstD3D11BaseConvert *self = GST_D3D11_BASE_CONVERT (trans);
6
   GstD3D11BaseFilter *filter = GST_D3D11_BASE_FILTER (trans);
7
   GstVideoInfo info;
8
   GstBufferPool *pool = NULL;
9
@@ -1205,8 +1206,18 @@
10
   ID3D11Device *device_handle;
11
 
12
   if (!GST_BASE_TRANSFORM_CLASS (parent_class)->propose_allocation (trans,
13
-          decide_query, query))
14
+          decide_query, query)) {
15
     return FALSE;
16
+  }
17
+
18
+  if (self->same_caps) {
19
+    if (!gst_pad_peer_query (trans->srcpad, query))
20
+      return FALSE;
21
+
22
+    gst_query_add_allocation_meta (query,
23
+        GST_VIDEO_CROP_META_API_TYPE, nullptr);
24
+    return TRUE;
25
+  }
26
 
27
   gst_query_parse_allocation (query, &caps, NULL);
28
 
29
gst-plugins-bad-1.22.5.tar.xz/sys/nvcodec/gstnvencoder.cpp -> gst-plugins-bad-1.22.6.tar.xz/sys/nvcodec/gstnvencoder.cpp Changed
9
 
1
@@ -183,6 +183,7 @@
2
 
3
   gst_video_encoder_set_min_pts (GST_VIDEO_ENCODER (self),
4
       GST_SECOND * 60 * 60 * 1000);
5
+  GST_PAD_SET_ACCEPT_INTERSECT (GST_VIDEO_ENCODER_SINK_PAD (self));
6
 }
7
 
8
 static void
9
gst-plugins-bad-1.22.5.tar.xz/sys/va/gstvadecoder.c -> gst-plugins-bad-1.22.6.tar.xz/sys/va/gstvadecoder.c Changed
10
 
1
@@ -328,7 +328,7 @@
2
       VA_PROGRESSIVE, render_targets, num_render_targets, &context);
3
 
4
   if (status != VA_STATUS_SUCCESS) {
5
-    GST_ERROR_OBJECT (self, "vaDestroyConfig: %s", vaErrorStr (status));
6
+    GST_ERROR_OBJECT (self, "vaCreateContext: %s", vaErrorStr (status));
7
     return FALSE;
8
   }
9
 
10
gst-plugins-bad-1.22.5.tar.xz/sys/va/gstvadisplay_priv.c -> gst-plugins-bad-1.22.6.tar.xz/sys/va/gstvadisplay_priv.c Changed
10
 
1
@@ -146,7 +146,7 @@
2
 
3
   status = vaQueryConfigEntrypoints (dpy, VAProfileNone, entrypoints, &num);
4
   if (status != VA_STATUS_SUCCESS) {
5
-    GST_ERROR ("vaQueryImageFormats: %s", vaErrorStr (status));
6
+    GST_ERROR ("vaQueryConfigEntrypoints: %s", vaErrorStr (status));
7
     goto bail;
8
   }
9
 
10
gst-plugins-bad-1.22.5.tar.xz/sys/win32ipc/protocol/win32ipcpipeserver.cpp -> gst-plugins-bad-1.22.6.tar.xz/sys/win32ipc/protocol/win32ipcpipeserver.cpp Changed
11
 
1
@@ -449,6 +449,9 @@
2
 
3
   self->conn.clear ();
4
 
5
+  if (pipe != INVALID_HANDLE_VALUE)
6
+    CloseHandle (pipe);
7
+
8
   lk.lock ();
9
   CloseHandle (overlap.hEvent);
10
   self->last_err = ERROR_OPERATION_ABORTED;
11
gst-plugins-bad-1.22.5.tar.xz/tests/check/elements/h265parse.c -> gst-plugins-bad-1.22.6.tar.xz/tests/check/elements/h265parse.c Changed
79
 
1
@@ -1116,6 +1116,68 @@
2
 
3
 GST_END_TEST;
4
 
5
+GST_START_TEST (test_invalid_sei_in_hvcc)
6
+{
7
+  GstHarness *h;
8
+  GstCaps *caps;
9
+  GstBuffer *codec_data;
10
+  /* Consists of 4 arrays (VPS, SPS, PPS, SEI -> broken) and each array contains
11
+   * single nalu
12
+   * Captured from the log at
13
+   * https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2905
14
+   */
15
+  static const guint8 hvcc_data = {
16
+    0x01, 0x01, 0x01, 0x01, 0x60, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00,
17
+    0x00, 0xf0, 0x00, 0xfc, 0xfd, 0xf8, 0xf8, 0x00, 0x00, 0x0f, 0x04, 0x20,
18
+    0x00, 0x01, 0x00, 0x17, 0x40, 0x01, 0x0c, 0x01, 0xff, 0xff, 0x01, 0x60,
19
+    0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00,
20
+    0x7b, 0xac, 0x09, 0x21, 0x00, 0x01, 0x00, 0x42, 0x42, 0x01, 0x01, 0x01,
21
+    0x60, 0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03,
22
+    0x00, 0x7b, 0xa0, 0x02, 0x80, 0x80, 0x2d, 0x1f, 0xe3, 0x6b, 0xbb, 0x53,
23
+    0x77, 0x72, 0x5d, 0x60, 0x2d, 0xc0, 0x40, 0x40, 0x41, 0x00, 0x00, 0x03,
24
+    0x03, 0xe8, 0x00, 0x00, 0x4e, 0x20, 0x72, 0x1d, 0xee, 0x51, 0x00, 0x05,
25
+    0xdc, 0x00, 0x00, 0x1a, 0x5e, 0x00, 0x00, 0x2e, 0xe0, 0x00, 0x00, 0xd2,
26
+    0xf0, 0x08, 0x22, 0x00, 0x01, 0x00, 0x0b, 0x44, 0x01, 0xc1, 0x72, 0xb0,
27
+    0x9c, 0x38, 0x77, 0x06, 0x0c, 0x24, 0x27, 0x00, 0x01, 0x00, 0x00, 0x00
28
+  };
29
+
30
+  caps = gst_caps_new_simple ("video/x-h265", "stream-format", G_TYPE_STRING,
31
+      "hvc1", "alignment", G_TYPE_STRING, "au", NULL);
32
+  codec_data = gst_buffer_new_memdup (hvcc_data, sizeof (hvcc_data));
33
+  gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, codec_data, NULL);
34
+  gst_buffer_unref (codec_data);
35
+
36
+  h = gst_harness_new ("h265parse");
37
+  gst_harness_set_src_caps (h, caps);
38
+  gst_harness_push_event (h, gst_event_new_eos ());
39
+
40
+  while (TRUE) {
41
+    GstEvent *event = gst_harness_pull_event (h);
42
+    fail_unless (event);
43
+
44
+    if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS) {
45
+      GstStructure *s;
46
+      gint width, height;
47
+
48
+      gst_event_parse_caps (event, &caps);
49
+      s = gst_caps_get_structure (caps, 0);
50
+
51
+      fail_unless (gst_structure_get_int (s, "width", &width));
52
+      fail_unless_equals_int (width, 1280);
53
+      fail_unless (gst_structure_get_int (s, "height", &height));
54
+      fail_unless_equals_int (height, 720);
55
+
56
+      gst_event_unref (event);
57
+      break;
58
+    }
59
+
60
+    gst_event_unref (event);
61
+  }
62
+
63
+  gst_harness_teardown (h);
64
+}
65
+
66
+GST_END_TEST;
67
 
68
 static Suite *
69
 h265parse_harnessed_suite (void)
70
@@ -1152,6 +1214,8 @@
71
 
72
   tcase_add_test (tc_chain, test_drain);
73
 
74
+  tcase_add_test (tc_chain, test_invalid_sei_in_hvcc);
75
+
76
   return s;
77
 }
78
 
79
Refresh

No build results available

Refresh

No rpmlint results available

Request History
Bjørn Lie's avatar

zaitor created request over 1 year ago

New upstream release


Bjørn Lie's avatar

zaitor accepted request over 1 year ago

Xin