Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-bad for 
openSUSE:Factory checked in at 2021-04-10 15:26:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-bad (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-bad.new.2401 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-bad"

Sat Apr 10 15:26:34 2021 rev:114 rq:883604 version:1.18.4

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-bad/gstreamer-plugins-bad.changes  
    2021-02-18 20:50:41.311342377 +0100
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-bad.new.2401/gstreamer-plugins-bad.changes
    2021-04-10 15:27:20.582376037 +0200
@@ -1,0 +2,22 @@
+Tue Mar 30 09:01:57 UTC 2021 - Antonio Larrosa <alarr...@suse.com>
+
+- Update to version 1.18.4:
+  + avwait: Don't post messages with the mutex locked
+  + d3d11h264dec: Reconfigure decoder object on DPB size change
+    and keep track of actually configured DPB size
+  + dashsink: fix double unref of sinkpad caps
+  + decklinkvideosink: Use correct numerator for 29.97fps
+  + decklinkvideosink: fix auto format detection
+  + decklinksrc: Use a more accurate capture time
+  + d3d11videosink: Fix build error on UWP
+  + interlace: negotiation and buffer leak fixes
+  + mpegvideoparse: do not clip, so decoder receives data from
+    keyframe even if it's before the segment start
+  + mpegtsparse: Fix switched DTS/PTS when set-timestamps=false
+  + nvh264sldec: Reopen decoder object if larger DPB size is
+    required
+  + sdpsrc: fix double free if sdp is provided as string via the
+    property
+  + vulkan: Fix elements long name.
+
+-------------------------------------------------------------------

Old:
----
  gst-plugins-bad-1.18.3.tar.xz

New:
----
  gst-plugins-bad-1.18.4.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gstreamer-plugins-bad.spec ++++++
--- /var/tmp/diff_new_pack.i07WaL/_old  2021-04-10 15:27:21.050376587 +0200
+++ /var/tmp/diff_new_pack.i07WaL/_new  2021-04-10 15:27:21.054376592 +0200
@@ -28,7 +28,7 @@
 %bcond_with faad
 
 Name:           gstreamer-plugins-bad
-Version:        1.18.3
+Version:        1.18.4
 Release:        0
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        LGPL-2.1-or-later
@@ -118,7 +118,7 @@
 BuildRequires:  pkgconfig(zvbi-0.2)
 BuildRequires:  pkgconfig(zxing)
 Requires(post): glib2-tools
-Requires(postun): glib2-tools
+Requires(postun):glib2-tools
 # FIXME! - this leads to unresolvables currently
 #%%define gstreamer_plugins_bad_req %%(xzgrep --text "^GST.*_REQ" %%{S:0} | 
sort -u | sed 's/GST_REQ=/gstreamer >= /;s/GSTPB_REQ=/gstreamer-plugins-base >= 
/' | tr '\\n' ' ')
 #Requires:       %%gstreamer_plugins_bad_req

++++++ _service ++++++
--- /var/tmp/diff_new_pack.i07WaL/_old  2021-04-10 15:27:21.074376616 +0200
+++ /var/tmp/diff_new_pack.i07WaL/_new  2021-04-10 15:27:21.074376616 +0200
@@ -9,7 +9,7 @@
 <!--
     <param name="changesgenerate">enable</param>
 -->
-    <param name="revision">1.18.3</param>
+    <param name="revision">1.18.4</param>
     <param name="scm">git</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ gst-plugins-bad-1.18.3.tar.xz -> gst-plugins-bad-1.18.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/ChangeLog 
new/gst-plugins-bad-1.18.4/ChangeLog
--- old/gst-plugins-bad-1.18.3/ChangeLog        2021-01-13 22:11:24.000000000 
+0100
+++ new/gst-plugins-bad-1.18.4/ChangeLog        2021-03-15 18:49:18.000000000 
+0100
@@ -1,3 +1,158 @@
+=== release 1.18.4 ===
+
+2021-03-15 17:49:16 +0000  Tim-Philipp M??ller <t...@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * gst-plugins-bad.doap:
+       * meson.build:
+         Release 1.18.4
+
+2021-03-08 14:30:52 +0200  Vivia Nikolaidou <vi...@ahiru.eu>
+
+       * tests/check/elements/interlace.c:
+       * tests/check/meson.build:
+         tests: Add negotiation tests for the interlace elements
+         Many complicated cases exist. Would be good to have some checks.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2067>
+
+2021-03-08 20:59:14 +0200  Vivia Nikolaidou <vi...@ahiru.eu>
+
+       * gst/interlace/gstinterlace.c:
+         interlace: Discard stored_frame on EOS and PAUSED_TO_READY
+         Would otherwise leak it.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2067>
+
+2021-03-08 16:16:25 +0200  Vivia Nikolaidou <vi...@ahiru.eu>
+
+       * docs/plugins/gst_plugins_cache.json:
+       * gst/interlace/gstinterlace.c:
+         interlace: Specify interlace-modes in the sink pad template
+         Especially specify the field-order in the interleaved mode. Otherwise 
it
+         might cause the negotiation to fail, because
+         GST_PAD_SET_ACCEPT_INTERSECT is not set on the sinkpad, and the
+         field-order is missing in the sink template but can be present in the
+         outside caps.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2067>
+
+2021-03-10 13:10:28 +0100  St??phane Cerveau <scerv...@collabora.com>
+
+       * gst/videoparsers/gstmpegvideoparse.c:
+         mpegvideoparse: do not clip the frame
+         If the current buffer is delta unit such as P or B
+         frame, the buffer should not be clipped and need to
+         let the decoder handle the segment boundary situation.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2070>
+
+2021-03-09 13:00:10 +0200  Sebastian Dr??ge <sebast...@centricular.com>
+
+       * gst/timecode/gstavwait.c:
+         avwait: Don't post messages with the mutex locked
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2068>
+
+2021-03-07 16:47:07 +0900  Seungha Yang <seun...@centricular.com>
+
+       * sys/nvcodec/gstnvh264dec.c:
+         nvh264sldec: Reopen decoder object if larger DPB size is required
+         Equivalent to the d3d11h264dec fix
+         
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1839
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2060>
+
+2021-03-04 17:42:28 +0900  Seungha Yang <seun...@centricular.com>
+
+       * sys/d3d11/gstd3d11h264dec.c:
+         d3d11h264dec: Keep track of actually configured DPB size
+         ... instead of the largest we ever seen.
+         Note that d3d11h264dec element holds previously configured DPB size
+         for later decoder object re-open decision.
+         This is to fix below case:
+         1) Initial SPS, required DPB size is 6
+         - decoder object is opened with DPB size 6
+         - max_dpb_size is now 6
+         2) SPS update with resolution change, required DPB size is 1
+         - decoder object is re-opened with DPB size 1
+         - max_dpb_size should be updated to 1, but it didn't happen (BUG)
+         3) SPS update without resolution change, only required DPB size is 
updated to 6
+         - decoder object should be re-opened but didn't happen
+         because we didn't update max_dpb_size at 2).
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2057>
+
+2020-11-26 05:55:29 +0900  Seungha Yang <seun...@centricular.com>
+
+       * sys/d3d11/gstd3d11h264dec.c:
+         d3d11h264dec: Reconfigure decoder object on DPB size change
+         Even if resolution and/or bitdepth is not updated, required
+         DPB size can be changed per SPS update and it could be even
+         larger than previously configured size of DPB. If so, we need
+         to reconfigure DPB d3d11 texture pool again.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2057>
+
+2021-03-01 16:23:37 +0100  Jan Alexander Steffens (heftig) 
<jan.steff...@ltnglobal.com>
+
+       * gst/mpegtsdemux/mpegtsparse.c:
+         mpegtsparse: Fix switched DTS/PTS when set-timestamps=false
+         Fixes 30ee21eae36e7279f63b77167ba1dcf5f70b8e83.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2049>
+
+2021-02-26 16:36:58 +0200  Sebastian Dr??ge <sebast...@centricular.com>
+
+       * sys/decklink/gstdecklinkvideosink.cpp:
+         decklinkvideosink: Use correct numerator for 29.97fps
+         It's not 0.2997fps.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2043>
+
+2021-02-26 11:39:10 +0100  Edward Hervey <edw...@centricular.com>
+
+       * sys/decklink/gstdecklink.cpp:
+         decklinksrc: Use a more accurate capture time
+         Use the hardware reference clock time when the frame was finished 
being captured
+         instead of a time much further down the road.
+         This improves the stability/accuracy of buffer times.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2041>
+
+2021-02-24 16:57:06 +0100  V??ctor Manuel J??quez Leal <vjaq...@igalia.com>
+
+       * docs/plugins/gst_plugins_cache.json:
+       * ext/vulkan/vkcolorconvert.c:
+       * ext/vulkan/vkviewconvert.c:
+         vulkan: Fix elements long name.
+         Fix vkcoloconvert and vkviewconvert long names.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2036>
+
+2021-02-19 00:03:00 +0000  Tim-Philipp M??ller <t...@centricular.com>
+
+       * gst/sdp/gstsdpsrc.c:
+         sdpsrc: fix double free if sdp is provided as string via the property
+         Fixes 
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1532
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2027>
+
+2021-01-29 02:09:05 -0500  Staz M <s...@staz.io>
+
+       * sys/decklink/gstdecklink.cpp:
+         decklink: Fixed decklinkvideosink auto format detection
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1998>
+
+2021-01-20 18:16:17 +0800  Haihua Hu <jared...@nxp.com>
+
+       * ext/dash/gstmpdhelper.c:
+         dashsink: fix double unref of sinkpad caps
+         no need to unref caps in gst_mpd_helper_get_XXX_codec_from_mime
+         it will be unref in caller gst_dash_sink_get_stream_metadata()
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1991>
+
+2021-01-18 19:23:30 +0900  Seungha Yang <seun...@centricular.com>
+
+       * sys/d3d11/gstd3d11videosink.c:
+         d3d11videosink: Fix build error on UWP
+         gstd3d11videosink.c(662): error C2065: 'sink': undeclared identifier
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1972>
+
+2021-01-14 02:17:31 +0000  Tim-Philipp M??ller <t...@centricular.com>
+
+       * meson.build:
+         Back to development
+
 === release 1.18.3 ===
 
 2021-01-13 21:11:22 +0000  Tim-Philipp M??ller <t...@centricular.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/NEWS 
