gstreamer/subprojects/gst-plugins-bad/sys/msdk/meson.build
Nirbheek Chauhan da86a92a2d msdk: Fix libdrm dependency detection and usage
drm_fourcc.h should be picked up via the pkgconfig include, not the
system includedir directly.

Also consolidate the libdrm usage in va and msdk.

All this allows it to be picked up consistently (via the subproject,
for example).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7760>
2024-10-27 12:29:08 +00:00

210 lines
6.3 KiB
Meson

msdk_sources = [
'gstmsdk.c',
'gstmsdkallocator.c',
'gstmsdkcaps.c',
'gstmsdkcontext.c',
'gstmsdkcontextutil.c',
'gstmsdkdec.c',
'gstmsdkdecproputil.c',
'gstmsdkenc.c',
'gstmsdkh264dec.c',
'gstmsdkh264enc.c',
'gstmsdkh265dec.c',
'gstmsdkh265enc.c',
'gstmsdkmjpegdec.c',
'gstmsdkmjpegenc.c',
'gstmsdkmpeg2dec.c',
'gstmsdkmpeg2enc.c',
'gstmsdkvc1dec.c',
'gstmsdkvp8dec.c',
'gstmsdkvpp.c',
'gstmsdkvpputil.c',
'msdk-enums.c',
'msdk.c',
]
have_msdk = false
msdk_dep = []
use_msdk = false
use_onevpl = false
onevpl_extra_args = []
extra_args = [
'-DGST_USE_UNSTABLE_API',
'-DMFX_DEPRECATED_OFF'
]
msdk_option = get_option('msdk')
if msdk_option.disabled()
subdir_done()
endif
if host_machine.system() == 'windows'
msdk_sources += ['msdk_d3d.c', 'gstmsdkallocator_d3d.c' ]
if gstd3d11_dep.found()
extra_args += ['-DCOBJMACROS']
else
if msdk_option.enabled()
error('The msdk plugin was enabled explicity, but required d3d11 dependencies were not found.')
endif
subdir_done()
endif
else
if not gstva_dep.found()
if msdk_option.enabled()
error('The msdk plugin was enabled explicity, but required va dependencies were not found.')
endif
subdir_done()
endif
msdk_sources += ['msdk_libva.c', 'gstmsdkallocator_libva.c']
endif
mfx_api = get_option('mfx_api')
if mfx_api != 'oneVPL'
mfx_dep = dependency('libmfx', version: ['>= 1.0', '<= 1.99'], required: false)
if mfx_dep.found()
mfx_incdir = mfx_dep.get_variable('includedir')
mfx_inc = []
use_msdk = true
else
# Old versions of MediaSDK don't provide a pkg-config file
mfx_root = run_command(python3, '-c', 'import os; print(os.environ.get("INTELMEDIASDKROOT", os.environ.get("MFX_HOME", "")))', check: false).stdout().strip()
if mfx_root != ''
mfx_libdir = [mfx_root + '/lib/lin_x64', mfx_root + '/lib/x64', mfx_root + '/lib64', mfx_root + '/lib']
if host_machine.system() == 'windows'
if host_machine.cpu_family() == 'x86'
mfx_libdir = [mfx_root + '/lib/win32']
else
mfx_libdir = [mfx_root + '/lib/x64']
endif
endif
mfx_incdir = join_paths([mfx_root, 'include'])
mfx_lib = cxx.find_library('mfx', dirs: mfx_libdir, required: msdk_option)
mfx_inc = include_directories(mfx_incdir)
mfx_dep = declare_dependency(include_directories: mfx_inc, dependencies: mfx_lib)
use_msdk = true
endif
endif
endif
if not use_msdk and mfx_api != 'MSDK'
mfx_dep = dependency('vpl', version: '>= 2.2', required: false)
if mfx_dep.found()
mfx_incdir = mfx_dep.get_variable('includedir')
mfx_inc = []
use_onevpl = true
endif
endif
if not use_msdk and not use_onevpl
if msdk_option.enabled()
error('msdk plugin enabled but the Intel Media SDK or the oneVPL SDK not found: consider setting PKG_CONFIG_PATH, INTELMEDIASDKROOT or MFX_HOME')
else
subdir_done()
endif
endif
# Check oneVPL firstly
if use_onevpl
onevpl_extra_args += ['-DONEVPL_EXPERIMENTAL']
mfx_incdir = join_paths([mfx_incdir, 'vpl'])
mfx_inc = include_directories(mfx_incdir)
elif cxx.has_header('mfx/mfxdefs.h', args: '-I' + mfx_incdir)
mfx_incdir = join_paths([mfx_incdir, 'mfx'])
mfx_inc = include_directories(mfx_incdir)
endif
if use_onevpl or cxx.has_header('mfxvp9.h', args: '-I' + mfx_incdir)
msdk_sources += [ 'gstmsdkvp9dec.c' ]
cdata.set('USE_MSDK_VP9_DEC', 1)
endif
# Usually MFX_VERSION 1026+ is required to support raw VP9 stream, however Fedora 30 has MFX_VERSION==1026
# but without support for raw VP9 stream, so mfxExtVP9Param is checked as well.
# See https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/988#note_408093
mfx_ver126_check_code = '''
#include <mfxdefs.h>
#include <mfxstructures.h>
#if MFX_VERSION < 1026
#error "The current version of mfx doesn't support raw vp9 stream"
#endif
mfxExtVP9Param ext;
'''
have_mfx_ver126 = cc.compiles(mfx_ver126_check_code,
include_directories : [configinc, mfx_inc])
if have_mfx_ver126
msdk_sources += [ 'gstmsdkvp9enc.c' ]
cdata.set('USE_MSDK_VP9_ENC', 1)
endif
mfx_ver134_check_code = '''
#include <mfxdefs.h>
#if MFX_VERSION < 1034
#error "The current version of mfx doesn't support AV1 decoding"
#endif
'''
have_mfx_ver134 = cc.compiles(mfx_ver134_check_code,
include_directories : [configinc, mfx_inc])
if have_mfx_ver134
msdk_sources += [ 'gstmsdkav1dec.c' ]
cdata.set('USE_MSDK_AV1_DEC', 1)
endif
mfx_ver205_check_code = '''
#include <mfxdefs.h>
#if MFX_VERSION < 2005
#error "The current verison of mfx doesn't support AV1 encoding"
#endif
'''
have_mfx_ver205 = cc.compiles(mfx_ver205_check_code,
include_directories: [configinc, mfx_inc])
if use_onevpl and have_mfx_ver205
msdk_sources += [ 'gstmsdkav1enc.c' ]
cdata.set10('USE_MSDK_AV1_ENC', 1)
endif
if host_machine.system() == 'windows'
if cc.get_id() != 'msvc' and msdk_option.enabled()
error('msdk plugin can only be built with MSVC')
endif
legacy_stdio_dep = cc.find_library('legacy_stdio_definitions', required: get_option('msdk'))
msdk_deps = declare_dependency(dependencies: [gstd3d11_dep, legacy_stdio_dep])
msdk_deps_found = gstd3d11_dep.found() and legacy_stdio_dep.found() and cc.get_id() == 'msvc'
else
libdl_dep = cc.find_library('dl', required: get_option('msdk'))
libgudev_dep = dependency('gudev-1.0', required: get_option('msdk'), allow_fallback: true)
msdk_deps = declare_dependency(dependencies: [gstva_dep, libdl_dep, libgudev_dep, libdrm_dep])
msdk_deps_found = gstva_dep.found() and libdl_dep.found() and libgudev_dep.found() and libdrm_dep.found()
endif
if msdk_deps_found
if host_machine.system() != 'windows'
driverdir = libva_dep.get_variable('driverdir', default_value: '')
if driverdir == ''
driverdir = join_paths(get_option('prefix'), get_option('libdir'), 'dri')
endif
cdata.set_quoted('VA_DRIVERS_PATH', '@0@'.format(driverdir))
endif
gstmsdktag = library('gstmsdk',
msdk_sources,
c_args : gst_plugins_bad_args + extra_args + onevpl_extra_args,
include_directories : [configinc, mfx_inc],
dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, gstallocators_dep, gstcodecparsers_dep, mfx_dep, msdk_deps],
install : true,
install_dir : plugins_install_dir,
)
plugins += [gstmsdktag]
have_msdk = true
endif