mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-12 19:36:38 +00:00
7b6023d9cf
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>
116 lines
2.8 KiB
Meson
116 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]
|
|
|