new/gst-plugins-bad-1.18.4/NEWS
--- old/gst-plugins-bad-1.18.3/NEWS     2021-01-13 22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/NEWS     2021-03-15 18:49:18.000000000 +0100
@@ -2,13 +2,13 @@
 
 GStreamer 1.18.0 was originally released on 8 September 2020.
 
-The latest bug-fix release in the 1.18 series is 1.18.3 and was released
-on 13 January 2021.
+The latest bug-fix release in the 1.18 series is 1.18.4 and was released
+on 15 March 2021.
 
 See https://gstreamer.freedesktop.org/releases/1.18/ for the latest
 version of this document.
 
-Last updated: Wednesday 13 January 2021, 20:00 UTC (log)
+Last updated: Monday 15 March 2021, 13:00 UTC (log)
 
 Introduction
 
@@ -2717,6 +2717,168 @@
 -   List of Merge Requests applied in 1.18.3
 -   List of Issues fixed in 1.18.3
 
+1.18.4
+
+The fourth 1.18 bug-fix release (1.18.4) was released on 15 March 2021.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.18.x.
+
+Highlighted bugfixes in 1.18.4
+
+-   important security fixes for ID3 tag reading, matroska and realmedia
+    parsing, and gst-libav audio decoding
+-   audiomixer, audioaggregator: input buffer handling fixes
+-   decodebin3: improve stream-selection message handling
+-   uridecodebin3: make ???caps??? property work
+-   wavenc: fix writing of INFO chunks in some cases
+-   v4l2: bt601 colorimetry, allow encoder resolution changes, fix
+    decoder frame rate negotiation
+-   decklinkvideosink: fix auto format detection, and fixes for 29.97fps
+    framerate output
+-   mpeg-2 video handling fixes when seeking
+-   avviddec: fix bufferpool negotiation and possible memory corruption
+    when changing resolution
+-   various stability, performance and reliability improvements
+-   memory leak fixes
+-   build fixes: rpicamsrc, qt overlay example, d3d11videosink on UWP
+
+gstreamer
+
+-   info: Don???t leak log function user_data if the debug system is
+    compiled out
+-   task: Use SetThreadDescription() Win32 API for setting thread names,
+    which preserves thread names in dump files.
+-   buffer, memory: Mark info in map functions as caller-allocates and
+    pass allocation params as const pointers where possible
+-   clock: define AUTO_CLEANUP_FREE_FUNC for GstClockID
+
+gst-plugins-base
+
+-   tag: id3v2: fix frame size check and potential invalid reads
+-   audio: Fix gst_audio_buffer_truncate() meta handling for
+    non-interleaved audio
+-   audioresample: respect buffer layout when draining
+-   audioaggregator: fix input_buffer ownership
+-   decodebin3: change stream selection message owner, so that the app
+    sends the stream-selection event to the right element
+-   rtspconnection: correct data_size when tunneled mode
+-   uridecodebin3: make caps property work
+-   video-converter: Don???t upsample invalid lines
+-   videodecoder: Fix racy critical when pool negotiation occurs during
+    flush
+-   video: Convert gst_video_info_to_caps() to take self as const ptr
+-   examples: added qt core dependency for qt overlay example
+
+gst-plugins-good
+
+-   matroskademux: header parsing fixes
+-   rpicamsrc: depend on posix threads and vchiq_arm to fix build on
+    raspios again
+-   wavenc: Fixed INFO chunk corruption, caused by odd sized data not
+    being padded
+-   wavpackdec: Add floating point format support to fix distortions in
+    some cases
+-   v4l2: recognize V4L2 bt601 colorimetry again
+-   v4l2videoenc: support resolution change stream encode
+-   v4l2h265codec: fix HEVC profile string issue
+-   v4l2object: Need keep same transfer as input caps
+-   v4l2videodec: Fix vp8 and vp9 streams can???t play on board with
+    vendor bsp
+-   v4l2videodec: fix src side frame rate negotiation
+
+gst-plugins-bad
+
+-   avwait: Don???t post messages with the mutex locked
+-   d3d11h264dec: Reconfigure decoder object on DPB size change and keep
+    track of actually configured DPB size
+-   dashsink: fix double unref of sinkpad caps
+-   decklinkvideosink: Use correct numerator for 29.97fps
+-   decklinkvideosink: fix auto format detection
+-   decklinksrc: Use a more accurate capture time
+-   d3d11videosink: Fix build error on UWP
+-   interlace: negotiation and buffer leak fixes
+-   mpegvideoparse: do not clip, so decoder receives data from keyframe
+    even if it???s before the segment start
+-   mpegtsparse: Fix switched DTS/PTS when set-timestamps=false
+-   nvh264sldec: Reopen decoder object if larger DPB size is required
+-   sdpsrc: fix double free if sdp is provided as string via the
+    property
+-   vulkan: Fix elements long name.
+
+gst-plugins-ugly
+
+-   rmdemux: Make sure we have enough data available when parsing
+    audio/video packets
+
+gst-libav
+
+-   avviddec: take the maximum of the height/coded_height
+-   viddec: don???t configure an incorrect buffer pool when receiving a
+    gap event
+-   audiodec: fix stack overflow in gst_ffmpeg_channel_layout_to_gst()
+
+gst-rtsp-server
+
+-   rtspclientsink: fix deadlock on shutdown if no data has been
+    received yet
+-   rtspclientsink: fix leaks in unit tests
+-   rtsp-stream: avoid deadlock in send_func
+-   rtsp-client: cleanup transports during TEARDOWN
+
+gstreamer-vaapi
+
+-   h264 encoder: append encoder exposure to aud
+-   postproc: Fix a problem of propose_allocation when passthrough
+-   glx: Iterate over FBConfig and select 8 bit color size
+
+gstreamer-sharp
+
+-   no changes
+
+gst-omx
+
+-   no changes
+
+gst-python
+
+-   no changes
+
+gst-editing-services
+
+-   group: Use proper group constructor
+
+gst-integration-testsuites
+
+-   no changes
+
+gst-build
+
+-   no changes
+
+Cerbero build tool and packaging changes in 1.18.4
+
+-   macOS: more BigSur fixes
+-   glib: Backport patch to set thread names on Windows 10
+
+Contributors to 1.18.4
+
+Alicia Boya Garc??a, Ashley Brighthope, Bing Song, Branko Subasic, Edward
+Hervey, Guillaume Desmottes, Haihua Hu, He Junyan, Hou Qi, Jan Alexander
+Steffens (heftig), Jeongki Kim, Jordan Petridis, Knobe, Kristofer
+Bj??rkstr??m, Marijn Suijten, Matthew Waters, Paul Goulpi??, Philipp Zabel,
+Rafa?? Dzi??giel, Sebastian Dr??ge, Seungha Yang, Staz M, St??phane Cerveau,
+Thibault Saunier, Tim-Philipp M??ller, V??ctor Manuel J??quez Leal, Vivia
+Nikolaidou, Vladimir Menshakov,
+
+??? and many others who have contributed bug reports, translations, sent
+suggestions or helped testing. Thank you all!
+
+List of merge requests and issues fixed in 1.18.4
+
+-   List of Merge Requests applied in 1.18.4
+-   List of Issues fixed in 1.18.4
+
 Schedule for 1.20
 
 Our next major feature release will be 1.20, and 1.19 will be the
