platform/upstream/gstreamer.git
23 months agopython: Add a Gst.init_python function to be called from plugins
Thibault Saunier [Tue, 28 Jun 2022 20:35:58 +0000 (16:35 -0400)]
python: Add a Gst.init_python function to be called from plugins

Plugins know that they will be initialized after Gst was initialized
so they can call the initialization function dedicated for the python
bindings

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2675>

23 months agopython: Do not call gst_init when it is already is_initialized
Thibault Saunier [Tue, 28 Jun 2022 15:02:37 +0000 (11:02 -0400)]
python: Do not call gst_init when it is already is_initialized

GStreamer plugins written in python need to call `Gst.init` to ensure
that GStreamer is initialized so when loading a python plugin, we might
be recursively calling `gst_init` which is not a good idea.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/940

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2675>

23 months agolibav: Fix for APNG encoder property registration
Seungha Yang [Thu, 7 Jul 2022 13:16:30 +0000 (22:16 +0900)]
libav: Fix for APNG encoder property registration

The AVClass name of Animated PNG in FFmpeg 5.x is "(A)PNG"
and it will be converted to "-a-png" through
g_ascii_strdown() and g_strcanon(). But GLib disallow leading '-'
character for a GType name. Strip leading '-' to workaround it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2724>

23 months agoqsvencoder: Fix for latency report when B-frame is enabled
Seungha Yang [Fri, 8 Jul 2022 09:53:01 +0000 (18:53 +0900)]
qsvencoder: Fix for latency report when B-frame is enabled

QSV runtime will introduce additional delay when B-frame is enabled

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2730>

23 months agoqsvencoder: Do not query again if previous call succeeded
Seungha Yang [Fri, 8 Jul 2022 10:05:19 +0000 (19:05 +0900)]
qsvencoder: Do not query again if previous call succeeded

Don't need to query multiple times

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2730>

23 months agod3d11screencapturesrc: Set colorimetry to caps
Seungha Yang [Thu, 7 Jul 2022 18:38:30 +0000 (03:38 +0900)]
d3d11screencapturesrc: Set colorimetry to caps

Make use of reported DXGI colorspace if possible

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2729>

23 months agod3d11: Update colorspace map
Seungha Yang [Fri, 8 Jul 2022 11:11:00 +0000 (20:11 +0900)]
d3d11: Update colorspace map

Map DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 to sRGB colorimetry

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2729>

23 months agod3d11: Add an utility method for DXGI colorspace conversion
Seungha Yang [Thu, 7 Jul 2022 19:37:33 +0000 (04:37 +0900)]
d3d11: Add an utility method for DXGI colorspace conversion

Add a method for DXGI_COLOR_SPACE_TYPE -> GstVideoColorimetry conversion

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2729>

23 months agod3d11: Serialize ensure_element_data() call
Seungha Yang [Thu, 7 Jul 2022 16:30:13 +0000 (01:30 +0900)]
d3d11: Serialize ensure_element_data() call

It can be called any time from random thread. Thus, multiple
device objects can be created for the same physical device
if the call is not serialized, that's not a scenario we expect.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2727>

23 months agoproxysink: Fix GstProxySrc leak
Seungha Yang [Wed, 6 Jul 2022 17:17:56 +0000 (02:17 +0900)]
proxysink: Fix GstProxySrc leak

Clear weak pointer to peer src when disposing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1552>

23 months agoproxysink: Make sure stream-start and caps events are forwarded
Seungha Yang [Tue, 5 Jul 2022 18:14:25 +0000 (03:14 +0900)]
proxysink: Make sure stream-start and caps events are forwarded

There might be a sequence of event and buffer flow:
- Got stream-start/caps/segment events
- Got flush events
- And then buffers with a new segment event

In the above case, stream-start and caps event might not be reached to
peer proxysrc if peer proxysrc is not ready to receive them.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1552>

23 months agosplitmuxsink: Don't crash on EOS without buffer
Seungha Yang [Wed, 13 Apr 2022 16:19:51 +0000 (01:19 +0900)]
splitmuxsink: Don't crash on EOS without buffer

Fix a case where upstream pushed EOS without buffers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2174>

23 months agowebrtc: implement support for asynchronous host resolution
Matthew Waters [Fri, 4 Mar 2022 03:28:21 +0000 (14:28 +1100)]
webrtc: implement support for asynchronous host resolution

Doesn't block anymore if a mdns host resolution takes multiple seconds
to complete in e.g. stun/turn/ice candidate usage.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1961>

