Changes of Revision 9

gstreamer-plugins-bad-codecs.changes Changed
x
 
1
@@ -1,4 +1,9 @@
2
 -------------------------------------------------------------------
3
+Fri Dec 23 20:13:27 UTC 2022 - Bjørn Lie <zaitor@opensuse.org>
4
+
5
+- Update to version 1.20.5
6
+
7
+-------------------------------------------------------------------
8
 Wed Oct 26 13:32:09 UTC 2022 - Bjørn Lie <zaitor@opensuse.org>
9
 
10
 - Update to version 1.20.4
11
gstreamer-plugins-bad-codecs.spec Changed
10
 
1
@@ -7,7 +7,7 @@
2
 %define _version 1.20.0
3
 
4
 Name:           gstreamer-plugins-bad-codecs
5
-Version:        1.20.4
6
+Version:        1.20.5
7
 Release:        0
8
 Summary:        Codecs/plugins for gstreamer-plugins-bad
9
 License:        LGPL-2.1-or-later
10
gst-plugins-bad-1.20.4.tar.xz/ChangeLog -> gst-plugins-bad-1.20.5.tar.xz/ChangeLog Changed
201
 
1
@@ -1,7 +1,450 @@
2
+=== release 1.20.5 ===
3
+
4
+2022-12-19 23:34:42 +0000  Tim-Philipp Müller <tim@centricular.com>
5
+
6
+   * NEWS:
7
+   * RELEASE:
8
+   * gst-plugins-bad.doap:
9
+   * meson.build:
10
+     Release 1.20.5
11
+
12
+2022-12-19 23:34:34 +0000  Tim-Philipp Müller <tim@centricular.com>
13
+
14
+   * ChangeLog:
15
+     Update ChangeLogs for 1.20.5
16
+
17
+2022-12-16 15:03:12 +0100  Edward Hervey <edward@centricular.com>
18
+
19
+   * gst/mpegtsdemux/mpegtsbase.c:
20
+     mpegts: Always clear packetizer on DISCONT push mode
21
+     If a discontinuity is detected in push mode, we need to clear the cached section
22
+     observations since they might have potentially changed.
23
+     This was only done properly when operating with TIME segments (dvb, udp,
24
+     adaptive demuxers, ...) but not with BYTE segments (such as with custom app/fd
25
+     sources).
26
+     We still don't want to flush out the PCR observations, since this might be
27
+     needed for seeking in push-based BYTE sources.
28
+     Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1650
29
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3600>
30
+
31
+2022-12-17 20:04:01 +0900  Seungha Yang <seungha@centricular.com>
32
+
33
+   * sys/d3d11/gstd3d11window_win32.cpp:
34
+     d3d11videosink: Fixing focus lost on desktop layout change
35
+     Watch all message on the window thread, instead of internal window only.
36
+     Otherwise, some global window messages, such as desktop layout change,
37
+     wouldn't be handled by our window.
38
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3594>
39
+
40
+2022-12-17 01:01:00 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
41
+
42
+   * sys/applemedia/avfvideosrc.m:
43
+     avfvideosrc: Report latency when doing screen capture
44
+     There is no `device` when doing screen capture, but there is always an
45
+     `input`, so use that to decide when we can reply to a latency query.
46
+     Without this, the latency query just fails.
47
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3591>
48
+
49
+2022-12-16 21:42:50 +0900  Seungha Yang <seungha@centricular.com>
50
+
51
+   * sys/d3d11/gstd3d11window_win32.cpp:
52
+     d3d11videosink: Call ShowWindow() from window thread
53
+     ... when rendering on external HWND. ShowWindow() will cause
54
+     synchronous message passing to window thread and then can be blocked.
55
+     At the same time, window thread can wait for GStreamer thread.
56
+     Instead of the synchronous call, queue the task to window message
57
+     and performs from the window thread.
58
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3588>
59
+
60
+2022-12-15 01:15:10 +0900  Seungha Yang <seungha@centricular.com>
61
+
62
+   * sys/d3d11/gstd3d11videosink.cpp:
63
+   * sys/d3d11/gstd3d11window.cpp:
64
+   * sys/d3d11/gstd3d11window.h:
65
+   * sys/d3d11/gstd3d11window_dummy.cpp:
66
+   * sys/d3d11/gstd3d11window_win32.cpp:
67
+     d3d11videosink: Fix deadlock when parent window is busy
68
+     Deadlock sequence:
69
+     * From a streaming thread, d3d11videosink sends synchronous message
70
+     to the parent window, so that internal (child) window can be
71
+     constructed on the parent window's thread
72
+     * App thread (parent window thread) is waiting for pipeline's
73
+     state change (to GST_STATE_NULL) but streaming thread is
74
+     blocked and waiting for app thread
75
+     To avoid the deadlock, GstD3D11WindowWin32 should send message
76
+     to the parent window asynchronously.
77
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3573>
78
+
79
+2022-12-15 20:11:30 +0900  Seungha Yang <seungha@centricular.com>
80
+
81
+   * sys/d3d11/gstd3d11window.cpp:
82
+     d3d11videosink: Error out if RTV is unavailable
83
+     Add RTV pointer validation
84
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3573>
85
+
86
+2022-07-03 01:18:19 +0900  Seungha Yang <seungha@centricular.com>
87
+
88
+   * sys/d3d11/gstd3d11videosink.cpp:
89
+   * sys/d3d11/gstd3d11videosink.h:
90
+     d3d11videosink: Protect window with lock at every place
91
+     Access to the object should be thread safe to support runtime
92
+     property update
93
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3573>
94
+
95
+2022-10-21 22:46:16 -0500  A. Wilcox <AWilcox@Wilcox-Tech.com>
96
+
97
+   * gst-libs/gst/mpegts/gstmpegtsdescriptor.c:
98
+   * tests/check/libs/mpegts.c:
99
+     mpegts: Handle when iconv doesn't support ISO 6937
100
+     Systems like musl libc don't support ISO 6937 in iconv.  This ensures
101
+     that the MPEG-TS plugin can cope with that.  There is existing support
102
+     in the plugin for other methods, so it seems to have been the original
103
+     intent anyway.
104
+     Fixes: #1314
105
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3563>
106
+
107
+2022-12-06 11:30:47 +0100  Edward Hervey <edward@centricular.com>
108
+
109
+   * gst/mpegtsdemux/mpegtspacketizer.c:
110
+     mpegts: Check continuity counter on section streams
111
+     This wasn't really done, and is needed in order to detect potential section
112
+     changes for sections that have got identical information (such as when switching
113
+     between streams that have the same PAT/PMT pid and subtable information).
114
+     Other checks exist in tsbase to detect if the "new" PAT/PMT really is an update or not.
115
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3556>
116
+
117
+2022-12-01 19:35:07 +0200  Marek Olejnik <molejnik@fluendo.com>
118
+
119
+   * gst-libs/gst/codecs/gsth265decoder.c:
120
+     h265decoder: Do not abort when failed to prepare ref pic set
121
+     Currently the element calls abort when failed to prepare reference
122
+     picture set. This can happent when the input stream is somehow
123
+     corrupted, like a rtsp strem with lost packets. Now it will only
124
+     return with GST_FLOW_ERROR instead of terminating whole process.
125
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3542>
126
+
127
+2022-12-07 10:21:52 +0200  Sebastian Dröge <sebastian@centricular.com>
128
+
129
+   * gst/dvbsubenc/gstdvbsubenc.c:
130
+     dvbsubenc: Forward GAP events as-is if we wouldn't produce an end packet and are not in the middle of an existing subtitle
131
+     An end packet is only produced once for the last subtitle, so multiple
132
+     GAP events between subtitles would result only in a single end packet
133
+     and nothing else otherwise. This would potentially starve downstream
134
+     then, so instead forward the GAP events in that case.
135
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3536>
136
+
137
+2022-12-05 19:30:43 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
138
+
139
+   * sys/dshowvideosink/dshowvideosink.cpp:
140
+     directshow: Fix build error with glib 2.75 and newer
141
+     Starting with glib 2.75, `NULL` is `nullptr`, which cannot be
142
+     implicitly coerced to `0`, unlike `NULL`. So explicitly pass `0`.
143
+     ```
144
+     3206/4524 Compiling C++ object subprojects/gst-plugins-bad/sys/directshow/gstdirectshow.dll.p/dshowvideosink.cpp.obj
145
+     FAILED: subprojects/gst-plugins-bad/sys/directshow/gstdirectshow.dll.p/dshowvideosink.cpp.obj
146
+     "cl" "-Isubprojects\gst-plugins-bad\sys\directshow\gstdirectshow.dll.p" "-Isubprojects\gst-plugins-bad\sys\directshow" "-I..\subprojects\gst-plugins-bad\sys\directshow" "-Isubprojects\gst-plugins-bad" "-I..\subprojects\gst-plugins-bad" "-Isubprojects\gst-plugins-base\gst-libs" "-I..\subprojects\gst-plugins-base\gst-libs" "-Isubprojects\gstreamer\libs" "-I..\subprojects\gstreamer\libs" "-Isubprojects\gstreamer" "-I..\subprojects\gstreamer" "-Isubprojects\orc" "-I..\subprojects\orc" "-I..\subprojects\gst-plugins-bad\sys\directshow\strmbase\baseclasses" "-Isubprojects\gst-plugins-base\gst-libs\gst\video" "-Isubprojects\gstreamer\gst" "-Isubprojects\gst-plugins-base\gst-libs\gst\audio" "-Isubprojects\gst-plugins-base\gst-libs\gst\tag" "-IC:/gst-install/include/glib-2.0" "-IC:/gst-install/lib/glib-2.0/include" "-IC:/gst-install/include" "/MD" "/nologo" "/showIncludes" "/utf-8" "/W2" "/EHsc" "/O2" "/Zi" "/wd4018" "/wd4146" "/wd4244" "/wd4305" "/utf-8" "/we4002" "/we4003" "/we4013" "/we4020" "/we4027" "/we4029" "/we4033" "/we4045" "/we4047" "/we4053" "/we4062" "/we4098" "/we4101" "/we4189" "/utf-8" "-D_MBCS" "/wd4189" "/wd4456" "/wd4701" "/wd4703" "/wd4706" "/wd4996" "-DHAVE_CONFIG_H" "/Fdsubprojects\gst-plugins-bad\sys\directshow\gstdirectshow.dll.p\dshowvideosink.cpp.pdb" /Fosubprojects/gst-plugins-bad/sys/directshow/gstdirectshow.dll.p/dshowvideosink.cpp.obj "/c" ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp
147
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(62): warning C5051: attribute 'noinline' requires at least '/std:c++20'; ignored
148
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(123): error C2664: 'LRESULT SendMessageA(HWND,UINT,WPARAM,LPARAM)': cannot convert argument 3 from 'nullptr' to 'WPARAM'
149
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(123): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type
150
+     C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um\winuser.h(3690): note: see declaration of 'SendMessageA'
151
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(635): error C2664: 'BOOL SystemParametersInfoA(UINT,UINT,PVOID,UINT)': cannot convert argument 2 from 'nullptr' to 'UINT'
152
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(635): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type
153
+     C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um\winuser.h(13153): note: see declaration of 'SystemParametersInfoA'
154
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(1593): error C2664: 'LRESULT SendMessageA(HWND,UINT,WPARAM,LPARAM)': cannot convert argument 3 from 'nullptr' to 'WPARAM'
155
+     ../subprojects/gst-plugins-bad/sys/directshow/dshowvideosink.cpp(1593): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type
156
+     C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um\winuser.h(3690): note: see declaration of 'SendMessageA'
157
+     ```
158
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3533>
159
+
160
+2022-11-29 02:22:50 +0900  Seungha Yang <seungha@centricular.com>
161
+
162
+   * sys/mediafoundation/gstmfvideosrc.c:
163
+     mfvideosrc: Fix buffer leak
164
+     The allocated buffer should be released
165
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3496>
166
+
167
+2022-11-29 02:10:42 +0900  Seungha Yang <seungha@centricular.com>
168
+
169
+   * sys/mediafoundation/gstmfsourcereader.cpp:
170
+   * sys/mediafoundation/gstwin32devicewatcher.cpp:
171
+     mediafoundation: Chain up from GObject::constructed
172
+     ... so that GstTracer can trace it
173
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3496>
174
+
175
+2022-11-29 02:06:11 +0900  Seungha Yang <seungha@centricular.com>
176
+
177
+   * sys/d3d11/gstd3d11videosink.cpp:
178
+   * sys/d3d11/gstd3d11window_corewindow.cpp:
179
+   * sys/d3d11/gstd3d11window_dummy.cpp:
180
+   * sys/d3d11/gstd3d11window_swapchainpanel.cpp:
181
+   * sys/d3d11/gstd3d11window_win32.cpp:
182
+     d3d11: Use correct ref/unref methods
183
+     Those objects are GstObject subclasses
184
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3496>
185
+
186
+2022-11-25 18:38:27 +0800  He Junyan <junyan.he@intel.com>
187
+
188
+   * gst-libs/gst/codecparsers/gsth264parser.c:
189
+     h264parser: Fix a typo in pred_weight_table parsing.
190
+     When setting default values, the reference list number of l1 is wrong.
191
+     Fix: https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/issues/336
192
+     Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3468>
193
+
194
+2022-11-21 19:40:35 +0200  Sebastian Dröge <sebastian@centricular.com>
195
+
196
+   * gst/dvbsubenc/gstdvbsubenc-util.c:
197
+   * gst/dvbsubenc/gstdvbsubenc.c:
198
+   * gst/dvbsubenc/gstdvbsubenc.h:
199
+     dvbsubenc: Write Display Definition Segment if a non-default width/height is used
200
+     Otherwise it can't be rendered by dvbsuboverlay or ffmpeg at least.
201
gst-plugins-bad-1.20.4.tar.xz/NEWS -> gst-plugins-bad-1.20.5.tar.xz/NEWS Changed
201
 
1
@@ -2,13 +2,13 @@
2
 
3
 GStreamer 1.20.0 was originally released on 3 February 2022.
4
 
5
-The latest bug-fix release in the 1.20 series is 1.20.4 and was released
6
-on 12 October 2022.
7
+The latest bug-fix release in the 1.20 series is 1.20.5 and was released
8
+on 19 December 2022.
9
 
10
 See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
11
 version of this document.
12
 
13
-Last updated: Wednesday 12 October 2022, 15:00 UTC (log)
14
+Last updated: Monday 19 December 2022, 19:00 UTC (log)
15
 
16
 Introduction
17
 
18
@@ -1791,6 +1791,13 @@
19
 
20
 Known Issues
21
 
22
+-   GStreamer may fail to build the hotdoc documentation with the Meson
23
+    0.64.0 release owing to a Meson bug. This should only affect systems
24
+    where hotdoc is installed, and will be fixed in Meson 0.64.1 by this
25
+    Meson PR in combination with this GStreamer MR. In the meantime,
26
+    users can pass -Ddoc=disabledor downgrade to an older Meson version
27
+    (< 0.64.0).
28
+
29
 -   nothing in particular at this point (but also see possibly breaking
30
     changes section above)
31
 
32
@@ -2530,6 +2537,7 @@
33
     chroma (Y41B, YUV9, YVU9 and IYU9)