@@ -2724,9 +2886,9 @@
 development of 1.19/1.20 will happen in the git master branch.
 
 The plan for the 1.20 development cycle is yet to be confirmed, but it
-is now expected that feature freeze will take place some time in
-January/February 2021, with the first 1.20 stable release hopefully
-around February/March 2021.
+is now expected that feature freeze will take place some time in April
+2021, with the first 1.20 stable release hopefully around April/May
+2021.
 
 1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/RELEASE 
new/gst-plugins-bad-1.18.4/RELEASE
--- old/gst-plugins-bad-1.18.3/RELEASE  2021-01-13 22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/RELEASE  2021-03-15 18:49:18.000000000 +0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-bad 1.18.3.
+This is GStreamer gst-plugins-bad 1.18.4.
 
 The GStreamer team is thrilled to announce a new major feature release
 of your favourite cross-platform multimedia framework!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.18.3/docs/plugins/gst_plugins_cache.json 
new/gst-plugins-bad-1.18.4/docs/plugins/gst_plugins_cache.json
--- old/gst-plugins-bad-1.18.3/docs/plugins/gst_plugins_cache.json      
2021-01-13 22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/docs/plugins/gst_plugins_cache.json      
2021-03-15 18:49:18.000000000 +0100
@@ -25229,7 +25229,7 @@
                 "long-name": "Interlace filter",
                 "pad-templates": {
                     "sink": {
-                        "caps": "video/x-raw:\n         format: { AYUV, YUY2, 
UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }\n          width: [ 1, 2147483647 
]\n         height: [ 1, 2147483647 ]\n      framerate: [ 0/1, 2147483647/1 
]\n",
+                        "caps": "video/x-raw:\n         format: { AYUV, YUY2, 
UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }\n          width: [ 1, 2147483647 
]\n         height: [ 1, 2147483647 ]\n      framerate: [ 0/1, 2147483647/1 ]\n 
interlace-mode: progressive\nvideo/x-raw:\n         format: { AYUV, YUY2, UYVY, 
I420, YV12, Y42B, Y444, NV12, NV21 }\n          width: [ 1, 2147483647 ]\n      
   height: [ 1, 2147483647 ]\n      framerate: [ 0/1, 2147483647/1 ]\n 
interlace-mode: interleaved\n    field-order: { (string)top-field-first, 
(string)bottom-field-first }\nvideo/x-raw:\n         format: { AYUV, YUY2, 
UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }\n          width: [ 1, 2147483647 
]\n         height: [ 1, 2147483647 ]\n      framerate: [ 0/1, 2147483647/1 ]\n 
interlace-mode: mixed\n\nvideo/x-raw(format:Interlaced):\n         format: { 
AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }\n          width: [ 1, 
2147483647 ]\n         height: [ 1, 2147483647 ]\n      framerate: [ 0/
 1, 2147483647/1 ]\n interlace-mode: alternate\n",
                         "direction": "sink",
                         "presence": "always"
                     },
@@ -222500,7 +222500,7 @@
                     "GObject"
                 ],
                 "klass": "Filter/Video/Convert",
