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

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]