34
 -   macOS build and packaging fixes, in particular fix finding of gio
35
     modules on macOS for https/TLS support
36
+-   Fix consuming of the macOS package as a framework in XCode
37
 -   Performance improvements
38
 -   Miscellaneous bug fixes, memory leak fixes, and other stability and
39
     reliability improvements
40
@@ -2783,6 +2791,252 @@
41
 -   List of Merge Requests applied in 1.20.4
42
 -   List of Issues fixed in 1.20.4
43
 
44
+1.20.5
45
+
46
+The fifth 1.20 bug-fix release (1.20.5) was released on 19 December
47
+2022.
48
+
49
+This release only contains bugfixes and it should be safe to upgrade
50
+from 1.20.x.
51
+
52
+Highlighted bugfixes in 1.20.5
53
+
54
+-   systemclock waiting fixes for certain 32-bit platforms/libcs
55
+-   alphacombine: robustness improvements for corner case scenarios
56
+-   avfvideosrc: Report latency when doing screen capture
57
+-   d3d11videosink: various thread-safety and stability fixes
58
+-   decklink: fix performance issue when HDMI signal has been lost for a
59
+    long time
60
+-   flacparse: Fix handling of headers advertising 32 bits per sample
61
+-   mpegts: Handle when iconv doesn’t support ISO 6937 (e.g. musl libc)
62
+-   opengl: fix automatic dispmanx detection for rpi4 and fix usage of
63
+    eglCreate/DestroyImage
64
+-   opusdec: Various channel-related fixes
65
+-   textrender: event handling fixes, esp. for GAP event
66
+-   subparse: Fix non-closed tag handling
67
+-   videoscale: fix handling of unknown buffer metas
68
+-   videosink: reverse playback handling fixes
69
+-   qtmux: Prefill mode fixes, especially for raw audio
70
+-   multiudpsink: allow binding to IPv6 address
71
+-   rtspsrc: Fix usage of IPv6 connections in SETUP
72
+-   rtspsrc: Only EOS on timeout if all streams are timed out/EOS
73
+-   splitmuxsrc: fix playback stall if there are unlinked pads
74
+-   v4l2: Fix SIGSEGV on state change during format changes
75
+-   wavparse robustness fixes
76
+-   Fix static linking on macOS (opengl, vulkan)
77
+-   gstreamer-vaapi: fix headless build against mesa >= 22.3.0
78
+-   GStreamer Editing Services library: Fix build with tools disabled
79
+-   webrtc example/demo fixes
80
+-   unit test fixes for aesdec and rtpjitterbuffer
81
+-   Cerbero: Fix ios cross-compile with cmake on M1; some recipe updates
82
+    and other build fixes
83
+-   Binary packages: pkg-config file fixes for various recipes (ffmpeg,
84
+    taglib, gstreamer)
85
+-   Binary packages: Enable high bitdepth support for libvpx (VP8/VP9
86
+    encoding/decoding)
87
+-   Binary packages: ship aes plugin
88
+-   Miscellaneous bug fixes, memory leak fixes, and other stability and
89
+    reliability improvements
90
+-   Performance improvements
91
+
92
+gstreamer
93
+
94
+-   allocator: Copy allocator name in gst_allocator_register()
95
+-   miniobject: support higher refcount values
96
+-   pads: Fix non-serialized sticky event push, e.g. instant change rate
97
+    events
98
+-   padtemplate: Fix annotations
99
+-   systemclock: Use futex_time64 syscall on x32 and other platforms
100
+    that always…
101
+-   Fix build of 1.20 branch with Meson 0.64.1 for those who have hotdoc
102
+    installed on their system.
103
+-   meson: fix check for pthread_setname_np()
104
+-   -Wimplicit-function-declaration in pthread_setname_np check (missing
105
+    _GNU_SOURCE)
106
+-   gst-inspect: Don’t leak list
107
+
108
+Core Elements
109
+
110
+-   concat: Properly propagate EOS seqnum
111
+-   fakesrc: avoid time overflow with datarate
112
+
113
+gst-plugins-base
114
+
115
+-   audioconvert, audioresample, audiofilter: fix divide by 0 for input
116
+    buffer without caps
117
+-   cdparanoia: Ignore compiler warning coming from the cdparanoia
118
+    header
119
+-   oggdemux, parsebin: More leak fixes
120
+-   opengl: fix automatic dispmanx detection for rpi4
121
+-   opengl: Fix usage of eglCreate/DestroyImage
122
+-   opengl: Fix static linking on macOS
123
+-   opusdec: Various channel-related fixes
124
+-   textrender: Negotiate caps on a GAP event if none were negotiated
125
+    yet
126
+-   textrender: Don’t blindly forward all events and don’t blindly
127
+    forward all events
128
+-   timeoverlay: fix pad leak
129
+-   oggdemux: Don’t leak incoming EOS event
130
+-   subparse: Fix non-closed tag handling.
131
+-   videodecoder: Only post latency message if it changed
132
+-   videoscale: buffer meta handling fixes (NULL-terminate array of
133
+    valid meta tags)
134
+-   videosink: Don’t return unknown end-time from get_times()
135
+-   Bump core requirement in 1.20 branch to 1.20.4
136
+
137
+Tools
138
+
139
+-   gst-play: Don’t leak the stream collection
140
+
141
+gst-plugins-good
142
+
143
+-   flacparse: Fix handling of headers advertising 32bps
144
+-   qt5: deactivate context if fill_info fails
145
+-   qt5: initialize GError properly in gst_qt_get_gl_wrapcontext()
146
+-   qtdemux: check return value from gst_structure_get in PIFF box
147
+-   qtdemux: use unsigned int types to store result of QT_UINT32
148
+-   qtmux: Prefill mode fixes
149
+-   oss4: Fix debug category initialization
150
+-   multiudpsink: allow binding to IPv6 address
151
+-   rtpjitterbuffer tests: Cast drop-messages-interval type properly
152
+    (fixing it on 32-bit architectures)
153
+-   rtspsrc: fix seek event leaks
154
+-   rtspsrc: Don’t replace 404 errors with “no auth protocol found”
155
+-   rtspsrc: Only EOS on timeout if all streams are timed out/EOS
156
+-   rtspsrc: Fix usage of IPv6 connections in SETUP
157
+-   splitmuxsrc: don’t queue data on unlinked pads
158
+-   v4l2: Fix SIGSEGV on ‘change state’ during ‘format change’
159
+-   v4l2videodec: Fix activation of internal pool
160
+-   wavparse: Avoid occasional crash due to referencing freed buffer.
161
+-   wavparse: Fix crash that occurs in push mode when header chunks are
162
+    corrupted in certain ways.
163
+
164
+gst-plugins-bad
165
+
166
+-   aesdec: Fix padding removal for per-buffer-padding=FALSE
167
+-   aesdec test failing in gst-plugins-bad
168
+-   alphacombine: Add missing query handler for gaps
169
+-   avfdeviceprovider: do not leak the properties
170
+-   avfvideosrc: Report latency when doing screen capture
171
+-   d3d11screencapturesrc: Specify PAR 1/1 to template caps
172
+-   d3d11videosink: Fixing focus lost on desktop layout change
173
+-   d3d11videosink: Call ShowWindow() from window thread
174
+-   d3d11videosink: Fix deadlock when parent window is busy
175
+-   d3d11videosink: Always clear back buffer on resize
176
+-   decklink: reset calculation of time_mapping to fix clipping HDMI
177
+    video
178
+-   directshow: Fix build error with glib 2.75 and newer
179
+-   dvbsubenc: Forward GAP events as-is if we wouldn’t produce an end
180
+    packet and…
181
+-   dvbsubenc: Write Display Definition Segment if a non-default
182
+    width/height is used
183
+-   h265decoder: Do not abort when failed to prepare ref pic set
184
+-   h264parser: Fix a typo in pred_weight_table parsing.
185
+-   mediafoundation, d3d11: Fix memory leak and make leak tracer happy
186
+-   mpegts: Handle when iconv doesn’t support ISO 6937 (e.g. musl libc)
187
+-   mpegts: Check continuity counter on section streams
188
+-   mpegts: Revert “mpegtspacketizer: memcmp potentially seen_before
189
+    data”
190
+-   mpegtspacketizer: memcmp potentially seen_before data
191
+-   mpegtsdemux: Always clear packetizer on DISCONT push mode
192
+-   srt: various fixes - improve stats and error handling
193
+-   rtmp2: Improve error messages
194
+-   rtmp2sink: Correctly return GST_FLOW_ERROR on error
195
+-   vulkan: Fix static linking on macOS
196
+-   webrtcbin: also add rtcp-fb ccm fir for video mlines by default
197
+-   webrtc/nice: fix small leak of split strings
198
+
199
+gst-plugins-ugly
200
+
201
gst-plugins-bad-1.20.4.tar.xz/RELEASE -> gst-plugins-bad-1.20.5.tar.xz/RELEASE Changed
7
 
1
@@ -1,4 +1,4 @@
2
-This is GStreamer gst-plugins-bad 1.20.4.
3
+This is GStreamer gst-plugins-bad 1.20.5.
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.20.4.tar.xz/ext/aes/gstaesdec.c -> gst-plugins-bad-1.20.5.tar.xz/ext/aes/gstaesdec.c Changed
17
 
1
@@ -583,11 +583,10 @@
2
     GST_ERROR_OBJECT (filter, "Could not initialize openssl cipher");
3
     return FALSE;
4
   }
