platform/upstream/gstreamer.git
4 years agoext: add libmicrodns-based mdns device provider
Mathieu Duponchelle [Mon, 16 Sep 2019 23:52:54 +0000 (01:52 +0200)]
ext: add libmicrodns-based mdns device provider

The provider for now only detects and handles rtsp devices, but
more protocols should be easy to add.

4 years agomsdkh265enc: add the missing profile string
Haihao Xiang [Tue, 8 Oct 2019 01:40:06 +0000 (09:40 +0800)]
msdkh265enc: add the missing profile string

4 years agohlssink2: Respect requested max-files property for decision on removing old fragments...
Seungha Yang [Mon, 7 Oct 2019 05:21:58 +0000 (14:21 +0900)]
hlssink2: Respect requested max-files property for decision on removing old fragments from disk

hlssink2 defined "max-files" property to decide the maximum number
of fragments which should be stored in disk. But we've not used
the property. Instead, the size has been maintained by "playlist-length".
Since "max-files" and "playlist-length" have different meaning,
the decision should be done by "max-files" property.

For example, an user might want expose only 3 fragments via playlist
but might want to keep more files than 3 in disk.

4 years agoass: avoid infinite unref loop with bad data
Matthew Waters [Sun, 6 Oct 2019 13:05:08 +0000 (00:05 +1100)]
ass: avoid infinite unref loop with bad data

A classic case of not updating the next item to iterate after deleting
it from the singly linked list.

Only ever hit with a text buffer with GST_CLOCK_TIME_NONE for either the
timestamp or duration.

4 years agod3d11window: Protect registration/creation of WIN32 window
Seungha Yang [Tue, 17 Sep 2019 10:56:23 +0000 (19:56 +0900)]
d3d11window: Protect registration/creation of WIN32 window

Querying existing window class info and creation of window object
should be protected since they are not thread safe.

4 years agod3d11videosink: Don't try to post error message by d3d11window self
Seungha Yang [Fri, 4 Oct 2019 12:15:15 +0000 (21:15 +0900)]
d3d11videosink: Don't try to post error message by d3d11window self

The d3d11window isn't GstElement. To post error message, proxy it
to d3d11videosink instead.

4 years agopkgconfig: Fix gstreamer-bad-transcoder-1.0.pc generation
Alexandru Băluț [Thu, 3 Oct 2019 23:32:34 +0000 (01:32 +0200)]
pkgconfig: Fix gstreamer-bad-transcoder-1.0.pc generation

4 years agomsdkenc: guard MFX_FOURCC_Y410 with MFX version 1027
Víctor Manuel Jáquez Leal [Tue, 1 Oct 2019 09:00:02 +0000 (11:00 +0200)]
msdkenc: guard MFX_FOURCC_Y410 with MFX version 1027

4 years agohlssink,hlssink2: Ensure writing ENDLIST tag at the end
Seungha Yang [Tue, 1 Oct 2019 06:36:29 +0000 (15:36 +0900)]
hlssink,hlssink2: Ensure writing ENDLIST tag at the end

hlssink* elements could be finalized without EOS event, and in that case
the final playlist might not include the EXT-X-ENDLIST tag.
Since missing ENDLIST tag means it's live stream, but we did't intend it,
hlssink* elements should put the tag at the end.

4 years agomsdkdec: set lockable flag
Haihao Xiang [Thu, 26 Sep 2019 01:52:14 +0000 (09:52 +0800)]
msdkdec: set lockable flag

When postpone_free_surface is TRUE, the output buffer is not writable,
however the base decoder needs a writable buffer as output buffer,
otherwise it will make a copy of the output buffer. As the underlying
memory is always lockable, so we may set the LOCKABLE flag for this buffer
to avoid buffer copy in the base class.

The refcount of the output buffer is 1 when postpone_free_surface is
FALSE, so needn't set the LOCKABLE flag for this case.

4 years agomsdkh265enc: add support for Y410 in sink pad
Haihao Xiang [Mon, 30 Sep 2019 02:13:56 +0000 (10:13 +0800)]
msdkh265enc: add support for Y410 in sink pad

Sample pipeline:
gst-launch-1.0 videotestsrc ! video/x-raw,format=Y410 !
msdkh265enc low-power=1 ! filesink location=output.h265

4 years agomsdkh265enc: add support for VUYA in sink pad
Haihao Xiang [Mon, 30 Sep 2019 01:48:26 +0000 (09:48 +0800)]
msdkh265enc: add support for VUYA in sink pad

sample pipelie:
gst-launch-1.0 videotestsrc ! video/x-raw,format=VUYA !
msdkh265enc low-power=1 ! filesink location=output.h265

4 years agomsdkenc: clean up code by using switch
Haihao Xiang [Mon, 30 Sep 2019 00:57:42 +0000 (08:57 +0800)]
msdkenc: clean up code by using switch