23 months agovideoconvertscale: ensure writable caps when fixating format
Matthew Waters [Mon, 4 Jul 2022 07:27:50 +0000 (17:27 +1000)]
videoconvertscale: ensure writable caps when fixating format

gst_video_convert_scale_get_fixed_format() receives 'othercaps' from
basetransforms' fixate_caps() vmethod which explicitly mentions that
'`othercaps` may not be writable'.

The gst_caps_intersect() call just before may or may not produce new
caps. Particularly in cases like EMPTY or ANY caps on either of the
inputs, only a ref is taken and returned to the caller.

As a result, gst_video_convert_scale_fixate_format() may have attempted
to modify a non-writable caps structure.

Fix by adding a gst_caps_make_writable().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2709>

23 months agortprtx: Fix copying extension headers
Thibault Saunier [Thu, 30 Jun 2022 15:15:22 +0000 (15:15 +0000)]
rtprtx: Fix copying extension headers

There was a typo leading to reading memory from the buffer we were
writing to.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2696>

23 months agod3d11converter: Remove convert() method
Seungha Yang [Mon, 4 Jul 2022 13:27:34 +0000 (22:27 +0900)]
d3d11converter: Remove convert() method

Expose only single convert_buffer() method. It's safer approach than
passing arbitrary list of SRV/RTV pointers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2713>

23 months agod3d11testsrc: Use convert_buffer() method
Seungha Yang [Mon, 4 Jul 2022 13:26:19 +0000 (22:26 +0900)]
d3d11testsrc: Use convert_buffer() method

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2713>

23 months agod3d11: Remove video processor
Seungha Yang [Mon, 4 Jul 2022 13:01:49 +0000 (22:01 +0900)]
d3d11: Remove video processor

Processing using ID3D11VideoProcessor was integrated into
GstD3D11Converter and GstD3D11VideoProcessor implementation is
not used anymore.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2713>

23 months agod3d11memory: Update alloc_wrapped() API to avoid staging texture alloc
Seungha Yang [Mon, 4 Jul 2022 12:57:42 +0000 (21:57 +0900)]
d3d11memory: Update alloc_wrapped() API to avoid staging texture alloc

Add size parameter and use it for CPU accessible memory size
instead of allocating staging texture per API call.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2713>

23 months agowasapi: Implement default audio channel mask
Ignazio Pillai [Thu, 30 Jun 2022 09:04:29 +0000 (11:04 +0200)]
wasapi: Implement default audio channel mask

Some multichannel capture devices does not provide a channel mask value
which will result in a pipeline failure due to the empty channel mask.

Implemented the same fix used for wasapi2

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1204

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2692>

23 months agoexamples/webrtc/signalling: Fix compatibility with Python 3.10
Matthew Waters [Fri, 1 Jul 2022 05:20:31 +0000 (15:20 +1000)]
examples/webrtc/signalling: Fix compatibility with Python 3.10

- ssl module requires an explicit TLS_SERVER role
- asyncio throws a deprecation warning when using
  asyncio.get_event_loop().  Remove custom event loop handling entirely
- No need to keep the websocket server in a member variable, can use
  a future to signal exit case along with the async with context manager
  of websockets.serve()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2698>

23 months agov4l2videodec: replace multiple decoder bug warnings with single one
fduncanh [Sat, 28 May 2022 19:04:10 +0000 (15:04 -0400)]
v4l2videodec: replace multiple decoder bug warnings with single one

Achieve this by dropping frames after a drain if the driver failed to so.
This works around RaspberryPi driver issue [1].

[1] https://github.com/raspberrypi/linux/issues/5059#issuecomment-

Fixes #1103

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2518>

23 months agod3d11videosink: Add support for rotation
Seungha Yang [Sat, 2 Jul 2022 16:22:10 +0000 (01:22 +0900)]
d3d11videosink: Add support for rotation

Adding "rotate-method" property

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1396
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2708>

23 months agod3d11videosink: Protect window with lock at every place
Seungha Yang [Sat, 2 Jul 2022 16:18:19 +0000 (01:18 +0900)]
d3d11videosink: Protect window with lock at every place

Access to the object should be thread safe to support runtime
property update

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2708>

23 months agod3d11convert: Add support for GstVideoOrientationMethod
Seungha Yang [Fri, 1 Jul 2022 19:23:41 +0000 (04:23 +0900)]
d3d11convert: Add support for GstVideoOrientationMethod

Add flip/rotation support via GstVideoDirectionInterface

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2708>

23 months agod3d11converter: Add support for GstVideoOrientationMethod
Seungha Yang [Fri, 1 Jul 2022 17:15:00 +0000 (02:15 +0900)]
d3d11converter: Add support for GstVideoOrientationMethod