5
-  if (filter->per_buffer_padding) {
6
-    if (!EVP_CIPHER_CTX_set_padding (filter->evp_ctx, 0)) {
7
-      GST_ERROR_OBJECT (filter, "Could not set padding");
8
-      return FALSE;
9
-    }
10
+  if (!EVP_CIPHER_CTX_set_padding (filter->evp_ctx,
11
+          filter->per_buffer_padding ? 0 : 1)) {
12
+    GST_ERROR_OBJECT (filter, "Could not set padding");
13
+    return FALSE;
14
   }
15
 
16
   return TRUE;
17
gst-plugins-bad-1.20.4.tar.xz/ext/srt/gstsrtobject.c -> gst-plugins-bad-1.20.5.tar.xz/ext/srt/gstsrtobject.c Changed
201
 
1
@@ -38,11 +38,13 @@
2
 #define GST_CAT_DEFAULT gst_debug_srtobject
3
 
4
 #if SRT_VERSION_VALUE > 0x10402
5
-#define SRTSOCK_ERROR_DEBUG ("libsrt reported: %s", srt_rejectreason_str (reason))
6
+#define REASON_FORMAT "s"
7
+#define REASON_ARGS(reason) srt_rejectreason_str (reason)
8
 #else
9
 /* srt_rejectreason_str() is unavailable in libsrt 1.4.2 and prior due to
10
  * unexported symbol. See https://github.com/Haivision/srt/pull/1728. */
11
-#define SRTSOCK_ERROR_DEBUG ("libsrt reported reject reason code %d", reason)
12
+#define REASON_FORMAT "s %d"
13
+#define REASON_ARGS(reason) "reject reason code", (reason)
14
 #endif
15
 
16
 /* Define options added in later revisions */
17
@@ -52,10 +54,6 @@
18
 #define SRTO_RETRANSMITALGO 61
19
 #endif
20
 
21
-#define ELEMENT_WARNING_SRTSOCK_ERROR(code, reason) \
22
-  GST_ELEMENT_WARNING (srtobject->element, RESOURCE, code, \
23
-  ("Error on SRT socket. Trying to reconnect."), SRTSOCK_ERROR_DEBUG)
24
-
25
 enum
26
 {
27
   PROP_URI = 1,
28
@@ -82,9 +80,6 @@
29
   gboolean sent_headers;
30
 } SRTCaller;
31
 
32
-static GstStructure *gst_srt_object_accumulate_stats (GstSRTObject * srtobject,
33
-    SRTSOCKET srtsock);
34
-
35
 static SRTCaller *
36
 srt_caller_new (void)
37
 {
38
@@ -118,14 +113,6 @@
39
 static void
40
 srt_caller_signal_removed (SRTCaller * caller, GstSRTObject * srtobject)
41
 {
42
-  GstStructure *stats;
43
-
44
-  stats = gst_srt_object_accumulate_stats (srtobject, caller->sock);
45
-
46
-  /* FIXME: These are the final statistics for the caller before we close its
47
-   * socket. Deliver the stats to the app before we throw them away. */
48
-  gst_structure_free (stats);
49
-
50
   g_signal_emit_by_name (srtobject->element, "caller-removed", 0,
51
       caller->sockaddr);
52
 }
53
@@ -376,11 +363,12 @@
54
 {
55
   g_return_if_fail (srtobject != NULL);
56
 
57
-  if (srtobject->poll_id != SRT_ERROR) {
58
-    srt_epoll_release (srtobject->poll_id);
59
-    srtobject->poll_id = SRT_ERROR;
60
+  if (srtobject->sock != SRT_INVALID_SOCK) {
61
+    srt_close (srtobject->sock);
62
   }
63
 
64
+  srt_epoll_release (srtobject->poll_id);
65
+
66
   g_cond_clear (&srtobject->sock_cond);
67
 
68
   GST_DEBUG_OBJECT (srtobject->element, "Destroying srtobject");
69
@@ -935,19 +923,19 @@
70
 
71
     GST_DEBUG_OBJECT (srtobject->element, "Waiting a request from caller");
72
 
73
-    if (srt_epoll_wait (srtobject->listener_poll_id, &rsock,
74
-            &rsocklen, 0, 0, poll_timeout, NULL, 0, NULL, 0) < 0) {
75
+    if (srt_epoll_wait (srtobject->listener_poll_id, &rsock, &rsocklen, 0, 0,
76
+            poll_timeout, NULL, 0, NULL, 0) < 0) {
77
       gint srt_errno = srt_getlasterror (NULL);
78
 
79
       if (srtobject->listener_poll_id == SRT_ERROR)
80
         return NULL;
81
-      if (srt_errno == SRT_ETIMEOUT) {
82
+
83
+      if (srt_errno == SRT_ETIMEOUT)
84
         continue;
85
-      } else {
86
-        GST_ELEMENT_ERROR (srtobject->element, RESOURCE, FAILED,
87
-            ("abort polling: %s", srt_getlasterror_str ()), (NULL));
88
-        return NULL;
89
-      }
90
+
91
+      GST_ELEMENT_ERROR (srtobject->element, RESOURCE, FAILED,
92
+          ("abort polling: %s", srt_getlasterror_str ()), (NULL));
93
+      return NULL;
94
     }
95
 
96
     caller_sock =
97
@@ -985,7 +973,7 @@
98
           caller->sock);
99
 
100
       g_mutex_lock (&srtobject->sock_lock);
101
-      srtobject->callers = g_list_append (srtobject->callers, caller);
102
+      srtobject->callers = g_list_prepend (srtobject->callers, caller);
103
       g_cond_signal (&srtobject->sock_cond);
104
       g_mutex_unlock (&srtobject->sock_lock);
105
 
106
@@ -1183,7 +1171,7 @@
107
   if (sock == SRT_INVALID_SOCK) {
108
     g_set_error (error, GST_LIBRARY_ERROR, GST_LIBRARY_ERROR_INIT, "%s",
109
         srt_getlasterror_str ());
110
-    goto failed;
111
+    return FALSE;
112
   }
113
 
114
   if (!gst_srt_object_set_common_params (sock, srtobject, error)) {
115
@@ -1267,6 +1255,7 @@
116
   if (srt_connect (sock, sa, sa_len) == SRT_ERROR) {
117
     g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_OPEN_READ, "%s",
118
         srt_getlasterror_str ());
119
+    srt_epoll_remove_usock (srtobject->poll_id, sock);
120
     goto failed;
121
   }
122
 
123
@@ -1275,18 +1264,7 @@
124
   return TRUE;
125
 
126
 failed:
127
-
128
-  if (srtobject->poll_id != SRT_ERROR) {
129
-    srt_epoll_release (srtobject->poll_id);
130
-  }
131
-
132
-  if (sock != SRT_INVALID_SOCK) {
133
-    srt_close (sock);
134
-  }
135
-
136
-  srtobject->poll_id = SRT_ERROR;
137
-  srtobject->sock = SRT_INVALID_SOCK;
138
-
139
+  srt_close (sock);
140
   return FALSE;
141
 }
142
 
143
@@ -1383,7 +1361,7 @@
144
 gst_srt_object_open (GstSRTObject * srtobject, GCancellable * cancellable,
145
     GError ** error)
146
 {
147
-  srtobject->previous_bytes = 0;
148
+  srtobject->bytes = 0;
149
 
150
   return gst_srt_object_open_internal (srtobject, cancellable, error);
151
 }
152
@@ -1394,17 +1372,7 @@
153
   g_mutex_lock (&srtobject->sock_lock);
154
 
155
   if (srtobject->sock != SRT_INVALID_SOCK) {
156
-    GstStructure *stats;
157
-
158
-    if (srtobject->poll_id != SRT_ERROR) {
159
-      srt_epoll_remove_usock (srtobject->poll_id, srtobject->sock);
160
-    }
161
-
162
-    stats = gst_srt_object_accumulate_stats (srtobject, srtobject->sock);
163
-
164
-    /* FIXME: These are the final statistics for the socket before we close it.
165
-     * Deliver the stats to the app before we throw them away. */
166
-    gst_structure_free (stats);
167
+    srt_epoll_remove_usock (srtobject->poll_id, srtobject->sock);
168
 
169
     GST_DEBUG_OBJECT (srtobject->element, "Closing SRT socket (0x%x)",
170
         srtobject->sock);
171
@@ -1452,33 +1420,25 @@
172
 
173
 static gboolean
174
 gst_srt_object_wait_caller (GstSRTObject * srtobject,
175
-    GCancellable * cancellable, GError ** error)
176
+    GCancellable * cancellable)
177
 {
178
   gboolean ret;
179
 
180
   g_mutex_lock (&srtobject->sock_lock);
181
 
182
-  if (srtobject->callers == NULL) {
183
+  ret = (srtobject->callers != NULL);
184
+  if (!ret) {
185
     GST_INFO_OBJECT (srtobject->element, "Waiting for connection");
186
-
187
-    while (!g_cancellable_is_cancelled (cancellable)) {
188
-      ret = (srtobject->callers != NULL);
189
-      if (ret) {
190
-        GST_DEBUG_OBJECT (srtobject->element, "Got a connection");
191
-        break;
192
-      }
193
-
194
+    while (!ret && !g_cancellable_is_cancelled (cancellable)) {
195
       g_cond_wait (&srtobject->sock_cond, &srtobject->sock_lock);
196
+      ret = (srtobject->callers != NULL);
197
     }
198
-  } else {
199
-    ret = TRUE;
200
   }
201
gst-plugins-bad-1.20.4.tar.xz/ext/srt/gstsrtobject.h -> gst-plugins-bad-1.20.5.tar.xz/ext/srt/gstsrtobject.h Changed
10
 
1
@@ -72,7 +72,7 @@
2
 
3
   gboolean                     authentication;
4
 
5
-  guint64                      previous_bytes;
6
+  guint64                      bytes;
7
 };
8
 
9
 GstSRTObject   *gst_srt_object_new              (GstElement *element);
10
gst-plugins-bad-1.20.4.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.20.5.tar.xz/ext/webrtc/gstwebrtcbin.c Changed
17
 
1
@@ -1915,9 +1915,12 @@
2
       if (!gst_structure_has_field (s, "rtcp-fb-nack"))
3
         gst_structure_set (s, "rtcp-fb-nack", G_TYPE_BOOLEAN, TRUE, NULL);
4
 
5
-    if (kind == GST_WEBRTC_KIND_VIDEO
6
-        && !gst_structure_has_field (s, "rtcp-fb-nack-pli"))
7
-      gst_structure_set (s, "rtcp-fb-nack-pli", G_TYPE_BOOLEAN, TRUE, NULL);
8
+    if (kind == GST_WEBRTC_KIND_VIDEO) {
9
+      if (!gst_structure_has_field (s, "rtcp-fb-nack-pli"))
10
+        gst_structure_set (s, "rtcp-fb-nack-pli", G_TYPE_BOOLEAN, TRUE, NULL);
11
+      if (!gst_structure_has_field (s, "rtcp-fb-ccm-fir"))
12
+        gst_structure_set (s, "rtcp-fb-ccm-fir", G_TYPE_BOOLEAN, TRUE, NULL);
13
+    }
14
     if (!gst_structure_has_field (s, "rtcp-fb-transport-cc"))
15
       gst_structure_set (s, "rtcp-fb-transport-cc", G_TYPE_BOOLEAN, TRUE, NULL);
16
 
17
gst-plugins-bad-1.20.4.tar.xz/ext/webrtc/gstwebrtcice.c -> gst-plugins-bad-1.20.5.tar.xz/ext/webrtc/gstwebrtcice.c Changed
29
 
1
@@ -580,6 +580,7 @@
2
     gchar ** address, gchar ** postfix)
3
 {
4
   char **tokens = NULL;
5
+  char *tmp_address = NULL;
6
 
7
   if (!g_str_has_prefix (candidate, "a=candidate:")) {
8
     GST_ERROR ("candidate \"%s\" does not start with \"a=candidate:\"",
9
@@ -598,14 +599,18 @@
10
     goto failure;
11
   }
12
 
13
+  tmp_address = tokens4;
14
   if (address)
15
-    *address = g_strdup (tokens4);
16
+    *address = g_strdup (tmp_address);
17
   tokens4 = NULL;
18
+
19
   if (prefix)
20
     *prefix = g_strjoinv (" ", tokens);
21
   if (postfix)
22
     *postfix = g_strdup (tokens5);
23
 
24
+  tokens4 = tmp_address;
25
+
26
   g_strfreev (tokens);
27
   return TRUE;
28
 
29
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/codecparsers/gsth264parser.c -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/codecparsers/gsth264parser.c Changed
10
 
1
@@ -795,7 +795,7 @@
2
       p->chroma_weight_l0i1 = default_chroma_weight;
3
     }
4
     if (GST_H264_IS_B_SLICE (slice)) {
5
-      for (i = 0; i <= slice->num_ref_idx_l0_active_minus1; i++) {
6
+      for (i = 0; i <= slice->num_ref_idx_l1_active_minus1; i++) {
7
         p->chroma_weight_l1i0 = default_chroma_weight;
8
         p->chroma_weight_l1i1 = default_chroma_weight;
9
       }
10
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/codecs/gsth265decoder.c -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/codecs/gsth265decoder.c Changed
26
 
1
@@ -1382,7 +1382,8 @@
2
       stRefPic =
3
           &sps->short_term_ref_pic_setslice_hdr->short_term_ref_pic_set_idx;
4
 
5
-    g_assert (stRefPic != NULL);
6
+    if (stRefPic == NULL)
7
+      return FALSE;
8
 
9
     GST_LOG_OBJECT (self,
10
         "NumDeltaPocs: %d, NumNegativePics: %d, NumPositivePics %d",
11
@@ -1634,8 +1635,12 @@
12
     return GST_FLOW_OK;
13
   }
14
 
15
-  gst_h265_decoder_prepare_rps (self, &priv->current_slice,
16
-      priv->current_picture);
17
+  if (!gst_h265_decoder_prepare_rps (self, &priv->current_slice,
18
+          priv->current_picture)) {
19
+    GST_WARNING_OBJECT (self, "Failed to prepare ref pic set");
20
+    gst_h265_picture_clear (&priv->current_picture);
21
+    return GST_FLOW_ERROR;
22
+  }
23
 
24
   ret = gst_h265_decoder_dpb_init (self,
25
       &priv->current_slice, priv->current_picture);
26
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/mpegts/gstmpegtsdescriptor.c -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/mpegts/gstmpegtsdescriptor.c Changed
20
 
1
@@ -296,7 +296,7 @@
2
 dvb_text_from_utf8 (const gchar * text, gsize * out_size)
3
 {
4
   GError *error = NULL;
5
-  gchar *out_text;
6
+  gchar *out_text = NULL;
7
   guint8 *out_buffer;
8
   guint encoding;
9
   GIConv giconv = (GIConv) - 1;
10
@@ -304,7 +304,8 @@
11
   /* We test character maps one-by-one. Start with the default */
12
   encoding = _ICONV_ISO6937;
13
   giconv = _get_iconv (_ICONV_UTF8, encoding);
14
-  out_text = g_convert_with_iconv (text, -1, giconv, NULL, out_size, &error);
15
+  if (giconv != (GIConv) - 1)
16
+    out_text = g_convert_with_iconv (text, -1, giconv, NULL, out_size, &error);
17
 
18
   if (out_text) {
19
     GST_DEBUG ("Using default ISO6937 encoding");
20
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/vulkan/cocoa/gstvkcocoa_utils.h -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/vulkan/cocoa/gstvkcocoa_utils.h Changed
10
 
1
@@ -49,7 +49,7 @@
2
 typedef void (*GstVulkanWindowFunc) (gpointer data);
3
 
4
 G_GNUC_INTERNAL
5
-void _invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify);
6
+void _gst_vk_invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify);
7
 
8
 G_END_DECLS
9
 
10
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m Changed
41
 
1
@@ -155,8 +155,8 @@
2
   GstVulkanWindowCocoaPrivate *priv = GET_PRIV (window_cocoa);
3
 
4
   if (!priv->visible)
5
-    _invoke_on_main ((GstVulkanWindowFunc) _show_window, gst_object_ref (window),
6
-        (GDestroyNotify) gst_object_unref);
7
+    _gst_vk_invoke_on_main ((GstVulkanWindowFunc) _show_window,
8
+        gst_object_ref (window), (GDestroyNotify) gst_object_unref);
9
 }
10
 
11
 static void
12
@@ -197,7 +197,7 @@
13
 gboolean
14
 gst_vulkan_window_cocoa_create_window (GstVulkanWindowCocoa * window_cocoa)
15
 {
16
-  _invoke_on_main ((GstVulkanWindowFunc) _create_window,
17
+  _gst_vk_invoke_on_main ((GstVulkanWindowFunc) _create_window,
18
       gst_object_ref (window_cocoa), gst_object_unref);
19
 
20
   g_usleep(1000000);
21
@@ -277,8 +277,8 @@
22
 static void
23
 gst_vulkan_window_cocoa_close (GstVulkanWindow * window)
24
 {
25
-  _invoke_on_main ((GstVulkanWindowFunc) _close_window, gst_object_ref (window),
26
-      (GDestroyNotify) gst_object_unref);
27
+  _gst_vk_invoke_on_main ((GstVulkanWindowFunc) _close_window,
28
+      gst_object_ref (window), (GDestroyNotify) gst_object_unref);
29
 
30
   GST_VULKAN_WINDOW_CLASS (parent_class)->close (window);
31
 }
32
@@ -359,7 +359,7 @@
33
 @end
34
 
35
 void
36
-_invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify)
37
+_gst_vk_invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify)
38
 {
39
   if (NSThread isMainThread) {
40
     func (data);
41
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/vulkan/ios/gstvkios_utils.h -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/vulkan/ios/gstvkios_utils.h Changed
10
 
1
@@ -35,7 +35,7 @@
2
 typedef void (*GstVulkanWindowFunc) (gpointer data);
3
 
4
 G_GNUC_INTERNAL
5
-void _invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify);
6
+void _gst_vk_invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify);
7
 
8
 G_END_DECLS
9
 
10
gst-plugins-bad-1.20.4.tar.xz/gst-libs/gst/vulkan/ios/gstvkwindow_ios.m -> gst-plugins-bad-1.20.5.tar.xz/gst-libs/gst/vulkan/ios/gstvkwindow_ios.m Changed
19
 
1
@@ -178,7 +178,7 @@
2
     return FALSE;
3
   }
4
 
5
-  _invoke_on_main ((GstVulkanWindowFunc) _create_window,
6
+  _gst_vk_invoke_on_main ((GstVulkanWindowFunc) _create_window,
7
       gst_object_ref (window_ios), gst_object_unref);
8
 
9
   /* XXX: Maybe we need an async create_window/get_surface()? */
10
@@ -315,7 +315,7 @@
11
 @end
12
 
13
 void
14
-_invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify)
15
+_gst_vk_invoke_on_main (GstVulkanWindowFunc func, gpointer data, GDestroyNotify notify)
16
 {
17
   if (NSThread isMainThread) {
18
     func (data);
19
gst-plugins-bad-1.20.4.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.20.5.tar.xz/gst-plugins-bad.doap Changed
18
 
1
@@ -35,6 +35,16 @@
2
 
3
  <release>
4
   <Version>
5
+   <revision>1.20.5</revision>
6
+   <branch>1.20</branch>
7
+   <name></name>
8
+   <created>2022-12-19</created>
9
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.20.5.tar.xz" />
10
+  </Version>
11
+ </release>
12
+
13
+ <release>
14
+  <Version>
15
    <revision>1.20.4</revision>
16
    <branch>1.20</branch>
17
    <name></name>
18
gst-plugins-bad-1.20.4.tar.xz/gst/codecalpha/gstalphacombine.c -> gst-plugins-bad-1.20.5.tar.xz/gst/codecalpha/gstalphacombine.c Changed
29
 
1
@@ -469,6 +469,14 @@
2
   return TRUE;
3
 }
4
 
5
+static void
6
+gst_alpha_combine_handle_gap (GstAlphaCombine * self)
7
+{
8
+  GstBuffer *gap_buffer = gst_buffer_new ();
9
+  GST_BUFFER_FLAG_SET (gap_buffer, GST_BUFFER_FLAG_GAP);
10
+  gst_alpha_combine_push_alpha_buffer (self, gap_buffer);
11
+}
12
+
13
 static gboolean
14
 gst_alpha_combine_sink_event (GstPad * pad, GstObject * object,
15
     GstEvent * event)
16
@@ -519,6 +527,12 @@
17
       GstCaps *caps;
18
       gst_event_parse_caps (event, &caps);
19
       gst_alpha_combine_set_alpha_format (self, caps);
20
+      break;
21
+    }
22
+    case GST_EVENT_GAP:
23
+    {
24
+      gst_alpha_combine_handle_gap (self);
25
+      break;
26
     }
27
     default:
28
       break;
29
gst-plugins-bad-1.20.4.tar.xz/gst/dvbsubenc/gstdvbsubenc-util.c -> gst-plugins-bad-1.20.5.tar.xz/gst/dvbsubenc/gstdvbsubenc-util.c Changed
51
 
1
@@ -721,9 +721,35 @@
2
   gst_byte_writer_set_pos (b, pos);
3
 }
4
 
5
+static void
6
+dvbenc_write_display_definition_segment (GstByteWriter * b, int object_version,
7
+    int page_id, guint16 width, guint16 height)
8
+{
9
+  guint seg_size_pos, pos;
10
+
11
+  gst_byte_writer_put_uint8 (b, DVB_SEGMENT_SYNC_BYTE);
12
+  gst_byte_writer_put_uint8 (b, DVB_SEGMENT_TYPE_DISPLAY_DEFINITION);
13
+  gst_byte_writer_put_uint16_be (b, page_id);
14
+
15
+  /* Size placeholder */
16
+  seg_size_pos = gst_byte_writer_get_pos (b);
17
+  gst_byte_writer_put_uint16_be (b, 0);
18
+
19
+  /* version number, display window flag, reserved bits */
20
+  gst_byte_writer_put_uint8 (b, (object_version << 4) | (0 << 3) | 0x07);
21
+  gst_byte_writer_put_uint16_be (b, width);
22
+  gst_byte_writer_put_uint16_be (b, height);
23
+
24
+  /* Re-write the size field */
25
+  pos = gst_byte_writer_get_pos (b);
26
+  gst_byte_writer_set_pos (b, seg_size_pos);
27
+  gst_byte_writer_put_uint16_be (b, pos - (seg_size_pos + 2));
28
+  gst_byte_writer_set_pos (b, pos);
29
+}
30
+
31
 GstBuffer *
32
-gst_dvbenc_encode (int object_version, int page_id, SubpictureRect * s,
33
-    guint num_subpictures)
34
+gst_dvbenc_encode (int object_version, int page_id, int display_version,
35
+    guint16 width, guint16 height, SubpictureRect * s, guint num_subpictures)
36
 {
37
   GstByteWriter b;
38
   guint seg_size_pos, pos;
39
@@ -744,6 +770,11 @@
40
    * 0x20 0x00 prefixed */
41
   gst_byte_writer_put_uint16_be (&b, 0x2000);
42
 
43
+  /* If non-default width/height are used, write a display definiton segment */
44
+  if (width != 720 || height != 576)
45
+    dvbenc_write_display_definition_segment (&b, display_version, page_id,
46
+        width, height);
47
+
48
   /* Page Composition Segment */
49
   gst_byte_writer_put_uint8 (&b, DVB_SEGMENT_SYNC_BYTE);
50
   gst_byte_writer_put_uint8 (&b, DVB_SEGMENT_TYPE_PAGE_COMPOSITION);
51
gst-plugins-bad-1.20.4.tar.xz/gst/dvbsubenc/gstdvbsubenc.c -> gst-plugins-bad-1.20.5.tar.xz/gst/dvbsubenc/gstdvbsubenc.c Changed
114
 
1
@@ -393,7 +393,9 @@
2
     s.x = left;
3
     s.y = top;
4
 
5
-    packet = gst_dvbenc_encode (enc->object_version & 0xF, 1, &s, 1);
6
+    packet =
7
+        gst_dvbenc_encode (enc->object_version & 0xF, 1, enc->display_version,
8
+        enc->in_info.width, enc->in_info.height, &s, 1);
9
     if (packet == NULL) {
10
       gst_video_frame_unmap (&ayuv8p_frame);
11
       goto fail;
12
@@ -440,7 +442,9 @@
13
   GST_DEBUG_OBJECT (enc, "Outputting end of page at TS %" GST_TIME_FORMAT,
14
       GST_TIME_ARGS (enc->current_end_time));
15
 
16
-  packet = gst_dvbenc_encode (enc->object_version & 0xF, 1, NULL, 0);
17
+  packet =
18
+      gst_dvbenc_encode (enc->object_version & 0xF, 1, enc->display_version,
19
+      enc->in_info.width, enc->in_info.height, NULL, 0);
20
   if (packet == NULL) {
21
     GST_ELEMENT_ERROR (enc, STREAM, FAILED,
22
         ("Internal data stream error."),
23
@@ -501,27 +505,34 @@
24
 {
25
   GstDvbSubEnc *enc = GST_DVB_SUB_ENC (gst_pad_get_parent (pad));
26
   gboolean ret = FALSE;
27
+  GstVideoInfo in_info;
28
   GstCaps *out_caps = NULL;
29
 
30
   GST_DEBUG_OBJECT (enc, "setcaps called with %" GST_PTR_FORMAT, caps);
31
-  if (!gst_video_info_from_caps (&enc->in_info, caps)) {
32
+  if (!gst_video_info_from_caps (&in_info, caps)) {
33
     GST_ERROR_OBJECT (enc, "Failed to parse input caps");
34
     return FALSE;
35
   }
36
 
37
-  out_caps = gst_caps_new_simple ("subpicture/x-dvb",
38
-      "width", G_TYPE_INT, enc->in_info.width,
39
-      "height", G_TYPE_INT, enc->in_info.height,
40
-      "framerate", GST_TYPE_FRACTION, enc->in_info.fps_n, enc->in_info.fps_d,
41
-      NULL);
42
+  if (!enc->in_info.finfo || !gst_video_info_is_equal (&in_info, &enc->in_info)) {
43
+    enc->in_info = in_info;
44
+    enc->display_version++;
45
+
46
+    out_caps = gst_caps_new_simple ("subpicture/x-dvb",
47
+        "width", G_TYPE_INT, enc->in_info.width,
48
+        "height", G_TYPE_INT, enc->in_info.height,
49
+        "framerate", GST_TYPE_FRACTION, enc->in_info.fps_n, enc->in_info.fps_d,
50
+        NULL);
51
+
52
+    if (!gst_pad_set_caps (enc->srcpad, out_caps)) {
53
+      GST_WARNING_OBJECT (enc, "failed setting downstream caps");
54
+      gst_caps_unref (out_caps);
55
+      goto beach;
56
+    }
57
 
58
-  if (!gst_pad_set_caps (enc->srcpad, out_caps)) {
59
-    GST_WARNING_OBJECT (enc, "failed setting downstream caps");
60
     gst_caps_unref (out_caps);
61
-    goto beach;
62
   }
63
 
64
-  gst_caps_unref (out_caps);
65
   ret = TRUE;
66
 
67
 beach:
68
@@ -549,24 +560,29 @@
69
     }
70
     case GST_EVENT_GAP:
71
     {
72
-      GstClockTime start, duration;
73
-
74
-      gst_event_parse_gap (event, &start, &duration);
75
-      if (GST_CLOCK_TIME_IS_VALID (start)) {
76
-        if (GST_CLOCK_TIME_IS_VALID (duration))
77
-          start += duration;
78
-        /* we do not expect another buffer until after gap,
79
-         * so that is our position now */
80
-        GST_DEBUG_OBJECT (enc,
81
-            "Got GAP event, advancing time to %" GST_TIME_FORMAT,
82
-            GST_TIME_ARGS (start));
83
-        gst_dvb_sub_enc_generate_end_packet (enc, start);
84
+      if (!GST_CLOCK_TIME_IS_VALID (enc->current_end_time)) {
85
+        ret = gst_pad_event_default (pad, parent, event);
86
       } else {
87
-        GST_WARNING_OBJECT (enc, "Got GAP event with invalid position");
88
+        GstClockTime start, duration;
89
+
90
+        gst_event_parse_gap (event, &start, &duration);
91
+
92
+        if (GST_CLOCK_TIME_IS_VALID (start)) {
93
+          if (GST_CLOCK_TIME_IS_VALID (duration))
94
+            start += duration;
95
+          /* we do not expect another buffer until after gap,
96
+           * so that is our position now */
97
+          GST_DEBUG_OBJECT (enc,
98
+              "Got GAP event, advancing time to %" GST_TIME_FORMAT,
99
+              GST_TIME_ARGS (start));
100
+          gst_dvb_sub_enc_generate_end_packet (enc, start);
101
+        } else {
102
+          GST_WARNING_OBJECT (enc, "Got GAP event with invalid position");
103
+        }
104
+
105
+        gst_event_unref (event);
106
+        ret = TRUE;
107
       }
108
-
109
-      gst_event_unref (event);
110
-      ret = TRUE;
111
       break;
112
     }
113
     case GST_EVENT_SEGMENT:
114
gst-plugins-bad-1.20.4.tar.xz/gst/dvbsubenc/gstdvbsubenc.h -> gst-plugins-bad-1.20.5.tar.xz/gst/dvbsubenc/gstdvbsubenc.h Changed
15
 
1
@@ -47,6 +47,7 @@
2
   GstElement element;
3
 
4
   GstVideoInfo in_info;
5
+  int display_version;
6
   GstPad *sinkpad;
7
   GstPad *srcpad;
8
 
9
@@ -68,4 +69,4 @@
10
 
11
 gboolean gst_dvbsubenc_ayuv_to_ayuv8p (GstVideoFrame * src, GstVideoFrame * dest, int max_colours, guint32 *out_num_colours);
12
 
13
-GstBuffer *gst_dvbenc_encode (int object_version, int page_id, SubpictureRect *s, guint num_subpictures);
14
+GstBuffer *gst_dvbenc_encode (int object_version, int page_id, int display_version, guint16 width, guint16 height, SubpictureRect *s, guint num_subpictures);
15
gst-plugins-bad-1.20.4.tar.xz/gst/mpegtsdemux/mpegtsbase.c -> gst-plugins-bad-1.20.5.tar.xz/gst/mpegtsdemux/mpegtsbase.c Changed
50
 
1
@@ -1209,6 +1209,10 @@
2
   if (G_UNLIKELY (old_program == NULL))
3
     goto no_program;
4
 
5
+  if (G_UNLIKELY (mpegts_base_is_same_program (base, old_program, section->pid,
6
+              pmt)))
7
+    goto same_program;
8
+
9
   if (base->streams_aware
10
       && mpegts_base_is_program_update (base, old_program, section->pid, pmt)) {
11
     GST_FIXME ("We are streams_aware and new program is an update");
12
@@ -1217,10 +1221,6 @@
13
     goto beach;
14
   }
15
 
16
-  if (G_UNLIKELY (mpegts_base_is_same_program (base, old_program, section->pid,
17
-              pmt)))
18
-    goto same_program;
19
-
20
   /* If the current program is active, this means we have a new program */
21
   if (old_program->active) {
22
     MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
23
@@ -1523,15 +1523,19 @@
24
       return res;
25
 
26
     mpegts_base_flush (base, FALSE);
27
-    /* In the case of discontinuities in push-mode with TIME segment
28
-     * we want to drop all previous observations (hard:TRUE) from
29
-     * the packetizer */
30
-    if (base->mode == BASE_MODE_PUSHING
31
-        && base->segment.format == GST_FORMAT_TIME) {
32
-      mpegts_packetizer_flush (base->packetizer, TRUE);
33
+    if (base->mode == BASE_MODE_PUSHING) {
34
+      if (base->segment.format == GST_FORMAT_TIME) {
35
+        /* In the case of discontinuities in push-mode with TIME segment
36
+         * we want to drop all previous observations (hard:TRUE) from
37
+         * the packetizer */
38
+        mpegts_packetizer_flush (base->packetizer, TRUE);
39
+      }
40
+      /* In all cases, we clear observations when we get a discontinuity in
41
+       * push-mode to re-check if the sections (PAT/PMT) changed or not */
42
       mpegts_packetizer_clear (base->packetizer);
43
-    } else
44
+    } else {
45
       mpegts_packetizer_flush (base->packetizer, FALSE);
46
+    }
47
   }
48
 
49
   mpegts_packetizer_push (base->packetizer, buf);
50
gst-plugins-bad-1.20.4.tar.xz/gst/mpegtsdemux/mpegtspacketizer.c -> gst-plugins-bad-1.20.5.tar.xz/gst/mpegtsdemux/mpegtspacketizer.c Changed
99
 
1
@@ -157,7 +157,7 @@
2
 static gboolean
3
 seen_section_before (MpegTSPacketizerStream * stream, guint8 table_id,
4
     guint16 subtable_extension, guint8 version_number, guint8 section_number,
5
-    guint8 last_section_number, guint8 * data_start, gsize to_read)
6
+    guint8 last_section_number)
7
 {
8
   MpegTSPacketizerStreamSubtable *subtable;
9
 
10
@@ -178,17 +178,7 @@
11
     return FALSE;
12
   }
13
   /* Finally return whether we saw that section or not */
14
-  if (!MPEGTS_BIT_IS_SET (subtable->seen_section, section_number)) {
15
-    GST_DEBUG ("Different section_number");
16
-    return FALSE;
17
-  }
18
-
19
-  if (stream->section_data) {
20
-    /* Everything else is the same, fall back to memcmp */
21
-    return (memcmp (stream->section_data, data_start, to_read) != 0);
22
-  }
23
-
24
-  return FALSE;
25
+  return MPEGTS_BIT_IS_SET (subtable->seen_section, section_number);
26
 }
27
 
28
 static MpegTSPacketizerStreamSubtable *
29
@@ -973,6 +963,7 @@
30
   guint8 packet_cc;
31
   GList *others = NULL;
32
   guint8 version_number, section_number, last_section_number;
33
+  gboolean cc_discont = FALSE;
34
 
35
   data = packet->data;
36
   packet_cc = FLAGS_CONTINUITY_COUNTER (packet->scram_afc_cc);
37
@@ -1019,24 +1010,18 @@
38
    *
39
    **/
40
 
41
-  if (packet->payload_unit_start_indicator) {
42
+  if (packet->payload_unit_start_indicator)
43
     pointer = *data++;
44
-    /* If the pointer is zero, we're guaranteed to be able to handle it */
45
-    if (pointer == 0) {
46
-      GST_LOG
47
-          ("PID 0x%04x PUSI and pointer == 0, skipping straight to section_start parsing",
48
-          packet->pid);
49
-      mpegts_packetizer_clear_section (stream);
50
-      goto section_start;
51
-    }
52
-  }
53
 
54
   if (stream->continuity_counter == CONTINUITY_UNSET ||
55
       (stream->continuity_counter + 1) % 16 != packet_cc) {
56
-    if (stream->continuity_counter != CONTINUITY_UNSET)
57
+    if (stream->continuity_counter != CONTINUITY_UNSET) {
58
       GST_WARNING ("PID 0x%04x section discontinuity (%d vs %d)", packet->pid,
59
           stream->continuity_counter, packet_cc);
60
+      cc_discont = TRUE;
61
+    }
62
     mpegts_packetizer_clear_section (stream);
63
+    stream->continuity_counter = packet_cc;
64
     /* If not a PUSI, not much we can do */
65
     if (!packet->payload_unit_start_indicator) {
66
       GST_LOG ("PID 0x%04x continuity discont/unset and not PUSI, bailing out",
67
@@ -1051,6 +1036,19 @@
68
     goto section_start;
69
   }
70
 
71
+  if (packet->payload_unit_start_indicator && pointer == 0) {
72
+    /* If the pointer is zero, we're guaranteed to be able to handle it */
73
+    GST_LOG
74
+        ("PID 0x%04x PUSI and pointer == 0, skipping straight to section_start parsing",
75
+        packet->pid);
76
+    mpegts_packetizer_clear_section (stream);
77
+    stream->continuity_counter = packet_cc;
78
+    goto section_start;
79
+  }
80
+
81
+  stream->continuity_counter = packet_cc;
82
+
83
+
84
   GST_LOG ("Accumulating data from beginning of packet");
85
 
86
   data_start = data;
87
@@ -1202,9 +1200,8 @@
88
    * * same last_section_number
89
    * * same section_number was seen
90
    */
91
-  if (seen_section_before (stream, table_id, subtable_extension,
92
-          version_number, section_number, last_section_number, data_start,
93
-          to_read)) {
94
+  if (!cc_discont && seen_section_before (stream, table_id, subtable_extension,
95
+          version_number, section_number, last_section_number)) {
96
     GST_DEBUG
97
         ("PID 0x%04x Already processed table_id:0x%02x subtable_extension:0x%04x, version_number:%d, section_number:%d",
98
         packet->pid, table_id, subtable_extension, version_number,
99
gst-plugins-bad-1.20.4.tar.xz/gst/rtmp2/gstrtmp2sink.c -> gst-plugins-bad-1.20.5.tar.xz/gst/rtmp2/gstrtmp2sink.c Changed
72
 
1
@@ -861,13 +861,13 @@
2
     g_cond_wait (&self->cond, &self->lock);
3
   }
4
 
5
-  if (G_UNLIKELY (!is_running (self))) {
6
-    gst_buffer_unref (message);
7
-    ret = GST_FLOW_FLUSHING;
8
-  } else if (G_UNLIKELY (!self->connection)) {
9
+  if (G_UNLIKELY (!self->connection)) {
10
     gst_buffer_unref (message);
11
     /* send_connect_error has sent an ERROR message */
12
     ret = GST_FLOW_ERROR;
13
+  } else if (G_UNLIKELY (!is_running (self))) {
14
+    gst_buffer_unref (message);
15
+    ret = GST_FLOW_FLUSHING;
16
   } else {
17
     send_streamheader (self);
18
     send_message (self, message);
19
@@ -1075,13 +1075,16 @@
20
 }
21
 
22
 static void
23
-error_callback (GstRtmpConnection * connection, GstRtmp2Sink * self)
24
+error_callback (GstRtmpConnection * connection, const GError * error,
25
+    GstRtmp2Sink * self)
26
 {
27
   g_mutex_lock (&self->lock);
28
   if (self->cancellable) {
29
     g_cancellable_cancel (self->cancellable);
30
   } else if (self->loop) {
31
-    GST_ELEMENT_ERROR (self, RESOURCE, WRITE, ("Connection error"), (NULL));
32
+    GST_ELEMENT_ERROR (self, RESOURCE, WRITE,
33
+        ("Connection error: %s", error->message),
34
+        ("domain %s, code %d", g_quark_to_string (error->domain), error->code));
35
     stop_task (self);
36
   }
37
   g_mutex_unlock (&self->lock);
38
@@ -1097,26 +1100,23 @@
39
   }
40
 
41
   if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
42
-    GST_DEBUG_OBJECT (self, "Connection was cancelled (%s)",
43
-        GST_STR_NULL (error->message));
44
+    GST_DEBUG_OBJECT (self, "Connection was cancelled: %s", error->message);
45
     return;
46
   }
47
 
48
-  GST_ERROR_OBJECT (self, "Failed to connect (%s:%d): %s",
49
-      g_quark_to_string (error->domain), error->code,
50
-      GST_STR_NULL (error->message));
51
+  GST_ERROR_OBJECT (self, "Failed to connect: %s %d %s",
52
+      g_quark_to_string (error->domain), error->code, error->message);
53
 
54
   if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED)) {
55
     GST_ELEMENT_ERROR (self, RESOURCE, NOT_AUTHORIZED,
56
-        ("Not authorized to connect"), ("%s", GST_STR_NULL (error->message)));
57
+        ("Not authorized to connect: %s", error->message), (NULL));
58
   } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CONNECTION_REFUSED)) {
59
     GST_ELEMENT_ERROR (self, RESOURCE, OPEN_READ,
60
-        ("Could not connect"), ("%s", GST_STR_NULL (error->message)));
61
+        ("Connection refused: %s", error->message), (NULL));
62
   } else {
63
     GST_ELEMENT_ERROR (self, RESOURCE, FAILED,
64
-        ("Failed to connect"),
65
-        ("error %s:%d: %s", g_quark_to_string (error->domain), error->code,
66
-            GST_STR_NULL (error->message)));
67
+        ("Failed to connect: %s", error->message),
68
+        ("domain %s, code %d", g_quark_to_string (error->domain), error->code));
69
   }
70
 }
71
 
72
gst-plugins-bad-1.20.4.tar.xz/gst/rtmp2/gstrtmp2src.c -> gst-plugins-bad-1.20.5.tar.xz/gst/rtmp2/gstrtmp2src.c Changed
53
 
1
@@ -917,13 +917,15 @@
2
 }
3
 
4
 static void
5
-error_callback (GstRtmpConnection * connection, GstRtmp2Src * self)
6
+error_callback (GstRtmpConnection * connection, const GError * error,
7
+    GstRtmp2Src * self)
8
 {
9
   g_mutex_lock (&self->lock);
10
   if (self->cancellable) {
11
     g_cancellable_cancel (self->cancellable);
12
   } else if (self->loop) {
13
-    GST_INFO_OBJECT (self, "Connection error");
14
+    GST_INFO_OBJECT (self, "Connection error: %s %d %s",
15
+        g_quark_to_string (error->domain), error->code, error->message);
16
     stop_task (self);
17
   }
18
   g_mutex_unlock (&self->lock);
19
@@ -952,26 +954,23 @@
20
   }
21
 
22
   if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
23
-    GST_DEBUG_OBJECT (self, "Connection was cancelled (%s)",
24
-        GST_STR_NULL (error->message));
25
+    GST_DEBUG_OBJECT (self, "Connection was cancelled: %s", error->message);
26
     return;
27
   }
28
 
29
-  GST_ERROR_OBJECT (self, "Failed to connect (%s:%d): %s",
30
-      g_quark_to_string (error->domain), error->code,
31
-      GST_STR_NULL (error->message));
32
+  GST_ERROR_OBJECT (self, "Failed to connect: %s %d %s",
33
+      g_quark_to_string (error->domain), error->code, error->message);
34
 
35
   if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED)) {
36
     GST_ELEMENT_ERROR (self, RESOURCE, NOT_AUTHORIZED,
37
-        ("Not authorized to connect"), ("%s", GST_STR_NULL (error->message)));
38
+        ("Not authorized to connect: %s", error->message), (NULL));
39
   } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CONNECTION_REFUSED)) {
40
     GST_ELEMENT_ERROR (self, RESOURCE, OPEN_READ,
41
-        ("Could not connect"), ("%s", GST_STR_NULL (error->message)));
42
+        ("Connection refused: %s", error->message), (NULL));
43
   } else {
44
     GST_ELEMENT_ERROR (self, RESOURCE, FAILED,
45
-        ("Failed to connect"),
46
-        ("error %s:%d: %s", g_quark_to_string (error->domain), error->code,
47
-            GST_STR_NULL (error->message)));
48
+        ("Failed to connect: %s", error->message),
49
+        ("domain %s, code %d", g_quark_to_string (error->domain), error->code));
50
   }