It is convenient for us to add support for new formats in future, there
is no change in functionality.

4 years agomsdk: remove some dead code
Haihao Xiang [Mon, 30 Sep 2019 01:09:23 +0000 (09:09 +0800)]
msdk: remove some dead code

4 years agowayland: Add more DRM formats
olivier.crete@collabora.com [Tue, 6 Aug 2019 20:08:12 +0000 (21:08 +0100)]
wayland: Add more DRM formats

Add DRM format equivalents that we were missing compared
to our caps.

4 years agowayland: Drop big-endian version of the DRM formats
olivier.crete@collabora.com [Tue, 6 Aug 2019 18:09:54 +0000 (19:09 +0100)]
wayland: Drop big-endian version of the DRM formats

They were a big in some big-endian implementations

4 years agod3d11videosink: Use pixel aspect ratio to setup window draw area
Seungha Yang [Fri, 23 Aug 2019 04:41:54 +0000 (13:41 +0900)]
d3d11videosink: Use pixel aspect ratio to setup window draw area

... instead of calculated display ratio from given PAR and DAR.

d3d11window calculates output display ratio
to decide padding area per window resize event. In the formula,
actual PAR is required to handle both 1:1 PAR and non-1:1 PAR.

4 years agofluidsynth: add sf3 to soundfont search path
Fabian Greffrath [Tue, 24 Sep 2019 18:29:21 +0000 (20:29 +0200)]
fluidsynth: add sf3 to soundfont search path

In Debian, soundfonts in SF3 format (i.e. the same as SF2 format but
with Ogg/Vorbis-compressed samples) are installed into
/usr/share/sounds/sf3. Soundfonts in SF3 format are supported since
FluidSynth 1.1.7 (released in Feb 2018).

4 years agovulkan: Fix build on Windows
Seungha Yang [Wed, 25 Sep 2019 12:36:58 +0000 (21:36 +0900)]
vulkan: Fix build on Windows

* Fix meson build script for Windows. Since the Vulkan dependency
object was declared by us in case of Windows, the dependency object
shouldn't be used for finding header

* Fix build error by including Windows specific header
gstvkdisplay.c(563): error C2065: 'VK_KHR_WIN32_SURFACE_EXTENSION_NAME': undeclared identifier

4 years agovulkan: remove VkImageView from the memory
Matthew Waters [Tue, 24 Sep 2019 07:24:38 +0000 (17:24 +1000)]
vulkan: remove VkImageView from the memory

There can be multiple views per image for different subresource ranges
or planes in multi-planer images.

4 years agovkbuffer: remove buffer view from the memory
Matthew Waters [Tue, 24 Sep 2019 03:53:22 +0000 (13:53 +1000)]
vkbuffer: remove buffer view from the memory

It's only really useful for texture buffers which we currently do not
use.

4 years agobuild/vulkan: fix copy-paste error in gstvkconfig.h
Matthew Waters [Tue, 24 Sep 2019 03:52:17 +0000 (13:52 +1000)]
build/vulkan: fix copy-paste error in gstvkconfig.h

4 years agovulkan: remove the winsys-specific headers from gst/vulkan/vulkan.h
Matthew Waters [Wed, 18 Sep 2019 13:49:08 +0000 (23:49 +1000)]
vulkan: remove the winsys-specific headers from gst/vulkan/vulkan.h

Allows not having wayland, xcb, Cocoa, UIKit, windows.h included in the
public GstVulkan API.

4 years agoerrorignore: Added convert-error signal
Vivia Nikolaidou [Tue, 24 Sep 2019 08:25:00 +0000 (11:25 +0300)]
errorignore: Added convert-error signal

The convert-error signal is emitted whenever we get a GstFlowReturn
other than GST_FLOW_OK. The handler can then decide what to convert that
into - for instance, return the same GstFlowReturn to not convert it.
The default handler will act according to the ignore-error,
ignore-notlinked, ignore-notnegotiated and convert-to properties. If a
handler is connected, these properties are ignored.

4 years agobuild: fix werror build with newer gcc
Matthew Waters [Tue, 24 Sep 2019 00:29:44 +0000 (10:29 +1000)]
build: fix werror build with newer gcc

In file included from ../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/gstbin.h:27,
                 from ../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/gst.h:35,
                 from ../gst/rtp/gstrtpsink.h:23,
                 from ../gst/rtp/gstrtpsink.c:49:
In function ‘gst_rtp_sink_start’,
    inlined from ‘gst_rtp_sink_change_state’ at ../gst/rtp/gstrtpsink.c:509:11:
../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/gstelement.h:422:18: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
  422 |   gchar *__txt = _gst_element_error_printf text;                        \
../gst/rtp/gstrtpsink.c:476:3: note: in expansion of macro ‘GST_ELEMENT_ERROR’
  476 |   GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND,
      |   ^~~~~~~~~~~~~~~~~