Shader can handle rotation/flip with other conversions
at once in a single pipeline, and depending on device
capability, videoprocessor may support it too.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2708>

23 months agotests: udpsink: make test work in environments without IPv6
Tim-Philipp Müller [Sat, 25 Jun 2022 18:23:11 +0000 (19:23 +0100)]
tests: udpsink: make test work in environments without IPv6

Part-fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/939

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2659>

23 months agod3d11videosink: Use single GstD3D11Converter object
Seungha Yang [Fri, 1 Jul 2022 14:49:49 +0000 (23:49 +0900)]
d3d11videosink: Use single GstD3D11Converter object

GstD3D11Converter supports videoprocessor and texture upload.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11memory: Add private method for texture wrapped memory allocation
Seungha Yang [Fri, 1 Jul 2022 12:35:15 +0000 (21:35 +0900)]
d3d11memory: Add private method for texture wrapped memory allocation

Unlike public method gst_d3d11_allocator_alloc_wrapped(), newly
added method by this commit will not calculate CPU accessible memory
size, since staging texture must be allocated to calculate the size.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11: Use library private header in plugin
Seungha Yang [Fri, 1 Jul 2022 12:20:02 +0000 (21:20 +0900)]
d3d11: Use library private header in plugin

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11compositor: Use single GstD3D11Converter object
Seungha Yang [Fri, 1 Jul 2022 11:47:37 +0000 (20:47 +0900)]
d3d11compositor: Use single GstD3D11Converter object

... and remove unnessary videoprocessor/upload/copy code

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11convert: Add border-color property
Seungha Yang [Thu, 30 Jun 2022 19:12:23 +0000 (04:12 +0900)]
d3d11convert: Add border-color property

Use user specified border-color instead of black color

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11convert: Use single GstD3D11Converter object
Seungha Yang [Fri, 1 Jul 2022 11:13:29 +0000 (20:13 +0900)]
d3d11convert: Use single GstD3D11Converter object

... and don't use GstD3D11VideoProcessor. Now GstD3D11Converter will
be able to convert using videoprocessor, and texture upload is also supported by
GstD3D11Converter. All the noisy code can be removed therefore.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11converter: Add support conversion using videoprocessor
Seungha Yang [Tue, 21 Jun 2022 17:44:26 +0000 (02:44 +0900)]
d3d11converter: Add support conversion using videoprocessor

* Add videoprocessor feature to d3d11converter, in order to unifiy
  conversion flow.
* Add convert_buffer() method to support automatic shader/videoprocessor
  selection. The method also supports texture upload if input memory
  cannot be used for conversion (e.g., system memory or so)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11overlaycompositor: Objectify overlay render implementation
Seungha Yang [Tue, 21 Jun 2022 14:43:46 +0000 (23:43 +0900)]
d3d11overlaycompositor: Objectify overlay render implementation

Be consistent with other implementations

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agod3d11: Don't use const pointer to GstDxgiColorSpace
Seungha Yang [Tue, 21 Jun 2022 13:44:55 +0000 (22:44 +0900)]
d3d11: Don't use const pointer to GstDxgiColorSpace

Instead, fill values of passed GstDxgiColorSpace struct

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2697>

23 months agosamiparse: clean up some GString usage
Tim-Philipp Müller [Wed, 29 Jun 2022 23:39:50 +0000 (00:39 +0100)]
samiparse: clean up some GString usage

There's no need to re-assign the return value of
g_string_append_*() functions and such to the variable
holding the GString. These return values are just for
convenience so function calls can be chained. The actual
GString pointer won't change, it's not a GList after all.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2685>

23 months agosamiparse: micro-optimise entity handling
Tim-Philipp Müller [Wed, 29 Jun 2022 23:31:24 +0000 (00:31 +0100)]
samiparse: micro-optimise entity handling

Avoid relocations and hard-code entity string length
in the struct, since we basically get it for free here.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2685>

23 months agosamiparse: fix handling of self-closing tags
Tim-Philipp Müller [Wed, 29 Jun 2022 23:13:19 +0000 (00:13 +0100)]
samiparse: fix handling of self-closing tags

We would check the wrong string (rest of line rather than element)
for the / suffix of self-closing tags, which is not only wrong but
also has atrocious performance with certain strings like the garbled
nonsense clusterfuzz feeds us, which might cause discoverer to time
out when processing garbled SAMI files.

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47461

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2685>

23 months agoRevert "glupload: Fix caps query with no filter"
Jan Schmidt [Fri, 1 Jul 2022 13:57:08 +0000 (23:57 +1000)]
Revert "glupload: Fix caps query with no filter"

