1msdk_sources = [
2  'gstmsdk.c',
3  'gstmsdkbufferpool.c',
4  'gstmsdkcontext.c',
5  'gstmsdkcontextutil.c',
6  'gstmsdkdec.c',
7  'gstmsdkdecproputil.c',
8  'gstmsdkenc.c',
9  'gstmsdkh264dec.c',
10  'gstmsdkh264enc.c',
11  'gstmsdkh265dec.c',
12  'gstmsdkh265enc.c',
13  'gstmsdkmjpegdec.c',
14  'gstmsdkmjpegenc.c',
15  'gstmsdkmpeg2dec.c',
16  'gstmsdkmpeg2enc.c',
17  'gstmsdksystemmemory.c',
18  'gstmsdkvc1dec.c',
19  'gstmsdkvideomemory.c',
20  'gstmsdkvp8dec.c',
21  'gstmsdkvp8enc.c',
22  'gstmsdkvpp.c',
23  'gstmsdkvpputil.c',
24  'msdk-enums.c',
25  'msdk.c',
26]
27
28if host_machine.system() == 'windows'
29  msdk_sources += ['msdk_d3d.c', 'gstmsdkallocator_d3d.c' ]
30else
31  msdk_sources += ['msdk_libva.c', 'gstmsdkallocator_libva.c']
32endif
33
34have_msdk = false
35msdk_dep = []
36
37msdk_option = get_option('msdk')
38if msdk_option.disabled()
39  subdir_done()
40endif
41
42mfx_dep = dependency('libmfx', required: false)
43if mfx_dep.found()
44  mfx_incdir = mfx_dep.get_pkgconfig_variable('includedir')
45else
46  # Old versions of MediaSDK don't provide a pkg-config file
47  mfx_root = run_command(python3, '-c', 'import os; print(os.environ.get("INTELMEDIASDKROOT", os.environ.get("MFX_HOME", "")))').stdout().strip()
48
49  if mfx_root != ''
50    mfx_libdir = [mfx_root + '/lib/lin_x64', mfx_root + '/lib/x64', mfx_root + '/lib64', mfx_root + '/lib']
51    mfx_incdir = join_paths([mfx_root, 'include'])
52    mfx_lib = cxx.find_library('mfx', dirs: mfx_libdir, required: msdk_option)
53    mfx_inc = include_directories(mfx_incdir)
54    mfx_dep = declare_dependency(include_directories: mfx_inc, dependencies: mfx_lib)
55  elif msdk_option.enabled()
56    error('msdk plugin enabled but Intel Media SDK not found: consider setting PKG_CONFIG_PATH, INTELMEDIASDKROOT or MFX_HOME')
57  else
58    subdir_done()
59  endif
60endif
61
62# Old versions of MediaSDK don't have the 'mfx' directory prefix
63if cxx.has_header('mfx/mfxdefs.h', args: '-I' + mfx_incdir)
64  mfx_incdir = join_paths([mfx_incdir, 'mfx'])
65endif
66
67if cxx.has_header('mfxvp9.h', args: '-I' + mfx_incdir)
68  msdk_sources += [ 'gstmsdkvp9dec.c' ]
69  cdata.set10('USE_MSDK_VP9_DEC', 1)
70endif
71
72if host_machine.system() == 'windows'
73  if cc.get_id() != 'msvc' and msdk_option.enabled()
74    error('msdk plugin can only be built with MSVC')
75  endif
76  legacy_stdio_dep = cc.find_library('legacy_stdio_definitions', required: get_option('msdk'))
77  d3d11_dep = cc.find_library('d3d11', required: get_option('msdk'))
78  msdk_deps = declare_dependency(dependencies: [d3d11_dep, legacy_stdio_dep])
79  msdk_deps_found = d3d11_dep.found() and legacy_stdio_dep.found() and cc.get_id() == 'msvc'
80else
81  libva_dep = dependency('libva-drm', required: get_option('msdk'))
82  libdl_dep = cc.find_library('dl', required: get_option('msdk'))
83  libgudev_dep = dependency('gudev-1.0', required: get_option('msdk'))
84  msdk_deps = declare_dependency(dependencies: [libva_dep, libdl_dep, libgudev_dep])
85  msdk_deps_found = libva_dep.found() and libdl_dep.found() and libgudev_dep.found()
86endif
87
88if msdk_deps_found
89  gstmsdktag = library('gstmsdk',
90    msdk_sources,
91    c_args : gst_plugins_bad_args,
92    include_directories : [configinc],
93    dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, gstallocators_dep, mfx_dep, msdk_deps],
94    install : true,
95    install_dir : plugins_install_dir,
96  )
97  pkgconfig.generate(gstmsdktag, install_dir : plugins_pkgconfig_install_dir)
98  have_msdk = true
99endif
100