../gst/rtp/gstrtpsink.c: In function ‘gst_rtp_sink_change_state’:
../gst/rtp/gstrtpsink.c:477:37: note: format string is defined here
  477 |       ("Could not resolve hostname '%s'", remote_addr),
      |                                     ^~

In file included from ../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/gstbin.h:27,
                 from ../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/gst.h:35,
                 from ../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/rtp/gstrtpdefs.h:27,
                 from ../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/rtp/rtp.h:25,
                 from ../gst/rist/gstristsink.c:72:
In function ‘gst_rist_sink_setup_rtcp_socket’,
    inlined from ‘gst_rist_sink_start’ at ../gst/rist/gstristsink.c:658:10,
    inlined from ‘gst_rist_sink_change_state’ at ../gst/rist/gstristsink.c:801:13:
../../../../dist/linux_x86_64/include/gstreamer-1.0/gst/gstelement.h:422:18: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
  422 |   gchar *__txt = _gst_element_error_printf text;                        \
../gst/rist/gstristsink.c:595:3: note: in expansion of macro ‘GST_ELEMENT_ERROR’
  595 |   GST_ELEMENT_ERROR (sink, RESOURCE, NOT_FOUND,
      |   ^~~~~~~~~~~~~~~~~
../gst/rist/gstristsink.c: In function ‘gst_rist_sink_change_state’:
../gst/rist/gstristsink.c:596:37: note: format string is defined here
  596 |       ("Could not resolve hostname '%s'", remote_addr),
      |                                     ^~

4 years agomsdk: fix for mfx frame alloc response
Haihao Xiang [Mon, 9 Sep 2019 05:40:53 +0000 (13:40 +0800)]
msdk: fix for mfx frame alloc response

Both MSDK and this plugin use mfxFrameAllocResponse for video and DMABuf
memory, it is possible that some GST buffers are still in use when calling
gst_msdk_frame_free, so add a reference count in the wrapper of
mfxFrameAllocResponse (GstMsdkAllocResponse) to make sure the underlying
mfx resources are still available if the corresponding buffer pool is in
use.

In addtion, currently all allocators for input or output share the same
mfxFrameAllocResponse pointer in an element, so it is possible that
the content of mfxFrameAllocResponse is updated for a new caps then all
GST buffers allocated from an old allocator will use this new content of
mfxFrameAllocResponse, which will result in unexpected behavior. In this
fix, we save the the content of mfxFrameAllocResponse in the corresponding
tructure to avoid such issue

Sample pipeline:

gst-launch-1.0 filesrc location=vp9_multi_resolutions.ivf ! ivfparse ! msdkvp9dec !
msdkvpp ! video/x-raw\(memory:DMABuf\),format=NV12 ! glimagesink

4 years agomsdk: don't cache mfxFrameAllocResponse pointer
Haihao Xiang [Wed, 11 Sep 2019 02:49:10 +0000 (10:49 +0800)]
msdk: don't cache mfxFrameAllocResponse pointer

Otherwise it is possible that different wrappers share the same
mfxFrameAllocResponse pointer, so instead of caching the pointer, we may
cache the content of mfxFrameAllocResponse

4 years agomsdkdec: postpone surface free for VC1
Haihao Xiang [Tue, 2 Jul 2019 07:21:24 +0000 (15:21 +0800)]
msdkdec: postpone surface free for VC1

For a skipped frame in VC1, MSDK returns the mfx surface of the reference
frame, so we have to make sure the corresponding surface for the
reference frame is not freed. In this fix, we postpone surface free because
we don't know whether a surface is referenced

Before this fix, the error is like as below:

New clock: GstSystemClock
0:00:00.181793130 23098 0x55f8a9d622d0 ERROR                msdkdec
gstmsdkdec.c:622:gst_msdkdec_finish_task:<msdkvc1dec0> Couldn't find the
cached MSDK surface

Sample pipeline:
gst-launch-1.0 filesrc location=input_has_skipped_frame.wmv ! asfdemux !
vc1parse ! msdkvc1dec ! glimagesink

4 years agomsdkdec: release the surface if this surface is not in use
Haihao Xiang [Tue, 17 Sep 2019 06:42:51 +0000 (14:42 +0800)]
msdkdec: release the surface if this surface is not in use

If the surface is not in use, we may release it even if GST_FLOW_OK is going
to be returned, which may avoid the issue of failing to get surface
available

This fixes the regression caused by commit c05acf4

4 years agomsdk: adjust the stride align
Haihao Xiang [Thu, 1 Aug 2019 05:48:54 +0000 (13:48 +0800)]
msdk: adjust the stride align

GstAllocationParams::align is set to 31 in msdkdec/msdken/msdkvpp, hence
the stride align should be greater than or equal to 31, otherwise it
will result in issue
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/861
(msdk: "GStreamer-CRITICAL: gst_buffer_resize_range failed" SPAM),

In addition, the stride should match the pitch alignment in the media driver,
otherwise it will result in some issues when a buffer is shared between
different elements, e.g. the NV12 issue mentioned in commit 3f2314a, which
can be reproduced by `gst-launch-1.0 vidoetestsrc ! msdkvpp !
video/x-raw\(memory:DMABuf\),format=NV12 ! glimagesink`

Fixed https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/861

4 years agortpmanagerbad: allow creation of elements at initialisation
Marc Leeman [Fri, 20 Sep 2019 15:35:09 +0000 (15:35 +0000)]
rtpmanagerbad: allow creation of elements at initialisation

4 years agovulkan: implement command buffer reuse
Matthew Waters [Tue, 17 Sep 2019 12:24:04 +0000 (22:24 +1000)]
vulkan: implement command buffer reuse

Using a similar design for reference counting as
GstBuffer/GstBufferPool.

4 years agoristsrc: Fix comment about odd/even ports
Nicolas Dufresne [Wed, 18 Sep 2019 20:27:35 +0000 (16:27 -0400)]
ristsrc: Fix comment about odd/even ports

It is the RTP port that is even, and the RTCP port being +1 (hence odd).

4 years agod3d11: Use g_cond_broadcast() to wake up waiting threads
Seungha Yang [Wed, 18 Sep 2019 09:43:41 +0000 (18:43 +0900)]
d3d11: Use g_cond_broadcast() to wake up waiting threads

gst_d3d11_device_thread_add() can be called concurrently from different
threads so the cond signal should reach to all waiting threads.

4 years agovulkan: add device provider implementation
Matthew Waters [Mon, 16 Sep 2019 05:29:26 +0000 (15:29 +1000)]
vulkan: add device provider implementation

4 years agovulkansink: attempt a context query for a device
Matthew Waters [Mon, 16 Sep 2019 03:00:34 +0000 (13:00 +1000)]
vulkansink: attempt a context query for a device

4 years agovulkan: split physical device from logical device
Matthew Waters [Mon, 16 Sep 2019 02:59:08 +0000 (12:59 +1000)]
vulkan: split physical device from logical device

4 years agovulkan: expose various flags to string methods
Matthew Waters [Mon, 16 Sep 2019 01:24:13 +0000 (11:24 +1000)]
vulkan: expose various flags to string methods

4 years agovulkan: only pass the device/instance/display in to *_handle_*() functions
Matthew Waters [Mon, 16 Sep 2019 01:21:55 +0000 (11:21 +1000)]
vulkan: only pass the device/instance/display in to *_handle_*() functions

We don't need to change the pointer value in these functions.

4 years agomsdkenc: remove unneeded label
Haihao Xiang [Mon, 16 Sep 2019 02:52:53 +0000 (10:52 +0800)]
msdkenc: remove unneeded label

4 years agoGstViewfinderBin: Fix typo in videoscale's name element
VaL Doroshchuk [Mon, 9 Sep 2019 13:28:32 +0000 (15:28 +0200)]
GstViewfinderBin: Fix typo in videoscale's name element

If user's video sink has been changed, it is unable to fetch
videoscale element by name and link to the video sink.

4 years agoapplemedia/videocache: remove unimplemented/used upload function
Matthew Waters [Mon, 26 Aug 2019 06:48:13 +0000 (16:48 +1000)]
applemedia/videocache: remove unimplemented/used upload function

4 years agovulkan/window/ios: fix race on window startup
Matthew Waters [Wed, 11 Sep 2019 13:09:35 +0000 (23:09 +1000)]
vulkan/window/ios: fix race on window startup

1. The iOS create_surface implementation needs to call out to the main
thread to create the window (UIKit requirement)
2. get_surface() can be called and will attempt to create the VkSurface
from an invalid view/layer.

Also pass the layer for MoltenVK so we don't get pesky 'UIView function
not called on main thread' warnings.

4 years agovulkan: create the macos/ios-specific displays
Matthew Waters [Wed, 11 Sep 2019 14:10:37 +0000 (00:10 +1000)]
vulkan: create the macos/ios-specific displays

4 years agovulkan: install public gstvkdebug.h header
Matthew Waters [Thu, 12 Sep 2019 05:29:05 +0000 (15:29 +1000)]
vulkan: install public gstvkdebug.h header

4 years agomsdkdec: set pointer to NULL to avoid freeing an used surface
Haihao Xiang [Wed, 11 Sep 2019 07:06:58 +0000 (15:06 +0800)]
msdkdec: set pointer to NULL to avoid freeing an used surface

The surface should be cached in the surface list when GST_FLOW_OK is
going to be returned

This fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1051

4 years agomsdk: free mfx frames to avoid memory leaks in encoder and vpp
Haihao Xiang [Wed, 21 Aug 2019 04:45:37 +0000 (12:45 +0800)]
msdk: free mfx frames to avoid memory leaks in encoder and vpp

4 years agomsdkdec: unref the caps to avoid memory leaks
Haihao Xiang [Tue, 10 Sep 2019 06:44:19 +0000 (14:44 +0800)]
msdkdec: unref the caps to avoid memory leaks

4 years agomsdkvpp: free msdk surfaces to avoid memory leak
Haihao Xiang [Thu, 29 Aug 2019 01:31:22 +0000 (09:31 +0800)]
msdkvpp: free msdk surfaces to avoid memory leak

4 years agomsdkvpp: unref buffer pools
Haihao Xiang [Wed, 21 Aug 2019 04:27:57 +0000 (12:27 +0800)]
msdkvpp: unref buffer pools

Unref the pools first in caps re-negotiation to avoid memory leak

4 years agomsdk: fix memory leaks in msdk allocators
Haihao Xiang [Thu, 29 Aug 2019 07:28:36 +0000 (15:28 +0800)]
msdk: fix memory leaks in msdk allocators

4 years agomsdkenc: work-around to avoid zero fps in MediaSDK structure
Fuwei Tang [Thu, 5 Sep 2019 01:05:10 +0000 (09:05 +0800)]
msdkenc: work-around to avoid zero fps in MediaSDK structure

4 years agomsdkenc: add an extra surface for hevc encoding
Fuwei Tang [Mon, 9 Sep 2019 05:42:56 +0000 (13:42 +0800)]
msdkenc: add an extra surface for hevc encoding

For some hevc 10bit 4K encoding cases, the encoding process may be
slow, and MediaSDK surface can't be released in time before one other
available surface is needed. So add an extra surface for hevc encoding
to avoid this issue.

4 years agowebrtc/stats: redo considering internal sources
Matthew Waters [Mon, 12 Aug 2019 09:42:12 +0000 (19:42 +1000)]
webrtc/stats: redo considering internal sources

Internal sources seem to be rtp streams we are sending whereas
non-internal sources are the rtp streams we are receiving. Redo the
statistics with that in mind.

4 years agovulkan: fix build with older API headers
Matthew Waters [Wed, 11 Sep 2019 23:33:44 +0000 (09:33 +1000)]
vulkan: fix build with older API headers

The protected memory flags were only added later as was the
multi-instance flag.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1081

4 years agoexamples: nvcodec: Add example for runtime configuration change with nvcodec
Seungha Yang [Fri, 6 Sep 2019 03:52:37 +0000 (12:52 +0900)]
examples: nvcodec: Add example for runtime configuration change with nvcodec

Add new example for testing dynamic change of configuration suce as
resolution and properties.

4 years agonvenc: Early terminate handle_frame if the last flow was not GST_FLOW_OK
Seungha Yang [Fri, 30 Aug 2019 12:35:44 +0000 (21:35 +0900)]
nvenc: Early terminate handle_frame if the last flow was not GST_FLOW_OK

If the last flow was not GST_FLOW_OK, the encoding thread is not running
and there is nothing to pop from GAsyncQueue (this causes deadlock).

To prevent deadlock, just return the handle_frame without further encoding
process if the last flow was not GST_FLOW_OK. Note that the last flow
will be cleared per FLUSH_STOP and STREAM_START event.

4 years agonvenc: Add support VUYA format
Seungha Yang [Tue, 20 Aug 2019 13:07:30 +0000 (22:07 +0900)]
nvenc: Add support VUYA format

The addition is very simple. Map NV_ENC_BUFFER_FORMAT_AYUV format
to GST_VIDEO_FORMAT_VUYA and add a condition for the VUYA format.

4 years agonvdec: Add support for mpeg4 video decoding with codec_data
Seungha Yang [Wed, 28 Aug 2019 14:46:44 +0000 (23:46 +0900)]
nvdec: Add support for mpeg4 video decoding with codec_data

Decoder should handle codec_data of mpeg4 video which includes essential
config data.

4 years agonvenc: Reduce the number of pre-allocated device memory
Seungha Yang [Wed, 11 Sep 2019 05:56:00 +0000 (14:56 +0900)]
nvenc: Reduce the number of pre-allocated device memory

The hard-coded upper bound 32 (or 48 depending on resolution) might waste
GPU memory and high resolution encoding causes OUT-OF-MEMORY allocation error
quite easily. This commit calculates the number of required pre-allocated
device memory based on encoding options and it can reduce the amount of device memory
used by nvenc.

4 years agovulkan: dump most of the device information
Matthew Waters [Wed, 11 Sep 2019 09:24:50 +0000 (19:24 +1000)]
vulkan: dump most of the device information

Dump anything that can be queried using the physical device like features,
limits, queue properties, memory properties.

4 years agonvdec: Update plugin description and fix typo
Seungha Yang [Wed, 11 Sep 2019 06:16:45 +0000 (15:16 +0900)]
nvdec: Update plugin description and fix typo

Use consistent description with nvenc, and fix typo s/devide/device/g

4 years agonvenc: Adjust DTS when bframe is enabled
Seungha Yang [Sun, 18 Aug 2019 08:31:53 +0000 (17:31 +0900)]
nvenc: Adjust DTS when bframe is enabled

NVDEC driver always uses input timestamp without adjustment
even if bframe encoding was enabled.
So DTS can be larger than PTS when bframe was enabled.
To ensure PTS >= DTS, we should adjust the timestamp manually
based on the PTS difference between the first
encoded frame and the second one. That's also the maximum PTS/DTS
difference.

4 years agonvenc: Add qp-{min,max,const}-{i,p,b} properties
Seungha Yang [Tue, 3 Sep 2019 10:46:09 +0000 (19:46 +0900)]
nvenc: Add qp-{min,max,const}-{i,p,b} properties

This new properties allows more detailed target QP value setting

4 years agonvenc: Add properties to support bframe encoding if device supports it
Seungha Yang [Tue, 3 Sep 2019 12:22:08 +0000 (21:22 +0900)]
nvenc: Add properties to support bframe encoding if device supports it

Note that bframe encoding capability varies with GPU architecture

4 years agonvenc: Refactoring internal buffer pool structure
Seungha Yang [Mon, 2 Sep 2019 05:13:26 +0000 (14:13 +0900)]
nvenc: Refactoring internal buffer pool structure

To support rc-lookahead and bframe encoding, nvenc needs one more
staging queue, because NvEncEncodePicture can return NV_ENC_ERR_NEED_MORE_INPUT
but which was not considered so far.
As documented by NVENC programming guide, pending buffers should wait
other inputs until NvEncEncodePicture returns success.

New encoding flow is
- Submit raw picture buffer to encoder with NvEncEncodePicture
- The submitted input/output buffer pair will be queued to pending_queue
  - If NvEncEncodePicture returned success, then move all pair in pending_queue
    to final stage
  - Otherwise, wait more input raw pictures.

Another change is dropping NV_ENC_LOCK_INPUT_BUFFER usage.
So now nvenc always uses CUDA memory input buffer. As a result,
both opengl and system memory handling are unified.

4 years agonvenc: Remove pointless iteration and cleanup some code
Seungha Yang [Sun, 28 Jul 2019 06:41:07 +0000 (15:41 +0900)]
nvenc: Remove pointless iteration and cleanup some code

* The number of iteration is always one so the iteration is useless
and that makes code complicated.
* Also defining named structure can code mroe readable.
* g_free is null safe

4 years agonvenc: Add more rate-control options
Seungha Yang [Tue, 3 Sep 2019 12:33:15 +0000 (21:33 +0900)]
nvenc: Add more rate-control options

New rate-control modes are introduced (if device can support)
* cbr-ld-hr: CBR low-delay high quality
* cbr-hq: CBR high quality
* vbr-hq: VBR high quality

Also, various configurable rate-control related properties are added.

4 years agonvenc: Add support for weighted prediction option
Seungha Yang [Tue, 3 Sep 2019 12:28:44 +0000 (21:28 +0900)]
nvenc: Add support for weighted prediction option

Note that this property will be exposed only if the device
supports the weighted prediction.

4 years agonvenc: Add property for AUD insertion
Seungha Yang [Fri, 26 Jul 2019 07:46:30 +0000 (16:46 +0900)]
nvenc: Add property for AUD insertion

Make AUD insertion configurable option

4 years agonvenc: Refactor class hierarchy to handle device capability dependent options
Seungha Yang [Tue, 3 Sep 2019 09:46:30 +0000 (18:46 +0900)]
nvenc: Refactor class hierarchy to handle device capability dependent options

Introducing new dynamic class between GstNvBaseEncClass and
each subclass to be able to access device specific properties and
capabilities from each subclass implementation side.

4 years agomsdk: actually use the include dir we compute
Mathieu Duponchelle [Wed, 11 Sep 2019 00:12:55 +0000 (02:12 +0200)]
msdk: actually use the include dir we compute

4 years agonvcodec: minor spell corrects in log messages
Marc Leeman [Tue, 10 Sep 2019 23:13:17 +0000 (23:13 +0000)]
nvcodec: minor spell corrects in log messages

4 years agomsdk: Remove all DMABuf caps features on Windows
Seungha Yang [Mon, 26 Aug 2019 05:54:13 +0000 (14:54 +0900)]
msdk: Remove all DMABuf caps features on Windows

Add new macro for sink/src pad template to ensure no DMABuf caps
features are exposed on Windows. Some DMABuf caps features
were not handled by the commit 9ec62418c31cab4072bf173f279234e36eeec596

4 years agomsdkdec: Do not use video memory on Windows
Seungha Yang [Wed, 4 Sep 2019 04:30:37 +0000 (13:30 +0900)]
msdkdec: Do not use video memory on Windows

Like msdkenc, do not use video memory by default on Windows.

4 years agomsdk: Allow video and system memory share among buffers
Seungha Yang [Wed, 4 Sep 2019 04:18:38 +0000 (13:18 +0900)]
msdk: Allow video and system memory share among buffers

gst_buffer_make_writable() requires exclusive reference to the
GstMemory so the _make_writable() for the msdk buffer will result
to fallback system memory copy, because the msdk memory were initialized
with GST_MEMORY_FLAG_NO_SHARE flag.

Note that, disable sharing GstMemory brings high overhead but actually
the msdk memory objects can be shared over multiple buffers.
If the memory is not shareable, newly added GstAllocator::mem_copy will
create copied msdk memory.

4 years agomsdkh265dec: remove the requirement on profile
Haihao Xiang [Thu, 8 Aug 2019 03:27:19 +0000 (11:27 +0800)]
msdkh265dec: remove the requirement on profile

Sometimes a HEVC/H265 stream doesn't have a valid profile but MSDK can
handle this stream. Like vaapih265dec, msdkh265dec may advertise the sink
caps without profile

4 years agowayland: gracefully handle unknown formats
Mark Nauwelaerts [Sun, 8 Sep 2019 19:25:44 +0000 (21:25 +0200)]
wayland: gracefully handle unknown formats

4 years agoav1enc: change cpu-used range upto 5
Wonchul Lee [Fri, 6 Sep 2019 13:21:50 +0000 (22:21 +0900)]
av1enc: change cpu-used range upto 5

The speed 6, 7 and 8 has been removed because it's not yet tuned
correctly.
https://aomedia.googlesource.com/aom/+/7ffbf92030baf6886c2486574cca16d60499bbb8

4 years agogst-player: fix bug with changing playback direction
Askar Safin [Wed, 4 Sep 2019 09:54:17 +0000 (12:54 +0300)]
gst-player: fix bug with changing playback direction

Fix gst_event_new_seek call in gst-libs/gst/player/gstplayer.c

If rate >= 0.0, then previous code doesn't set end of segment. So, the end of segment
will be in place where previous seek put it. This is not neccesary end of media file
(in case of reverse playback). So if we play video backward for some time and then
switched to forward playing, we will get EOS somewhere in the middle of media file.
This commit always sets end of segment, thus fixing this bug

4 years agomsdkdec: output the decoded frame immediately if decoded order is required
Haihao Xiang [Fri, 24 May 2019 08:48:45 +0000 (16:48 +0800)]
msdkdec: output the decoded frame immediately if decoded order is required

DecodedOrder was deprecated in msdk-2017 version, but some customers
still use this for low-latency streaming of non-b-frame encoded streams,
which needs to output the frame at once

4 years agoRevert "waylandsink: Don't create throwaway empty regions"
Jeffy Chen [Mon, 2 Sep 2019 01:22:10 +0000 (09:22 +0800)]
Revert "waylandsink: Don't create throwaway empty regions"

This reverts commit 68fa80e83118a7a2be037eb235e5d211912dee0e.

Some wayland servers, especially weston, only expect empty input
region as a request to disable input.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
4 years agodecklinkaudiosink: Drop late buffers
Matthew Waters [Wed, 21 Aug 2019 11:35:30 +0000 (06:35 -0500)]
decklinkaudiosink: Drop late buffers

Asking decklink to render audio data seems to be based entirely on
the sample counts which completely disregards the timestamps
we pass to decklink.  As a result, we need to explicitly check
for late buffers and drop them ourselves.

4 years agotests: nvenc: Test runtime resolution change
Seungha Yang [Sat, 31 Aug 2019 09:19:41 +0000 (18:19 +0900)]
tests: nvenc: Test runtime resolution change

4 years agonvenc: Add support runtime resolution change freely
Seungha Yang [Sat, 31 Aug 2019 08:34:13 +0000 (17:34 +0900)]
nvenc: Add support runtime resolution change freely

Do not restrict allowed maximum resolution depending on the
initial resolution. If new resolution is larger than previous one,
just re-init encode session.

4 years agotests: h265parser: Add test parsing range extension in PPS
Wangfei [Tue, 27 Aug 2019 09:04:50 +0000 (17:04 +0800)]
tests: h265parser: Add test parsing range extension in PPS

4 years agoh265parse lib: fix missing condition when parse PPS
Wangfei [Mon, 19 Aug 2019 02:08:46 +0000 (10:08 +0800)]
h265parse lib: fix missing condition when parse PPS

Follow h265 spec(04/2015), log2_max_transform_skip_block_size_minus2
should get with condition when transform_skip_enabled_flag is 1.

4 years agowebrtcbin: Fixed memory leak in gstwebrtcstats
Sam Gigliotti [Thu, 29 Aug 2019 00:26:00 +0000 (17:26 -0700)]
webrtcbin: Fixed memory leak in gstwebrtcstats

The function _get_stats_from_ice_transport returns a string which must be
freed by the caller. However, _get_stats_from_dtls_transport was ignoring
the return value from this function, resulting in a leak.

Ran this with valgrind. Before this fix there was a leak of 40 bytes each
time this was called. After there was no leak.

4 years agodecklink: fix macos werror build
Matthew Waters [Fri, 30 Aug 2019 04:15:43 +0000 (14:15 +1000)]
decklink: fix macos werror build

../sys/decklink/gstdecklink.cpp:1703:7: error: format specifies type 'long' but the argument has type 'int64_t' (aka 'long long') [-Werror,-Wformat]
      persistent_id);
      ^~~~~~~~~~~~~~