51
 }
52
 
53
gst-plugins-bad-1.20.4.tar.xz/gst/rtmp2/rtmp/rtmpclient.c -> gst-plugins-bad-1.20.5.tar.xz/gst/rtmp2/rtmp/rtmpclient.c Changed
201
 
1
@@ -321,7 +321,7 @@
2
 static void send_secure_token_response (GTask * task,
3
     GstRtmpConnection * connection, const gchar * challenge);
4
 static void connection_error (GstRtmpConnection * connection,
5
-    gpointer user_data);
6
+    const GError * error, gpointer user_data);
7
 
8
 #define DEFAULT_TIMEOUT 5
9
 
10
@@ -510,12 +510,13 @@
11
 }
12
 
13
 static void
14
-connection_error (GstRtmpConnection * connection, gpointer user_data)
15
+connection_error (GstRtmpConnection * connection, const GError * error,
16
+    gpointer user_data)
17
 {
18
   GTask *task = user_data;
19
+
20
   if (!g_task_had_error (task))
21
-    g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
22
-        "error during connection attempt");
23
+    g_task_return_error (task, g_error_copy (error));
24
 }
25
 
26
 static gchar *
27
@@ -707,14 +708,14 @@
28
 
29
   if (!args) {
30
     g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
31
-        "connect failed: %s", command_name);
32
+        "'connect' cmd failed: %s", command_name);
33
     g_object_unref (task);
