Matthew Waters
8dac91537d
cuda/nvcodec: Add support for importing and producing embedded NVMM memory
...
As produced on the Nvidia Jetson series of devices.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7274 >
2024-08-02 01:59:07 +00:00
Seungha Yang
afb62e98c7
cuda: Enable x86 NVMM support again
...
It was broken since memory copy helper function was moved to gst-libs.
Also, adding "cuda-nvmm" and "cuda-nvmm-include-path" build options
to en/disable NVMM support in gstcuda library
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6978 >
2024-06-06 12:16:50 +00:00
Brad Reitmeyer
a564440020
nvcodec: Accept progressive-high profiles for h264
...
Videos using progressive-high used to work on 1.16 before the parser added progressive-high. It looks like partial
support was added to nvcodec in https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1634
but accidentally ommited gstnvh264dec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6862 >
2024-05-16 16:05:52 -05:00
Seungha Yang
15c24abf5d
nvcodec: Add AV1 encoder
...
Adding CUDA mode "nvav1enc", D3D11 mode "nvd3d11av1enc" and auto GPU
mode "nvautogpuav1enc" elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:52 +00:00
Seungha Yang
da019bf137
nvcodec: Rename nvcuda{h264,h265}enc to nv{h264,h265}enc
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:52 +00:00
Seungha Yang
b74422dcbc
nvcodec: Remove old nvenc implementation
...
Stop shipping deprecated implementation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:52 +00:00
Seungha Yang
0ffbe20d31
nvcodec: Bump minimum supported SDK version to 10.0
...
New preset (i.e., P1 ~ P7) requires SDK 10.0 or newer
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:52 +00:00
Seungha Yang
60637b96c8
nvcodec: Update SDK header to 12.0.16
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:52 +00:00
Seungha Yang
ff6d6e1b3c
nvencoder: Enhance lagacy encoding profile mapping
...
Updated based on the NVENC Preset Migration Guide
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:52 +00:00
Seungha Yang
cfd92819d9
nvencoder: Update property names and default value
...
... to be the same as old NVENC elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754 >
2024-05-15 14:35:51 +00:00
Seungha Yang
99b1f5ddd2
nvencoder: Fix maximum QP value setting
...
Fixing typo
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6827 >
2024-05-12 09:38:29 +00:00
Seungha Yang
84f4068036
nvh265encoder: Fix crash with RGBx and BGRx
...
Both formats need to be handled in switch
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6752 >
2024-04-28 23:34:37 +09:00
Seungha Yang
106187cc59
nvencoder: Add support for RGB formats
...
Adding RGBA, RGBx, BGRA, BGRx, VUYA and RGB10A2_LE format support for performance.
However, these formats are not still recommended if upstream can support
native YUV formats (e.g., NV12, P010) since NVENC does not expose
conversion related optiones. Note that VUYA format is 4:4:4 YUV format
already but NVENC runtime will convert it to 4:2:0 format internally
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6417 >
2024-04-02 13:07:29 +00:00
Seungha Yang
e6f496a240
cuda: Add support for VUYA format
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6417 >
2024-04-02 13:07:29 +00:00
Michiel Westerbeek
a4aa9e197e
gstcudaconvertscale, gstvavpp, videoconvertscale: downgrade 'Can't keep DAR' to debug
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5730 >
2024-03-13 16:06:56 +00:00
Seungha Yang
5d62f408f2
nvcodec: Add plugin status message
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6167 >
2024-02-22 23:30:29 +00:00
Seungha Yang
cfa8386dd0
nvdecoder: Enable zero-copy only if explicitly enabled
...
Keep pre-1.24 behavior unless user specifies the number of
output surface size. We are calculating output surface size
conservatively, and it can result in over allocation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6102 >
2024-02-13 12:37:07 +00:00
Seungha Yang
59358e439d
nvh265dec: Don't convert unknown video format to string
...
gst_video_format_to_string() method does not allow unknown format
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6102 >
2024-02-13 12:37:06 +00:00
Seungha Yang
d444fe3fdc
nvcodec: Update plugin cache
...
Updating plugin cache for IPC elements, JPEG encoder, and newly added
properties. Also removing Gst*SLDec which does not exist anymore
but renamed to Gst*Dec.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6070 >
2024-02-07 22:06:39 +00:00
Seungha Yang
6dc902a962
nvcodec: Add JPEG encoder
...
Adding nvJPEG library based JPEG encoder element
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6021 >
2024-01-31 12:51:28 +00:00
Seungha Yang
fc4b136ac8
nvcodec: Move runtime compiler check to plugin init function
...
Required information for other elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6021 >
2024-01-31 12:51:28 +00:00
Seungha Yang
51162acc31
cuda: Report device open error
...
Call gst_cuda_result() with CUDA_ERROR_NO_DEVICE error code if
we could not open device, so that application can catch the error
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6006 >
2024-01-30 14:30:41 +00:00
Seungha Yang
07ba225183
cudaipc: Add support for custom meta forwarding
...
Forward custom meta to peer ipcsrc elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6006 >
2024-01-30 14:30:41 +00:00
Seungha Yang
abe1f5044d
cuda: Prefer CUBIN over PTX
...
System installed NVRTC library might be newer version than
driver, then generate PTX can be incompatible with the driver.
Instead of the intermediate code PTX, use actual assembly code
directly.
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3108
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5639 >
2024-01-02 10:10:09 +00:00
Seungha Yang
012222bcb3
cudaipcsink: Fix deadlock on stop
...
Manually close connection if client does not hold any shared memory
on stop.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5747 >
2023-12-06 16:09:27 +00:00
Seungha Yang
b168647073
nvdec: Fix division by zero when calculating buffer duration
...
Don't try to calculate buffer duration from variable framerate
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5764 >
2023-12-06 13:38:09 +00:00
Seungha Yang
0a05ba3f62
nvencoder: Add support for new preset/tune/multi-pass options
...
Adding new P1 ~ P7 presets and deprecate old preset values.
Also adding tune and multi-pass properties.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5428 >
2023-10-14 11:03:40 +00:00
James Oliver
aeef97d81b
nvh265encoder: fix bounds for auto-select GPU enumeration
...
Fixes the bounds-check for encoder auto-select GPU enumeration to be
between 0-7 instead of 0-6. This should allow 8-GPU machines to work
with nvautogpuh265enc for the last enumerated GPU.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5438 >
2023-10-05 13:37:36 +08:00
James Oliver
54074af8ec
nvh264encoder: fix bounds for auto-select GPU enumeration
...
Fixes the bounds-check for encoder auto-select GPU enumeration to be
between 0-7 instead of 0-6. This should allow 8-GPU machines to work
with nvautogpuh264enc for the last enumerated GPU.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5438 >
2023-10-05 13:37:32 +08:00
Seungha Yang
2cd81eb1ac
nvdecoder: Handle output surface alignment in decoder helper object
...
Output resolution might not be an even number. Set output resolution
without round up but consider the alignment inside of decoder
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5409 >
2023-09-29 12:36:01 +00:00
Seungha Yang
42560c24df
nvdecoder: Add support for D3D11 output
...
Since DXVA does not support some profiles such as HEVC RExt,
vendor specific decoding API is still required.
When decoder is negotiated with d3d11 caps, decoder will convert
semi-planar frame to planar since semi-planar format (e.g.,
DXGI_FORMAT_NV12) is not supported by CUDA/D3D11 interop.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5409 >
2023-09-29 12:36:01 +00:00
Seungha Yang
57e0a0bd61
nvdecoder: Handle GstContext in helper object
...
... and move common code to helper object
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5409 >
2023-09-29 12:36:01 +00:00
Seungha Yang
c818906236
cuda: Add support for I420_12LE format
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5409 >
2023-09-29 12:36:01 +00:00
Seungha Yang
c5bd0faee3
nvdecoder: Add support for HEVC GBR output
...
... and use P012 format for 12bits instead of P016
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2991
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5375 >
2023-09-23 13:12:56 +00:00
Seungha Yang
907c507680
nvh265encoder: Add support for RGB encoding
...
Adding GBR format support to nv{autogpu,cuda,d3d11}h265enc.
Note that the only difference between GBR and Y444 encoding
is matrix_coeffs value written in VUI.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5375 >
2023-09-23 13:12:56 +00:00
Seungha Yang
a80f542f66
cuda: Add support for P012_LE and Y444/GBR high bitdepth formats
...
Adding P012, Y444_10, Y444_12, GBR_10, GBR_12 and GBR_16 formats support
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5375 >
2023-09-23 13:12:55 +00:00
Seungha Yang
bd25c2738e
nvdecoder: Copy output frame if needed
...
Even if decoder is negotiated with CUDA memory feature, if downstream
proposed no buffer pool, assume that the pool size is unknown.
And disable zero-copy if there's no more free output surface.
Or, in case of reverse playback, always copy frames.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5338 >
2023-09-17 00:15:47 +09:00
Seungha Yang
c5a5dcdf18
nvh265dec: Reconfigure decoder on max-dpb-size change
...
Decoder should create new picture pool for larger DPB size
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5338 >
2023-09-16 23:00:11 +09:00
Seungha Yang
f9169c5431
nvdecoder: Move common logic to decoder helper object
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5285 >
2023-09-08 11:51:23 +00:00
Seungha Yang
97fc02cfe3
av1decoder: Port to GstCodecPicture struct
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5285 >
2023-09-08 11:51:23 +00:00
Seungha Yang
a73c6d7fb6
vp9decoder: Port to GstCodecPicture struct
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5285 >
2023-09-08 11:51:23 +00:00
Seungha Yang
4571fac946
vp8decoder: Port to GstCodecPicture struct
...
... and remove unused "pts" variable from GstVp8Picture struct
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5285 >
2023-09-08 11:51:23 +00:00
Seungha Yang
6e7cab43be
h265decoder: Port to GstCodecPicture struct
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5285 >
2023-09-08 11:51:23 +00:00
Seungha Yang
ea3dfadbed
h264decoder: Port to GstCodecPicture struct
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5285 >
2023-09-08 11:51:23 +00:00
Seungha Yang
6fa405c1e2
cudaipcclient: Protect IPC handle import/close with global lock
...
Protect import/close with signle lock to avoid importing a IPC handle
while it's being closed by another cudaipcsrc from other thread.
Also fixing cuda context leak
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5230 >
2023-08-25 10:06:58 +00:00
Seungha Yang
315cfaf2d8
nvencoder: Fix negotiation error when interlace-mode is unspecified
...
Use GST_PAD_SET_ACCEPT_INTERSECT() to accept caps without interlace-mode
field
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5229 >
2023-08-24 14:58:25 +00:00
L. E. Segovia
b1a5707fcb
windows: Fix mutexes leaking into the exports table
...
Translation unit-local variables must be marked static on Windows,
otherwise they're made available to the whole binary.
See:
https://learn.microsoft.com/en-us/cpp/cpp/program-and-linkage-cpp?view=msvc-170#external-vs-internal-linkage
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5185 >
2023-08-16 08:17:05 +00:00
Seungha Yang
7b6023d9cf
nvcodec: Add support for CUDA IPC
...
Adding cudaipc{src,sink} element for CUDA IPC support.
Implementation note:
* For the communication between end points, Win32 named-pipe
and unix domain socket will be used on Windows and Linux respectively.
* cudaipcsink behaves as a server, and all GPU resources will be owned by
the server process and exported for other processes, then cudaipcsrc
(client) will import each exported handle.
* User can select IPC mode via "ipc-mode" property of cudaipcsink.
There are two IPC mode, one is "legacy" which uses legacy CUDA IPC
method and the other is "mmap" which uses CUDA virtual memory API
with OS's resource handle sharing method such as DuplicateHandle()
on Windows. The "mmap" mode might be better than "legacy" in terms
of stability since it relies on OS's resource management but
it would consume more GPU memory than "legacy" mode.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4510 >
2023-08-14 13:41:01 +00:00
Seungha Yang
cf2cd20ba0
nvdecoder: Add max-display-delay property
...
The same as in old nvdec implementation so that user can control
the number of delayed output frames.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4841 >
2023-08-10 11:58:42 +00:00
Seungha Yang
19ee5f6dc4
nvdecoder: Reduce DPB size
...
Decoder will copy decoded picture to downstream buffer or output CUDA
memory even in case of zero-copy mode. Additional margin should be unnecessary
unless baseclass passed wrong max DPB size.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4841 >
2023-08-10 11:58:42 +00:00