Seungha Yang
84ec16c67a
nvencoder: Add support for GL memory
...
preparation to deprecate old NVENC elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3992 >
2023-02-20 02:15:19 +09:00
Seungha Yang
58373e38f4
nvencoder: Fix critical warning in autogpu mode
...
If upstream memory is not CUDA, CUDA context will be null.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3992 >
2023-02-20 01:49:31 +09:00
Seungha Yang
59f359eb99
cuda: Rename macro HAVE_NVCODEC_GST_GL -> HAVE_CUDA_GST_GL
...
... and always use #ifdef instead of #if
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3992 >
2023-02-20 01:49:31 +09:00
Seungha Yang
f831b92540
nvdecoder: Add support for reconfiguration
...
Instead of creating new decoder instance per new sequence,
re-use configured decoder instance via cuvidReconfigureDecoder()
API. It will make output surface reusable without re-allocation.
Also, in order for application to be able to reserve higher resolution
output surface, "init-max-width" and "init-max-height" properties are
added to each decoder.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
eb0fca4180
nvencoder: Reuse input resource
...
Call input resource map functions (i.e., nvEncRegisterResource,
nvEncUnregisterResource, nvEncMapInputResource, and
nvEncUnmapInputResource) only once and reuse the mapped resources,
instead of per input frame map/unmap
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
03425bc702
nvdecoder: Add support for CUDA zero-copy in stateless decoder
...
Wrap mapped decoder output surface using GstCudaMemory and
output without any copy operation. Also, for application to be able to
control the number of zero-copyable output surfaces,
"num-output-surfaces" property is added.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
a94af552f5
nvdecoder: Port to C++
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
6ddd1713f1
nvdecoder: Reduce render delay to 2 frames
...
4 frames delay seems to be too high
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
fa2bb42fda
cudaconverter: Use cached texture
...
... instead of per conversion texture alloc/free
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
992406cf4f
cuda, nvcodec: Make GstD3D11 dependency mandatory
...
GstD3D11 build-time dependencies should be always available on Windows already
and runtime dependencies as well, since required external
(non-GStreamer) depends are all system DLLs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3884 >
2023-02-16 17:49:54 +00:00
Seungha Yang
10ade466ef
nvenc: Use CUDA stream of memory if exists
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:43 +00:00
Seungha Yang
7a8bb85523
cudaupload, cudadownload: Update for shared CUDA stream
...
Use CUDA stream of memory if exists
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:43 +00:00
Seungha Yang
aabcba16db
nvdecoder: Skip synchronization if downstream buffer holds CUDA stream
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:42 +00:00
Seungha Yang
ddc5f1d425
cudaconvertscale: Add support for shared CUDA stream
...
If CUDA stream is shared by upstream/downstream, don't sync at
convert element
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:42 +00:00
Seungha Yang
1cb47d549b
cudaconverter: Don't sync per conversion
...
Caller should take care of synchronization
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:42 +00:00
Seungha Yang
8d14194fdd
nvencoder: Add support for shared CUDA stream
...
Sets CUDA stream on CUDA buffer pool so that CUDA stream object
can be shared
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:42 +00:00
Seungha Yang
0a81c8deb3
nvcodec: Port to GstCudaStream
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:42 +00:00
Seungha Yang
661b5f60c6
cuda: Provide single header include entry point
...
Add "gstcuda.h" header file
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3629 >
2023-02-03 15:27:42 +00:00
Seungha Yang
bc0708eafb
nvencoder: Fix min buffers parameter of allocation query in auto GPU mode
...
At the time when propose_allocation() get called, encoder session
would not be initialized yet.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3888 >
2023-02-03 22:19:22 +09:00
Seungha Yang
29bd8de052
nvvp9dec: Fix return value
...
It should return GstFlowReturn value, not boolean
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3870 >
2023-02-02 05:07:44 +09:00
Nirbheek Chauhan
eff9455ada
nvcodec: Log readable errors when initializing CUDA
...
It is really difficult for people to figure out why nvcodec has
0 features. Even the debug log is cryptic. Also make sure the errors
go to the ERROR log level, which is more likely to be enabled by
default.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3776 >
2023-01-25 10:08:10 +00:00
Nirbheek Chauhan
43ae6b421b
nvcodec: Fix reporting of CuDeviceGetCount error
...
cuda_ret is was always going to be CUDA_SUCCESS in the error log.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3776 >
2023-01-25 10:08:10 +00:00
Seungha Yang
040473f295
nvcudaenc: Don't use default CUDA stream
...
Set non-default CUDA stream via NvEncSetIOCudaStreams() if possible,
so that NVENC's internal kernel function can run on the given CUDA
stream instead of default CUDA stream
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3615 >
2022-12-22 15:01:52 +00:00
Seungha Yang
15b2cd6565
cudabasetransform: Update CUDA stream on context update
...
CUDA stream must be associated with updated CUDA context
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3618 >
2022-12-21 16:18:36 +00:00
Seungha Yang
14062c06a6
nvdecoder: Use own CUDA stream in GL output path
...
Use the same CUDA stream passed to CuvidMapVideoFrame()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3611 >
2022-12-20 17:14:10 +00:00
Seungha Yang
9914ff9b4c
nvdec: Don't use default CUDA stream
...
NVDEC launches CUDA kernel function (ConvertNV12BLtoNV12 or so)
when CuvidMapVideoFrame() is called. Which seems to be
NVDEC's internal post-processing kernel function, maybe
to convert tiled YUV to linear YUV format or something similar.
A problem if we don't pass CUDA stream to the CuvidMapVideoFrame()
call is that the NVDEC's internel kernel function will use default CUDA stream.
Then lots of the other CUDA API calls will be blocked/serialized.
To avoid the unnecessary blocking, we should pass our own
CUDA stream object to the CuvidMapVideoFrame() call
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3605 >
2022-12-19 20:27:35 +00:00
Seungha Yang
e6585c89ea
cuda: Hide memory copy util function
...
The method was intended to be used by only cudaupload/download elements
and not ready to be a part of public API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3545 >
2022-12-08 19:52:23 +00:00
Seungha Yang
0e4c520cf3
nvdecoder: Handle input caps change
...
Update output caps if it's notified by baseclass
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3328 >
2022-11-16 13:12:38 +00:00
Seungha Yang
b4c19a96b7
nvdecoder: Don't hold decoder output state
...
It's not referenced by this implementation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3328 >
2022-11-16 13:12:38 +00:00
Seungha Yang
9d30f9dd59
cudaconvertscale, cudascale: Add "add-borders" property and support 8bits RGB planar formats
...
Adding "add-borders" property which is identical to that of
videoscale and this will be enabled by default.
And adding RGBP/BGRP/GBR/GBRA format support.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3389 >
2022-11-15 16:25:44 +00:00
Seungha Yang
c11f8fa930
cuda: Rewrite colorspace/rescale object
...
Rewriting GstCudaConverter object, since the old implementation was not
well organized and it's hard to add new features.
Moreover, the conversion operations were not very optimized.
Major change of this implementation:
* Remove redundant intermediate conversion operations such as
any RGB -> ARGB(64) conversion or any YUV -> Y444 (or 16bits Y444).
That's not required most of cases. The only required case is
converting 24bits (such as RGB/BGR) packed format to 32bits format
because CUDA texture object does not support sampling 24bits format
* Use normalized sample fetching (i.e., [0, 1] range float value)
and also normalized coordinates system for CUDA texture.
It's consistent with the other graphics APIs such as Direct3D
and OpenGL, that makes sampling operations much easier.
* Support a kind of viewport and adopt math for colorspace conversion
from GstD3D11 implementation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3389 >
2022-11-15 16:25:44 +00:00
Seungha Yang
c1efa9ac4b
cudaupload,cudadownload: Add support for planar 8bits RGB formats
...
Defines RGBP, BGRP, and GBR formats, which have the same memory
layout as already supported Y444. And defines GBRA format as well
which needs just one additional alpha plane
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3389 >
2022-11-15 16:25:44 +00:00
Seungha Yang
950dad201d
cudaconvert, cudascale: Port to GstCudaBaseCovert baseclass
...
Don't need to hold duplicated code in the source tree
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3389 >
2022-11-15 16:25:44 +00:00
Seungha Yang
eb2ef5a4fd
cuda: Add convertscale element
...
GstCudaConverter object can do colorspace conversion and scale at once.
Adding new element "cudaconvertscale" to do that, this can
save unnecessary GPU operation if colorspace conversion and
rescale is required for given input stream format.
Most of codes are taken from d3d11convert element
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3389 >
2022-11-15 16:25:44 +00:00
Seungha Yang
722f097b9d
nvcodec: Update for documentation
...
* Use GST_PARAM_DOC_SHOW_DEFAULT flags for GPU ID related
properties
* Fix some typos
* Add since markers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3250 >
2022-10-24 12:42:51 +00:00
Stéphane Cerveau
fb09c028e3
h265parse: fix typo in member of GstH265SPS
...
Rename sps_extnsion_params to sps_extension_params
Fix comment about vui_parameters_present_flag
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3072 >
2022-10-04 10:01:12 +00:00
Seungha Yang
b6ca76eb68
nvh265sldec: Sync up with d3d11h265dec implementation
...
Each RefPicSetStCurrBefore/RefPicSetStCurrAfter/RefPicSetLtCurr array
might have empty element (i.e., reference pictures might not be stored
sequentially). Don't error out for the empty element case,
but instead, iterates each array and fill NVDEC's reference list
as much as possible
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1441
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3039 >
2022-09-16 20:25:23 +00:00
Seungha Yang
c91d72e677
nvdec: Fix for HEVC decoding when coded resolution is larger than display resolution
...
As documented in the SDK header, we should set coded width/height
values to the corresponding decoder configuration option,
instead of display resolution
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1438
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3022 >
2022-09-14 05:59:20 +09:00
Seungha Yang
ca47012a55
cudaupload,cudadownload: Fix document
...
* Fix typo, NVIDA -> NVIDIA
* Add cudadownload doc to the source file
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3018 >
2022-09-13 16:40:51 +00:00
Seungha Yang
7ea3c55549
cudaupload,cudadownload: Use shared GstD3D11Device context if possible
...
Handle d3d11 device context in set_context() method with
additional device compatibility check so that only NVIDIA GPU
associated d3d11 device can be configured in the element.
And clear old d3d11 device per set_info() for d3d11 device to be
updated as well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3018 >
2022-09-13 16:40:51 +00:00
Thibault Saunier
6a4425e46a
meson: Call pkgconfig.generate in the loop where we declare plugins dependencies
...
Removing some copy pasted code
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2970 >
2022-09-01 21:17:35 +00:00
Seungha Yang
75e8f80999
cuda: Hide runtime compiler related header and symbols
...
That's already abstracted via gst_cuda_nvrtc_compile() method
and therefore, we do not need to expose such symbols yet.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2884 >
2022-08-18 05:20:08 +09:00
Seungha Yang
812bb14f28
cudaupload,cudadownload: Don't simplify caps in transform_caps
...
The simplified caps might not be a subset of filter caps
and basetransform will complain about it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2883 >
2022-08-15 18:44:14 +00:00
Corentin Damman
0d5d94aabd
nvcodec: fix caps leaks in nvh264/h265encoder
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2850 >
2022-08-10 12:24:37 +00:00
Seungha Yang
6fff608f27
d3d11: Port to GstD3D11Fence
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2790 >
2022-07-23 16:53:14 +00:00
Seungha Yang
30c8dbe032
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 >
2022-06-30 12:38:08 +00:00
Seungha Yang
ce82c0570e
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 >
2022-06-30 11:17:15 +00:00
Seungha Yang
d9f08e17f1
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 >
2022-06-30 10:45:45 +00:00
Corentin Damman
ae781610c8
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 >
2022-06-30 07:30:09 +00:00
Corentin Damman
8678fc999a
cudamemory: add support for planar 4:2:2 YUV formats
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2269 >
2022-06-30 07:30:09 +00:00
Seungha Yang
85fe9fb61d
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 >
2022-06-30 01:54:17 +09:00
Seungha Yang
1e11c05591
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 >
2022-06-30 01:45:20 +09:00
Seungha Yang
aca71fd692
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 >
2022-06-27 19:33:57 +00:00
Seungha Yang
16955ba672
cudamemorycopy: Make sure writable caps before removing fields
...
The caps to be modified may not be writable when D3D11/GL/NVMM
are all disabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2664 >
2022-06-27 20:28:31 +09:00
Seungha Yang
58c94eed84
nvh264dec,nvh265dec: Don't realloc bitstream buffer per slice
...
Allocated memory size has not been updated which results in
realloc per slice. Fixing it and also release bitstream buffer
on ::close(), not finalize.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2361 >
2022-05-05 12:15:27 +00:00
Seungha Yang
33e77782c6
nvcodec: Add AV1 decoder
...
Adding GstCodecs based AV1 decoder element
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453 >
2022-05-04 01:23:25 +09:00
Seungha Yang
1444dd91c5
meson: nvcodec: Remove unnecessary override option and fix build with non-MSVC
...
cpp_std=c++11 was hack for macOS build but we don't build this plugin
for Apple device anymore. And add "-Wno-deprecated-declarations"
compile option for gcc/clang
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453 >
2022-05-04 01:10:07 +09:00
Seungha Yang
fe4d6bb469
nvcodec: Bump SDK header version to 11.1
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453 >
2022-05-03 23:56:34 +09:00
Seungha Yang
29aab904a8
nvdecoder: Handle DPB size margin in a single place
...
... instead of each subclass
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2343 >
2022-05-03 14:17:49 +00:00
Seungha Yang
6a4c42c03f
codecs: Signal required DPB size for AV1,MPEG2,VP8, and VP9 via new_sequence()
...
Make all codecs consistent so that subclass can know additional DPB
size requirement depending on render-delay configuration regardless
of codec. Note that render-delay feature is not implemented for AV1
yet but it's planned.
Also, consider new_sequence() is mandatory requirement, not optional
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2343 >
2022-05-03 14:17:49 +00:00
Seungha Yang
dce45586e8
nvvp9sldec: Increase DPB size to cover render delay
...
This should've included in the previous MR
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/987
already, but missed.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2313 >
2022-04-27 18:35:07 +00:00
Thibault Saunier
3c959ff53e
cudaconvert: Enhance debugging when setting video info fails
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2300 >
2022-04-26 19:04:06 +00:00
Seungha Yang
205a23f456
nvcodec: Stop building for non-{Windows,Linux} target
...
The other platforms, specifically macOS have not been supported already
because this plugin loads so or dll. Moreover, NVIDIA dropped
support for macOS as of CUDA 11.0. See also
https://developer.nvidia.com/nvidia-cuda-toolkit-11_0_0-developer-tools-mac-hosts
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2283 >
2022-04-25 15:50:52 +00:00
Corentin Damman
df64280874
cuda-converter: fix nvrtc compilation on non-English locale systems
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2268 >
2022-04-22 18:57:22 +00:00
Thibault Saunier
dcd2ccad59
cuda: Fix typo in gst_cuda_buffery_copy_type_to_string
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1472 >
2022-04-19 16:39:43 +00:00
Thibault Saunier
c033f8fad2
cuda: Factor out a public GstCUDA library
...
So applications and elements implemented outside GStreamer can reuse
our infrastructure
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1472 >
2022-04-19 16:39:43 +00:00
Thibault Saunier
3549d59725
nvenc: Give more details about errors
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1472 >
2022-04-19 16:39:43 +00:00
Corentin Damman
c68c40a6bc
cudautils: fix critical typo in gst_cuda_buffer_fallback_copy
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2194 >
2022-04-16 02:16:22 +00:00
Seungha Yang
a0d8133d60
nvencoder: Update property names and default values
...
Update properties of newly written D3D11/CUDA mode encoders
to be consistent with Intel QSV plugin. And rename "zerolatency"
to "zero-reorder-delay" because previous "zerolatency" may
misleading
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2140 >
2022-04-09 14:00:35 +00:00
Seungha Yang
5ed8e416fe
nvcodec: Fix typos
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2107 >
2022-04-03 22:12:33 +09:00
Seungha Yang
9b5fe81d01
nvencoder: Fix operator overloading
...
GUID equality check was inverted
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2107 >
2022-04-03 22:09:19 +09:00
Seungha Yang
60735deded
nvcodec: Add new Direct3D11/CUDA mode encoder implementation
...
Adding new encoder elements nvd3d11{h264,h265}enc for Direct3D11
input support and re-written nvcuda{h264,h265}enc elements.
Newly writeen elements have some differences compared with old
nv{h264,h265}enc including non-backward compatible changes.
* RGBA is not a supported input format any more:
New elements will support only YUV formats to avoid implicit conversion
done by hardware. Ideally it should be done by upstream element
in order to have more control on it. Moreover, RGBA support can cause
redundant RGBA -> YUV conversion if multiple encoders are
used for the same RGBA input
* Subsampled planar format support is dropped:
I420 and YV12 format are not supported formats for Direct3D11.
Although it's supported in CUDA mode, it's not a hardware friendly
memory layout and it will waste GPU memory since UV planes
will have large padding due to the memory layout requirement of NVENC.
* GL support is dropped: Similar to the RGBA case,
GL support in encoder would be suboptimal if GL input is
used by multiple encoders, because each encoder will copy GL memory
into CUDA memory.
Upstream cudaupload element can be used for GL <-> CUDA
interop instead.
* No more pre-allocation of encoder input surfaces. New implementation
will use input CUDA memory without copy (zero-copy) or
will copy into a NVENC's input buffer struct in case of
system memory input.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1997 >
2022-03-23 13:48:53 +00:00
Seungha Yang
c08ce58753
nvcodec: Move CUDA <-> GL, D3D11, NVMM copy function to utils
...
This method can be used in other elements as well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1945 >
2022-03-15 21:51:50 +00:00
Seungha Yang
b3df58add1
nvh265sldec: Add support for delayed output
...
Delay 4 frames in case of non-live to improve throughput
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1937 >
2022-03-15 21:08:06 +00:00
Seungha Yang
e270e2967f
nvenc: Fix deadlock because of too strict buffer pool size
...
The pool size might need to be larger than encoding surface pool size.
Also, because we always copy input frame into internal CUDA memory,
there's no reason to restrict max size of buffer pool.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1939 >
2022-03-12 16:44:44 +00:00
Seungha Yang
aa476452fb
codecs: Rename picture clear functions
...
Our convention for clear method is gst_clear_foo_bar().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1897 >
2022-03-11 20:20:17 +00:00
Seungha Yang
423111480c
nvh265sldec: Always fill SPS/PPS related parameters
...
Address compare was not a valid approach since it works
only if SPS/PPS id are changed. Otherwise it will always point to
the same address of member variables of h265parser.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1931 >
2022-03-11 16:14:14 +00:00
Corentin Damman
1fb3e35708
cudamemorycopy: add D3D11 resource support
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1807 >
2022-03-10 18:08:10 +00:00
Corentin Damman
1568db2c3e
cudacontext: find associated DXGI Adapter LUID
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1807 >
2022-03-10 18:08:10 +00:00
Corentin Damman
895f11401d
cudautils: add support of D3D11 resource as Cuda graphics resource type
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1807 >
2022-03-10 18:08:10 +00:00
Corentin Damman
f76ecf1e63
cudaloader: add D3D11 API
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1807 >
2022-03-10 18:08:10 +00:00
Seungha Yang
5d298b98da
nvh264dec,nvh265dec: Fix broken key-unit trick and reverse playback
...
On GstVideoDecoder::{drain,flush}, we send null packet with
CUVID_PKT_ENDOFSTREAM flag to drain out decoder. Which will
reset CUVID parser as well.
To continue decoding after the drain, the next input buffer
should include sequence headers otherwise CUVID parser will
not report any decodeable frame.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1911 >
2022-03-10 12:40:05 +00:00
Seungha Yang
496b77e6aa
cudamemorycopy: Fix GL resource leak
...
Clear GL resources on stop()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1896 >
2022-03-08 18:02:25 +00:00
Seungha Yang
4aa516f305
cudamemorycopy: Remove texture-target caps field
...
It's GL specific field, and we can remove it unconditionally
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1865 >
2022-03-07 19:05:29 +00:00
Seungha Yang
e5132a8508
cudaupload,cudadownload: Add support for dGPU NVMM
...
Implement NVMM <-> CUDA, GL, SYSTEM memory conversion. Jetson is
not supported yet. Note that NVMM <-> GL interop on Jetson platform
is supported by GstGL
Some example pipelines are:
- Convert NVMM to GstGL memory
nvv4l2decoder ! "video/x-raw(memory:NVMM)" ! cudadownload ! "video/x-raw(memory:GLMemory)" ! glimagesink
- Upload system memory to NVMM and encode
video/x-raw,format=NV12 ! cudaupload ! "video/x-raw(memory:NVMM)" ! nvv4l2h264enc
- Convert NVMM to GstCUDA memory and encode
nvvideoconvert ! "video/x-raw(memory:NVMM)" ! cudaupload ! "video/x-raw(memory:CUDAMemory)" ! nvh264enc
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1865 >
2022-03-07 19:05:29 +00:00
Seungha Yang
a63d1cf4c4
cudamemorycopy: Fix build when gl is disabled
...
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1707
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1868 >
2022-03-07 10:22:21 +00:00
Seungha Yang
30ddb0cd97
nvcodec: Add missing null check in context sharing code
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
c31bf2db4d
nvcodec: Refactor cudaupload/download and add support for GL memory
...
* Implement new baseclass GstCudaMemoryCopy to remove duplicated
cudaupload/download code
* Add support for CUDA <-> GL memory conversion via cudaupload/download
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
111b2c3f53
nvcodec: Refactor GstCudaMemory abstraction
...
* Hide GstCudaMemory member variables
* Make GstCudaAllocator object GstCudaContext independent
* Set offset/stride of memory correctly via video meta
* Drop GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT support.
This implementation actually does not support custom alignment
because we allocate device memory via cuMemAllocPitch
of which alignment is almost uncontrollable
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
ad0e7fca14
nvcodec: Refactor basetransform subclasses
...
* cudaupload/download
- Specify only formats actually we can deal with
nvcodec elements, not all video formats
- Supports CUDA output for download and input for upload in order
to make passthrough possible, like other upload/download elements.
* cudabasetransform
- Reset conversion element if upstream CUDA memory
holds different CUDA context and the element can accept it.
This is the same behavior as corresponding d3d11 filter elements.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
89bbcf0061
cudabufferpool: Move GstCudaContext object to public member
...
... so that plugins can understand assosicated cuda context with the
pool.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
c8a1c953d8
cudacontext: Require explicit gpu id instead of auto (-1)
...
Sync up with GstD3D11Device implementation. The auto stuff should
be handled in context sharing step, not device creation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
1b9274307a
nvcodec: Indent update
...
... to prevent gnu indent version dependent diffs.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
cec7ac2a1b
cudacontext: Remove unnecessary cuInit() call
...
It's already called at plugin init time
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1834 >
2022-03-06 15:39:04 +00:00
Seungha Yang
28eeba3e18
nvh265sldec: Fix for decoding 12bits stream
...
We've been exposing main-444-12 profile as a supported profile
in its sinkpad template but not actaully. Adding code to
covert 12 and 16 bits as well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1612 >
2022-02-07 18:27:48 +00:00
Seungha Yang
80bbc71ec0
nvdecoder: Fix for HEVC 4:4:4 format decoding
...
Map chroma_format_idc == 3 (which means 4:4:4 subsampling) correctly,
also pass coded bitdepth for decoder initialization instead of
inferring it from output format since they can be different.
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/949
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1612 >
2022-02-07 18:27:48 +00:00
Seungha Yang
6434d69f8c
codecs: Stop claiming constness for refcounted object
...
It's almost pointless and makes little sense as subclass might
want to modify refcount of the object or so. And all subclasses
are already casting them to non-const version as well.
In a general sense, we need to avoid passing refcounted object
with const qualifier.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1238 >
2022-02-06 17:17:22 +00:00
Seungha Yang
34b54ca665
nvdecoder: Fix for display resolution setup
...
Display resolution should be cropped rect, not coded resolution.
Otherwise decoded output from NVDEC might be wrong.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1617 >
2022-02-01 17:58:06 +00:00
Seungha Yang
2c834b5fc7
nvvp9sldec: Drop frames on non-keyframe format change
...
NVDEC doesn't seem to be able to handle the case
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1407 >
2021-12-02 19:19:59 +00:00
Thibault Saunier
d0c5778669
doc: Update nvdec documentation
...
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/870
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1309 >
2021-11-05 13:26:33 +00:00