34
     return;
35
   }
36
 
37
   if (args->len < 2) {
38
     g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
39
-        "connect failed; not enough return arguments");
40
+        "'connect' cmd failed; not enough return arguments");
41
     g_object_unref (task);
42
     return;
43
   }
44
@@ -722,15 +723,15 @@
45
   optional_args = g_ptr_array_index (args, 1);
46
 
47
   node = gst_amf_node_get_field (optional_args, "code");
48
-  if (!node) {
49
+  code = node ? gst_amf_node_peek_string (node, NULL) : NULL;
50
+  if (!code) {
51
     g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
52
-        "result code missing from connect cmd result");
53
+        "'connect' cmd failed; no status code");
54
     g_object_unref (task);
55
     return;
56
   }
57
 
58
-  code = gst_amf_node_peek_string (node, NULL);
59
-  GST_INFO ("connect result: %s", GST_STR_NULL (code));
60
+  GST_INFO ("connect result: %s", code);
61
 
62
   if (g_str_equal (code, "NetConnection.Connect.Success")) {
63
     node = gst_amf_node_get_field (optional_args, "secureToken");
64
@@ -746,15 +747,15 @@
65
     GstUri *query;
66
 
67
     node = gst_amf_node_get_field (optional_args, "description");
68
-    if (!node) {
69
+    desc = node ? gst_amf_node_peek_string (node, NULL) : NULL;
70
+    if (!desc) {
71
       g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
72
-          "Connect rejected; no description");
73
+          "'connect' cmd returned '%s'; no description", code);
74
       g_object_unref (task);
75
       return;
76
     }
77
 
78
-    desc = gst_amf_node_peek_string (node, NULL);
79
-    GST_DEBUG ("connect result desc: %s", GST_STR_NULL (desc));
80
+    GST_DEBUG ("connect result desc: %s", desc);
81
 
82
     if (authmod == GST_RTMP_AUTHMOD_AUTO && strstr (desc, "code=403 need auth")) {
83
       if (strstr (desc, "authmod=adobe")) {
84
@@ -765,14 +766,14 @@
85
       }
86
 
87
       g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
88
-          "unhandled authentication mode: %s", desc);
89
+          "'connect' cmd returned unhandled authmod: %s", desc);
90
       g_object_unref (task);
91
       return;
92
     }
93
 
94
     if (!g_regex_match (auth_regex, desc, 0, &match_info)) {
95
       g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
96
-          "failed to parse auth rejection: %s", desc);
97
+          "'connect' cmd returned '%s': %s", code, desc);
98
       g_object_unref (task);
99
       return;
100
     }
101
@@ -822,9 +823,17 @@
102
     {
103
       const gchar *reason = gst_uri_get_query_value (query, "reason");
104
 
105
+      if (!reason) {
106
+        g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
107
+            "authentication failed; no reason: %s", desc);
108
+        g_object_unref (task);
109
+        gst_uri_unref (query);
110
+        return;
111
+      }
112
+
113
       if (g_str_equal (reason, "authfailed")) {
114
         g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
115
-            "authentication failed! wrong credentials?");
116
+            "authentication failed; wrong credentials?: %s", desc);
117
         g_object_unref (task);
118
         gst_uri_unref (query);
119
         return;
120
@@ -832,24 +841,41 @@
121
 
122
       if (!g_str_equal (reason, "needauth")) {
123
         g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
124
-            "unhandled rejection reason '%s'", reason ? reason : "");
125
+            "authentication failed; reason '%s': %s", reason, desc);
126
         g_object_unref (task);
127
         gst_uri_unref (query);
128
         return;
129
       }
130
     }
131
 
132
-    g_warn_if_fail (!data->auth_query);
133
-    data->auth_query = do_adobe_auth (data->location.username,
134
-        data->location.password, gst_uri_get_query_value (query, "salt"),
135
-        gst_uri_get_query_value (query, "opaque"),
136
-        gst_uri_get_query_value (query, "challenge"));
137
+    {
138
+      const gchar *salt, *opaque, *challenge;
139
+
140
+      salt = gst_uri_get_query_value (query, "salt");
141
+      if (!salt) {
142
+        g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
143
+            "salt missing from auth request: %s", desc);
144
+        g_object_unref (task);
145
+        gst_uri_unref (query);
146
+        return;
147
+      }
148
+
149
+      opaque = gst_uri_get_query_value (query, "opaque");
150
+      challenge = gst_uri_get_query_value (query, "challenge");
151
+
152
+      g_warn_if_fail (!data->auth_query);
153
+      data->auth_query = do_adobe_auth (data->location.username,
154
+          data->location.password, salt, opaque, challenge);
155
+    }
156
 
157
     gst_uri_unref (query);
158
 
159
     if (!data->auth_query) {
160
+      /* do_adobe_auth should not fail; send_connect tests if username
161
+       * and password are provided */
162
+      g_warn_if_reached ();
163
       g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
164
-          "couldn't generate adobe style authentication query");
165
+          "internal error: failed to generate adobe auth query");
166
       g_object_unref (task);
167
       return;
168
     }
169
@@ -859,7 +885,7 @@
170
   }
171
 
172
   g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
173
-      "unhandled connect result code: %s", GST_STR_NULL (code));
174
+      "'connect' cmd returned '%s'", code);
175
   g_object_unref (task);
176
 }
177
 
178
@@ -1000,7 +1026,7 @@
179
 
180
     if (!data->location.secure_token || !data->location.secure_token0) {
181
       g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
182
-          "server requires secure token authentication");
183
+          "server requires secureToken but no token provided");
184
       g_object_unref (task);
185
       return;
186
     }
187
@@ -1172,14 +1198,14 @@
188
 
189
   if (!args) {
190
     g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
191
-        "createStream failed: %s", command_name);
192
+        "'createStream' cmd failed: %s", command_name);
193
     g_object_unref (task);
194
     return;
195
   }
196
 
197
   if (args->len < 2) {
198
     g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
199
-        "createStream failed; not enough return arguments");
200
+        "'createStream' cmd failed; not enough return arguments");
201
gst-plugins-bad-1.20.4.tar.xz/gst/rtmp2/rtmp/rtmpconnection.c -> gst-plugins-bad-1.20.5.tar.xz/gst/rtmp2/rtmp/rtmpconnection.c Changed
119
 
