1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
if get_option('opencv').disabled()
opencv_dep = disabler()
subdir_done()
endif
gstopencv_sources = [
'gstcvdilate.cpp',
'gstcvdilateerode.cpp',
'gstcvequalizehist.cpp',
'gstcverode.cpp',
'gstcvlaplace.cpp',
'gstcvsmooth.cpp',
'gstcvsobel.cpp',
'gstdisparity.cpp',
'gstedgedetect.cpp',
'gstfaceblur.cpp',
'gstfacedetect.cpp',
'gstgrabcut.cpp',
'gsthanddetect.cpp',
'gstmotioncells.cpp',
'gstopencv.cpp',
'gstretinex.cpp',
'gstsegmentation.cpp',
'gstskindetect.cpp',
'gsttemplatematch.cpp',
'gsttextoverlay.cpp',
'MotionCells.cpp',
'motioncells_wrapper.cpp',
'gstdewarp.cpp',
'camerautils.cpp',
'cameraevent.cpp',
'gstcameracalibrate.cpp',
'gstcameraundistort.cpp',
'gstcvtracker.cpp'
]
libopencv_headers = [
'opencv2/bgsegm.hpp',
'opencv2/calib3d.hpp',
'opencv2/core.hpp',
'opencv2/imgproc.hpp',
'opencv2/objdetect.hpp',
'opencv2/opencv.hpp',
'opencv2/video.hpp',
'opencv2/tracking.hpp',
]
libopencv4_headers = [
'opencv4/opencv2/bgsegm.hpp',
'opencv4/opencv2/calib3d.hpp',
'opencv4/opencv2/core.hpp',
'opencv4/opencv2/imgproc.hpp',
'opencv4/opencv2/objdetect.hpp',
'opencv4/opencv2/opencv.hpp',
'opencv4/opencv2/video.hpp',
'opencv4/opencv2/tracking.hpp',
]
gstopencv_cargs = ['-DGST_HAAR_CASCADES_DIR="@0@"']
opencv_dep = dependency('opencv', version : ['>= 3.0.0', '< 3.5.0'], required : false)
opencv_found = opencv_dep.found()
if opencv_found
foreach h : libopencv_headers
if not cxx.has_header(h)
message('Needed header "' + h + '" not found')
opencv_found = false
endif
endforeach
endif
if not opencv_found
opencv_dep = dependency('opencv4', version : ['>= 4.0.0', '< 4.6.0'], required : false)
opencv_found = opencv_dep.found()
if opencv_found
foreach h : libopencv4_headers
if not cxx.has_header(h)
message('Needed header "' + h + '" not found')
opencv_found = false
endif
endforeach
endif
endif
if opencv_found
opencv_prefix = opencv_dep.get_pkgconfig_variable('prefix')
gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"']
# Check the data dir used by opencv for its xml data files
# Use prefix from pkg-config to be compatible with cross-compilation
r = run_command('test', '-d', opencv_prefix + '/share/opencv')
if r.returncode() == 0
gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv"'
else
r = run_command('test', '-d', opencv_prefix + '/share/OpenCV')
if r.returncode() == 0
gstopencv_cargs += '-DOPENCV_PATH_NAME="OpenCV"'
else
r = run_command('test', '-d', opencv_prefix + '/share/opencv4')
if r.returncode() == 0
gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv4"'
else
message('Unable to detect OpenCV data directory')
opencv_found = false
endif
endif
endif
endif
if opencv_found
# opencv4 seems to ship with .pc file that references non-existent include dir
# (/usr/include/opencv4/opencv instead of /usr/include/opencv4/opencv2)
# clang 10 complains about the following header in opencv4
# /usr/include/opencv4/opencv2/flann/logger.h:83:36: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
gstopencv_cargs += cxx.get_supported_arguments(['-Wno-missing-include-dirs', '-Wno-format-nonliteral'])
gstopencv = library('gstopencv',
gstopencv_sources,
cpp_args : gst_plugins_bad_args + gstopencv_cargs + [ '-DGST_USE_UNSTABLE_API' ],
link_args : [noseh_link_args, '-lopencv_tracking'],
include_directories : [configinc, libsinc],
dependencies : [gstbase_dep, gstvideo_dep, opencv_dep, gstopencv_dep],
install : true,
install_dir : plugins_install_dir,
)
pkgconfig.generate(gstopencv, install_dir : plugins_pkgconfig_install_dir)
plugins += [gstopencv]
elif get_option('opencv').enabled()
error('OpenCV support enabled but required dependencies were not found.')
endif
|