-                "long-name": "Vulkan Uploader",
+                "long-name": "Vulkan Color Convert",
                 "pad-templates": {
                     "sink": {
                         "caps": "video/x-raw(memory:VulkanImage):\n         
format: { BGRA, RGBA, ABGR, ARGB, BGRx, RGBx, xBGR, xRGB, AYUV, YUY2, NV12 }\n  
        width: [ 1, 2147483647 ]\n         height: [ 1, 2147483647 ]\n      
framerate: [ 0/1, 2147483647/1 ]\n",
@@ -222680,7 +222680,7 @@
                     "GObject"
                 ],
                 "klass": "Filter/Video/Convert",
-                "long-name": "Vulkan Uploader",
+                "long-name": "Vulkan View Convert",
                 "pad-templates": {
                     "sink": {
                         "caps": "video/x-raw(memory:VulkanImage):\n         
format: { BGRA, RGBA }\n          width: [ 1, 2147483647 ]\n         height: [ 
1, 2147483647 ]\n      framerate: [ 0/1, 2147483647/1 ]\n",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/ext/dash/gstmpdhelper.c 
new/gst-plugins-bad-1.18.4/ext/dash/gstmpdhelper.c
--- old/gst-plugins-bad-1.18.3/ext/dash/gstmpdhelper.c  2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/ext/dash/gstmpdhelper.c  2021-03-15 
18:49:18.000000000 +0100
@@ -103,7 +103,6 @@
   }
 
 done:
-  gst_caps_unref (caps);
   return codec_name;
 }
 
@@ -128,7 +127,6 @@
   }
 
 done:
-  gst_caps_unref (caps);
   return codec_name;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/ext/vulkan/vkcolorconvert.c 
new/gst-plugins-bad-1.18.4/ext/vulkan/vkcolorconvert.c
--- old/gst-plugins-bad-1.18.3/ext/vulkan/vkcolorconvert.c      2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/ext/vulkan/vkcolorconvert.c      2021-03-15 
18:49:18.000000000 +0100
@@ -895,7 +895,7 @@
   gstelement_class = (GstElementClass *) klass;
   gstbasetransform_class = (GstBaseTransformClass *) klass;
 
-  gst_element_class_set_metadata (gstelement_class, "Vulkan Uploader",
+  gst_element_class_set_metadata (gstelement_class, "Vulkan Color Convert",
       "Filter/Video/Convert", "A Vulkan Color Convert",
       "Matthew Waters <matt...@centricular.com>");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/ext/vulkan/vkviewconvert.c 
new/gst-plugins-bad-1.18.4/ext/vulkan/vkviewconvert.c
--- old/gst-plugins-bad-1.18.3/ext/vulkan/vkviewconvert.c       2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/ext/vulkan/vkviewconvert.c       2021-03-15 
18:49:18.000000000 +0100
@@ -607,7 +607,7 @@
           GST_TYPE_VULKAN_STEREO_DOWNMIX, DEFAULT_DOWNMIX,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  gst_element_class_set_metadata (gstelement_class, "Vulkan Uploader",
+  gst_element_class_set_metadata (gstelement_class, "Vulkan View Convert",
       "Filter/Video/Convert", "A Vulkan View Convert",
       "Matthew Waters <matt...@centricular.com>");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/gst/interlace/gstinterlace.c 
new/gst-plugins-bad-1.18.4/gst/interlace/gstinterlace.c
--- old/gst-plugins-bad-1.18.3/gst/interlace/gstinterlace.c     2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/gst/interlace/gstinterlace.c     2021-03-15 
18:49:18.000000000 +0100
@@ -186,12 +186,16 @@
     );
 
 static GstStaticPadTemplate gst_interlace_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE
-        ("{AYUV,YUY2,UYVY,I420,YV12,Y42B,Y444,NV12,NV21}")
-    )
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (VIDEO_FORMATS)
+        ",interlace-mode=progressive ;" GST_VIDEO_CAPS_MAKE (VIDEO_FORMATS)
+        
",interlace-mode=interleaved,field-order={top-field-first,bottom-field-first}; "
+        GST_VIDEO_CAPS_MAKE (VIDEO_FORMATS) ",interlace-mode=mixed ;"
+        GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_FORMAT_INTERLACED,
+            VIDEO_FORMATS)
+        ",interlace-mode=alternate")
     );
 
 GType gst_interlace_get_type (void);
@@ -649,6 +653,10 @@
     }
 #endif
 
+      if (interlace->stored_frame) {
+        gst_buffer_unref (interlace->stored_frame);
+        interlace->stored_frame = NULL;
+      }
       ret = gst_pad_push_event (interlace->srcpad, event);
       break;
     case GST_EVENT_CAPS:
@@ -1442,6 +1450,9 @@
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       g_mutex_lock (&interlace->lock);
       interlace->src_fps_n = 0;
+      if (interlace->stored_frame) {
+        gst_buffer_unref (interlace->stored_frame);
+      }
       g_mutex_unlock (&interlace->lock);
       /* why? */
       //gst_interlace_reset (interlace);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/gst/mpegtsdemux/mpegtsparse.c 
new/gst-plugins-bad-1.18.4/gst/mpegtsdemux/mpegtsparse.c
--- old/gst-plugins-bad-1.18.3/gst/mpegtsdemux/mpegtsparse.c    2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/gst/mpegtsdemux/mpegtsparse.c    2021-03-15 
18:49:18.000000000 +0100
@@ -809,8 +809,8 @@
   }
 
   /* Copy over input PTS/DTS (if present) */
-  GST_BUFFER_DTS (buf) = base->packetizer->last_pts;
-  GST_BUFFER_PTS (buf) = base->packetizer->last_dts;
+  GST_BUFFER_DTS (buf) = base->packetizer->last_dts;
+  GST_BUFFER_PTS (buf) = base->packetizer->last_pts;
   ret = mpegts_parse_have_buffer (base, gst_buffer_ref (buf));
 
   while (pad && !done) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/gst/sdp/gstsdpsrc.c 
new/gst-plugins-bad-1.18.4/gst/sdp/gstsdpsrc.c
--- old/gst-plugins-bad-1.18.3/gst/sdp/gstsdpsrc.c      2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/gst/sdp/gstsdpsrc.c      2021-03-15 
18:49:18.000000000 +0100
@@ -159,8 +159,11 @@
       if (self->location && strcmp (self->location, "sdp://") != 0) {
         /* Do nothing */
       } else if (self->sdp) {
+        guint sdp_len = strlen (self->sdp);
+
         self->sdp_buffer =
-            gst_buffer_new_wrapped (self->sdp, strlen (self->sdp) + 1);
+            gst_buffer_new_wrapped (g_strndup (self->sdp, sdp_len),
+            sdp_len + 1);
       } else {
         ret = GST_STATE_CHANGE_FAILURE;
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/gst/timecode/gstavwait.c 
new/gst-plugins-bad-1.18.4/gst/timecode/gstavwait.c
--- old/gst-plugins-bad-1.18.3/gst/timecode/gstavwait.c 2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/gst/timecode/gstavwait.c 2021-03-15 
18:49:18.000000000 +0100
@@ -353,7 +353,9 @@
   ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
 
   switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      gboolean send_message = FALSE;
+
       g_mutex_lock (&self->mutex);
       if (self->mode != MODE_RUNNING_TIME) {
         GST_DEBUG_OBJECT (self, "First time reset in paused to ready");
@@ -364,7 +366,7 @@
       }
       if (!self->dropping) {
         self->dropping = TRUE;
-        gst_avwait_send_element_message (self, TRUE, GST_CLOCK_TIME_NONE);
+        send_message = TRUE;
       }
       gst_segment_init (&self->asegment, GST_FORMAT_UNDEFINED);
       self->asegment.position = GST_CLOCK_TIME_NONE;
@@ -377,7 +379,11 @@
         gst_video_time_code_free (self->last_seen_tc);
       self->last_seen_tc = NULL;
       g_mutex_unlock (&self->mutex);
+
+      if (send_message)
+        gst_avwait_send_element_message (self, TRUE, GST_CLOCK_TIME_NONE);
       break;
+    }
     default:
       break;
   }
