taglist, plugins: fix compiler warnings with GLib >= 2.76
[platform/upstream/gstreamer.git] / subprojects / gst-plugins-bad / sys / msdk / meson.build
1 msdk_sources = [
2   'gstmsdk.c',
3   'gstmsdkallocator.c',
4   'gstmsdkbufferpool.c',
5   'gstmsdkcontext.c',
6   'gstmsdkcontextutil.c',
7   'gstmsdkdec.c',
8   'gstmsdkdecproputil.c',
9   'gstmsdkenc.c',
10   'gstmsdkh264dec.c',
11   'gstmsdkh264enc.c',
12   'gstmsdkh265dec.c',
13   'gstmsdkh265enc.c',
14   'gstmsdkmjpegdec.c',
15   'gstmsdkmjpegenc.c',
16   'gstmsdkmpeg2dec.c',
17   'gstmsdkmpeg2enc.c',
18   'gstmsdksystemmemory.c',
19   'gstmsdkvc1dec.c',
20   'gstmsdkvideomemory.c',
21   'gstmsdkvp8dec.c',
22   'gstmsdkvpp.c',
23   'gstmsdkvpputil.c',
24   'msdk-enums.c',
25   'msdk.c',
26 ]
27
28 have_msdk = false
29 msdk_dep = []
30 use_msdk = false
31 use_onevpl = false
32 onevpl_extra_args = []
33
34 extra_args = [
35   '-DGST_USE_UNSTABLE_API',
36 ]
37
38 msdk_option = get_option('msdk')
39 if msdk_option.disabled()
40   subdir_done()
41 endif
42
43 if host_machine.system() == 'windows'
44   msdk_sources += ['msdk_d3d.c', 'gstmsdkallocator_d3d.c' ]
45   if gstd3d11_dep.found()
46     extra_args += ['-DCOBJMACROS']
47   else
48     if msdk_option.enabled()
49       error('The msdk plugin was enabled explicity, but required d3d11 dependencies were not found.')
50     endif
51     subdir_done()
52   endif
53
54 else
55   if not gstva_dep.found()
56     if msdk_option.enabled()
57       error('The msdk plugin was enabled explicity, but required va dependencies were not found.')
58     endif
59     subdir_done()
60   endif
61   msdk_sources += ['msdk_libva.c', 'gstmsdkallocator_libva.c']
62 endif
63
64 mfx_api = get_option('mfx_api')
65
66 if mfx_api != 'oneVPL'
67   mfx_dep = dependency('libmfx', version: ['>= 1.0', '<= 1.99'], required: false)
68
69   if mfx_dep.found()
70     mfx_incdir = mfx_dep.get_variable('includedir')
71     mfx_inc = []
72     use_msdk = true
73   else
74     # Old versions of MediaSDK don't provide a pkg-config file
75     mfx_root = run_command(python3, '-c', 'import os; print(os.environ.get("INTELMEDIASDKROOT", os.environ.get("MFX_HOME", "")))', check: false).stdout().strip()
76
77     if mfx_root != ''
78       mfx_libdir = [mfx_root + '/lib/lin_x64', mfx_root + '/lib/x64', mfx_root + '/lib64', mfx_root + '/lib']
79       if host_machine.system() == 'windows'
80         if host_machine.cpu_family() == 'x86'
81           mfx_libdir = [mfx_root + '/lib/win32']
82         else
83           mfx_libdir = [mfx_root + '/lib/x64']
84         endif
85       endif
86       mfx_incdir = join_paths([mfx_root, 'include'])
87       mfx_lib = cxx.find_library('mfx', dirs: mfx_libdir, required: msdk_option)
88       mfx_inc = include_directories(mfx_incdir)
89       mfx_dep = declare_dependency(include_directories: mfx_inc, dependencies: mfx_lib)
90       use_msdk = true
91     endif
92   endif
93 endif
94
95 if not use_msdk and mfx_api != 'MSDK'
96   mfx_dep = dependency('vpl', version: '>= 2.2', required: false)
97
98   if mfx_dep.found()
99     mfx_incdir = mfx_dep.get_variable('includedir')
100     mfx_inc = []
101     use_onevpl = true
102   endif
103 endif
104
105 if not use_msdk and not use_onevpl
106   if msdk_option.enabled()
107     error('msdk plugin enabled but the Intel Media SDK or the oneVPL SDK not found: consider setting PKG_CONFIG_PATH, INTELMEDIASDKROOT or MFX_HOME')
108   else
109     subdir_done()
110   endif
111 endif
112
113 # Check oneVPL firstly
114 if use_onevpl
115   onevpl_extra_args += ['-DONEVPL_EXPERIMENTAL']
116   mfx_incdir = join_paths([mfx_incdir, 'vpl'])
117   mfx_inc = include_directories(mfx_incdir)
118 elif cxx.has_header('mfx/mfxdefs.h', args: '-I' + mfx_incdir)
119   mfx_incdir = join_paths([mfx_incdir, 'mfx'])
120   mfx_inc = include_directories(mfx_incdir)
121 endif
122
123 if use_onevpl or cxx.has_header('mfxvp9.h', args: '-I' + mfx_incdir)
124   msdk_sources += [ 'gstmsdkvp9dec.c' ]
125   cdata.set('USE_MSDK_VP9_DEC', 1)
126 endif
127
128 # Usually MFX_VERSION 1026+ is required to support raw VP9 stream, however Fedora 30 has MFX_VERSION==1026
129 # but without support for raw VP9 stream, so mfxExtVP9Param is checked as well.
130 # See https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/988#note_408093
131 mfx_ver126_check_code = '''
132 #include <mfxdefs.h>
133 #include <mfxstructures.h>
134 #if MFX_VERSION < 1026
135 #error "The current version of mfx doesn't support raw vp9 stream"
136 #endif
137 mfxExtVP9Param ext;
138 '''
139
140 have_mfx_ver126 = cc.compiles(mfx_ver126_check_code,
141                 include_directories : [configinc, mfx_inc])
142
143 if have_mfx_ver126
144   msdk_sources += [ 'gstmsdkvp9enc.c' ]
145   cdata.set('USE_MSDK_VP9_ENC', 1)
146 endif
147
148 mfx_ver134_check_code = '''
149 #include <mfxdefs.h>
150 #if MFX_VERSION < 1034
151 #error "The current version of mfx doesn't support AV1 decoding"
152 #endif
153 '''
154
155 have_mfx_ver134 = cc.compiles(mfx_ver134_check_code,
156                 include_directories : [configinc, mfx_inc])
157
158 if have_mfx_ver134
159   msdk_sources += [ 'gstmsdkav1dec.c' ]
160   cdata.set('USE_MSDK_AV1_DEC', 1)
161 endif
162
163 mfx_ver205_check_code = '''
164 #include <mfxdefs.h>
165 #if MFX_VERSION < 2005
166 #error "The current verison of mfx doesn't support AV1 encoding"
167 #endif
168 '''
169
170 have_mfx_ver205 = cc.compiles(mfx_ver205_check_code,
171                 include_directories: [configinc, mfx_inc])
172
173 if use_onevpl and have_mfx_ver205
174   msdk_sources += [ 'gstmsdkav1enc.c' ]
175   cdata.set10('USE_MSDK_AV1_ENC', 1)
176 endif
177
178 if host_machine.system() == 'windows'
179   if cc.get_id() != 'msvc' and msdk_option.enabled()
180     error('msdk plugin can only be built with MSVC')
181   endif
182   legacy_stdio_dep = cc.find_library('legacy_stdio_definitions', required: get_option('msdk'))
183   msdk_deps = declare_dependency(dependencies: [gstd3d11_dep, legacy_stdio_dep])
184   msdk_deps_found = gstd3d11_dep.found() and legacy_stdio_dep.found() and cc.get_id() == 'msvc'
185 else
186   libdl_dep = cc.find_library('dl', required: get_option('msdk'))
187   libgudev_dep = dependency('gudev-1.0', required: get_option('msdk'))
188   libdrm_dep = dependency('libdrm', required: get_option('msdk'))
189   msdk_deps = declare_dependency(dependencies: [gstva_dep, libdl_dep, libgudev_dep, libdrm_dep])
190   msdk_deps_found = gstva_dep.found() and libdl_dep.found() and libgudev_dep.found() and libdrm_dep.found()
191 endif
192
193 if msdk_deps_found
194   if host_machine.system() != 'windows'
195     driverdir = libva_dep.get_variable('driverdir', default_value: '')
196     if driverdir == ''
197       driverdir = join_paths(get_option('prefix'), get_option('libdir'), 'dri')
198     endif
199     cdata.set_quoted('VA_DRIVERS_PATH', '@0@'.format(driverdir))
200   endif
201
202   gstmsdktag = library('gstmsdk',
203     msdk_sources,
204     c_args : gst_plugins_bad_args + extra_args + onevpl_extra_args,
205     include_directories : [configinc, mfx_inc],
206     dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, gstallocators_dep, gstcodecparsers_dep, mfx_dep, msdk_deps],
207     install : true,
208     install_dir : plugins_install_dir,
209   )
210   plugins += [gstmsdktag]
211   have_msdk = true
212 endif