1
@@ -106,7 +106,8 @@
2
 static void gst_rtmp_connection_finalize (GObject * object);
3
 static void gst_rtmp_connection_set_cancellable (GstRtmpConnection * self,
4
     GCancellable * cancellable);
5
-static void gst_rtmp_connection_emit_error (GstRtmpConnection * self);
6
+static void gst_rtmp_connection_emit_error (GstRtmpConnection * self,
7
+    GError * error);
8
 static gboolean gst_rtmp_connection_input_ready (GInputStream * is,
9
     gpointer user_data);
10
 static void gst_rtmp_connection_start_write (GstRtmpConnection * self);
11
@@ -244,7 +245,7 @@
12
   gobject_class->finalize = gst_rtmp_connection_finalize;
13
 
14
   signalsSIGNAL_ERROR = g_signal_new ("error", G_TYPE_FROM_CLASS (klass),
15
-      G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
16
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_ERROR);
17
 
18
   signalsSIGNAL_STREAM_CONTROL = g_signal_new ("stream-control",
19
       G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
20
@@ -372,7 +373,7 @@
21
 }
22
 
23
 static void
24
-cancel_all_commands (GstRtmpConnection * self)
25
+cancel_all_commands (GstRtmpConnection * self, const gchar * reason)
26
 {
27
   GList *l;
28
 
29
@@ -380,7 +381,7 @@
30
     Transaction *cc = l->data;
31
     GST_LOG_OBJECT (self, "calling transaction callback %s",
32
         GST_DEBUG_FUNCPTR_NAME (cc->func));
33
-    cc->func ("<cancelled>", NULL, cc->user_data);
34
+    cc->func (reason, NULL, cc->user_data);
35
   }
36
   g_list_free_full (self->transactions, transaction_free);
37
   self->transactions = NULL;
38
@@ -389,7 +390,7 @@
39
     ExpectedCommand *cc = l->data;
40
     GST_LOG_OBJECT (self, "calling expected command callback %s",
41
         GST_DEBUG_FUNCPTR_NAME (cc->func));
42
-    cc->func ("<cancelled>", NULL, cc->user_data);
43
+    cc->func (reason, NULL, cc->user_data);
44
   }
45
   g_list_free_full (self->expected_commands, expected_command_free);
46
   self->expected_commands = NULL;
47
@@ -403,7 +404,7 @@
48
   }
49
 
50
   g_cancellable_cancel (self->cancellable);
51
-  cancel_all_commands (self);
52
+  cancel_all_commands (self, "connection closed locally");
53
 
54
   if (self->input_source) {
55
     g_source_destroy (self->input_source);
56
@@ -474,6 +475,12 @@
57
       sc->input_bytes->data + oldsize, READ_SIZE, sc->cancellable, &error);
58
   g_byte_array_set_size (sc->input_bytes, oldsize + (ret > 0 ? ret : 0));
59
 
60
+  if (ret == 0) {
61
+    error = g_error_new (G_IO_ERROR, G_IO_ERROR_CONNECTION_CLOSED,
62
+        "connection closed remotely");
63
+    ret = -1;
64
+  }
65
+
66
   if (ret < 0) {
67
     gint code = error->code;
68
 
69
@@ -488,13 +495,8 @@
70
 
71
     GST_ERROR_OBJECT (sc, "read error: %s %d %s",
72
         g_quark_to_string (error->domain), code, error->message);
73
-    g_error_free (error);
74
-  } else if (ret == 0) {
75
-    GST_INFO_OBJECT (sc, "read EOF");
76
-  }
77
 
78
-  if (ret <= 0) {
79
-    gst_rtmp_connection_emit_error (sc);
80
+    gst_rtmp_connection_emit_error (sc, error);
81
     return G_SOURCE_REMOVE;
82
   }
83
 
84
@@ -575,18 +577,15 @@
85
 }
86
 
87
 static void
88
-gst_rtmp_connection_emit_error (GstRtmpConnection * self)
89
+gst_rtmp_connection_emit_error (GstRtmpConnection * self, GError * error)
90
 {
91
-  if (self->error) {
92
-    return;
93
+  if (!self->error) {
94
+    self->error = TRUE;
95
+    cancel_all_commands (self, error->message);
96
+    g_signal_emit (self, signalsSIGNAL_ERROR, 0, error);
97
   }
98
 
99
-  GST_INFO_OBJECT (self, "connection error");
100
-  self->error = TRUE;
101
-
102
-  cancel_all_commands (self);
103
-
104
-  g_signal_emit (self, signalsSIGNAL_ERROR, 0);
105
+  g_error_free (error);
106
 }
107
 
108
 static void
109
@@ -617,8 +616,7 @@
110
           "write error: %s (wrote %" G_GSIZE_FORMAT " bytes)",
111
           error->message, bytes_written);
112
     }
113
-    gst_rtmp_connection_emit_error (self);
114
-    g_error_free (error);
115
+    gst_rtmp_connection_emit_error (self, error);
116
     g_object_unref (self);
117
     return;
118
   }
119
gst-plugins-bad-1.20.4.tar.xz/meson.build -> gst-plugins-bad-1.20.5.tar.xz/meson.build Changed
8
 
1
@@ -1,5 +1,5 @@
2
 project('gst-plugins-bad', 'c', 'cpp',
3
-  version : '1.20.4',
4
+  version : '1.20.5',
5
   meson_version : '>= 0.59',
6
   default_options :  'warning_level=1',
7
                       'buildtype=debugoptimized' )
8
gst-plugins-bad-1.20.4.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.20.5.tar.xz/po/gst-plugins-bad-1.0.pot Changed
19
 
1
@@ -8,7 +8,7 @@
2
 msgstr ""
3
 "Project-Id-Version: gst-plugins-bad-1.0\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2022-10-12 16:40+0100\n"
6
+"POT-Creation-Date: 2022-12-19 23:38+0000\n"
7
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
 "Language-Team: LANGUAGE <LL@li.org>\n"
10
@@ -89,7 +89,7 @@
11
 msgstr ""
12
 
13
 #: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:4102
14
-#: gst/mpegtsdemux/mpegtsbase.c:1757
15
+#: gst/mpegtsdemux/mpegtsbase.c:1761
16
 msgid "Internal data stream error."
17
 msgstr ""
18
 
19
gst-plugins-bad-1.20.4.tar.xz/sys/applemedia/avfdeviceprovider.m -> gst-plugins-bad-1.20.5.tar.xz/sys/applemedia/avfdeviceprovider.m Changed
18
 
1
@@ -76,11 +76,16 @@
2
     "avf.has_torch", G_TYPE_BOOLEAN, device hasTorch,
3
   NULL);
4
 
5
+  g_free (unique_id);
6
+  g_free (model_id);
7
+
8
 #if !HAVE_IOS
9
   char *manufacturer = g_strdup (device manufacturer UTF8String);
10
   gst_structure_set (props,
11
     "avf.manufacturer", G_TYPE_STRING, manufacturer,
12
   NULL);
13
+
14
+  g_free (manufacturer);
15
 #endif
16
 
17
   return props;
18
gst-plugins-bad-1.20.4.tar.xz/sys/applemedia/avfvideosrc.m -> gst-plugins-bad-1.20.5.tar.xz/sys/applemedia/avfvideosrc.m Changed
10
 
1
@@ -933,7 +933,7 @@
2
   BOOL result = NO;
3
 
4
   if (GST_QUERY_TYPE (query) == GST_QUERY_LATENCY) {
5
-    if (device != nil && caps != NULL) {
6
+    if (input != nil && caps != NULL) {
7
       GstClockTime min_latency, max_latency;
8
 
9
       min_latency = max_latency = latency;
10
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11screencapturedevice.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11screencapturedevice.cpp Changed
12
 
1
@@ -39,8 +39,8 @@
2
 
3
 static GstStaticCaps template_caps =
4
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
5
-    (GST_CAPS_FEATURE_MEMORY_D3D11_MEMORY, "BGRA") ";"
6
-    GST_VIDEO_CAPS_MAKE ("BGRA"));
7
+    (GST_CAPS_FEATURE_MEMORY_D3D11_MEMORY, "BGRA") ", pixel-aspect-ratio = 1/1;"
8
+    GST_VIDEO_CAPS_MAKE ("BGRA") ", pixel-aspect-ratio = 1/1");
9
 
10
 enum
11
 {
12
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11screencapturesrc.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11screencapturesrc.cpp Changed
12
 
1
@@ -67,8 +67,8 @@
2
 
3
 static GstStaticCaps template_caps =
4
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
5
-    (GST_CAPS_FEATURE_MEMORY_D3D11_MEMORY, "BGRA") ";"
6
-    GST_VIDEO_CAPS_MAKE ("BGRA"));
7
+    (GST_CAPS_FEATURE_MEMORY_D3D11_MEMORY, "BGRA") ", pixel-aspect-ratio = 1/1;"
8
+    GST_VIDEO_CAPS_MAKE ("BGRA") ", pixel-aspect-ratio = 1/1");
9
 
10
 struct _GstD3D11ScreenCaptureSrc
11
 {
12
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11videosink.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11videosink.cpp Changed
201
 
1
@@ -132,11 +132,23 @@
2
   /* For drawing on user texture */
3
   gboolean drawing;
4
   GstBuffer *current_buffer;
5
-  GRecMutex draw_lock;
6
+  GRecMutex lock;
7
 
8
   gchar *title;
9
 };
10
 
11
+#define GST_D3D11_VIDEO_SINK_GET_LOCK(d) (&(GST_D3D11_VIDEO_SINK_CAST(d)->lock))
12
+#define GST_D3D11_VIDEO_SINK_LOCK(d) G_STMT_START { \
13
+    GST_TRACE_OBJECT (d, "Locking from thread %p", g_thread_self()); \
14
+    g_rec_mutex_lock (GST_D3D11_VIDEO_SINK_GET_LOCK (d)); \
15
+    GST_TRACE_OBJECT (d, "Locked from thread %p", g_thread_self()); \
16
+ } G_STMT_END
17
+
18
+#define GST_D3D11_VIDEO_SINK_UNLOCK(d) G_STMT_START { \
19
+    GST_TRACE_OBJECT (d, "Unlocking from thread %p", g_thread_self()); \
20
+    g_rec_mutex_unlock (GST_D3D11_VIDEO_SINK_GET_LOCK (d)); \
21
+ } G_STMT_END
22
+
23
 static void gst_d3d11_videosink_set_property (GObject * object, guint prop_id,
24
     const GValue * value, GParamSpec * pspec);
25
 static void gst_d3d11_videosink_get_property (GObject * object, guint prop_id,
26
@@ -346,7 +358,7 @@
27
   self->fullscreen = DEFAULT_FULLSCREEN;
28
   self->draw_on_shared_texture = DEFAULT_DRAW_ON_SHARED_TEXTURE;
29
 
30
-  g_rec_mutex_init (&self->draw_lock);
31
+  g_rec_mutex_init (&self->lock);
32
 }
33
 
34
 static void
35
@@ -355,7 +367,7 @@
36
 {
37
   GstD3D11VideoSink *self = GST_D3D11_VIDEO_SINK (object);
38
 
39
-  GST_OBJECT_LOCK (self);
40
+  GST_D3D11_VIDEO_SINK_LOCK (self);
41
   switch (prop_id) {
42
     case PROP_ADAPTER:
43
       self->adapter = g_value_get_int (value);
44
@@ -394,7 +406,7 @@
45
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
46
       break;
47
   }
48
-  GST_OBJECT_UNLOCK (self);
49
+  GST_D3D11_VIDEO_SINK_UNLOCK (self);
50
 }
51
 
52
 static void
53
@@ -403,6 +415,7 @@
54
 {
55
   GstD3D11VideoSink *self = GST_D3D11_VIDEO_SINK (object);
56
 
57
+  GST_D3D11_VIDEO_SINK_LOCK (self);
58
   switch (prop_id) {
59
     case PROP_ADAPTER:
60
       g_value_set_int (value, self->adapter);
61
@@ -430,6 +443,7 @@
62
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
63
       break;
64
   }
65
+  GST_D3D11_VIDEO_SINK_UNLOCK (self);
66
 }
67
 
68
 static void
69
@@ -437,7 +451,7 @@
70
 {
71
   GstD3D11VideoSink *self = GST_D3D11_VIDEO_SINK (object);
72
 
73
-  g_rec_mutex_clear (&self->draw_lock);
74
+  g_rec_mutex_clear (&self->lock);
75
   g_free (self->title);
76
 
77
   G_OBJECT_CLASS (parent_class)->finalize (object);
78
@@ -512,7 +526,7 @@
79
   return TRUE;
80
 }
81
 
82
-static gboolean
83
+static GstFlowReturn
84
 gst_d3d11_video_sink_update_window (GstD3D11VideoSink * self, GstCaps * caps)
85
 {
86
   gint video_width, video_height;
87
@@ -520,16 +534,29 @@
88
   gint display_par_n = 1, display_par_d = 1;    /* display's PAR */
89
   guint num, den;
90
   GError *error = NULL;
91
+  GstD3D11Window *window;
92
+  GstFlowReturn ret = GST_FLOW_OK;
93
 
94
   GST_DEBUG_OBJECT (self, "Updating window with caps %" GST_PTR_FORMAT, caps);
95
 
96
   self->caps_updated = FALSE;
97
 
98
-  if (!gst_d3d11_video_sink_prepare_window (self))
99
-    goto no_window;
100
+  GST_D3D11_VIDEO_SINK_LOCK (self);
101
+  if (!gst_d3d11_video_sink_prepare_window (self)) {
102
+    GST_D3D11_VIDEO_SINK_UNLOCK (self);
103
+
104
+    GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND, (nullptr),
105
+        ("Failed to open window."));
106
 
107
-  if (!gst_video_info_from_caps (&self->info, caps))
108
-    goto invalid_format;
109
+    return GST_FLOW_ERROR;
110
+  }
111
+
112
+  if (!gst_video_info_from_caps (&self->info, caps)) {
113
+    GST_DEBUG_OBJECT (self,
114
+        "Could not locate image format from caps %" GST_PTR_FORMAT, caps);
115
+    GST_D3D11_VIDEO_SINK_UNLOCK (self);
116
+    return GST_FLOW_ERROR;
117
+  }
118
 
119
   video_width = GST_VIDEO_INFO_WIDTH (&self->info);
120
   video_height = GST_VIDEO_INFO_HEIGHT (&self->info);
121
@@ -540,11 +567,15 @@
122
    * convert video width and height to a display width and height
123
    * using wd / hd = wv / hv * PARv / PARd */
124
 
125
-  /* TODO: Get display PAR */
126
-
127
   if (!gst_video_calculate_display_ratio (&num, &den, video_width,
128
-          video_height, video_par_n, video_par_d, display_par_n, display_par_d))
129
-    goto no_disp_ratio;
130
+          video_height, video_par_n, video_par_d, display_par_n,
131
+          display_par_d)) {
132
+    GST_D3D11_VIDEO_SINK_UNLOCK (self);
133
+
134
+    GST_ELEMENT_ERROR (self, CORE, NEGOTIATION, (nullptr),
135
+        ("Error calculating the output display ratio of the video."));
136
+    return GST_FLOW_ERROR;
137
+  }
138
 