@@ -609,7 +615,9 @@
   GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEGMENT:
+    case GST_EVENT_SEGMENT:{
+      gboolean send_message = FALSE;
+
       g_mutex_lock (&self->mutex);
       gst_event_copy_segment (event, &self->vsegment);
       if (self->vsegment.format != GST_FORMAT_TIME) {
@@ -625,16 +633,22 @@
       self->audio_running_time_to_end_at = GST_CLOCK_TIME_NONE;
       if (!self->dropping) {
         self->dropping = TRUE;
-        gst_avwait_send_element_message (self, TRUE, GST_CLOCK_TIME_NONE);
+        send_message = TRUE;
       }
       self->vsegment.position = GST_CLOCK_TIME_NONE;
       g_mutex_unlock (&self->mutex);
+
+      if (send_message)
+        gst_avwait_send_element_message (self, TRUE, GST_CLOCK_TIME_NONE);
       break;
+    }
     case GST_EVENT_GAP:
       gst_event_unref (event);
       return TRUE;
     case GST_EVENT_EOS:{
       GstClockTime running_time;
+      gboolean send_message = FALSE;
+      GstClockTime audio_running_time_to_end_at;
 
       g_mutex_lock (&self->mutex);
       self->video_eos_flag = TRUE;
@@ -661,15 +675,16 @@
 
       if (self->must_send_end_message & END_MESSAGE_AUDIO_PUSHED) {
         self->must_send_end_message = END_MESSAGE_NORMAL;
-        g_mutex_unlock (&self->mutex);
-        gst_avwait_send_element_message (self, TRUE,
-            self->audio_running_time_to_end_at);
+        send_message = TRUE;
+        audio_running_time_to_end_at = self->audio_running_time_to_end_at;
       } else if (self->must_send_end_message & END_MESSAGE_STREAM_ENDED) {
         self->must_send_end_message |= END_MESSAGE_VIDEO_PUSHED;
-        g_mutex_unlock (&self->mutex);
-      } else {
-        g_mutex_unlock (&self->mutex);
       }
+      g_mutex_unlock (&self->mutex);
+
+      if (send_message)
+        gst_avwait_send_element_message (self, TRUE,
+            audio_running_time_to_end_at);
       break;
     }
     case GST_EVENT_FLUSH_START:
@@ -678,7 +693,9 @@
       g_cond_signal (&self->audio_cond);
       g_mutex_unlock (&self->mutex);
       break;
-    case GST_EVENT_FLUSH_STOP:
+    case GST_EVENT_FLUSH_STOP:{
+      gboolean send_message = FALSE;
+
       g_mutex_lock (&self->mutex);
       self->video_flush_flag = FALSE;
       GST_DEBUG_OBJECT (self, "First time reset in video flush");
@@ -688,12 +705,16 @@
       self->audio_running_time_to_end_at = GST_CLOCK_TIME_NONE;
       if (!self->dropping) {
         self->dropping = TRUE;
-        gst_avwait_send_element_message (self, TRUE, GST_CLOCK_TIME_NONE);
+        send_message = TRUE;
       }
       gst_segment_init (&self->vsegment, GST_FORMAT_UNDEFINED);
       self->vsegment.position = GST_CLOCK_TIME_NONE;
       g_mutex_unlock (&self->mutex);
+
+      if (send_message)
+        gst_avwait_send_element_message (self, TRUE, GST_CLOCK_TIME_NONE);
       break;
+    }
     case GST_EVENT_CAPS:{
       GstCaps *caps;
       gst_event_parse_caps (event, &caps);
@@ -748,22 +769,27 @@
       g_mutex_unlock (&self->mutex);
       break;
     case GST_EVENT_EOS:{
+      gboolean send_message = FALSE;
+      GstClockTime audio_running_time_to_end_at;
+
       g_mutex_lock (&self->mutex);
       self->audio_eos_flag = TRUE;
       g_cond_signal (&self->audio_cond);
 
       if ((self->must_send_end_message & END_MESSAGE_VIDEO_PUSHED)) {
         self->must_send_end_message = END_MESSAGE_NORMAL;
-        g_mutex_unlock (&self->mutex);
-        gst_avwait_send_element_message (self, TRUE,
-            self->audio_running_time_to_end_at);
+        audio_running_time_to_end_at = self->audio_running_time_to_end_at;
+        send_message = TRUE;
       } else if (self->must_send_end_message & END_MESSAGE_STREAM_ENDED) {
         self->must_send_end_message |= END_MESSAGE_AUDIO_PUSHED;
-        g_mutex_unlock (&self->mutex);
       } else {
         self->must_send_end_message = END_MESSAGE_NORMAL;
-        g_mutex_unlock (&self->mutex);
       }
+      g_mutex_unlock (&self->mutex);
+
+      if (send_message)
+        gst_avwait_send_element_message (self, TRUE,
+            audio_running_time_to_end_at);
       break;
     }
     case GST_EVENT_FLUSH_STOP:
@@ -803,6 +829,9 @@
   GstVideoTimeCodeMeta *tc_meta;
   gboolean retry = FALSE;
   gboolean ret = GST_FLOW_OK;
+  gboolean send_message = FALSE;
+  GstClockTime message_running_time;
+  gboolean message_dropping;
 
   timestamp = GST_BUFFER_TIMESTAMP (inbuf);
   if (timestamp == GST_CLOCK_TIME_NONE) {
@@ -898,8 +927,9 @@
             inbuf = NULL;
           }
         } else if (emit_passthrough_signal && self->recording) {
-          gst_avwait_send_element_message (self, FALSE,
-              self->running_time_to_wait_for);
+          send_message = TRUE;
+          message_running_time = self->running_time_to_wait_for;
+          message_dropping = FALSE;
         }
       }
       break;
@@ -924,8 +954,11 @@
         if (self->recording) {
           self->audio_running_time_to_wait_for = running_time;
         }