/Library/Frameworks/GStreamer.framework/Versions/1.0/include/gstreamer-1.0/gst/gstinfo.h:1070:87: note: expanded from macro 'GST_DEBUG'
#define GST_DEBUG(...)                  GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG,   NULL, __VA_ARGS__)
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/Library/Frameworks/GStreamer.framework/Versions/1.0/include/gstreamer-1.0/gst/gstinfo.h:646:31: note: expanded from macro 'GST_CAT_LEVEL_LOG'
        (GObject *) (object), __VA_ARGS__);                             \
                              ^~~~~~~~~~~

4 years agonvdec: Check flow return of the only current handle_frame() to fix seeking issue
Seungha Yang [Thu, 29 Aug 2019 08:19:27 +0000 (17:19 +0900)]
nvdec: Check flow return of the only current handle_frame() to fix seeking issue

Due to uncleared last flow, decoding after seek was never possible
(last_ret == GST_FLOW_FLUSHING).
nvdec dose not need to keep track of the previous flow return,
and actually the interest is data/even flow of the current handle_frame().

4 years agonvdec: Fallback to system memory if OpenGL context could not support PBO memory
Seungha Yang [Thu, 29 Aug 2019 11:20:14 +0000 (20:20 +0900)]
nvdec: Fallback to system memory if OpenGL context could not support PBO memory