139
   GST_DEBUG_OBJECT (self,
140
       "video width/height: %dx%d, calculated display ratio: %d/%d format: %s",
141
@@ -581,34 +612,48 @@
142
   self->video_width = video_width;
143
   self->video_height = video_height;
144
 
145
-  if (GST_VIDEO_SINK_WIDTH (self) <= 0 || GST_VIDEO_SINK_HEIGHT (self) <= 0)
146
-    goto no_display_size;
147
+  if (GST_VIDEO_SINK_WIDTH (self) <= 0 || GST_VIDEO_SINK_HEIGHT (self) <= 0) {
148
+    GST_D3D11_VIDEO_SINK_UNLOCK (self);
149
+
150
+    GST_ELEMENT_ERROR (self, CORE, NEGOTIATION, (nullptr),
151
+        ("Error calculating the output display ratio of the video."));
152
+    return GST_FLOW_ERROR;
153
+  }
154
 
155
-  GST_OBJECT_LOCK (self);
156
   if (self->pending_render_rect) {
157
     GstVideoRectangle rect = self->render_rect;
158
 
159
     self->pending_render_rect = FALSE;
160
-    GST_OBJECT_UNLOCK (self);
161
-
162
     gst_d3d11_window_set_render_rectangle (self->window, &rect);
163
-  } else {
164
-    GST_OBJECT_UNLOCK (self);
165
   }
166
 
167
   self->have_video_processor = FALSE;
168
-  if (!gst_d3d11_window_prepare (self->window, GST_VIDEO_SINK_WIDTH (self),
169
-          GST_VIDEO_SINK_HEIGHT (self), caps, &self->have_video_processor,
170
-          &error)) {
171
+  window = (GstD3D11Window *) gst_object_ref (self->window);
172
+  GST_D3D11_VIDEO_SINK_UNLOCK (self);
173
+
174
+  ret = gst_d3d11_window_prepare (window, GST_VIDEO_SINK_WIDTH (self),
175
+      GST_VIDEO_SINK_HEIGHT (self), caps, &self->have_video_processor, &error);
176
+  if (ret != GST_FLOW_OK) {
177
     GstMessage *error_msg;
178
 
179
+    if (ret == GST_FLOW_FLUSHING) {
180
+      GST_D3D11_VIDEO_SINK_LOCK (self);
181
+      GST_WARNING_OBJECT (self, "Couldn't prepare window but we are flushing");
182
+      gst_clear_object (&self->window);
183
+      gst_object_unref (window);
184
+      GST_D3D11_VIDEO_SINK_UNLOCK (self);
185
+
186
+      return GST_FLOW_FLUSHING;
187
+    }
188
+
189
     GST_ERROR_OBJECT (self, "cannot create swapchain");
190
     error_msg = gst_message_new_error (GST_OBJECT_CAST (self),
191
         error, "Failed to prepare d3d11window");
192
     g_clear_error (&error);
193
     gst_element_post_message (GST_ELEMENT (self), error_msg);
194
+    gst_object_unref (window);
195
 
196
-    return FALSE;
197
+    return GST_FLOW_ERROR;
198
   }
199
 
200
   if (self->fallback_pool) {
201
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11videosink.h -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11videosink.h Changed
9
 
1
@@ -37,6 +37,7 @@
2
 #define GST_IS_D3D11_VIDEO_SINK(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_D3D11_VIDEO_SINK))
3
 #define GST_IS_D3D11_VIDEO_SINK_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_D3D11_VIDEO_SINK))
4
 #define GST_D3D11_VIDEO_SINK_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_D3D11_VIDEO_SINK, GstD3D11VideoSinkClass))
5
+#define GST_D3D11_VIDEO_SINK_CAST(obj)        ((GstD3D11VideoSink *) obj)
6
 
7
 typedef struct _GstD3D11VideoSink GstD3D11VideoSink;
8
 typedef struct _GstD3D11VideoSinkClass GstD3D11VideoSinkClass;
9
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11window.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11window.cpp Changed
91
 
1
@@ -107,7 +107,7 @@
2
     ID3D11RenderTargetView * rtv);
3
 static void gst_d3d11_window_on_resize_default (GstD3D11Window * window,
4
     guint width, guint height);
5
-static gboolean gst_d3d11_window_prepare_default (GstD3D11Window * window,
6
+static GstFlowReturn gst_d3d11_window_prepare_default (GstD3D11Window * window,
7
     guint display_width, guint display_height, GstCaps * caps,
8
     gboolean * video_processor_available, GError ** error);
9
 
10
@@ -290,6 +290,8 @@
11
   ID3D11Texture2D *backbuffer = NULL;
12
   GstVideoRectangle src_rect, dst_rect, rst_rect;
13
   IDXGISwapChain *swap_chain;
14
+  ID3D11DeviceContext *context;
15
+  const FLOAT clear_color = { 0.0, 0.0, 0.0, 1.0 };
16
 
17
   gst_d3d11_device_lock (window->device);
18
   if (!window->swap_chain)
19
@@ -355,6 +357,9 @@
20
     goto done;
21
   }
22
 
23
+  context = gst_d3d11_device_get_device_context_handle (window->device);
24
+  context->ClearRenderTargetView (window->rtv, clear_color);
25
+
26
   if (window->processor) {
27
     D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC pov_desc;
28
 
29
@@ -412,14 +417,14 @@
30
   gboolean supported;
31
 } GstD3D11WindowDisplayFormat;
32
 
33
-gboolean
34
+GstFlowReturn
35
 gst_d3d11_window_prepare (GstD3D11Window * window, guint display_width,
36
     guint display_height, GstCaps * caps, gboolean * video_processor_available,
37
     GError ** error)
38
 {
39
   GstD3D11WindowClass *klass;
40
 
41
-  g_return_val_if_fail (GST_IS_D3D11_WINDOW (window), FALSE);
42
+  g_return_val_if_fail (GST_IS_D3D11_WINDOW (window), GST_FLOW_ERROR);
43
 
44
   klass = GST_D3D11_WINDOW_GET_CLASS (window);
45
   g_assert (klass->prepare != NULL);
46
@@ -431,7 +436,7 @@
47
       video_processor_available, error);
48
 }
49
 
50
-static gboolean
51
+static GstFlowReturn
52
 gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width,
53
     guint display_height, GstCaps * caps, gboolean * video_processor_available,
54
     GError ** error)
55
@@ -491,7 +496,7 @@
56
     GST_ERROR_OBJECT (window, "Cannot determine render format");
57
     g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
58
         "Cannot determine render format");
59
-    return FALSE;
60
+    return GST_FLOW_ERROR;
61
   }
62
 
63
   for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (&window->info); i++) {
64
@@ -760,12 +765,12 @@
65
 
66
   GST_DEBUG_OBJECT (window, "New swap chain 0x%p created", window->swap_chain);
67
 
68
-  return TRUE;
69
+  return GST_FLOW_OK;
70
 
71
 error:
72
   gst_d3d11_device_unlock (window->device);
73
 
74
-  return FALSE;
75
+  return GST_FLOW_ERROR;
76
 }
77
 
78
 void
79
@@ -884,6 +889,11 @@
80
   if (!buffer)
81
     return GST_FLOW_OK;
82
 
83
+  if (!rtv) {
84
+    GST_ERROR_OBJECT (self, "RTV is unavailable");
85
+    return GST_FLOW_ERROR;
86
+  }
87
+
88
   {
89
     GstMapInfo infosGST_VIDEO_MAX_PLANES;
90
     ID3D11ShaderResourceView *srvGST_VIDEO_MAX_PLANES;
91
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11window.h -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11window.h Changed
19
 
1
@@ -153,7 +153,7 @@
2
                                            guint width,
3
                                            guint height);
4
 
5
-  gboolean      (*prepare)                (GstD3D11Window * window,
6
+  GstFlowReturn (*prepare)                (GstD3D11Window * window,
7
                                            guint display_width,
8
                                            guint display_height,
9
                                            GstCaps * caps,
10
@@ -185,7 +185,7 @@
11
 void          gst_d3d11_window_set_title            (GstD3D11Window * window,
12
                                                      const gchar *title);
13
 
14
-gboolean      gst_d3d11_window_prepare              (GstD3D11Window * window,
15
+GstFlowReturn gst_d3d11_window_prepare              (GstD3D11Window * window,
16
                                                      guint display_width,
17
                                                      guint display_height,
18
                                                      GstCaps * caps,
19
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11window_corewindow.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11window_corewindow.cpp Changed
10
 
1
@@ -550,7 +550,7 @@
2
     return NULL;
3
   }
4
 
5
-  g_object_ref_sink (window);
6
+  gst_object_ref_sink (window);
7
 
8
   return window;
9
 }
10
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11window_dummy.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11window_dummy.cpp Changed
43
 
1
@@ -48,7 +48,7 @@
2
 
3
 static void gst_d3d11_window_dummy_on_resize (GstD3D11Window * window,
4
     guint width, guint height);
5
-static gboolean gst_d3d11_window_dummy_prepare (GstD3D11Window * window,
6
+static GstFlowReturn gst_d3d11_window_dummy_prepare (GstD3D11Window * window,
7
     guint display_width, guint display_height, GstCaps * caps,
8
     gboolean * video_processor_available, GError ** error);
9
 static void gst_d3d11_window_dummy_unprepare (GstD3D11Window * window);
10
@@ -80,7 +80,7 @@
11
 {
12
 }
13
 
14
-static gboolean
15
+static GstFlowReturn
16
 gst_d3d11_window_dummy_prepare (GstD3D11Window * window,
17
     guint display_width, guint display_height, GstCaps * caps,
18
     gboolean * video_processor_available, GError ** error)
19
@@ -192,12 +192,12 @@
20
 
21
   gst_d3d11_device_unlock (window->device);
22
 
23
-  return TRUE;
24
+  return GST_FLOW_OK;
25
 
26
 error:
27
   gst_d3d11_device_unlock (window->device);
28
 
29
-  return FALSE;
30
+  return GST_FLOW_ERROR;
31
 }
32
 
33
 static void
34
@@ -531,7 +531,7 @@
35
       g_object_new (GST_TYPE_D3D11_WINDOW_DUMMY, "d3d11device", device, NULL);
36
 
37
   window->initialized = TRUE;
38
-  g_object_ref_sink (window);
39
+  gst_object_ref_sink (window);
40
 
41
   return window;
42
 }
43
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11window_swapchainpanel.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11window_swapchainpanel.cpp Changed
10
 
1
@@ -541,7 +541,7 @@
2
     return NULL;
3
   }
4
 
5
-  g_object_ref_sink (window);
6
+  gst_object_ref_sink (window);
7
 
8
   return window;
9
 }
10
gst-plugins-bad-1.20.4.tar.xz/sys/d3d11/gstd3d11window_win32.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/d3d11/gstd3d11window_win32.cpp Changed
201
 
1
@@ -43,6 +43,7 @@
2
 #define WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW (WM_USER + 2)
3
 #define WM_GST_D3D11_DESTROY_INTERNAL_WINDOW (WM_USER + 3)
4
 #define WM_GST_D3D11_MOVE_WINDOW (WM_USER + 4)
5
+#define WM_GST_D3D11_SHOW_WINDOW (WM_USER + 5)
6
 
7
 static LRESULT CALLBACK window_proc (HWND hWnd, UINT uMsg, WPARAM wParam,
8
     LPARAM lParam);
9
@@ -93,6 +94,9 @@
10
 
11
   /* Handle set_render_rectangle */
12
   GstVideoRectangle render_rect;
13
+
14
+  gboolean flushing;
15
+  gboolean setup_external_hwnd;
16
 };
17
 
18
 #define gst_d3d11_window_win32_parent_class parent_class
19
@@ -120,17 +124,21 @@
20
 static void gst_d3d11_window_win32_destroy_internal_window (HWND hwnd);
21
 static void gst_d3d11_window_win32_release_external_handle (HWND hwnd);
22
 static void
23
-gst_d3d11_window_win32_set_window_handle (GstD3D11WindowWin32 * self,
24
-    guintptr handle);
25
-static void
26
 gst_d3d11_window_win32_on_resize (GstD3D11Window * window,
27
     guint width, guint height);
28
+static GstFlowReturn gst_d3d11_window_win32_prepare (GstD3D11Window * window,
29
+    guint display_width, guint display_height, GstCaps * caps,
30
+    gboolean * video_processor_available, GError ** error);
31
 static void gst_d3d11_window_win32_unprepare (GstD3D11Window * window);
32
 static void
33
 gst_d3d11_window_win32_set_render_rectangle (GstD3D11Window * window,
34
     const GstVideoRectangle * rect);
35
 static void gst_d3d11_window_win32_set_title (GstD3D11Window * window,
36
     const gchar * title);
37
+static gboolean gst_d3d11_window_win32_unlock (GstD3D11Window * window);
38
+static gboolean gst_d3d11_window_win32_unlock_stop (GstD3D11Window * window);
39
+static GstFlowReturn
40
+gst_d3d11_window_win32_set_external_handle (GstD3D11WindowWin32 * self);
41
 
42
 static void
43
 gst_d3d11_window_win32_class_init (GstD3D11WindowWin32Class * klass)
44
@@ -152,12 +160,16 @@
45
   window_class->present = GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_present);
46
   window_class->on_resize =
47
       GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_on_resize);
48
+  window_class->prepare = GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_prepare);
49
   window_class->unprepare =
50
       GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_unprepare);
51
   window_class->set_render_rectangle =
52
       GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_set_render_rectangle);
53
   window_class->set_title =
54
       GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_set_title);
55
+  window_class->unlock = GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_unlock);
56
+  window_class->unlock_stop =
57
+      GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_unlock_stop);
58
 }
59
 
60
 static void
61
@@ -176,7 +188,9 @@
62
   GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (object);
63
 
64
   if (window->external_handle) {
65
-    gst_d3d11_window_win32_set_window_handle (self, window->external_handle);
66
+    /* Will setup internal child window on ::prepare() */
67
+    self->setup_external_hwnd = TRUE;
68
+    window->initialized = TRUE;
69
     goto done;
70
   }
71
 
72
@@ -200,6 +214,51 @@
73
   G_OBJECT_CLASS (parent_class)->dispose (object);
74
 }
75
 
76
+static GstFlowReturn
77
+gst_d3d11_window_win32_prepare (GstD3D11Window * window, guint display_width,
78
+    guint display_height, GstCaps * caps, gboolean * video_processor_available,
79
+    GError ** error)
80
+{
81
+  GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window);
82
+  HWND hwnd;
83
+  GstFlowReturn ret;
84
+
85
+  if (!self->setup_external_hwnd)
86
+    goto done;
87
+
88
+  hwnd = (HWND) window->external_handle;
89
+  if (!IsWindow (hwnd)) {
90
+    GST_ERROR_OBJECT (self, "Invalid window handle");
91
+    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
92
+        "Invalid window handle");
93
+    return GST_FLOW_ERROR;
94
+  }
95
+
96
+  self->overlay_state = GST_D3D11_WINDOW_WIN32_OVERLAY_STATE_NONE;
97
+  self->external_hwnd = hwnd;
98
+
99
+  GST_DEBUG_OBJECT (self, "Preparing external handle");
100
+  ret = gst_d3d11_window_win32_set_external_handle (self);
101
+  if (ret != GST_FLOW_OK) {
102
+    if (ret == GST_FLOW_FLUSHING) {
103
+      GST_WARNING_OBJECT (self, "Flushing");
104
+      return GST_FLOW_FLUSHING;
105
+    }
106
+
107
+    GST_ERROR_OBJECT (self, "Couldn't configure internal window");
108
+    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
109
+        "Window handle configuration failed");
110
+    return GST_FLOW_ERROR;
111
+  }
112
+
113
+  GST_DEBUG_OBJECT (self, "External handle got prepared");
114
+  self->setup_external_hwnd = FALSE;
115
+
116
+done:
117
+  return GST_D3D11_WINDOW_CLASS (parent_class)->prepare (window, display_width,
118
+      display_height, caps, video_processor_available, error);
119
+}
120
+
121
 static void
