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]],