-        if (self->recording)
-          gst_avwait_send_element_message (self, FALSE, running_time);
+        if (self->recording) {
+          send_message = TRUE;
+          message_running_time = running_time;
+          message_dropping = FALSE;
+        }
       }
 
       if (GST_CLOCK_TIME_IS_VALID (self->end_running_time)
@@ -948,8 +981,9 @@
           inbuf = NULL;
         }
       } else if (emit_passthrough_signal && self->recording) {
-        gst_avwait_send_element_message (self, FALSE,
-            self->running_time_to_wait_for);
+        send_message = TRUE;
+        message_running_time = self->running_time_to_wait_for;
+        message_dropping = FALSE;
       }
 
       break;
@@ -964,9 +998,11 @@
         }
         if (self->dropping) {
           self->dropping = FALSE;
-          if (self->recording)
-            gst_avwait_send_element_message (self, FALSE,
-                self->running_time_to_wait_for);
+          if (self->recording) {
+            send_message = TRUE;
+            message_running_time = self->running_time_to_wait_for;
+            message_dropping = FALSE;
+          }
         }
       }
       break;
@@ -1015,7 +1051,9 @@
               && running_time > self->running_time_to_wait_for) {
             /* We just started recording: synchronise the audio */
             self->audio_running_time_to_wait_for = running_time;
-            gst_avwait_send_element_message (self, FALSE, running_time);
+            send_message = TRUE;
+            message_running_time = running_time;
+            message_dropping = FALSE;
           } else {
             /* We will start in the future when running_time_to_wait_for is
              * reached */
@@ -1044,6 +1082,11 @@
   g_cond_signal (&self->cond);
   g_mutex_unlock (&self->mutex);
 
+  if (send_message)
+    gst_avwait_send_element_message (self, message_dropping,
+        message_running_time);
+  send_message = FALSE;
+
   if (inbuf) {
     GST_DEBUG_OBJECT (self,
         "Pass video buffer %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT,
@@ -1058,22 +1101,24 @@
   g_mutex_lock (&self->mutex);
   if (self->must_send_end_message & END_MESSAGE_AUDIO_PUSHED) {
     self->must_send_end_message = END_MESSAGE_NORMAL;
-    g_mutex_unlock (&self->mutex);
-    gst_avwait_send_element_message (self, TRUE,
-        self->audio_running_time_to_end_at);
+    send_message = TRUE;
+    message_dropping = TRUE;
+    message_running_time = self->audio_running_time_to_end_at;
   } else if (self->must_send_end_message & END_MESSAGE_STREAM_ENDED) {
     if (self->audio_eos_flag) {
       self->must_send_end_message = END_MESSAGE_NORMAL;
-      g_mutex_unlock (&self->mutex);
-      gst_avwait_send_element_message (self, TRUE,
-          self->audio_running_time_to_end_at);
+      send_message = TRUE;
+      message_dropping = TRUE;
+      message_running_time = self->audio_running_time_to_end_at;
     } else {
       self->must_send_end_message |= END_MESSAGE_VIDEO_PUSHED;
-      g_mutex_unlock (&self->mutex);
     }
-  } else {
-    g_mutex_unlock (&self->mutex);
   }
+  g_mutex_unlock (&self->mutex);
+
+  if (send_message)
+    gst_avwait_send_element_message (self, message_dropping,
+        message_running_time);
 
   return ret;
 }
@@ -1284,20 +1329,25 @@
   }
 
   if (send_element_message) {
+    gboolean send_message = FALSE;
+    GstClockTime audio_running_time_to_end_at;
+
     g_mutex_lock (&self->mutex);
     if ((self->must_send_end_message & END_MESSAGE_VIDEO_PUSHED) ||
         self->video_eos_flag) {
       self->must_send_end_message = END_MESSAGE_NORMAL;
-      g_mutex_unlock (&self->mutex);
-      gst_avwait_send_element_message (self, TRUE,
-          self->audio_running_time_to_end_at);
+      send_message = TRUE;
+      audio_running_time_to_end_at = self->audio_running_time_to_end_at;
     } else if (self->must_send_end_message & END_MESSAGE_STREAM_ENDED) {
       self->must_send_end_message |= END_MESSAGE_AUDIO_PUSHED;
-      g_mutex_unlock (&self->mutex);
     } else {
       g_assert_not_reached ();
-      g_mutex_unlock (&self->mutex);
     }
+    g_mutex_unlock (&self->mutex);
+
+    if (send_message)
+      gst_avwait_send_element_message (self, TRUE,
+          audio_running_time_to_end_at);
   }
   send_element_message = FALSE;
   return ret;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.18.3/gst/videoparsers/gstmpegvideoparse.c 
new/gst-plugins-bad-1.18.4/gst/videoparsers/gstmpegvideoparse.c
--- old/gst-plugins-bad-1.18.3/gst/videoparsers/gstmpegvideoparse.c     
2021-01-13 22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/gst/videoparsers/gstmpegvideoparse.c     
2021-03-15 18:49:18.000000000 +0100
@@ -999,9 +999,6 @@
     mpvparse->send_codec_tag = FALSE;
   }
 
-  /* usual clipping applies */
-  frame->flags |= GST_BASE_PARSE_FRAME_FLAG_CLIP;
-
   if (mpvparse->send_mpeg_meta) {
     GstBuffer *buf;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/gst-plugins-bad.doap 
new/gst-plugins-bad-1.18.4/gst-plugins-bad.doap
--- old/gst-plugins-bad-1.18.3/gst-plugins-bad.doap     2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/gst-plugins-bad.doap     2021-03-15 
18:49:18.000000000 +0100
@@ -35,6 +35,16 @@
 
  <release>
   <Version>
+   <revision>1.18.4</revision>
+   <branch>1.18</branch>
+   <name></name>
+   <created>2021-03-15</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.18.4.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.18.3</revision>
    <branch>1.18</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/meson.build 
new/gst-plugins-bad-1.18.4/meson.build
--- old/gst-plugins-bad-1.18.3/meson.build      2021-01-13 22:11:24.000000000 
+0100
+++ new/gst-plugins-bad-1.18.4/meson.build      2021-03-15 18:49:18.000000000 
+0100
@@ -1,5 +1,5 @@
 project('gst-plugins-bad', 'c', 'cpp',
-  version : '1.18.3',
+  version : '1.18.4',
   meson_version : '>= 0.49',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/sys/d3d11/gstd3d11h264dec.c 
new/gst-plugins-bad-1.18.4/sys/d3d11/gstd3d11h264dec.c
--- old/gst-plugins-bad-1.18.3/sys/d3d11/gstd3d11h264dec.c      2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/sys/d3d11/gstd3d11h264dec.c      2021-03-15 
18:49:18.000000000 +0100
@@ -99,6 +99,8 @@
   guint chroma_format_idc;
   GstVideoFormat out_format;
 
+  gint max_dpb_size;
+
   /* Array of DXVA_Slice_H264_Short */
   GArray *slice_list;
 
@@ -288,6 +290,20 @@
   GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
+/* Clear all codec specific (e.g., SPS) data */
+static void
+gst_d3d11_h264_dec_reset (GstD3D11H264Dec * self)
+{
+  self->width = 0;
+  self->height = 0;
+  self->coded_width = 0;
+  self->coded_height = 0;
+  self->bitdepth = 0;
+  self->chroma_format_idc = 0;
+  self->out_format = GST_VIDEO_FORMAT_UNKNOWN;
+  self->max_dpb_size = 0;
+}
+
 static gboolean
 gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
 {
@@ -308,6 +324,8 @@
     return FALSE;
   }
 
+  gst_d3d11_h264_dec_reset (self);
+
   return TRUE;
 }
 
@@ -419,6 +437,12 @@
     modified = TRUE;
   }
 
