blob: ae655548e2510483086eee125d84caecd258faed [file] [log] [blame]
kjellander@webrtc.org1227ab82014-06-23 19:21:07 +00001# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
2#
3# Use of this source code is governed by a BSD-style license
4# that can be found in the LICENSE file in the root of the source
5# tree. An additional intellectual property rights grant can be found
6# in the file PATENTS. All contributing project authors may
7# be found in the AUTHORS file in the root of the source tree.
8
mbonadei9aa3f0a2017-01-24 06:58:22 -08009import("../../webrtc.gni")
kjellander@webrtc.org1227ab82014-06-23 19:21:07 +000010
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000011# Note this target is missing an implementation for the video capture.
kjellander@webrtc.orgf58fe0a2015-02-11 07:47:00 +000012# Targets must link with either 'video_capture' or
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000013# 'video_capture_internal_impl' depending on whether they want to
14# use the internal capturer.
kjellanderb62dbbe2016-09-23 00:38:52 -070015rtc_static_library("video_capture_module") {
Per Kjellandera0f5f602018-01-10 15:57:32 +000016 visibility = [ "*" ]
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000017 sources = [
18 "device_info_impl.cc",
19 "device_info_impl.h",
Henrik Kjellander5dda80a2015-11-12 12:46:09 +010020 "video_capture.h",
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000021 "video_capture_config.h",
Henrik Kjellander5dda80a2015-11-12 12:46:09 +010022 "video_capture_defines.h",
guidou41bce132016-08-04 06:48:17 -070023 "video_capture_factory.cc",
sakal06bfe1f2016-08-04 07:54:04 -070024 "video_capture_factory.h",
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000025 "video_capture_impl.cc",
26 "video_capture_impl.h",
27 ]
28
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000029 deps = [
mbonadei1140f972017-04-26 03:38:35 -070030 "..:module_api",
kwiberg@webrtc.orgac2d27d2015-02-26 13:59:22 +000031 "../..:webrtc_common",
Patrik Höglund3e113432017-12-15 14:40:10 +010032 "../../:typedefs",
Patrik Höglundbe214a22018-01-04 12:14:35 +010033 "../../api:libjingle_peerconnection_api",
Niels Möllerc6ce9c52018-05-11 11:15:30 +020034 "../../api/video:video_frame",
35 "../../api/video:video_frame_i420",
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000036 "../../common_video",
Mirko Bonadeiad627922017-11-30 17:16:21 +010037 "../../media:rtc_media_base",
ehmaldonadof6a861a2017-07-19 10:40:47 -070038 "../../rtc_base:rtc_base_approved",
Patrik Höglund3e113432017-12-15 14:40:10 +010039 "../../rtc_base:stringutils",
Karl Wiberg2b857922018-03-23 14:53:54 +010040 "../../rtc_base/synchronization:rw_lock_wrapper",
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000041 "../../system_wrappers",
Mirko Bonadei401d0562017-12-14 11:24:00 +010042 "//third_party/libyuv",
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000043 ]
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000044
kjellandere40a7ee2016-10-16 23:56:12 -070045 if (!build_with_chromium && is_clang) {
46 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
ehmaldonado38a21322016-09-02 04:10:34 -070047 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000048 }
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000049}
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000050
kjellanderb62dbbe2016-09-23 00:38:52 -070051rtc_static_library("video_capture") {
Per Kjellandera7f2d842018-01-10 15:54:53 +000052 visibility = [ "*" ]
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000053 sources = [
54 "external/device_info_external.cc",
55 "external/video_capture_external.cc",
kjellander@webrtc.org788f0582014-08-28 13:51:08 +000056 ]
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000057
58 deps = [
kjellander@webrtc.orgf58fe0a2015-02-11 07:47:00 +000059 ":video_capture_module",
ehmaldonadof6a861a2017-07-19 10:40:47 -070060 "../../rtc_base:rtc_base_approved",
andresp@webrtc.orgc7134f82014-09-18 10:06:54 +000061 "../../system_wrappers",
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000062 ]
63
kjellandere40a7ee2016-10-16 23:56:12 -070064 if (!build_with_chromium && is_clang) {
65 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
ehmaldonado38a21322016-09-02 04:10:34 -070066 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000067 }
68}
69
kjellander@webrtc.org853049f2015-01-20 11:40:45 +000070if (!build_with_chromium) {
71 config("video_capture_internal_impl_config") {
kthelgason20a52e12016-09-30 00:43:12 -070072 if (is_ios || is_mac) {
kjellander@webrtc.org853049f2015-01-20 11:40:45 +000073 libs = [
74 "AVFoundation.framework",
75 "CoreMedia.framework",
76 "CoreVideo.framework",
77 ]
78 }
andresp@webrtc.orga74eda12014-09-17 11:50:19 +000079 }
80
ehmaldonadod02fe4b2016-08-26 13:31:24 -070081 config("video_capture_internal_impl_warnings_config") {
82 if (is_win && is_clang) {
83 cflags = [
ehmaldonadod02fe4b2016-08-26 13:31:24 -070084 "-Wno-ignored-attributes",
85
86 # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6269
87 # for -Wno-ignored-qualifiers
88 "-Wno-ignored-qualifiers",
89 "-Wno-microsoft-extra-qualification",
ehmaldonadod02fe4b2016-08-26 13:31:24 -070090 "-Wno-overloaded-virtual",
91 "-Wno-reorder",
92 "-Wno-writable-strings",
93 ]
94 }
95 }
96
mbonadei054b1082017-09-04 06:54:54 -070097 if (is_ios || is_mac) {
98 rtc_source_set("video_capture_internal_impl_objc") {
99 visibility = [ ":video_capture_internal_impl" ]
100 configs += [ ":video_capture_internal_impl_warnings_config" ]
101
102 deps = [
103 ":video_capture_module",
104 "../../rtc_base:rtc_base_approved",
105 "../../system_wrappers",
106 ]
107
108 sources = [
109 "objc/device_info.h",
110 "objc/device_info.mm",
111 "objc/device_info_objc.h",
112 "objc/device_info_objc.mm",
113 "objc/rtc_video_capture_objc.h",
114 "objc/rtc_video_capture_objc.mm",
115 "objc/video_capture.h",
116 "objc/video_capture.mm",
117 ]
118
119 all_dependent_configs = [ ":video_capture_internal_impl_config" ]
120
121 if (!build_with_chromium && is_clang) {
122 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
123 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
124 }
125 }
126 }
127
128 rtc_source_set("video_capture_internal_impl") {
ehmaldonadod02fe4b2016-08-26 13:31:24 -0700129 configs += [ ":video_capture_internal_impl_warnings_config" ]
130
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000131 deps = [
kjellander@webrtc.orgf58fe0a2015-02-11 07:47:00 +0000132 ":video_capture_module",
Patrik Höglunda8005cf2017-12-13 16:05:42 +0100133 "../../rtc_base:checks",
ehmaldonadof6a861a2017-07-19 10:40:47 -0700134 "../../rtc_base:rtc_base_approved",
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000135 "../../system_wrappers",
136 ]
andresp@webrtc.orga74eda12014-09-17 11:50:19 +0000137
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000138 if (is_linux) {
139 sources = [
140 "linux/device_info_linux.cc",
141 "linux/device_info_linux.h",
142 "linux/video_capture_linux.cc",
143 "linux/video_capture_linux.h",
144 ]
Sam Zackrisson2ed6e4f2017-08-16 13:39:25 +0200145 deps += [
146 "../..:webrtc_common",
147 "../../media:rtc_media_base",
148 ]
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000149 }
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000150 if (is_win) {
151 sources = [
152 "windows/device_info_ds.cc",
153 "windows/device_info_ds.h",
154 "windows/device_info_mf.cc",
155 "windows/device_info_mf.h",
156 "windows/help_functions_ds.cc",
157 "windows/help_functions_ds.h",
158 "windows/sink_filter_ds.cc",
159 "windows/sink_filter_ds.h",
160 "windows/video_capture_ds.cc",
161 "windows/video_capture_ds.h",
162 "windows/video_capture_factory_windows.cc",
163 "windows/video_capture_mf.cc",
164 "windows/video_capture_mf.h",
165 ]
166
Mirko Bonadei903dc862018-03-27 20:30:52 +0200167 libs = [ "strmiids.lib" ]
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000168
Dan Minor9c686132018-01-15 10:20:00 -0500169 if (build_with_mozilla) {
170 sources += [
171 "windows/BaseFilter.cpp",
172 "windows/BaseInputPin.cpp",
173 "windows/BasePin.cpp",
174 "windows/MediaType.cpp",
175 ]
176 } else {
177 deps += [ "//third_party/winsdk_samples" ]
178 }
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000179 }
kthelgason20a52e12016-09-30 00:43:12 -0700180 if (is_ios || is_mac) {
mbonadei054b1082017-09-04 06:54:54 -0700181 deps += [ ":video_capture_internal_impl_objc" ]
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000182 }
183
184 all_dependent_configs = [ ":video_capture_internal_impl_config" ]
185
kjellandere40a7ee2016-10-16 23:56:12 -0700186 if (!build_with_chromium && is_clang) {
187 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
ehmaldonado38a21322016-09-02 04:10:34 -0700188 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
kjellander@webrtc.org853049f2015-01-20 11:40:45 +0000189 }
Dan Minor9c686132018-01-15 10:20:00 -0500190
191 if (build_with_mozilla && is_android) {
192 include_dirs = [
193 "/config/external/nspr",
194 "/nsprpub/lib/ds",
195 "/nsprpub/pr/include",
196 ]
197
198 sources = [
199 "android/device_info_android.cc",
200 "android/video_capture_android.cc",
201 ]
202 }
andresp@webrtc.orga74eda12014-09-17 11:50:19 +0000203 }
sakal06bfe1f2016-08-04 07:54:04 -0700204
kjellanderf96c51a2016-08-15 09:21:31 -0700205 if (!is_android && rtc_include_tests) {
ehmaldonado38a21322016-09-02 04:10:34 -0700206 rtc_test("video_capture_tests") {
sakal06bfe1f2016-08-04 07:54:04 -0700207 sources = [
sakal06bfe1f2016-08-04 07:54:04 -0700208 "test/video_capture_unittest.cc",
209 ]
210
211 cflags = []
212 if (is_linux || is_mac) {
213 cflags += [ "-Wno-write-strings" ]
214 }
215
216 ldflags = []
217 if (is_linux || is_mac) {
218 ldflags += [
219 "-lpthread",
220 "-lm",
221 ]
222 }
223 if (is_linux) {
224 ldflags += [
225 "-lrt",
226 "-lXext",
227 "-lX11",
228 ]
229 }
230
231 deps = [
232 ":video_capture_internal_impl",
233 ":video_capture_module",
Niels Möllerc6ce9c52018-05-11 11:15:30 +0200234 "../../api/video:video_frame",
235 "../../api/video:video_frame_i420",
ehmaldonado36df2d72016-12-08 09:56:16 -0800236 "../../common_video:common_video",
ehmaldonadof6a861a2017-07-19 10:40:47 -0700237 "../../rtc_base:rtc_base_approved",
ehmaldonado36df2d72016-12-08 09:56:16 -0800238 "../../system_wrappers:system_wrappers",
kjellanderf96c51a2016-08-15 09:21:31 -0700239 "../../system_wrappers:system_wrappers_default",
240 "../../test:video_test_common",
241 "../utility",
242 "//testing/gtest",
sakal06bfe1f2016-08-04 07:54:04 -0700243 ]
jianjun.zhuc0247402017-07-11 06:20:45 -0700244 deps += [ "../../test:test_main" ]
sakal06bfe1f2016-08-04 07:54:04 -0700245
kjellandere40a7ee2016-10-16 23:56:12 -0700246 if (!build_with_chromium && is_clang) {
247 # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
ehmaldonado38a21322016-09-02 04:10:34 -0700248 suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
sakal06bfe1f2016-08-04 07:54:04 -0700249 }
250 }
251 }
kjellander@webrtc.org1227ab82014-06-23 19:21:07 +0000252}