This reverts commit 6f9ae5d7580763b5d18badb76f2166ff0012886a.

The _transform_caps() function can't tell the difference
between the caller wanting to know the output caps
for the current method, or all possible output caps. If
it includes caps for all possible methods, glupload can
end up negotiating and sending the wrong output caps
downstream.

Partially reverts !2687
Fixes #1310

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2699>

23 months agodecklinkvideosink: Pass video frames directly to the Decklink SDK without copying
Sebastian Dröge [Tue, 28 Jun 2022 13:40:55 +0000 (16:40 +0300)]
decklinkvideosink: Pass video frames directly to the Decklink SDK without copying

If the video frame is stored in PBO memory then we need to copy anyway as
it might be stored in CPU-accessible GPU memory that can't be accessed
from the Decklink driver.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2674>

23 months agomsdkmjpegdec: Add support for error report
Vincent Cheah Beng Keat [Tue, 10 May 2022 06:11:06 +0000 (14:11 +0800)]
msdkmjpegdec: Add support for error report

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2401>

23 months agoglvideomixer: Only consider property changes a geometry change if there as an actual...
Sebastian Dröge [Tue, 28 Jun 2022 06:38:34 +0000 (09:38 +0300)]
glvideomixer: Only consider property changes a geometry change if there as an actual change

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2669>

23 months agoglvideomixer: Add crop-{left,right,top,bottom} pad properties for cropping inputs
Sebastian Dröge [Mon, 27 Jun 2022 18:28:07 +0000 (21:28 +0300)]
glvideomixer: Add crop-{left,right,top,bottom} pad properties for cropping inputs

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2669>

23 months agonvencoder: Add support for dynamic GPU device selection
Seungha Yang [Wed, 22 Jun 2022 16:10:38 +0000 (01:10 +0900)]
nvencoder: Add support for dynamic GPU device selection

Adding nvautogpu{h264,h265}enc class which will accept upstream logical
GPU device object (GstCudaContext or GstD3D11Device) instead of
using pre-assigned GPU instance.

If upstream logical GPU device object is not NVENC compatible
(e.g., D3D11 device of non-NVIDIA GPU) or it's system memory,
then user specified "cuda-device-id" or "adapter-luid" property
will be used for GPU device selection.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2666>

23 months agocuda: Protect gst_cuda_ensure_element_context() with lock
Seungha Yang [Mon, 27 Jun 2022 11:50:15 +0000 (20:50 +0900)]
cuda: Protect gst_cuda_ensure_element_context() with lock

Serialize the order of context setup since it can be called
from multiple threads

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2666>

23 months agocuda: Add YUY2 and UYVY formats for GL interop
Seungha Yang [Thu, 30 Jun 2022 07:45:46 +0000 (16:45 +0900)]
cuda: Add YUY2 and UYVY formats for GL interop

Those formats are not supported conversion formats by CUDA convert/scale elements
but would be useful for GL <-> CUDA interop use case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2691>

23 months agocudadownload: Passthrough in case of CUDA -> SYSTEM
Seungha Yang [Thu, 30 Jun 2022 08:47:05 +0000 (17:47 +0900)]
cudadownload: Passthrough in case of CUDA -> SYSTEM

GstCudaMemory supports CPU access via CUDA pinned host memory already
and it would show faster memory transfer performance between
GPU and CPU than copying from/to normal system memory.
If downstream supports video meta, we can passthrough CUDA memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2690>

23 months agowebrtcbin: Reject caps that are not valid for creating an SDP media.
Sebastian Dröge [Thu, 30 Jun 2022 06:09:02 +0000 (09:09 +0300)]
webrtcbin: Reject caps that are not valid for creating an SDP media.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2689>

23 months agosdpmessage: Don't set SDP medias from caps without media/payload/clock-rate fields
Sebastian Dröge [Thu, 30 Jun 2022 06:02:00 +0000 (09:02 +0300)]
sdpmessage: Don't set SDP medias from caps without media/payload/clock-rate fields

Previously it would've silently failed reading the payload/clock-rate
and instead would've used some random value that happened to be on the
stack.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2689>

23 months agoglupload: Fix caps query with no filter
Jan Schmidt [Thu, 30 Jun 2022 02:50:17 +0000 (12:50 +1000)]
glupload: Fix caps query with no filter

If no filter caps are provided with a caps query, always
generate a full set of all caps from all upload methods,
not just the configured one. This is needed to handle
renegotiation when dealing with raw sysmem caps - as the upload
method might accept raw sysmem caps, but only the raw data
uploader adds those to the caps query.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2687>