122
 gst_d3d11_window_win32_unprepare (GstD3D11Window * window)
123
 {
124
@@ -311,6 +370,36 @@
125
 }
126
 
127
 static gboolean
128
+gst_d3d11_window_win32_unlock (GstD3D11Window * window)
129
+{
130
+  GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window);
131
+  g_mutex_lock (&self->lock);
132
+
133
+  GST_DEBUG_OBJECT (self, "Unlock");
134
+
135
+  self->flushing = TRUE;
136
+  g_cond_broadcast (&self->cond);
137
+  g_mutex_unlock (&self->lock);
138
+
139
+  return TRUE;
140
+}
141
+
142
+static gboolean
143
+gst_d3d11_window_win32_unlock_stop (GstD3D11Window * window)
144
+{
145
+  GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window);
146
+  g_mutex_lock (&self->lock);
147
+
148
+  GST_DEBUG_OBJECT (self, "Unlock stop");
149
+
150
+  self->flushing = FALSE;
151
+  g_cond_broadcast (&self->cond);
152
+  g_mutex_unlock (&self->lock);
153
+
154
+  return TRUE;
155
+}
156
+
157
+static gboolean
158
 running_cb (gpointer user_data)
159
 {
160
   GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (user_data);
161
@@ -350,8 +439,8 @@
162
 
163
   window->initialized = gst_d3d11_window_win32_create_internal_window (self);
164
 
165
-  self->msg_io_channel =
166
-      g_io_channel_win32_new_messages ((guintptr) self->internal_hwnd);
167
+  /* Watching and dispatching all messages on this thread */
168
+  self->msg_io_channel = g_io_channel_win32_new_messages (0);
169
   self->msg_source = g_io_create_watch (self->msg_io_channel, G_IO_IN);
170
   g_source_set_callback (self->msg_source, (GSourceFunc) msg_cb, self, NULL);
171
   g_source_attach (self->msg_source, self->main_context);
172
@@ -401,10 +490,11 @@
173
         ", 0x%x", (guintptr) hwnd, (guint) GetLastError ());
174
 }
175
 
176
-static void
177
+static GstFlowReturn
178
 gst_d3d11_window_win32_set_external_handle (GstD3D11WindowWin32 * self)
179
 {
180
   WNDPROC external_window_proc;
181
+  GstFlowReturn ret = GST_FLOW_OK;
182
 
183
   external_window_proc =
184
       (WNDPROC) GetWindowLongPtrA (self->external_hwnd, GWLP_WNDPROC);
185
@@ -419,9 +509,28 @@
186
   SetWindowLongPtrA (self->external_hwnd, GWLP_WNDPROC,
187
       (LONG_PTR) sub_class_proc);
188
 
189
-  /* Will create our internal window on parent window's thread */
190
-  SendMessageA (self->external_hwnd, WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW,
191
+  /* SendMessage() may cause deadlock if parent window thread is busy
192
+   * for changing pipeline's state. Post our message instead, and wait for
193
+   * the parent window's thread or flushing */
194
+  PostMessageA (self->external_hwnd, WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW,
195
       0, 0);
196
+
197
+  g_mutex_lock (&self->lock);
198
+  while (self->external_hwnd &&
199
+      self->overlay_state == GST_D3D11_WINDOW_WIN32_OVERLAY_STATE_NONE &&
200
+      !self->flushing) {
201
gst-plugins-bad-1.20.4.tar.xz/sys/decklink/gstdecklinkvideosrc.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/decklink/gstdecklinkvideosrc.cpp Changed
65
 
1
@@ -154,6 +154,8 @@
2
 #define ABSDIFF(x, y) ( (x) > (y) ? ((x) - (y)) : ((y) - (x)) )
3
 #endif
4
 
5
+#define NO_SIGNL_RESET_COUNT (10)
6
+
7
 enum
8
 {
9
   PROP_0,
10
@@ -672,6 +674,23 @@
11
 }
12
 
13
 static void
14
+gst_decklink_reset_time_mapping(GstDecklinkVideoSrc * self)
15
+{
16
+    self->window_fill = 0;
17
+    self->window_filled = FALSE;
18
+    self->window_skip = 1;
19
+    self->window_skip_count = 0;
20
+    self->current_time_mapping.xbase = 0;
21
+    self->current_time_mapping.b = 0;
22
+    self->current_time_mapping.num = 1;
23
+    self->current_time_mapping.den = 1;
24
+    self->next_time_mapping.xbase = 0;
25
+    self->next_time_mapping.b = 0;
26
+    self->next_time_mapping.num = 1;
27
+    self->next_time_mapping.den = 1;
28
+}
29
+
30
+static void
31
 gst_decklink_video_src_update_time_mapping (GstDecklinkVideoSrc * self,
32
     GstClockTime capture_time, GstClockTime stream_time)
33
 {
34
@@ -811,6 +830,9 @@
35
     return;
36
   }
37
 
38
+  if (no_signal)
39
+    self->no_signal_count++;
40
+
41
   if (self->drop_no_signal_frames && no_signal) {
42
     CaptureFrame f;
43
     memset (&f, 0, sizeof (f));
44
@@ -823,6 +845,13 @@
45
     return;
46
   }
47
 
48
+  if (!no_signal) {
49
+    if (self->no_signal_count > NO_SIGNL_RESET_COUNT) {
50
+      gst_decklink_reset_time_mapping(self);
51
+    }
52
+    self->no_signal_count = 0;
53
+  }
54
+
55
   gst_decklink_video_src_update_time_mapping (self, capture_time, stream_time);
56
   if (self->output_stream_time) {
57
     timestamp = stream_time;
58
@@ -1709,4 +1738,4 @@
59
 out:
60
 
61
   return ret;
62
-}
63
+}
64
\ No newline at end of file
65
gst-plugins-bad-1.20.4.tar.xz/sys/decklink/gstdecklinkvideosrc.h -> gst-plugins-bad-1.20.5.tar.xz/sys/decklink/gstdecklinkvideosrc.h Changed
9
 
1
@@ -69,6 +69,7 @@
2
   guint64 processed;
3
   guint64 dropped;
4
   guint64 first_stream_time;
5
+  guint64 no_signal_count;
6
 
7
   GstVideoInfo info;
8
   GstDecklinkVideoFormat video_format;
9
gst-plugins-bad-1.20.4.tar.xz/sys/dshowvideosink/dshowvideosink.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/dshowvideosink/dshowvideosink.cpp Changed
28
 
1
@@ -120,7 +120,7 @@
2
 
3
     if (sink->is_new_window) {
4
       /* If we created a new window */
5
-      SendMessage (previous_window, WM_CLOSE, NULL, NULL);
6
+      SendMessage (previous_window, WM_CLOSE, 0, 0);
7
       sink->is_new_window = FALSE;
8
       sink->window_closed = FALSE;
9
     } else {
10
@@ -636,7 +636,7 @@
11
     height = vi->rcTarget.bottom + GetSystemMetrics (SM_CYCAPTION) +
12
         (GetSystemMetrics (SM_CYSIZEFRAME) * 2);
13
 
14
-    SystemParametersInfo (SPI_GETWORKAREA, NULL, &rect, 0);
15
+    SystemParametersInfo (SPI_GETWORKAREA, 0, &rect, 0);
16
     int screenwidth = rect.right - rect.left;
17
     int screenheight = rect.bottom - rect.top;
18
     offx = rect.left;
19
@@ -1590,7 +1590,7 @@
20
   /* If we created a new window, send the close message and wait until 
21
    * it's closed in the window thread */
22
   if (sink->is_new_window) {
23
-    SendMessage (sink->window_id, WM_CLOSE, NULL, NULL);
24
+    SendMessage (sink->window_id, WM_CLOSE, 0, 0);
25
     while (!sink->window_closed);
26
     sink->is_new_window = FALSE;
27
   }
28
gst-plugins-bad-1.20.4.tar.xz/sys/mediafoundation/gstmfsourcereader.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/mediafoundation/gstmfsourcereader.cpp Changed
10
 
1
@@ -171,6 +171,8 @@
2
   while (!g_main_loop_is_running (self->loop))
3
     g_cond_wait (&self->cond, &self->lock);
4
   g_mutex_unlock (&self->lock);
5
+
6
+  G_OBJECT_CLASS (parent_class)->constructed (object);
7
 }
8
 
9
 static gboolean
10
gst-plugins-bad-1.20.4.tar.xz/sys/mediafoundation/gstmfvideosrc.c -> gst-plugins-bad-1.20.5.tar.xz/sys/mediafoundation/gstmfvideosrc.c Changed
24
 
1
@@ -435,16 +435,20 @@
2
     ret = GST_BASE_SRC_CLASS (parent_class)->alloc (GST_BASE_SRC (self), 0,
3
         GST_VIDEO_INFO_SIZE (&self->info), &buf);
4
 
5
-    if (ret != GST_FLOW_OK)
6
+    if (ret != GST_FLOW_OK) {
7
+      gst_clear_buffer (&buf);
8
       return ret;
9
+    }
10
 
11
     ret = gst_mf_source_object_fill (self->source, buf);
12
   } else {
13
     ret = gst_mf_source_object_create (self->source, &buf);
14
   }
15
 
16
-  if (ret != GST_FLOW_OK)
17
+  if (ret != GST_FLOW_OK) {
18
+    gst_clear_buffer (&buf);
19
     return ret;
20
+  }
21
 
22
   GST_BUFFER_OFFSET (buf) = self->n_frames;
23
   GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET (buf) + 1;
24
gst-plugins-bad-1.20.4.tar.xz/sys/mediafoundation/gstwin32devicewatcher.cpp -> gst-plugins-bad-1.20.5.tar.xz/sys/mediafoundation/gstwin32devicewatcher.cpp Changed
10
 
1
@@ -94,6 +94,8 @@
2
   while (!g_main_loop_is_running (self->loop))
3
     g_cond_wait (&self->cond, &self->lock);
4
   g_mutex_unlock (&self->lock);
5
+
6
+  G_OBJECT_CLASS (parent_class)->constructed (object);
7
 }
8
 
9
 static void
10
gst-plugins-bad-1.20.4.tar.xz/tests/check/libs/mpegts.c -> gst-plugins-bad-1.20.5.tar.xz/tests/check/libs/mpegts.c Changed
96
 
1
@@ -71,6 +71,16 @@
2
   0xc0, 0x00, 0xc4, 0x86, 0x56, 0xa5
3
 };
4
 
5
+static gboolean
6
+_has_iso6937_iconv (void)
7
+{
8
+  gboolean supported;
9
+  GIConv test = g_iconv_open ("iso6937", "utf-8");
10
+  supported = (test != (GIConv) - 1);
11
+  g_iconv_close (test);
12
+  return supported;
13
+}
14
+
15
 GST_START_TEST (test_scte_sit)
16
 {
17
   GstMpegtsSCTESIT *sit;
18
@@ -397,10 +407,12 @@
19
 
20
   fail_if (data == NULL);
21
 
22
-  for (i = 0; i < data_size; i++) {
23
-    if (datai != nit_data_checki)
24
-      fail ("0x%X != 0x%X in byte %d of NIT section", datai,
25
-          nit_data_checki, i);
26
+  if (_has_iso6937_iconv ()) {
27
+    for (i = 0; i < data_size; i++) {
28
+      if (datai != nit_data_checki)
29
+        fail ("0x%X != 0x%X in byte %d of NIT section", datai,
30
+            nit_data_checki, i);
31
+    }
32
   }
33
 
34
   /* Check assertion on bad CRC. Reset parsed data, and make the CRC corrupt */
35
@@ -486,10 +498,12 @@
36
 
37
   fail_if (data == NULL);
38
 
39
-  for (i = 0; i < data_size; i++) {
40
-    if (datai != sdt_data_checki)
41
-      fail ("0x%X != 0x%X in byte %d of SDT section", datai,
42
-          sdt_data_checki, i);
43
+  if (_has_iso6937_iconv ()) {
44
+    for (i = 0; i < data_size; i++) {
45
+      if (datai != sdt_data_checki)
46
+        fail ("0x%X != 0x%X in byte %d of SDT section", datai,
47
+            sdt_data_checki, i);
48
+    }
49
   }
50
 
51
   /* Check assertion on bad CRC. Reset parsed data, and make the CRC corrupt */
52
@@ -594,13 +608,16 @@
53
   /* Check creation of descriptor */
54
   desc = gst_mpegts_descriptor_from_dvb_network_name ("Name");
55
   fail_if (desc == NULL);
56
-  fail_unless (desc->length == 4);
57
+  if (_has_iso6937_iconv ())
58
+    fail_unless (desc->length == 4);
59
   fail_unless (desc->tag == 0x40);
60
 
61
-  for (i = 0; i < 6; i++) {
62
-    if (desc->datai != network_name_descriptori)
63
-      fail ("0x%X != 0x%X in byte %d of network name descriptor",
64
-          desc->datai, network_name_descriptori, i);
65
+  if (_has_iso6937_iconv ()) {
66
+    for (i = 0; i < 6; i++) {
67
+      if (desc->datai != network_name_descriptori)
68
+        fail ("0x%X != 0x%X in byte %d of network name descriptor",
69
+            desc->datai, network_name_descriptori, i);
70
+    }
71
   }
72
 
73
   /* Check parsing of descriptor */
74
@@ -623,13 +640,16 @@
75
   desc = gst_mpegts_descriptor_from_dvb_service
76
       (GST_DVB_SERVICE_DIGITAL_TELEVISION, "Name", "Provider");
77
   fail_if (desc == NULL);
78
-  fail_unless (desc->length == 15);
79
+  if (_has_iso6937_iconv ())
80
+    fail_unless (desc->length == 15);
81
   fail_unless (desc->tag == 0x48);
82
 
83
-  for (i = 0; i < 17; i++) {
84
-    if (desc->datai != service_descriptori)
85
-      fail ("0x%X != 0x%X in byte %d of service descriptor",
86
-          desc->datai, service_descriptori, i);
87
+  if (_has_iso6937_iconv ()) {
88
+    for (i = 0; i < 17; i++) {
89
+      if (desc->datai != service_descriptori)
90
+        fail ("0x%X != 0x%X in byte %d of service descriptor",
91
+            desc->datai, service_descriptori, i);
92
+    }
93
   }
94
 
95
   /* Check parsing of descriptor with data */
96