If the environment could not support OpenGL PBO memory, nvdec will do negotiation
with system memory as fallback.

4 years agonvdec: Add support dynamic output format change
Seungha Yang [Fri, 9 Aug 2019 11:19:38 +0000 (20:19 +0900)]
nvdec: Add support dynamic output format change

Implementing ::negotiate() method to support runtime output format
change. If downstream was reconfigured, baseclass will invoke
::negotiate() method, and nvdec should update output memory
type depending on downstream caps.

4 years agonvdec: Re-negotiate whenever output format is changed
Seungha Yang [Fri, 9 Aug 2019 09:47:14 +0000 (18:47 +0900)]
nvdec: Re-negotiate whenever output format is changed

Input stream might be silently changed without ::set_format() call.
Since nvdec has internal parser, nvdec element can figure out the format change
by itself.

4 years agotests: nvdec: Add test runtime downstream reconfigure
Seungha Yang [Fri, 9 Aug 2019 06:27:54 +0000 (15:27 +0900)]
tests: nvdec: Add test runtime downstream reconfigure

Add test case for output format change

4 years agonvdec: Add support 4:4:4 and 4:2:0 12bit decoding
Seungha Yang [Thu, 8 Aug 2019 01:59:04 +0000 (10:59 +0900)]
nvdec: Add support 4:4:4 and 4:2:0 12bit decoding