23 months agoRevert "glupload: allow system memory for dmabuf in transform_caps"
Jan Schmidt [Thu, 30 Jun 2022 02:46:31 +0000 (12:46 +1000)]
Revert "glupload: allow system memory for dmabuf in transform_caps"

This reverts commit f3292dc1561a8d62812c3f1a2bb3de5c5bb6a807.

Only the raw data uploader should add sysmem caps to the
actual caps query, because we want them to be at the
lowest priority. If upstream does select to send raw
caps, then the correct upload method will still
be chosen because the accept_caps implementation
will accept them

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2687>

23 months agogl: Don't use the full transform_caps() method for reconfiguration check
Jan Schmidt [Thu, 30 Jun 2022 08:41:01 +0000 (18:41 +1000)]
gl: Don't use the full transform_caps() method for reconfiguration check

When checking if we need to reconfigure when uploading, check
specifically the output caps of the current method will
result in compatible/incompatible caps, not the full set
of output caps from all upload methods.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2687>

23 months agocudaformat: add support for planar 4:2:2 YUV formats in CUDA D3D11 interop
Corentin Damman [Fri, 22 Apr 2022 14:37:34 +0000 (16:37 +0200)]
cudaformat: add support for planar 4:2:2 YUV formats in CUDA D3D11 interop

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2269>

23 months agocudamemory: add support for planar 4:2:2 YUV formats
Corentin Damman [Fri, 22 Apr 2022 13:58:13 +0000 (15:58 +0200)]
cudamemory: add support for planar 4:2:2 YUV formats

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2269>

23 months agovideo: Include new video-sei.h in video.h
Sebastian Dröge [Thu, 30 Jun 2022 05:42:43 +0000 (08:42 +0300)]
video: Include new video-sei.h in video.h

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2688>

23 months agotracing: add hooks for gst_pad_chain() / gst_pad_chain_list()
Sebastian Dröge [Wed, 29 Jun 2022 05:57:42 +0000 (08:57 +0300)]
tracing: add hooks for gst_pad_chain() / gst_pad_chain_list()

This allows tracing buffers when they arrive in a pad instead of just
when they are pushed out of a pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2682>

23 months agov4l2videodec: replace multiple decoder bug warnings by a single warning
fduncanh [Sat, 28 May 2022 20:47:42 +0000 (16:47 -0400)]
v4l2videodec: replace multiple decoder bug warnings by a single warning
(warning due to incorrectly dropped frames at initial caps adjustment)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2517>

23 months agov4l2codecs: enumerate all possible formats
Benjamin Gaignard [Tue, 22 Jun 2021 12:43:29 +0000 (14:43 +0200)]
v4l2codecs: enumerate all possible formats

Some decoder may also allow to (down) scale the decoded video.
Use VIDIOC_ENUM_FRAMESIZES iotcl to enumerate the possible output
formats resolutions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2589>

23 months agonvcodec: Add cuda-device-id read-only property to stateless decoders
Seungha Yang [Sun, 26 Jun 2022 13:26:29 +0000 (22:26 +0900)]
nvcodec: Add cuda-device-id read-only property to stateless decoders

... and remove unnecessary intermediate subclass from class hierarchy

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2665>

23 months agonvcodec: Add cuda-device-id read-only property to CUVID decoders
Seungha Yang [Sun, 26 Jun 2022 12:09:50 +0000 (21:09 +0900)]
nvcodec: Add cuda-device-id read-only property to CUVID decoders

Similar to the other hardware decoder plugins, provides assigned
device id via property

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2665>

23 months agoadaptivedemux2: Ignore stopped stream flow state
Jan Schmidt [Tue, 28 Jun 2022 14:51:28 +0000 (00:51 +1000)]
adaptivedemux2: Ignore stopped stream flow state

When calculating the combined stream flow state
for a period, don't consider stopped streams.

Fixes switching to the next period in DASH streams
with multiple video/audio/subtitle streams.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2684>

23 months agoadaptivedemux2: Clean up stream parsebins on finalize
Jan Schmidt [Tue, 28 Jun 2022 15:25:41 +0000 (01:25 +1000)]
adaptivedemux2: Clean up stream parsebins on finalize

Remove the parsebin for a stream from the overall
bin when cleaning up the stream, to avoid
keeping around old ones when moving between periods

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2676>

23 months agoadaptivedemux2: Fix memory leaks and use-after-free
Jan Schmidt [Thu, 23 Jun 2022 16:54:22 +0000 (02:54 +1000)]
adaptivedemux2: Fix memory leaks and use-after-free

