gstreamer/subprojects/gst-plugins-bad/sys/nvcodec/meson.build
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

117 lines
2.8 KiB
Meson

nvcodec_sources = [
'gstcudabasetransform.c',
'gstcudaconverter.c',
'gstcudaconvertscale.c',
'gstcudafilter.c',
'gstcudaipc.cpp',
'gstcudaipcclient.cpp',
'gstcudaipcserver.cpp',
'gstcudaipcsink.cpp',
'gstcudaipcsrc.cpp',
'gstcudamemorycopy.c',
'gstcuvidloader.c',
'gstnvav1dec.cpp',
'gstnvbaseenc.c',
'gstnvdec.c',
'gstnvdecobject.cpp',
'gstnvdecoder.cpp',
'gstnvenc.c',
'gstnvencobject.cpp',
'gstnvencoder.cpp',
'gstnvh264dec.cpp',
'gstnvh264enc.c',
'gstnvh264encoder.cpp',
'gstnvh265dec.cpp',
'gstnvh265enc.c',
'gstnvh265encoder.cpp',
'gstnvvp8dec.cpp',
'gstnvvp9dec.cpp',
'plugin.c',
]
nvmm_sources = [
'gstcudanvmm.c',
]
nvcodec_win32_sources = [
'gstcudaipcclient_win32.cpp',
'gstcudaipcserver_win32.cpp',
]
nvcodec_unix_sources = [
'gstcudaipcclient_unix.cpp',
'gstcudaipcserver_unix.cpp',
]
if get_option('nvcodec').disabled()
subdir_done()
endif
if not gstcuda_dep.found()
if get_option('nvcodec').enabled()
error('The nvcodec was enabled explicitly, but required gstcuda dependency is not found')
endif
subdir_done()
endif
plugin_incdirs = [configinc, cuda_stubinc]
extra_args = ['-DGST_USE_UNSTABLE_API']
extra_deps = []
if gstgl_dep.found()
extra_args += ['-DHAVE_CUDA_GST_GL']
endif
if host_system == 'linux'
have_nvmm = false
if cc.has_header('nvbufsurface.h')
have_nvmm = true
elif cc.has_header('/opt/nvidia/deepstream/deepstream/sources/includes/nvbufsurface.h')
# XXX: Should add an option for SDK path??
have_nvmm = true
plugin_incdirs += [include_directories('/opt/nvidia/deepstream/deepstream/sources/includes')]
endif
if have_nvmm
extra_args += ['-DHAVE_NVCODEC_NVMM']
nvcodec_sources += nvmm_sources
endif
gio_unix_dep = dependency('gio-unix-2.0', required : get_option('nvcodec'))
extra_deps += [gio_dep, gio_unix_dep]
nvcodec_sources += nvcodec_unix_sources
else
nvcodec_sources += nvcodec_win32_sources
endif
if cc.get_id() != 'msvc'
if host_system == 'windows'
# MinGW 32bits compiler seems to be complaining about redundant-decls
# when ComPtr is in use. Let's just disable the warning
extra_args += cc.get_supported_arguments([
'-Wno-redundant-decls',
])
endif
# Allow deprecated decls since it's part of SDK header
extra_args += cc.get_supported_arguments([
'-Wno-deprecated-declarations',
])
endif
gstnvcodec = library('gstnvcodec',
nvcodec_sources,
c_args : gst_plugins_bad_args + extra_args,
cpp_args : gst_plugins_bad_args + extra_args,
include_directories : plugin_incdirs,
dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, gstgl_dep,
gstglproto_dep, gmodule_dep, gstcodecs_dep,
gstd3d11_dep, gstcuda_dep] + extra_deps,
override_options : ['cpp_std=c++14'],
install : true,
install_dir : plugins_install_dir,
)
plugins += [gstnvcodec]