mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-21 07:46:38 +00:00
60735deded
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>
93 lines
2.3 KiB
Meson
93 lines
2.3 KiB
Meson
nvcodec_sources = [
|
|
'plugin.c',
|
|
'gstnvenc.c',
|
|
'gstnvbaseenc.c',
|
|
'gstnvh264enc.c',
|
|
'gstnvh265enc.c',
|
|
'gstcudaloader.c',
|
|
'gstnvdec.c',
|
|
'gstcuvidloader.c',
|
|
'gstcudacontext.c',
|
|
'gstcudautils.c',
|
|
'gstnvdecoder.c',
|
|
'gstnvh264dec.c',
|
|
'gstnvh265dec.c',
|
|
'gstcudamemory.c',
|
|
'gstcudabufferpool.c',
|
|
'gstcudabasetransform.c',
|
|
'gstcudamemorycopy.c',
|
|
'gstcudanvrtc.c',
|
|
'gstnvrtcloader.c',
|
|
'cuda-converter.c',
|
|
'gstcudafilter.c',
|
|
'gstcudabasefilter.c',
|
|
'gstcudaconvert.c',
|
|
'gstcudascale.c',
|
|
'gstnvvp8dec.c',
|
|
'gstnvvp9dec.c',
|
|
'gstnvencoder.cpp',
|
|
'gstnvh264encoder.cpp',
|
|
'gstnvh265encoder.cpp',
|
|
]
|
|
|
|
nvmm_sources = [
|
|
'gstcudanvmm.c',
|
|
]
|
|
|
|
if get_option('nvcodec').disabled()
|
|
subdir_done()
|
|
endif
|
|
|
|
plugin_incdirs = [configinc, include_directories('./stub')]
|
|
extra_args = ['-DGST_USE_UNSTABLE_API']
|
|
|
|
if gstgl_dep.found()
|
|
extra_args += ['-DHAVE_NVCODEC_GST_GL=1']
|
|
endif
|
|
|
|
if gstd3d11_dep.found()
|
|
extra_args += ['-DHAVE_NVCODEC_GST_D3D11=1', '-DCOBJMACROS']
|
|
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
|
|
endif
|
|
|
|
override_opt = []
|
|
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
|
|
if cc.get_id() != 'msvc'
|
|
extra_args += cc.get_supported_arguments([
|
|
'-Wno-redundant-decls',
|
|
])
|
|
endif
|
|
else
|
|
override_opt += ['cpp_std=c++11']
|
|
endif
|
|
|
|
gstnvcodec = library('gstnvcodec',
|
|
nvcodec_sources,
|
|
c_args : gst_plugins_bad_args + extra_args,
|
|
cpp_args : gst_plugins_bad_args + extra_args,
|
|
override_options: override_opt,
|
|
include_directories : plugin_incdirs,
|
|
dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, gstgl_dep, gstglproto_dep, gmodule_dep, gstcodecs_dep, gstd3d11_dep],
|
|
install : true,
|
|
install_dir : plugins_install_dir,
|
|
)
|
|
pkgconfig.generate(gstnvcodec, install_dir : plugins_pkgconfig_install_dir)
|
|
plugins += [gstnvcodec]
|
|
|