Fix various small memory leaks, and an invalid
access to GstEvent after giving away the ref
via gst_pad_push_event()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2676>

23 months agohlsdemux2: Fix potential segfault
Jan Schmidt [Thu, 23 Jun 2022 16:57:54 +0000 (02:57 +1000)]
hlsdemux2: Fix potential segfault

Fix a potential segfault if we receive a ISO-FF stream
with moof before moov.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2676>

23 months agohlsdemux2: Fix memory leaks
Jan Schmidt [Thu, 23 Jun 2022 16:57:03 +0000 (02:57 +1000)]
hlsdemux2: Fix memory leaks

Clean up various memory leaks

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2676>

23 months agohlsdemux2: Free current_segment on finalize
Jan Schmidt [Thu, 23 Jun 2022 09:24:03 +0000 (19:24 +1000)]
hlsdemux2: Free current_segment on finalize

Avoid a memory leak by making sure to release the
current segment on exit if non-NULL

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2676>

23 months agocoding style: allow declarations after statement
Tim-Philipp Müller [Wed, 29 Jun 2022 09:55:13 +0000 (10:55 +0100)]
coding style: allow declarations after statement

See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1243/
and https://gitlab.freedesktop.org/gstreamer/gstreamer-project/-/issues/78

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2683>

23 months agod3d11convert: Add support for GstVideoCropMeta
Seungha Yang [Tue, 28 Jun 2022 15:31:01 +0000 (00:31 +0900)]
d3d11convert: Add support for GstVideoCropMeta

Performs crop, scale, and color space conversion all in
a single render pipeline. Note that cropping related property is not
added in this element (which will make negotiation very complicated),
but user can configure videocrop element for crop meta to be attached
on each buffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2678>

23 months agod3d11videosink: Fix for force-aspect-ratio setting when rendering on shared texture
Seungha Yang [Tue, 28 Jun 2022 08:40:56 +0000 (17:40 +0900)]
d3d11videosink: Fix for force-aspect-ratio setting when rendering on shared texture

Set specified force-aspect-ratio value on window object
in case of shared texture rendering as well

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1304
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2671>

23 months agomfvideoenc: Fix broken encoding when resolution is not an even number
Seungha Yang [Sat, 25 Jun 2022 21:39:54 +0000 (06:39 +0900)]
mfvideoenc: Fix broken encoding when resolution is not an even number

Width and height values of 4:2:0 subsampled YUV format should be even number,
and if it's not the case, there should be padding which is not a contiguous memory layout.
Do copy input frames to MediaFoundation's memory in that case for now.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1165
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2661>

23 months agovideorate: remove property-value quotes
James Hilliard [Thu, 16 Jun 2022 10:19:17 +0000 (10:19 +0000)]
videorate: remove property-value quotes

Fixes warnings like:
Received a structure string that contains '="0.5"'. Reading as a gdouble value, rather than a string value. This is undesired behaviour, and with GStreamer 1.22  onward, this will be interpreted as a string value instead because it is wrapped in '"' quotes. If you want to guarantee this value is read as a string, before this change, use '=(string)"0.5"' instead. If you want to read in a gdouble value, leave its value unquoted.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2621>

23 months agoadaptivedemux2: track: Fix buffering time calc before output
Jan Schmidt [Tue, 21 Jun 2022 17:35:03 +0000 (03:35 +1000)]
adaptivedemux2: track: Fix buffering time calc before output

Use the lowest track input time as the output
time when calculating track buffering levels
before anything has been dequeued.

Fixes multi-period DASH not advancing to the
next period in some cases.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2650>

23 months agoadaptivedemux2: track: Add period number to most debug statements
Jan Schmidt [Tue, 21 Jun 2022 17:34:19 +0000 (03:34 +1000)]
adaptivedemux2: track: Add period number to most debug statements

Store the period number the track belongs to, and
add it in various debug statements

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2650>

23 months agoadaptivedemux2: stream: Don't take TRACKS_LOCK when sending EOS event
Jan Schmidt [Tue, 21 Jun 2022 17:30:16 +0000 (03:30 +1000)]
adaptivedemux2: stream: Don't take TRACKS_LOCK when sending EOS event

The stream tracks list can't change while we're
iterating it from the scheduling thread,
and the event handler immediately takes the
tracks lock, causing a deadlock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2650>

23 months agohlsdemux2: Improve media playlist updates
Edward Hervey [Wed, 8 Jun 2022 09:17:09 +0000 (11:17 +0200)]
hlsdemux2: Improve media playlist updates