Depending on GPU architecture, HEVC decoder can support
4:4:4 format up to 12 bitdepth. This commit covers VP9 4:2:0 12 bits
decoding also.

4 years agonvenc: Add support for old drivers which could not understand SDK version 9.0
Seungha Yang [Thu, 8 Aug 2019 05:16:07 +0000 (14:16 +0900)]
nvenc: Add support for old drivers which could not understand SDK version 9.0

Add helper functions to support old drivers
with our previous SDK version 8.1

4 years agonvenc: Use consistent snake case convention
Seungha Yang [Thu, 8 Aug 2019 05:00:08 +0000 (14:00 +0900)]
nvenc: Use consistent snake case convention

4 years agonvcodec: Bump SDK header to version 9.0
Seungha Yang [Wed, 7 Aug 2019 14:03:15 +0000 (23:03 +0900)]
nvcodec: Bump SDK header to version 9.0

The latest Turing architecture (e.g., RTX serise) can support
decoding HEVC 4:4:4 format up to 12bits.

4 years agovulkan: Fix some confusing typos
Yeongjin Jeong [Thu, 1 Aug 2019 16:37:22 +0000 (01:37 +0900)]
vulkan: Fix some confusing typos

Seems to have been copy pasted from around gl element

4 years agovulkan: Don't dereference null pointer when printing error
Yeongjin Jeong [Fri, 9 Aug 2019 11:13:59 +0000 (20:13 +0900)]
vulkan: Don't dereference null pointer when printing error

When printing error message because the function failed, the GError variable
may not be used and it can be NULL.