+  if (self->max_dpb_size < max_dpb_size) {
+    GST_INFO_OBJECT (self, "Requires larger DPB size (%d -> %d)",
+        self->max_dpb_size, max_dpb_size);
+    modified = TRUE;
+  }
+
   if (modified || !self->d3d11_decoder->opened) {
     GstVideoInfo info;
 
@@ -446,6 +470,12 @@
     gst_video_info_set_format (&info,
         self->out_format, self->width, self->height);
 
+    /* Store configured DPB size here. Then, it will be referenced later
+     * to decide whether we need to re-open decoder object or not.
+     * For instance, if every configuration is same apart from DPB size and
+     * new DPB size is decreased, we can reuse existing decoder object.
+     */
+    self->max_dpb_size = max_dpb_size;
     gst_d3d11_decoder_reset (self->d3d11_decoder);
     if (!gst_d3d11_decoder_open (self->d3d11_decoder, GST_D3D11_CODEC_H264,
             &info, self->coded_width, self->coded_height,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/sys/d3d11/gstd3d11videosink.c 
new/gst-plugins-bad-1.18.4/sys/d3d11/gstd3d11videosink.c
--- old/gst-plugins-bad-1.18.3/sys/d3d11/gstd3d11videosink.c    2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/sys/d3d11/gstd3d11videosink.c    2021-03-15 
18:49:18.000000000 +0100
@@ -559,7 +559,7 @@
 #if GST_D3D11_WINAPI_ONLY_APP
   if (window_type != GST_D3D11_WINDOW_NATIVE_TYPE_CORE_WINDOW &&
       window_type != GST_D3D11_WINDOW_NATIVE_TYPE_SWAP_CHAIN_PANEL) {
-    GST_ERROR_OBJECT (sink, "Overlay handle must be set before READY state");
+    GST_ERROR_OBJECT (self, "Overlay handle must be set before READY state");
     return FALSE;
   }
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/sys/decklink/gstdecklink.cpp 
new/gst-plugins-bad-1.18.4/sys/decklink/gstdecklink.cpp
--- old/gst-plugins-bad-1.18.3/sys/decklink/gstdecklink.cpp     2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/sys/decklink/gstdecklink.cpp     2021-03-15 
18:49:18.000000000 +0100
@@ -661,7 +661,8 @@
   }
 
   f = vinfo.finfo->format;
-  return gst_decklink_type_from_video_format (f);
+  *format = 
gst_decklink_pixel_format_from_type(gst_decklink_type_from_video_format (f));
+  return TRUE;
 }
 
 static GstStructure *
@@ -1022,6 +1023,41 @@
 
     if (clock) {
       capture_time = gst_clock_get_time (clock);
+      if (video_frame) {
+       // If we have the actual capture time for the frame, compensate the
+       // capture time accordingly.
+       //
+       // We do this by subtracting the belay between "now" in hardware
+       // reference clock and the time when the frame was finished being
+       // capture based on the same hardware reference clock.
+       //
+       // We then subtract that difference from the "now" on the gst clock.
+       //
+       // *Technically* we should be compensating that difference for the
+       // difference in clock rate between the "hardware reference clock" and
+       // the GStreamer clock. But since the values are quite small this has
+       // very little impact.
+       BMDTimeValue hardware_now;
+       res = m_input->input->GetHardwareReferenceClock (GST_SECOND, 
&hardware_now, NULL, NULL);
+       if (res == S_OK) {
+         res =
+           video_frame->GetHardwareReferenceTimestamp (GST_SECOND,
+                                                       &hardware_time, 
&hardware_duration);
+         if (res != S_OK) {
+           GST_ERROR ("Failed to get hardware time: 0x%08lx", (unsigned long) 
res);
+           hardware_time = GST_CLOCK_TIME_NONE;
+           hardware_duration = GST_CLOCK_TIME_NONE;
+         } else {
+           GstClockTime hardware_diff = hardware_now - hardware_time;
+           GST_LOG ("Compensating capture time by %" GST_TIME_FORMAT,
+                    GST_TIME_ARGS (hardware_diff));
+           if (capture_time > hardware_diff)
+             capture_time -= hardware_diff;
+           else
+             capture_time = 0;
+         }
+       }
+      }
       if (capture_time > base_time)
         capture_time -= base_time;
       else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.18.3/sys/decklink/gstdecklinkvideosink.cpp 
new/gst-plugins-bad-1.18.4/sys/decklink/gstdecklinkvideosink.cpp
--- old/gst-plugins-bad-1.18.3/sys/decklink/gstdecklinkvideosink.cpp    
2021-01-13 22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/sys/decklink/gstdecklinkvideosink.cpp    
2021-03-15 18:49:18.000000000 +0100
@@ -823,7 +823,7 @@
     gst_byte_writer_put_uint8_unchecked (&bw, 0x2f);
   } else if (mode->fps_n == 25 && mode->fps_d == 1) {
     gst_byte_writer_put_uint8_unchecked (&bw, 0x3f);
-  } else if (mode->fps_n == 30 && mode->fps_d == 1001) {
+  } else if (mode->fps_n == 30000 && mode->fps_d == 1001) {
     gst_byte_writer_put_uint8_unchecked (&bw, 0x4f);
   } else if (mode->fps_n == 30 && mode->fps_d == 1) {
     gst_byte_writer_put_uint8_unchecked (&bw, 0x5f);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/sys/nvcodec/gstnvh264dec.c 
new/gst-plugins-bad-1.18.4/sys/nvcodec/gstnvh264dec.c
--- old/gst-plugins-bad-1.18.3/sys/nvcodec/gstnvh264dec.c       2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/sys/nvcodec/gstnvh264dec.c       2021-03-15 
18:49:18.000000000 +0100
@@ -112,6 +112,7 @@
   guint coded_width, coded_height;
   guint bitdepth;
   guint chroma_format_idc;
+  gint max_dpb_size;
   GstVideoFormat out_format;
 
   /* For OpenGL interop. */
@@ -232,6 +233,20 @@
   GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
+/* Clear all codec specific (e.g., SPS) data */
+static void
+gst_d3d11_h264_dec_reset (GstNvH264Dec * self)
+{
+  self->width = 0;
+  self->height = 0;
+  self->coded_width = 0;
+  self->coded_height = 0;
+  self->bitdepth = 0;
+  self->chroma_format_idc = 0;
+  self->out_format = GST_VIDEO_FORMAT_UNKNOWN;
+  self->max_dpb_size = 0;
+}
+
 static gboolean
 gst_nv_h264_dec_open (GstVideoDecoder * decoder)
 {
@@ -245,6 +260,8 @@
     return FALSE;
   }
 
+  gst_d3d11_h264_dec_reset (self);
+
   return TRUE;
 }
 
@@ -362,6 +379,12 @@
     modified = TRUE;
   }
 