* When dealing with rendition streams, we attempt to synchronize the media
  playlist against the variant stream. This helps with speeding up the correct
  initial fragment search and avoids issues when streams at activated at a much
  later time.
* Also add checks for variant stream existence before attempting to use them

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: Only seek on selected streams
Edward Hervey [Wed, 8 Jun 2022 09:16:15 +0000 (11:16 +0200)]
hlsdemux2: Only seek on selected streams

When handling seeks, there is no need to seek on unselected streams. If they
later get activated they will be properly seek onto

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agotests: check: Update hlsdemux2 tests for playlist changes
Edward Hervey [Wed, 8 Jun 2022 07:33:22 +0000 (09:33 +0200)]
tests: check: Update hlsdemux2 tests for playlist changes

We no longer do auto-magic fallbacks when synchronizing a disconnected
playlist. It is handled at a higher level.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: Fix debug return statement
Edward Hervey [Fri, 3 Jun 2022 08:25:34 +0000 (10:25 +0200)]
hlsdemux2: Fix debug return statement

Due to latest commits res could have been NULL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: No longer re-add segments from before the playlist
Edward Hervey [Thu, 2 Jun 2022 07:46:22 +0000 (09:46 +0200)]
hlsdemux2: No longer re-add segments from before the playlist

When updating playlists, there is a possibility that the playlists don't
perfectly align, but the last entry of the previous playlist is *just* before
the first entry of the new playlist.

In those cases, we still can transfer the timing information from one playlist
to another, but we do not want to return that segment as being the matching one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: Use variant stream as support for synchronizing playlists
Edward Hervey [Wed, 1 Jun 2022 13:45:23 +0000 (15:45 +0200)]
hlsdemux2: Use variant stream as support for synchronizing playlists

When matching playlists, there is a possibility that rendition streams will not
have been updated in time (for example because that stream started later, or
playback was paused). This would cause several playback failures and seeking
failures.

In order to still fall back on our feet, attempt to synchronize that rendition
playlist against the current variant playlist. This will attempt to match the
stream time using SN/DNS/PDT/...

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: Detect synchronization loss
Edward Hervey [Mon, 23 May 2022 13:51:23 +0000 (15:51 +0200)]
hlsdemux2: Detect synchronization loss

If we have been updating too slowly and have gone out of the current live
window, inform the baseclass accordingly.

This is different from the case where we have been updating quicker than what
the server provides.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: More improvement/fixes to position tracking
Edward Hervey [Mon, 23 May 2022 13:48:16 +0000 (15:48 +0200)]
hlsdemux2: More improvement/fixes to position tracking

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agoadaptivedemux2: Handle loss of synchronization
Edward Hervey [Mon, 23 May 2022 13:43:04 +0000 (15:43 +0200)]
adaptivedemux2: Handle loss of synchronization

Add a new custom GstFlowReturn so that subclasses can notify that they have lost
live synchronization.

When that happens, do a flushing seek back to the live position

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agoadaptivedemux2: Fix SNAP seek handling
Edward Hervey [Mon, 23 May 2022 07:11:24 +0000 (09:11 +0200)]
adaptivedemux2: Fix SNAP seek handling

* Since only flushing seeks are allowed, the "current" position is always the
  global output position (and not "some" stream current position).

* In terms of figuring out to which stream to "snap" to, we can send it to any
  selected stream. Removes the requirement of this function to a specific output
  pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: Fix position tracking
Edward Hervey [Tue, 17 May 2022 05:16:48 +0000 (07:16 +0200)]
hlsdemux2: Fix position tracking

