• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1have_registry = true # FIXME get_option('registry')
2
3libparser = static_library('parser',
4  'elements/parser.c',
5  install : false,
6  dependencies : [gst_dep, gstcheck_dep],
7)
8
9libparser_dep = declare_dependency(link_with: libparser,
10  sources: ['elements/parser.h'])
11
12# FIXME: automagic
13exif_dep = dependency('libexif', version : '>= 0.6.16', required : false)
14
15# Since nalutils API is internal, need to build it again
16nalutils_dep = gstcodecparsers_dep.partial_dependency (compile_args: true, includes: true)
17
18enable_gst_play_tests = get_option('gst_play_tests')
19libsoup_dep = dependency('libsoup-2.4', version : '>=2.48', required : enable_gst_play_tests,
20  fallback : ['libsoup', 'libsoup_dep'])
21
22# name, condition when to skip the test and extra dependencies
23base_tests = [
24  [['elements/aesenc.c'], not aes_dep.found(), [aes_dep]],
25  [['elements/aesdec.c'], not aes_dep.found(), [aes_dep]],
26  [['elements/aiffparse.c']],
27  [['elements/asfmux.c']],
28  [['elements/autoconvert.c']],
29  [['elements/autovideoconvert.c']],
30  [['elements/avwait.c']],
31  [['elements/camerabin.c']],
32  [['elements/ccconverter.c'], not closedcaption_dep.found(), [gstvideo_dep]],
33  [['elements/cccombiner.c'], not closedcaption_dep.found(), ],
34  [['elements/ccextractor.c'], not closedcaption_dep.found(), ],
35  [['elements/cudaconvert.c'], false, [gmodule_dep, gstgl_dep]],
36  [['elements/cudafilter.c'], false, [gmodule_dep, gstgl_dep]],
37  [['elements/d3d11colorconvert.c'], host_machine.system() != 'windows', ],
38  [['elements/gdpdepay.c']],
39  [['elements/gdppay.c']],
40  [['elements/h263parse.c'], false, [libparser_dep, gstcodecparsers_dep]],
41  [['elements/h264parse.c'], false, [libparser_dep, gstcodecparsers_dep]],
42  [['elements/h265parse.c'], false, [libparser_dep, gstcodecparsers_dep]],
43  [['elements/hlsdemux_m3u8.c'], not hls_dep.found(), [hls_dep]],
44  [['elements/id3mux.c']],
45  [['elements/interlace.c']],
46  [['elements/jpeg2000parse.c'], false, [libparser_dep, gstcodecparsers_dep]],
47  [['elements/line21.c'], not closedcaption_dep.found(), ],
48  [['elements/mfvideosrc.c'], host_machine.system() != 'windows', ],
49  [['elements/mpegtsdemux.c'], false, [gstmpegts_dep]],
50  [['elements/mpegtsmux.c'], false, [gstmpegts_dep]],
51  [['elements/mpeg4videoparse.c'], false, [libparser_dep, gstcodecparsers_dep]],
52  [['elements/mpegvideoparse.c'], false, [libparser_dep, gstcodecparsers_dep]],
53  [['elements/msdkh264enc.c'], not have_msdk, [msdk_dep]],
54  [['elements/mxfdemux.c']],
55  [['elements/mxfmux.c']],
56  [['elements/nvenc.c'], false, [gmodule_dep, gstgl_dep]],
57  [['elements/nvdec.c'], not gstgl_dep.found(), [gmodule_dep, gstgl_dep]],
58  [['elements/svthevcenc.c'], not svthevcenc_dep.found(), [svthevcenc_dep]],
59   [['elements/openjpeg.c'], not openjpeg_dep.found(), [openjpeg_dep]],
60  [['elements/pcapparse.c'], false, [libparser_dep]],
61  [['elements/pnm.c']],
62  [['elements/ristrtpext.c']],
63  [['elements/rtponvifparse.c']],
64  [['elements/rtponviftimestamp.c']],
65  [['elements/rtpsrc.c']],
66  [['elements/rtpsink.c']],
67  [['elements/switchbin.c']],
68  [['elements/videoframe-audiolevel.c']],
69  [['elements/viewfinderbin.c']],
70  [['elements/vp9parse.c'], false, [gstcodecparsers_dep]],
71  [['elements/av1parse.c'], false, [gstcodecparsers_dep]],
72  [['elements/wasapi.c'], host_machine.system() != 'windows', ],
73  [['elements/wasapi2.c'], host_machine.system() != 'windows', ],
74  [['libs/h264parser.c'], false, [gstcodecparsers_dep]],
75  [['libs/h265parser.c'], false, [gstcodecparsers_dep]],
76  [['libs/insertbin.c'], false, [gstinsertbin_dep]],
77  [['libs/isoff.c'], false, [gstisoff_dep]],
78  [['libs/nalutils.c', '../../gst-libs/gst/codecparsers/nalutils.c'], false, [nalutils_dep]],
79  [['libs/mpegts.c'], false, [gstmpegts_dep]],
80  [['libs/mpegvideoparser.c'], false, [gstcodecparsers_dep]],
81  [['libs/planaraudioadapter.c'], false, [gstbadaudio_dep]],
82  [['libs/play.c'], not enable_gst_play_tests, [gstplay_dep, libsoup_dep]],
83  [['libs/vc1parser.c'], false, [gstcodecparsers_dep]],
84  [['libs/vp8parser.c'], false, [gstcodecparsers_dep]],
85  [['libs/vp9parser.c'], false, [gstcodecparsers_dep]],
86  [['libs/av1parser.c'], false, [gstcodecparsers_dep]],
87  [['libs/vkmemory.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
88  [['elements/vkcolorconvert.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
89  [['libs/vkwindow.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
90  [['libs/vkdevice.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
91  [['elements/vkdeviceprovider.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
92  [['libs/vkcommandpool.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
93  [['libs/vkimage.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
94  [['libs/vkinstance.c'], not gstvulkan_dep.found(), [gstvulkan_dep]],
95  [['libs/d3d11device.cpp'], not gstd3d11_dep.found(), [gstd3d11_dep]],
96]
97
98# FIXME: unistd dependency, unstable or not tested yet on windows
99if host_machine.system() != 'windows'
100  base_tests += [
101    [['elements/assrender.c'], not ass_dep.found(), [ass_dep]],
102    [['elements/avtpaafpay.c'], not avtp_dep.found(), [avtp_dep]],
103    [['elements/avtpaafdepay.c'], not avtp_dep.found(), [avtp_dep]],
104    [['elements/avtpcrfbase.c'], not avtp_dep.found(), [avtp_dep]],
105    [['elements/avtpcrfcheck.c'], not avtp_dep.found(), [avtp_dep], ['../../ext/avtp/gstavtpcrfutil.c']],
106    [['elements/avtpcrfsync.c'], not avtp_dep.found(), [avtp_dep], ['../../ext/avtp/gstavtpcrfutil.c', '../../ext/avtp/gstavtpcrfbase.c']],
107    [['elements/avtpcrfutil.c'], not avtp_dep.found(), [avtp_dep], ['../../ext/avtp/gstavtpcrfutil.c', '../../ext/avtp/gstavtpcrfbase.c']],
108    [['elements/avtpcvfpay.c'], not avtp_dep.found(), [avtp_dep]],
109    [['elements/avtpcvfdepay.c'], not avtp_dep.found(), [avtp_dep]],
110    [['elements/avtpsink.c'], not avtp_dep.found(), [avtp_dep]],
111    [['elements/avtpsrc.c'], not avtp_dep.found(), [avtp_dep]],
112    [['elements/clockselect.c']],
113    [['elements/curlhttpsink.c'], not curl_dep.found(), [curl_dep]],
114    [['elements/curlhttpsrc.c'], not curl_dep.found(), [curl_dep, gio_dep]],
115    [['elements/curlfilesink.c'],
116        not curl_dep.found() or not cdata.has('HAVE_UNISTD_H'), [curl_dep]],
117    [['elements/curlftpsink.c'], not curl_dep.found(), [curl_dep]],
118    [['elements/curlsmtpsink.c'], not curl_dep.found(), [curl_dep]],
119    [['elements/dash_mpd.c'], not xml2_dep.found(), [xml2_dep]],
120    [['elements/dtls.c'], not libcrypto_dep.found(), [libcrypto_dep]],
121    [['elements/faac.c'],
122        not faac_dep.found() or not cc.has_header_symbol('faac.h', 'faacEncOpen') or not cdata.has('HAVE_UNISTD_H'),
123        [faac_dep]],
124    [['elements/faad.c'],
125        not faad_dep.found() or not have_faad_2_7 or not cdata.has('HAVE_UNISTD_H'),
126        [faad_dep]],
127    [['elements/jifmux.c'],
128        not exif_dep.found() or not cdata.has('HAVE_UNISTD_H'), [exif_dep]],
129    [['elements/jpegparse.c'], not cdata.has('HAVE_UNISTD_H')],
130    [['elements/kate.c'],
131        not kate_dep.found() or not cdata.has('HAVE_UNISTD_H'), [kate_dep]],
132    [['elements/netsim.c']],
133    [['elements/shm.c'], not shm_enabled, shm_deps],
134    [['elements/voaacenc.c'],
135        not voaac_dep.found() or not cdata.has('HAVE_UNISTD_H'), [voaac_dep]],
136    [['elements/webrtcbin.c'], not libnice_dep.found(), [gstwebrtc_dep]],
137    [['elements/x265enc.c'], not x265_dep.found(), [x265_dep]],
138    [['elements/zbar.c'], not zbar_dep.found(), [zbar_dep]],
139    [['elements/zxing.c'], not zxing_dep.found(), [zxing_dep]],
140  ]
141endif
142
143# linux only tests
144if host_machine.system() == 'linux'
145  base_tests += [
146    [['elements/vapostproc.c'], not gstva_dep.found(), [gstva_dep]],
147  ]
148endif
149
150test_defines = [
151  '-UG_DISABLE_ASSERT',
152  '-UG_DISABLE_CAST_CHECKS',
153  '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"',
154  '-DGST_TEST_FILES_PATH="' + meson.current_source_dir() + '/../files"',
155  '-DTEST_PATH="' + meson.current_build_dir() + '/media"',
156  '-DDASH_MPD_DATADIR=' + meson.current_source_dir() + '/elements/dash_mpd_data',
157  '-DGST_USE_UNSTABLE_API',
158]
159
160test_deps = [gst_dep, gstapp_dep, gstbase_dep,
161             gstbasecamerabin_dep, gstphotography_dep,
162             gstpbutils_dep, gstcontroller_dep, gstaudio_dep,
163             gstvideo_dep, gstrtp_dep, gsturidownloader_dep,
164             gstcheck_dep, gio_dep, glib_dep, gsttag_dep]
165
166pluginsdirs = [  ]
167
168if gst_dep.type_name() == 'pkgconfig'
169  pbase = dependency('gstreamer-plugins-base-' + api_version)
170
171  pluginsdirs = [gst_dep.get_variable('pluginsdir'),
172                 pbase.get_variable('pluginsdir')]
173  gst_plugin_scanner_dir = gst_dep.get_variable('pluginscannerdir')
174else
175  gst_plugin_scanner_dir = subproject('gstreamer').get_variable('gst_scanner_dir')
176endif
177gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner')
178
179extra_args = []
180# XXX: our MinGW 32bits toolchain complians when ComPtr is in use
181if host_system == 'windows' and cc.get_id() != 'msvc'
182  mingw_args = cc.get_supported_arguments([
183    '-Wno-redundant-decls',
184  ])
185
186  extra_args += mingw_args
187endif
188
189foreach t : base_tests
190  fnames = t.get(0)
191  test_name = fnames[0].split('.').get(0).underscorify()
192  skip_test = false
193  extra_deps = [ ]
194
195  if t.length() >= 3
196    extra_deps = t.get(2)
197  endif
198
199  if t.length() >= 2
200    skip_test = t.get(1)
201  endif
202
203  extra_sources = t.get(3, [ ])
204
205  if not skip_test
206    exe = executable(test_name, fnames, extra_sources,
207      include_directories : [configinc],
208      c_args : gst_plugins_bad_args + test_defines + extra_args,
209      cpp_args : gst_plugins_bad_args + test_defines + extra_args,
210      dependencies : [libm] + test_deps + extra_deps,
211    )
212
213    env = environment()
214    env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
215    env.set('CK_DEFAULT_TIMEOUT', '20')
216    env.set('GST_STATE_IGNORE_ELEMENTS', '')
217    env.set('GST_PLUGIN_PATH_1_0', [meson.global_build_root()] + pluginsdirs)
218    env.set('GST_REGISTRY', join_paths(meson.current_build_dir(), '@0@.registry'.format(test_name)))
219    env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer', 'gst-plugins-base',
220      'gst-plugins-good', 'gst-plugins-ugly','gst-libav', 'libnice',
221      'gst-plugins-bad@' + meson.project_build_root())
222    env.set('GST_PLUGIN_SCANNER_1_0', gst_plugin_scanner_path)
223    test(test_name, exe, env: env, timeout: 3 * 60)
224  endif
225endforeach
226
227# orc tests
228orc_tests = [
229  ['orc_bayer', files('../../gst/bayer/gstbayerorc.orc')],
230]
231
232orc_test_dep = dependency('', required : false)
233if have_orcc
234  # FIXME: there should really just be a separate orc-test-0.4.pc file for this
235  if orc_dep.type_name() == 'pkgconfig'
236    orc_test_dep = cc.find_library('orc-test-0.4', required : false)
237  else
238    orc_test_dep = dependency('', fallback: ['orc', 'orc_test_dep'], required: false)
239  endif
240endif
241
242if have_orcc and orc_test_dep.found()
243  foreach t : orc_tests
244    tname = t[0]
245    torcfile = t[1]
246    tcfilename = '@0@.c'.format(tname)
247    test_c = custom_target(tcfilename,
248      output: tcfilename,
249      input: torcfile,
250      command: [orcc, '--include', 'stdint.h', '--test', '-o', '@OUTPUT@', '@INPUT@'])
251    test_exe = executable(tname, test_c, dependencies: [orc_dep, orc_test_dep])
252    test(tname, test_exe)
253  endforeach
254endif
255
256if enable_gst_play_tests
257  subdir ('media')
258endif
259