+  if (self->max_dpb_size < max_dpb_size) {
+    GST_INFO_OBJECT (self, "Requires larger DPB size (%d -> %d)",
+        self->max_dpb_size, max_dpb_size);
+    modified = TRUE;
+  }
+
   if (modified || !self->decoder) {
     GstVideoInfo info;
 
@@ -391,6 +414,7 @@
     gst_video_info_set_format (&info,
         self->out_format, self->width, self->height);
 
+    self->max_dpb_size = max_dpb_size;
     /* FIXME: add support cudaVideoCodec_H264_SVC and cudaVideoCodec_H264_MVC 
*/
     self->decoder = gst_nv_decoder_new (self->context, cudaVideoCodec_H264,
         &info,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-bad-1.18.3/tests/check/elements/interlace.c 
new/gst-plugins-bad-1.18.4/tests/check/elements/interlace.c
--- old/gst-plugins-bad-1.18.3/tests/check/elements/interlace.c 1970-01-01 
01:00:00.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/tests/check/elements/interlace.c 2021-03-15 
18:49:18.000000000 +0100
@@ -0,0 +1,216 @@
+/* GStreamer
+ * unit test for interlace
+ *
+ * Copyright (C) 2021 Vivia Nikolaidou <vivia at ahiru dot eu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstharness.h>
+#include <gst/video/video.h>
+
+GST_START_TEST (test_passthrough)
+{
+  GstBuffer *buffer;
+  GstHarness *h;
+
+  h = gst_harness_new ("interlace");
+
+  gst_harness_set (h, "interlace", "field-pattern", 1, "top-field-first", TRUE,
+      NULL);
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=interleaved,field-order=top-field-first,format=AYUV,height=1,width=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_set (h, "interlace", "field-pattern", 1, "top-field-first", 
FALSE,
+      NULL);
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=interleaved,field-order=bottom-field-first,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_reject_passthrough_mixed)
+{
+  GstHarness *h;
+  GstBuffer *buffer;
+
+  h = gst_harness_new ("interlace");
+  gst_harness_play (h);
+
+  gst_harness_set (h, "interlace", "field-pattern", 3, NULL);
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=mixed,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer),
+      GST_FLOW_NOT_NEGOTIATED);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_field_switch)
+{
+  GstHarness *h;
+  GstBuffer *buffer;
+
+  h = gst_harness_new ("interlace");
+
+  gst_harness_set (h, "interlace", "field-pattern", 1, "top-field-first", 
FALSE,
+      NULL);
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=interleaved,field-order=top-field-first,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_set (h, "interlace", "field-pattern", 1, "top-field-first", TRUE,
+      NULL);
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=interleaved,field-order=bottom-field-first,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_framerate_2_2)
+{
+  GstHarness *h;
+  GstBuffer *buffer;
+
+  h = gst_harness_new ("interlace");
+
+  gst_harness_set (h, "interlace", "field-pattern", 1, "top-field-first", TRUE,
+      NULL);
+  gst_harness_set_sink_caps_str (h, "video/x-raw,framerate=1/1");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_set_sink_caps_str (h, "video/x-raw,framerate=1/1");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=2/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer),
+      GST_FLOW_NOT_NEGOTIATED);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_framerate_1_1)
+{
+  GstHarness *h;
+  GstBuffer *buffer;
+
+  h = gst_harness_new ("interlace");
+
+  gst_harness_set (h, "interlace", "field-pattern", 0, "top-field-first", TRUE,
+      NULL);
+  gst_harness_set_sink_caps_str (h, "video/x-raw,framerate=1/1");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer),
+      GST_FLOW_NOT_NEGOTIATED);
+
+  gst_harness_set_sink_caps_str (h, "video/x-raw,framerate=1/1");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=2/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_framerate_3_2)
+{
+  GstHarness *h;
+  GstBuffer *buffer;
+
+  h = gst_harness_new ("interlace");
+
+  gst_harness_set (h, "interlace", "field-pattern", 2, NULL);
+  gst_harness_set_sink_caps_str (h, "video/x-raw,framerate=30/1");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=24/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer), GST_FLOW_OK);
+
+  gst_harness_set_sink_caps_str (h, "video/x-raw,framerate=1/1");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=1/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer),
+      GST_FLOW_NOT_NEGOTIATED);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_framerate_empty_not_negotiated)
+{
+  GstHarness *h;
+  GstBuffer *buffer;
+
+  h = gst_harness_new ("interlace");
+
+  gst_harness_set_sink_caps_str (h, "EMPTY");
+  gst_harness_set_src_caps_str (h,
+      
"video/x-raw,interlace-mode=progressive,format=AYUV,width=1,height=1,framerate=24/1");
+  buffer = gst_harness_create_buffer (h, 4);
+  fail_unless_equals_int (gst_harness_push (h, buffer),
+      GST_FLOW_NOT_NEGOTIATED);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+static Suite *
+interlace_suite (void)
+{
+  Suite *s = suite_create ("interlace");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+
+  tcase_add_test (tc_chain, test_passthrough);
+  tcase_add_test (tc_chain, test_reject_passthrough_mixed);
+  tcase_add_test (tc_chain, test_field_switch);
+  tcase_add_test (tc_chain, test_framerate_2_2);
+  tcase_add_test (tc_chain, test_framerate_1_1);
+  tcase_add_test (tc_chain, test_framerate_3_2);
+  tcase_add_test (tc_chain, test_framerate_empty_not_negotiated);
+
+  return s;
+}
+
+GST_CHECK_MAIN (interlace);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-bad-1.18.3/tests/check/meson.build 
new/gst-plugins-bad-1.18.4/tests/check/meson.build
--- old/gst-plugins-bad-1.18.3/tests/check/meson.build  2021-01-13 
22:11:24.000000000 +0100
+++ new/gst-plugins-bad-1.18.4/tests/check/meson.build  2021-03-15 
18:49:18.000000000 +0100
@@ -33,6 +33,7 @@
   [['elements/h265parse.c'], false, [libparser_dep, gstcodecparsers_dep]],
   [['elements/hlsdemux_m3u8.c'], not hls_dep.found(), [hls_dep]],
   [['elements/id3mux.c']],
+  [['elements/interlace.c']],
   [['elements/jpeg2000parse.c'], false, [libparser_dep, gstcodecparsers_dep]],
   [['elements/mfvideosrc.c'], host_machine.system() != 'windows', ],
   [['elements/mpegtsdemux.c'], false, [gstmpegts_dep]],

Reply via email to