Remove the "pending advance" hack and instead rely on the base stream current
position to track our position (instead of a potentially NULL "current
segment").

Also ensure the media playlists are always refreshed with valid stream time,
even if there is no current segment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agohlsdemux2: Add a new method to synchronize two media playlist
Edward Hervey [Tue, 17 May 2022 05:11:17 +0000 (07:11 +0200)]
hlsdemux2: Add a new method to synchronize two media playlist

This allows transfering the stream time of the playlist to an updated
variant/rendition.

This allows updating that information without having a "current segment"

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agoadaptivedemux2: Initialize and use stream start/current position
Edward Hervey [Tue, 17 May 2022 05:07:23 +0000 (07:07 +0200)]
adaptivedemux2: Initialize and use stream start/current position

The stream start and current position would be properly set when seeking or
activating a stream after playback started. But it would never be properly
initialized.

Set it to NONE initially to indicate to subclasses that no position has been
tracked yet. This will allow them to detect initial stream usage.

Futhermore, once the initial streams setup is done, make sure that it is set to
a valid initial value:
* The minimum stream time in live
* Or else the period start

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2679>

23 months agov4l2videodec: Fix activation of internal pool
Nicolas Dufresne [Thu, 19 May 2022 19:51:03 +0000 (15:51 -0400)]
v4l2videodec: Fix activation of internal pool

If the driver does not support VIDIOC_CREATE_BUFS ioctl, the pool
configuration may get changed, which requires a validation. This would
fail to activate a pool in a case it shouldn't normally fail unless we
are out of memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2456>

23 months agodv, opusparse: fix duplicate symbols in static build
Tim-Philipp Müller [Tue, 28 Jun 2022 00:29:06 +0000 (01:29 +0100)]
dv, opusparse: fix duplicate symbols in static build

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2670>

23 months agod3d11: Enumerate devices via native DXGI API
Seungha Yang [Sun, 26 Jun 2022 19:07:04 +0000 (04:07 +0900)]
d3d11: Enumerate devices via native DXGI API

D3D11CreateDevice() can fail for some reason (e.g., buggy GPU driver)
and then gst_d3d11_device_new() will return nullptr.
Use DXGI API directly instead of relying on the gst_d3d11_device_new()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2663>

23 months agoexamples: Add an example for application texture sharing
Seungha Yang [Fri, 24 Jun 2022 16:15:17 +0000 (01:15 +0900)]
examples: Add an example for application texture sharing

This example shows GstD3D11BufferPool usage and a way of
D3D11 texture sharing between application and GStreamer via appsrc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2646>

23 months agoexamples: Add d3d11decoder zero-copy rendering example
Seungha Yang [Thu, 23 Jun 2022 22:06:00 +0000 (07:06 +0900)]
examples: Add d3d11decoder zero-copy rendering example

This example code demonstrates D3D11 device sharing between
application and GStreamer. Application can access texture
using appsink and it can be rendered on application's window without
any copy operation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2646>

23 months agod3d11: Add a helper method for GstContext creation
Seungha Yang [Fri, 24 Jun 2022 13:17:28 +0000 (22:17 +0900)]
d3d11: Add a helper method for GstContext creation

Add gst_d3d11_context_new() method for application to create
GstContext using GstD3D11Device.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2646>

23 months agod3d11memory: Add support for wrapping application texture
Seungha Yang [Thu, 23 Jun 2022 16:00:00 +0000 (01:00 +0900)]
d3d11memory: Add support for wrapping application texture

Add gst_d3d11_allocator_alloc_wrapped() method to support wrapping
application texture using GstD3D11Memory without copy.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2646>

23 months agod3d11: Install library headers
Seungha Yang [Thu, 23 Jun 2022 16:25:07 +0000 (01:25 +0900)]
d3d11: Install library headers

Our Direct3D11 abstraction layer has been improved and
it gained good shape from API point of view.
Also, On Windows, GstD3D11 has various advantages over GstGL
in terms of compatibility/stability/feature/performance.
Note that WGL implementation is known to be buggy for some
drivers/vendors/scenario (that's a reason why Google implemented ANGLE).
Moreover, GstGL is not fully optimized for Windows unfortunately.

It's the time to open this interface to application developers
for various optimized processing using our Direct3D11
infrastructure.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2646>

23 months agod3d11: Update gst_d3d11_allocation_params_new() interface
Seungha Yang [Thu, 23 Jun 2022 16:21:48 +0000 (01:21 +0900)]
d3d11: Update gst_d3d11_allocation_params_new() interface

Define GST_D3D11_ALLOCATION_FLAG_DEFAULT (0) value instead of
casting enum type everywhere. And pass D3D11_RESOURCE_MISC_FLAG value

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2646>

23 months agova: postproc: add scale-method property
U. Artie Eoff [Mon, 27 Jun 2022 16:06:50 +0000 (12:06 -0400)]
va: postproc: add scale-method property

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2654>

23 months agova: filter/postproc: move unconditional props to vavpp
U. Artie Eoff [Mon, 27 Jun 2022 15:54:28 +0000 (11:54 -0400)]
va: filter/postproc: move unconditional props to vavpp

Only conditional/dynamic properties should be installed/handled
by vafilter.  Thus, move and install the unconditional/static
properties in vavpp.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2654>

23 months agova: compositor/filter: use scale method setter
U. Artie Eoff [Thu, 23 Jun 2022 15:39:57 +0000 (11:39 -0400)]
va: compositor/filter: use scale method setter

Use the filter's scale method member instead of the sample's member.

Removes the filter_flags member from the composite sample.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2654>