xref: /aosp_15_r20/external/webrtc/sdk/android/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1# Copyright (c) 2016 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
9if (is_android) {
10  import("//build/config/android/config.gni")
11  import("//build/config/android/rules.gni")
12  import("../../webrtc.gni")
13
14  group("android") {
15    if (!build_with_chromium && is_android) {
16      public_deps = [
17        ":libjingle_peerconnection_jni",
18        ":libjingle_peerconnection_so",
19        ":libwebrtc",
20        ":native_api",
21      ]
22    }
23  }
24
25  #####################
26  # Aggregate targets #
27  #####################
28
29  dist_jar("libwebrtc") {
30    _target_dir_name = get_label_info(":$target_name", "dir")
31    output = "${root_out_dir}/lib.java${_target_dir_name}/${target_name}.jar"
32    direct_deps_only = true
33    use_unprocessed_jars = true
34    requires_android = true
35    no_build_hooks = true
36
37    deps = [
38      ":audio_api_java",
39      ":base_java",
40      ":builtin_audio_codecs_java",
41      ":camera_java",
42      ":default_video_codec_factory_java",
43      ":filevideo_java",
44      ":hwcodecs_java",
45      ":java_audio_device_module_java",
46      ":libaom_av1_encoder_java",
47      ":libjingle_peerconnection_java",
48      ":libjingle_peerconnection_metrics_default_java",
49      ":libvpx_vp8_java",
50      ":libvpx_vp9_java",
51      ":logging_java",
52      ":peerconnection_java",
53      ":screencapturer_java",
54      ":surfaceviewrenderer_java",
55      ":swcodecs_java",
56      ":video_api_java",
57      ":video_java",
58      "../../modules/audio_device:audio_device_java",
59      "../../rtc_base:base_java",
60    ]
61  }
62
63  # The native API is currently experimental and may change without notice.
64  group("native_api") {
65    deps = [
66      ":native_api_audio_device_module",
67      ":native_api_base",
68      ":native_api_codecs",
69      ":native_api_jni",
70      ":native_api_network_monitor",
71      ":native_api_peerconnection",
72      ":native_api_stacktrace",
73      ":native_api_video",
74    ]
75  }
76
77  # Old target that pulls in everything. This will be going away in the future,
78  # clients should depend on individual video_java etc. targets instead.
79  rtc_android_library("libjingle_peerconnection_java") {
80    sources = [ "src/java/org/webrtc/Empty.java" ]
81
82    deps = [
83      ":audio_api_java",
84      ":base_java",
85      ":camera_java",
86      ":filevideo_java",
87      ":hwcodecs_java",
88      ":java_audio_device_module_java",
89      ":peerconnection_java",
90      ":screencapturer_java",
91      ":surfaceviewrenderer_java",
92      ":video_api_java",
93      ":video_java",
94      "//modules/audio_device:audio_device_java",
95      "//rtc_base:base_java",
96    ]
97  }
98
99  rtc_android_library("libjingle_peerconnection_metrics_default_java") {
100    sources = [ "api/org/webrtc/Metrics.java" ]
101
102    deps = [
103      ":base_java",
104      ":libjingle_peerconnection_java",
105      "../../rtc_base:base_java",
106    ]
107  }
108
109  rtc_library("libjingle_peerconnection_jni") {
110    visibility = [ "*" ]
111    allow_poison = [
112      "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
113      "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
114    ]
115    public_deps = [  # no-presubmit-check TODO(webrtc:8603)
116      ":audio_jni",
117      ":base_jni",
118      ":builtin_audio_codecs_jni",
119      ":default_video_codec_factory_jni",
120      ":java_audio_device_module_jni",
121      ":peerconnection_jni",
122      ":video_jni",
123      "../../api:create_peerconnection_factory",
124    ]
125  }
126
127  rtc_shared_library("libjingle_peerconnection_so") {
128    sources = [ "src/jni/jni_onload.cc" ]
129
130    suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
131    configs += [ "//build/config/android:hide_all_but_jni" ]
132    ldflags = [
133      "-lEGL",
134      "-Wl,--build-id",
135    ]
136
137    deps = [
138      ":libjingle_peerconnection_jni",
139      ":libjingle_peerconnection_metrics_default_jni",
140      ":native_api_jni",
141      ":video_egl_jni",
142      "../../pc:libjingle_peerconnection",
143      "../../rtc_base",
144    ]
145    output_extension = "so"
146  }
147
148  #######################
149  # Public Java modules #
150  #######################
151
152  # Core targets.
153
154  # TODO(sakal): Extract files from this target to releveant subtargets, video, audio etc.
155  rtc_android_library("base_java") {
156    sources = [
157      "api/org/webrtc/Predicate.java",
158      "api/org/webrtc/RefCounted.java",
159      "src/java/org/webrtc/CalledByNative.java",
160      "src/java/org/webrtc/CalledByNativeUnchecked.java",
161      "src/java/org/webrtc/Histogram.java",
162      "src/java/org/webrtc/JniCommon.java",
163      "src/java/org/webrtc/JniHelper.java",
164      "src/java/org/webrtc/RefCountDelegate.java",
165      "src/java/org/webrtc/WebRtcClassLoader.java",
166    ]
167
168    deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ]
169  }
170
171  rtc_android_library("audio_api_java") {
172    visibility = [ "*" ]
173    sources = [
174      "api/org/webrtc/AudioDecoderFactoryFactory.java",
175      "api/org/webrtc/AudioEncoderFactoryFactory.java",
176      "api/org/webrtc/audio/AudioDeviceModule.java",
177    ]
178
179    deps = [
180      ":base_java",
181      "//rtc_base:base_java",
182    ]
183  }
184
185  rtc_android_library("video_api_java") {
186    visibility = [ "*" ]
187    sources = [
188      "api/org/webrtc/CapturerObserver.java",
189      "api/org/webrtc/EncodedImage.java",
190      "api/org/webrtc/VideoCodecInfo.java",
191      "api/org/webrtc/VideoCodecStatus.java",
192      "api/org/webrtc/VideoDecoder.java",
193      "api/org/webrtc/VideoDecoderFactory.java",
194      "api/org/webrtc/VideoEncoder.java",
195      "api/org/webrtc/VideoEncoderFactory.java",
196      "api/org/webrtc/VideoFrame.java",
197      "api/org/webrtc/VideoSink.java",
198    ]
199
200    deps = [
201      ":base_java",
202      "//rtc_base:base_java",
203      "//third_party/androidx:androidx_annotation_annotation_java",
204    ]
205    srcjar_deps = [ "//api/video:video_frame_enums" ]
206  }
207
208  rtc_android_library("video_java") {
209    visibility = [ "*" ]
210    sources = [
211      "api/org/webrtc/EglBase.java",
212      "api/org/webrtc/EglBase10.java",
213      "api/org/webrtc/EglBase14.java",
214      "api/org/webrtc/EglRenderer.java",
215      "api/org/webrtc/GlRectDrawer.java",
216      "api/org/webrtc/GlShader.java",
217      "api/org/webrtc/GlTextureFrameBuffer.java",
218      "api/org/webrtc/GlUtil.java",
219      "api/org/webrtc/JavaI420Buffer.java",
220      "api/org/webrtc/RendererCommon.java",
221      "api/org/webrtc/SurfaceTextureHelper.java",
222      "api/org/webrtc/TextureBufferImpl.java",
223      "api/org/webrtc/TimestampAligner.java",
224      "api/org/webrtc/VideoCapturer.java",
225      "api/org/webrtc/VideoDecoderFallback.java",
226      "api/org/webrtc/VideoEncoderFallback.java",
227      "api/org/webrtc/VideoFrameDrawer.java",
228      "api/org/webrtc/WrappedNativeVideoDecoder.java",
229      "api/org/webrtc/WrappedNativeVideoEncoder.java",
230      "api/org/webrtc/YuvConverter.java",
231      "api/org/webrtc/YuvHelper.java",
232      "src/java/org/webrtc/EglBase10Impl.java",
233      "src/java/org/webrtc/EglBase14Impl.java",
234      "src/java/org/webrtc/GlGenericDrawer.java",
235      "src/java/org/webrtc/H264Utils.java",
236      "src/java/org/webrtc/NV21Buffer.java",
237      "src/java/org/webrtc/VideoCodecMimeType.java",
238      "src/java/org/webrtc/VideoDecoderWrapper.java",
239      "src/java/org/webrtc/VideoEncoderWrapper.java",
240      "src/java/org/webrtc/WrappedNativeI420Buffer.java",
241    ]
242
243    deps = [
244      ":base_java",
245      ":video_api_java",
246      "//rtc_base:base_java",
247      "//third_party/androidx:androidx_annotation_annotation_java",
248    ]
249  }
250
251  rtc_android_library("peerconnection_java") {
252    visibility = [ "*" ]
253    sources = [
254      "api/org/webrtc/AddIceObserver.java",
255      "api/org/webrtc/AudioProcessingFactory.java",
256      "api/org/webrtc/AudioSource.java",
257      "api/org/webrtc/AudioTrack.java",
258      "api/org/webrtc/CallSessionFileRotatingLogSink.java",
259      "api/org/webrtc/CandidatePairChangeEvent.java",
260      "api/org/webrtc/CryptoOptions.java",
261      "api/org/webrtc/DataChannel.java",
262      "api/org/webrtc/DtmfSender.java",
263      "api/org/webrtc/FecControllerFactoryFactoryInterface.java",
264      "api/org/webrtc/FrameDecryptor.java",
265      "api/org/webrtc/FrameEncryptor.java",
266      "api/org/webrtc/IceCandidate.java",
267      "api/org/webrtc/IceCandidateErrorEvent.java",
268      "api/org/webrtc/MediaConstraints.java",
269      "api/org/webrtc/MediaSource.java",
270      "api/org/webrtc/MediaStream.java",
271      "api/org/webrtc/MediaStreamTrack.java",
272      "api/org/webrtc/NativeLibraryLoader.java",
273      "api/org/webrtc/NativePeerConnectionFactory.java",
274      "api/org/webrtc/NetEqFactoryFactory.java",
275      "api/org/webrtc/NetworkChangeDetector.java",
276      "api/org/webrtc/NetworkChangeDetectorFactory.java",
277      "api/org/webrtc/NetworkControllerFactoryFactory.java",
278
279      # TODO(sakal): Break dependencies and move to base_java.
280      "api/org/webrtc/NetworkMonitor.java",
281      "api/org/webrtc/NetworkMonitorAutoDetect.java",
282      "api/org/webrtc/NetworkStatePredictorFactoryFactory.java",
283      "api/org/webrtc/PeerConnection.java",
284      "api/org/webrtc/PeerConnectionDependencies.java",
285      "api/org/webrtc/PeerConnectionFactory.java",
286      "api/org/webrtc/RTCStats.java",
287      "api/org/webrtc/RTCStatsCollectorCallback.java",
288      "api/org/webrtc/RTCStatsReport.java",
289      "api/org/webrtc/RtcCertificatePem.java",
290      "api/org/webrtc/RtpParameters.java",
291      "api/org/webrtc/RtpReceiver.java",
292      "api/org/webrtc/RtpSender.java",
293      "api/org/webrtc/RtpTransceiver.java",
294      "api/org/webrtc/SSLCertificateVerifier.java",
295      "api/org/webrtc/SdpObserver.java",
296      "api/org/webrtc/SessionDescription.java",
297      "api/org/webrtc/StatsObserver.java",
298      "api/org/webrtc/StatsReport.java",
299      "api/org/webrtc/TurnCustomizer.java",
300      "api/org/webrtc/VideoProcessor.java",
301      "api/org/webrtc/VideoSource.java",
302      "api/org/webrtc/VideoTrack.java",
303      "src/java/org/webrtc/NativeAndroidVideoTrackSource.java",
304      "src/java/org/webrtc/NativeCapturerObserver.java",
305      "src/java/org/webrtc/NativeLibrary.java",
306    ]
307
308    deps = [
309      ":audio_api_java",
310      ":base_java",
311      ":builtin_audio_codecs_java",
312      ":default_video_codec_factory_java",
313
314      #TODO(bugs.webrtc.org/7452): Make injection mandatory and remove this dep.
315      ":java_audio_device_module_java",
316      ":logging_java",
317      ":swcodecs_java",
318      ":video_api_java",
319      ":video_java",
320      "//modules/audio_device:audio_device_java",
321      "//rtc_base:base_java",
322      "//third_party/androidx:androidx_annotation_annotation_java",
323    ]
324    srcjar_deps = [
325      "//api:priority_enums",
326      "//rtc_base:network_monitor_enums",
327    ]
328  }
329
330  # Modules, in alphabetical order.
331
332  rtc_android_library("camera_java") {
333    visibility = [ "*" ]
334    sources = [
335      "api/org/webrtc/Camera1Capturer.java",
336      "api/org/webrtc/Camera1Enumerator.java",
337      "api/org/webrtc/Camera2Capturer.java",
338      "api/org/webrtc/Camera2Enumerator.java",
339      "api/org/webrtc/CameraEnumerationAndroid.java",
340      "api/org/webrtc/CameraEnumerator.java",
341      "api/org/webrtc/CameraVideoCapturer.java",
342      "src/java/org/webrtc/Camera1Session.java",
343      "src/java/org/webrtc/Camera2Session.java",
344      "src/java/org/webrtc/CameraCapturer.java",
345      "src/java/org/webrtc/CameraSession.java",
346    ]
347
348    deps = [
349      ":base_java",
350      ":video_api_java",
351      ":video_java",
352      "//rtc_base:base_java",
353      "//third_party/androidx:androidx_annotation_annotation_java",
354    ]
355  }
356
357  rtc_android_library("default_video_codec_factory_java") {
358    visibility = [ "*" ]
359    sources = [
360      "api/org/webrtc/DefaultVideoDecoderFactory.java",
361      "api/org/webrtc/DefaultVideoEncoderFactory.java",
362    ]
363
364    deps = [
365      ":hwcodecs_java",
366      ":swcodecs_java",
367      ":video_api_java",
368      ":video_java",
369      "//third_party/androidx:androidx_annotation_annotation_java",
370    ]
371  }
372
373  rtc_android_library("filevideo_java") {
374    visibility = [ "*" ]
375    sources = [
376      "api/org/webrtc/FileVideoCapturer.java",
377      "api/org/webrtc/VideoFileRenderer.java",
378    ]
379
380    deps = [
381      ":base_java",
382      ":video_api_java",
383      ":video_java",
384      "//rtc_base:base_java",
385    ]
386  }
387
388  rtc_android_library("hwcodecs_java") {
389    visibility = [ "*" ]
390    sources = [
391      "api/org/webrtc/HardwareVideoDecoderFactory.java",
392      "api/org/webrtc/HardwareVideoEncoderFactory.java",
393      "api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java",
394      "src/java/org/webrtc/AndroidVideoDecoder.java",
395      "src/java/org/webrtc/BaseBitrateAdjuster.java",
396      "src/java/org/webrtc/BitrateAdjuster.java",
397      "src/java/org/webrtc/DynamicBitrateAdjuster.java",
398      "src/java/org/webrtc/FramerateBitrateAdjuster.java",
399      "src/java/org/webrtc/HardwareVideoEncoder.java",
400      "src/java/org/webrtc/MediaCodecUtils.java",
401      "src/java/org/webrtc/MediaCodecVideoDecoderFactory.java",
402      "src/java/org/webrtc/MediaCodecWrapper.java",
403      "src/java/org/webrtc/MediaCodecWrapperFactory.java",
404      "src/java/org/webrtc/MediaCodecWrapperFactoryImpl.java",
405      "src/java/org/webrtc/NV12Buffer.java",
406    ]
407
408    deps = [
409      ":base_java",
410      ":video_api_java",
411      ":video_java",
412      "//rtc_base:base_java",
413      "//third_party/androidx:androidx_annotation_annotation_java",
414    ]
415  }
416
417  rtc_android_library("java_audio_device_module_java") {
418    visibility = [ "*" ]
419    sources = [
420      "api/org/webrtc/audio/JavaAudioDeviceModule.java",
421      "src/java/org/webrtc/audio/LowLatencyAudioBufferManager.java",
422      "src/java/org/webrtc/audio/VolumeLogger.java",
423      "src/java/org/webrtc/audio/WebRtcAudioEffects.java",
424      "src/java/org/webrtc/audio/WebRtcAudioManager.java",
425      "src/java/org/webrtc/audio/WebRtcAudioRecord.java",
426      "src/java/org/webrtc/audio/WebRtcAudioTrack.java",
427      "src/java/org/webrtc/audio/WebRtcAudioUtils.java",
428    ]
429
430    deps = [
431      ":audio_api_java",
432      ":base_java",
433      "//rtc_base:base_java",
434      "//third_party/androidx:androidx_annotation_annotation_java",
435    ]
436  }
437
438  rtc_android_library("builtin_audio_codecs_java") {
439    visibility = [ "*" ]
440    sources = [
441      "api/org/webrtc/BuiltinAudioDecoderFactoryFactory.java",
442      "api/org/webrtc/BuiltinAudioEncoderFactoryFactory.java",
443    ]
444
445    deps = [ ":audio_api_java" ]
446  }
447
448  rtc_android_library("screencapturer_java") {
449    visibility = [ "*" ]
450    sources = [ "api/org/webrtc/ScreenCapturerAndroid.java" ]
451
452    deps = [
453      ":video_api_java",
454      ":video_java",
455      "//rtc_base:base_java",
456      "//third_party/androidx:androidx_annotation_annotation_java",
457    ]
458  }
459
460  rtc_android_library("surfaceviewrenderer_java") {
461    visibility = [ "*" ]
462    sources = [
463      "api/org/webrtc/SurfaceEglRenderer.java",
464      "api/org/webrtc/SurfaceViewRenderer.java",
465    ]
466
467    deps = [
468      ":base_java",
469      ":video_api_java",
470      ":video_java",
471      "//rtc_base:base_java",
472    ]
473  }
474
475  rtc_android_library("libvpx_vp8_java") {
476    visibility = [ "*" ]
477    sources = [
478      "api/org/webrtc/LibvpxVp8Decoder.java",
479      "api/org/webrtc/LibvpxVp8Encoder.java",
480    ]
481    deps = [
482      ":base_java",
483      ":video_api_java",
484      ":video_java",
485      "//rtc_base:base_java",
486    ]
487  }
488
489  rtc_android_library("libvpx_vp9_java") {
490    visibility = [ "*" ]
491    sources = [
492      "api/org/webrtc/LibvpxVp9Decoder.java",
493      "api/org/webrtc/LibvpxVp9Encoder.java",
494    ]
495    deps = [
496      ":base_java",
497      ":video_api_java",
498      ":video_java",
499      "//rtc_base:base_java",
500    ]
501  }
502
503  rtc_android_library("libaom_av1_encoder_java") {
504    visibility = [ "*" ]
505    sources = [ "api/org/webrtc/LibaomAv1Encoder.java" ]
506    deps = [
507      ":base_java",
508      ":video_api_java",
509      ":video_java",
510      "//rtc_base:base_java",
511    ]
512  }
513
514  rtc_android_library("dav1d_java") {
515    visibility = [ "*" ]
516    sources = [ "api/org/webrtc/Dav1dDecoder.java" ]
517    deps = [ ":video_java" ]
518  }
519
520  rtc_android_library("swcodecs_java") {
521    visibility = [ "*" ]
522    sources = [
523      "api/org/webrtc/SoftwareVideoDecoderFactory.java",
524      "api/org/webrtc/SoftwareVideoEncoderFactory.java",
525    ]
526
527    deps = [
528      ":base_java",
529      ":dav1d_java",
530      ":libvpx_vp8_java",
531      ":libvpx_vp9_java",
532      ":video_api_java",
533      ":video_java",
534      "//rtc_base:base_java",
535      "//third_party/androidx:androidx_annotation_annotation_java",
536    ]
537  }
538}
539
540if (current_os == "linux" || is_android) {
541  ################################
542  # JNI targets for Java modules #
543  ################################
544
545  # Mirrors the order of targets in the section above.
546
547  rtc_library("base_jni") {
548    visibility = [ "*" ]
549    sources = [
550      "src/jni/android_histogram.cc",
551      "src/jni/android_network_monitor.cc",
552      "src/jni/android_network_monitor.h",
553      "src/jni/jni_common.cc",
554      "src/jni/jni_helpers.cc",
555      "src/jni/jni_helpers.h",
556      "src/jni/pc/audio.h",
557      "src/jni/pc/logging.cc",
558      "src/jni/pc/video.h",
559      "src/jni/scoped_java_ref_counted.cc",
560      "src/jni/scoped_java_ref_counted.h",
561    ]
562
563    deps = [
564      ":generated_base_jni",
565      ":internal_jni",
566      ":native_api_jni",
567      "../../api:field_trials_view",
568      "../../api:libjingle_peerconnection_api",
569      "../../api:scoped_refptr",
570      "../../api:sequence_checker",
571      "../../api/task_queue:pending_task_safety_flag",
572      "../../modules/audio_processing:api",
573      "../../rtc_base",
574      "../../rtc_base:checks",
575      "../../rtc_base:ip_address",
576      "../../rtc_base:logging",
577      "../../rtc_base:macromagic",
578      "../../rtc_base:refcount",
579      "../../rtc_base:stringutils",
580      "../../rtc_base:threading",
581      "../../system_wrappers:field_trial",
582      "../../system_wrappers:metrics",
583    ]
584    absl_deps = [
585      "//third_party/abseil-cpp/absl/strings",
586      "//third_party/abseil-cpp/absl/types:optional",
587    ]
588  }
589
590  rtc_library("audio_jni") {
591    visibility = [ "*" ]
592    allow_poison = [ "audio_codecs" ]
593    sources = [ "src/jni/pc/audio.cc" ]
594
595    deps = [
596      ":base_jni",
597      "../../modules/audio_processing",
598      "../../modules/audio_processing:api",
599    ]
600  }
601
602  rtc_library("builtin_audio_codecs_jni") {
603    visibility = [ "*" ]
604    allow_poison = [ "audio_codecs" ]
605    sources = [
606      "src/jni/builtin_audio_decoder_factory_factory.cc",
607      "src/jni/builtin_audio_encoder_factory_factory.cc",
608    ]
609
610    deps = [
611      ":base_jni",
612      ":generated_builtin_audio_codecs_jni",
613      ":native_api_jni",
614      "../../api/audio_codecs:builtin_audio_decoder_factory",
615      "../../api/audio_codecs:builtin_audio_encoder_factory",
616    ]
617  }
618
619  rtc_library("video_jni") {
620    visibility = [ "*" ]
621    sources = [
622      "src/jni/android_video_track_source.cc",
623      "src/jni/android_video_track_source.h",
624      "src/jni/encoded_image.cc",
625      "src/jni/encoded_image.h",
626      "src/jni/h264_utils.cc",
627      "src/jni/java_i420_buffer.cc",
628      "src/jni/native_capturer_observer.cc",
629      "src/jni/native_capturer_observer.h",
630      "src/jni/nv12_buffer.cc",
631      "src/jni/nv21_buffer.cc",
632      "src/jni/pc/video.cc",
633      "src/jni/timestamp_aligner.cc",
634      "src/jni/video_codec_info.cc",
635      "src/jni/video_codec_info.h",
636      "src/jni/video_codec_status.cc",
637      "src/jni/video_codec_status.h",
638      "src/jni/video_decoder_factory_wrapper.cc",
639      "src/jni/video_decoder_factory_wrapper.h",
640      "src/jni/video_decoder_fallback.cc",
641      "src/jni/video_decoder_wrapper.cc",
642      "src/jni/video_decoder_wrapper.h",
643      "src/jni/video_encoder_factory_wrapper.cc",
644      "src/jni/video_encoder_factory_wrapper.h",
645      "src/jni/video_encoder_fallback.cc",
646      "src/jni/video_encoder_wrapper.cc",
647      "src/jni/video_encoder_wrapper.h",
648      "src/jni/video_sink.cc",
649      "src/jni/video_sink.h",
650      "src/jni/video_track.cc",
651      "src/jni/yuv_helper.cc",
652    ]
653
654    deps = [
655      ":base_jni",
656      ":generated_video_jni",
657      ":native_api_jni",
658      ":videoframe_jni",
659      "../../api:libjingle_peerconnection_api",
660      "../../api:media_stream_interface",
661      "../../api:sequence_checker",
662      "../../api/task_queue",
663      "../../api/video:encoded_image",
664      "../../api/video:render_resolution",
665      "../../api/video:video_frame",
666      "../../api/video:video_frame_type",
667      "../../api/video:video_rtp_headers",
668      "../../api/video_codecs:rtc_software_fallback_wrappers",
669      "../../api/video_codecs:video_codecs_api",
670      "../../common_video",
671      "../../media:rtc_media_base",
672      "../../modules/video_coding:codec_globals_headers",
673      "../../modules/video_coding:video_codec_interface",
674      "../../modules/video_coding:video_coding_utility",
675      "../../modules/video_coding/svc:scalable_video_controller",
676      "../../rtc_base",
677      "../../rtc_base:checks",
678      "../../rtc_base:logging",
679      "../../rtc_base:race_checker",
680      "../../rtc_base:refcount",
681      "../../rtc_base:rtc_task_queue",
682      "../../rtc_base:safe_conversions",
683      "../../rtc_base:threading",
684      "../../rtc_base:timestamp_aligner",
685      "../../rtc_base:timeutils",
686      "../../rtc_base/synchronization:mutex",
687      "//third_party/libyuv",
688    ]
689    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
690  }
691
692  # Sources here require -lEGL linker flag. It is separated from video_jni
693  # target for backwards compatibility.
694  rtc_library("video_egl_jni") {
695    visibility = [ "*" ]
696    sources = [ "src/jni/egl_base_10_impl.cc" ]
697    deps = [
698      ":generated_video_egl_jni",
699      ":native_api_jni",
700    ]
701  }
702
703  rtc_library("peerconnection_jni") {
704    # Do not depend on this target externally unless you absolute have to. It is
705    # made public because we don't have a proper NDK yet. Header APIs here are not
706    # considered public and are subject to change.
707    visibility = [ "*" ]
708
709    sources = [
710      "src/jni/pc/add_ice_candidate_observer.cc",
711      "src/jni/pc/add_ice_candidate_observer.h",
712      "src/jni/pc/android_network_monitor.h",
713      "src/jni/pc/audio_track.cc",
714      "src/jni/pc/call_session_file_rotating_log_sink.cc",
715      "src/jni/pc/crypto_options.cc",
716      "src/jni/pc/crypto_options.h",
717      "src/jni/pc/data_channel.cc",
718      "src/jni/pc/data_channel.h",
719      "src/jni/pc/dtmf_sender.cc",
720      "src/jni/pc/ice_candidate.cc",
721      "src/jni/pc/ice_candidate.h",
722      "src/jni/pc/media_constraints.cc",
723      "src/jni/pc/media_constraints.h",
724      "src/jni/pc/media_source.cc",
725      "src/jni/pc/media_stream.cc",
726      "src/jni/pc/media_stream.h",
727      "src/jni/pc/media_stream_track.cc",
728      "src/jni/pc/media_stream_track.h",
729      "src/jni/pc/owned_factory_and_threads.cc",
730      "src/jni/pc/owned_factory_and_threads.h",
731      "src/jni/pc/peer_connection.cc",
732      "src/jni/pc/peer_connection.h",
733      "src/jni/pc/peer_connection_factory.cc",
734      "src/jni/pc/peer_connection_factory.h",
735      "src/jni/pc/rtc_certificate.cc",
736      "src/jni/pc/rtc_certificate.h",
737      "src/jni/pc/rtc_stats_collector_callback_wrapper.cc",
738      "src/jni/pc/rtc_stats_collector_callback_wrapper.h",
739      "src/jni/pc/rtp_parameters.cc",
740      "src/jni/pc/rtp_parameters.h",
741      "src/jni/pc/rtp_receiver.cc",
742      "src/jni/pc/rtp_receiver.h",
743      "src/jni/pc/rtp_sender.cc",
744      "src/jni/pc/rtp_sender.h",
745      "src/jni/pc/rtp_transceiver.cc",
746      "src/jni/pc/rtp_transceiver.h",
747      "src/jni/pc/sdp_observer.cc",
748      "src/jni/pc/sdp_observer.h",
749      "src/jni/pc/session_description.cc",
750      "src/jni/pc/session_description.h",
751      "src/jni/pc/ssl_certificate_verifier_wrapper.cc",
752      "src/jni/pc/ssl_certificate_verifier_wrapper.h",
753      "src/jni/pc/stats_observer.cc",
754      "src/jni/pc/stats_observer.h",
755      "src/jni/pc/turn_customizer.cc",
756      "src/jni/pc/turn_customizer.h",
757    ]
758
759    deps = [
760      ":base_jni",
761      ":generated_external_classes_jni",
762      ":generated_peerconnection_jni",
763      ":logging_jni",
764      ":native_api_jni",
765      ":native_api_stacktrace",
766      "..:media_constraints",
767      "../../api:callfactory_api",
768      "../../api:dtmf_sender_interface",
769      "../../api:libjingle_peerconnection_api",
770      "../../api:media_stream_interface",
771      "../../api:rtc_event_log_output_file",
772      "../../api:rtp_parameters",
773      "../../api:rtp_sender_interface",
774      "../../api:turn_customizer",
775      "../../api/crypto:options",
776      "../../api/rtc_event_log:rtc_event_log_factory",
777      "../../api/task_queue:default_task_queue_factory",
778      "../../api/video_codecs:video_codecs_api",
779      "../../call:call_interfaces",
780      "../../media:rtc_audio_video",
781      "../../media:rtc_media_base",
782      "../../modules/audio_device",
783      "../../modules/audio_processing:api",
784      "../../modules/utility",
785      "../../pc:media_stream_observer",
786      "../../pc:webrtc_sdp",
787      "../../rtc_base",
788      "../../rtc_base:checks",
789      "../../rtc_base:event_tracer",
790      "../../rtc_base:logging",
791      "../../rtc_base:refcount",
792      "../../rtc_base:rtc_task_queue",
793      "../../rtc_base:safe_conversions",
794      "../../rtc_base:stringutils",
795      "../../rtc_base:threading",
796      "../../system_wrappers:field_trial",
797    ]
798    absl_deps = [
799      "//third_party/abseil-cpp/absl/memory",
800      "//third_party/abseil-cpp/absl/types:optional",
801    ]
802  }
803
804  # JNI target for java_audio_device_module_java
805  rtc_library("java_audio_device_module_jni") {
806    visibility = [ "*" ]
807    sources = [ "src/jni/audio_device/java_audio_device_module.cc" ]
808
809    deps = [
810      ":base_jni",
811      ":generated_java_audio_jni",
812      ":java_audio_device_module",
813    ]
814  }
815
816  rtc_library("libjingle_peerconnection_metrics_default_jni") {
817    visibility = [ "*" ]
818    sources = [ "src/jni/android_metrics.cc" ]
819    deps = [
820      ":base_jni",
821      ":generated_metrics_jni",
822      ":native_api_jni",
823      ":peerconnection_jni",
824      "../../pc:peerconnection",
825      "../../rtc_base:stringutils",
826      "../../system_wrappers:metrics",
827    ]
828  }
829
830  rtc_library("default_video_codec_factory_jni") {
831    visibility = [ "*" ]
832    allow_poison = [ "software_video_codecs" ]
833    deps = [
834      ":swcodecs_jni",
835      ":video_jni",
836    ]
837  }
838
839  rtc_library("libvpx_vp8_jni") {
840    visibility = [ "*" ]
841    allow_poison = [ "software_video_codecs" ]
842    sources = [ "src/jni/vp8_codec.cc" ]
843    deps = [
844      ":base_jni",
845      ":generated_libvpx_vp8_jni",
846      ":video_jni",
847      "../../modules/video_coding:webrtc_vp8",
848    ]
849  }
850
851  rtc_library("libvpx_vp9_jni") {
852    visibility = [ "*" ]
853    allow_poison = [ "software_video_codecs" ]
854    sources = [ "src/jni/vp9_codec.cc" ]
855    deps = [
856      ":base_jni",
857      ":generated_libvpx_vp9_jni",
858      ":video_jni",
859      "../../modules/video_coding:webrtc_vp9",
860    ]
861  }
862
863  rtc_library("libaom_av1_encoder_jni") {
864    visibility = [ "*" ]
865    allow_poison = [ "software_video_codecs" ]
866    sources = [ "src/jni/libaom_av1_encoder.cc" ]
867    deps = [
868      ":base_jni",
869      ":generated_libaom_av1_encoder_jni",
870      ":video_jni",
871      "../../modules/video_coding/codecs/av1:libaom_av1_encoder",
872    ]
873  }
874
875  rtc_library("dav1d_av1_jni") {
876    visibility = [ "*" ]
877    allow_poison = [ "software_video_codecs" ]
878    sources = [ "src/jni/dav1d_codec.cc" ]
879    deps = [
880      ":base_jni",
881      ":generated_dav1d_jni",
882      ":video_jni",
883      "../../modules/video_coding/codecs/av1:dav1d_decoder",
884    ]
885  }
886
887  rtc_library("swcodecs_jni") {
888    visibility = [ "*" ]
889    allow_poison = [ "software_video_codecs" ]
890    sources = [
891      "src/jni/software_video_decoder_factory.cc",
892      "src/jni/software_video_encoder_factory.cc",
893    ]
894    deps = [
895      ":base_jni",
896      ":generated_swcodecs_jni",
897      ":libvpx_vp8_jni",
898      ":libvpx_vp9_jni",
899      ":native_api_jni",
900      ":video_jni",
901      "../../api/video_codecs:builtin_video_decoder_factory",
902      "../../api/video_codecs:builtin_video_encoder_factory",
903      "../../api/video_codecs:video_codecs_api",
904    ]
905  }
906
907  ######################
908  # Native API targets #
909  ######################
910
911  # Core targets.
912
913  # JNI helpers that are also needed from internal JNI code. Cannot depend on any
914  # other JNI targets than internal_jni.
915  rtc_library("native_api_jni") {
916    visibility = [ "*" ]
917    sources = [
918      "native_api/jni/class_loader.cc",
919      "native_api/jni/java_types.cc",
920      "native_api/jni/jvm.cc",
921      "src/jni/jni_generator_helper.cc",
922      "src/jni/jni_generator_helper.h",
923    ]
924
925    public = [
926      "native_api/jni/class_loader.h",
927      "native_api/jni/java_types.h",
928      "native_api/jni/jni_int_wrapper.h",
929      "native_api/jni/jvm.h",
930      "native_api/jni/scoped_java_ref.h",
931    ]
932
933    deps = [
934      ":generated_external_classes_jni",
935      ":generated_native_api_jni",
936      ":internal_jni",
937      "../../api:sequence_checker",
938      "//api:array_view",
939      "//rtc_base:checks",
940    ]
941    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
942  }
943
944  rtc_library("native_api_base") {
945    visibility = [ "*" ]
946    sources = [
947      "native_api/base/init.cc",
948      "native_api/base/init.h",
949    ]
950
951    deps = [
952      ":base_jni",
953      ":native_api_jni",
954      "//rtc_base",
955      "//rtc_base:checks",
956    ]
957  }
958
959  # Modules, in alphabetical order.
960
961  rtc_library("native_api_audio_device_module") {
962    visibility = [ "*" ]
963
964    sources = [
965      "native_api/audio_device_module/audio_device_android.cc",
966      "native_api/audio_device_module/audio_device_android.h",
967    ]
968
969    deps = [
970      ":base_jni",
971      ":java_audio_device_module",
972      ":opensles_audio_device_module",
973      "../../api:scoped_refptr",
974      "../../modules/audio_device",
975      "../../rtc_base:checks",
976      "../../rtc_base:logging",
977      "../../rtc_base:refcount",
978      "../../system_wrappers",
979      "../../system_wrappers:metrics",
980    ]
981    if (rtc_enable_android_aaudio) {
982      deps += [ ":aaudio_audio_device_module" ]
983    }
984  }
985
986  # API for wrapping Java VideoDecoderFactory/VideoEncoderFactory classes to C++
987  # objects.
988  rtc_library("native_api_codecs") {
989    visibility = [ "*" ]
990    allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
991    sources = [
992      "native_api/codecs/wrapper.cc",
993      "native_api/codecs/wrapper.h",
994    ]
995
996    deps = [
997      ":base_jni",
998      ":native_api_jni",
999      ":video_jni",
1000      "//api/video_codecs:video_codecs_api",
1001      "//rtc_base:checks",
1002    ]
1003  }
1004
1005  rtc_library("native_api_network_monitor") {
1006    visibility = [ "*" ]
1007    sources = [
1008      "native_api/network_monitor/network_monitor.cc",
1009      "native_api/network_monitor/network_monitor.h",
1010    ]
1011
1012    deps = [
1013      ":base_jni",
1014      "../../rtc_base:threading",
1015      "//rtc_base",
1016    ]
1017  }
1018
1019  # API for creating Java PeerConnectionFactory from C++ equivalents.
1020  rtc_library("native_api_peerconnection") {
1021    visibility = [ "*" ]
1022    sources = [
1023      "native_api/peerconnection/peer_connection_factory.cc",
1024      "native_api/peerconnection/peer_connection_factory.h",
1025    ]
1026    deps = [
1027      ":base_jni",
1028      ":peerconnection_jni",
1029      "../../rtc_base:threading",
1030      "//api:libjingle_peerconnection_api",
1031      "//api/video_codecs:video_codecs_api",
1032      "//rtc_base",
1033    ]
1034  }
1035
1036  # API for capturing and printing native stacktraces.
1037  rtc_library("native_api_stacktrace") {
1038    visibility = [ "*" ]
1039    sources = [
1040      "native_api/stacktrace/stacktrace.cc",
1041      "native_api/stacktrace/stacktrace.h",
1042    ]
1043
1044    deps = [
1045      "../../rtc_base:criticalsection",
1046      "../../rtc_base:logging",
1047      "../../rtc_base:stringutils",
1048      "../../rtc_base/synchronization:mutex",
1049    ]
1050    absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]
1051  }
1052
1053  # API for creating C++ wrapper implementations of api/mediastreaminterface.h
1054  # video interfaces from their Java equivalents.
1055  rtc_library("native_api_video") {
1056    visibility = [ "*" ]
1057    allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
1058    sources = [
1059      "native_api/video/video_source.cc",
1060      "native_api/video/video_source.h",
1061      "native_api/video/wrapper.cc",
1062      "native_api/video/wrapper.h",
1063    ]
1064    deps = [
1065      ":native_api_jni",
1066      ":video_jni",
1067      ":videoframe_jni",
1068      "../../rtc_base:refcount",
1069      "../../rtc_base:threading",
1070      "//api:libjingle_peerconnection_api",
1071      "//api:media_stream_interface",
1072      "//api/video:video_frame",
1073      "//api/video:video_rtp_headers",
1074      "//rtc_base",
1075    ]
1076  }
1077
1078  ####################
1079  # Internal targets #
1080  ####################
1081
1082  rtc_android_library("logging_java") {
1083    sources = [ "src/java/org/webrtc/JNILogging.java" ]
1084
1085    deps = [
1086      ":base_java",
1087      "//rtc_base:base_java",
1088    ]
1089  }
1090
1091  # Internal code that is needed by native_api_jni. The code cannot be placed in
1092  # base_jni because native_api_jni depends on the code (and base_jni depends on
1093  # native_api_jni).
1094  rtc_library("internal_jni") {
1095    sources = [
1096      "src/jni/jvm.cc",
1097      "src/jni/jvm.h",
1098    ]
1099
1100    deps = [ "../../rtc_base:checks" ]
1101  }
1102
1103  rtc_library("videoframe_jni") {
1104    sources = [
1105      "src/jni/video_frame.cc",
1106      "src/jni/video_frame.h",
1107      "src/jni/wrapped_native_i420_buffer.cc",
1108      "src/jni/wrapped_native_i420_buffer.h",
1109    ]
1110
1111    deps = [
1112      ":base_jni",
1113      ":generated_video_jni",
1114      ":native_api_jni",
1115      "../../api:scoped_refptr",
1116      "../../api/video:video_frame",
1117      "../../api/video:video_rtp_headers",
1118      "../../common_video",
1119      "../../rtc_base",
1120      "../../rtc_base:checks",
1121      "../../rtc_base:refcount",
1122      "../../rtc_base:timeutils",
1123    ]
1124  }
1125
1126  rtc_library("logging_jni") {
1127    visibility = [ "*" ]
1128    sources = [
1129      "src/jni/logging/log_sink.cc",
1130      "src/jni/logging/log_sink.h",
1131    ]
1132
1133    deps = [
1134      ":base_jni",
1135      ":generated_logging_jni",
1136      ":native_api_jni",
1137      "../../rtc_base",
1138      "../../rtc_base:logging",
1139    ]
1140
1141    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
1142  }
1143
1144  rtc_library("audio_device_module_base") {
1145    visibility = [ "*" ]
1146
1147    sources = [
1148      "src/jni/audio_device/audio_common.h",
1149      "src/jni/audio_device/audio_device_module.cc",
1150      "src/jni/audio_device/audio_device_module.h",
1151    ]
1152
1153    deps = [
1154      ":base_jni",
1155      ":generated_audio_device_module_base_jni",
1156      ":native_api_jni",
1157      "../../api:make_ref_counted",
1158      "../../api:sequence_checker",
1159      "../../api/task_queue",
1160      "../../api/task_queue:default_task_queue_factory",
1161      "../../modules/audio_device:audio_device_api",
1162      "../../modules/audio_device:audio_device_buffer",
1163      "../../rtc_base:checks",
1164      "../../rtc_base:logging",
1165      "../../system_wrappers:metrics",
1166    ]
1167    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
1168  }
1169
1170  rtc_library("java_audio_device_module") {
1171    visibility = [ "*" ]
1172
1173    sources = [
1174      "src/jni/audio_device/audio_record_jni.cc",
1175      "src/jni/audio_device/audio_record_jni.h",
1176      "src/jni/audio_device/audio_track_jni.cc",
1177      "src/jni/audio_device/audio_track_jni.h",
1178    ]
1179    deps = [
1180      ":audio_device_module_base",
1181      ":base_jni",
1182      ":generated_java_audio_device_module_native_jni",
1183      "../../api:sequence_checker",
1184      "../../modules/audio_device",
1185      "../../modules/audio_device:audio_device_buffer",
1186      "../../rtc_base:checks",
1187      "../../rtc_base:logging",
1188      "../../rtc_base:macromagic",
1189      "../../rtc_base:platform_thread",
1190      "../../rtc_base:timeutils",
1191      "../../system_wrappers:field_trial",
1192      "../../system_wrappers:metrics",
1193    ]
1194    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
1195  }
1196
1197  if (rtc_enable_android_aaudio) {
1198    rtc_library("aaudio_audio_device_module") {
1199      visibility = [ "*" ]
1200      defines = [ "WEBRTC_AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ]
1201      sources = [
1202        "src/jni/audio_device/aaudio_player.cc",
1203        "src/jni/audio_device/aaudio_player.h",
1204        "src/jni/audio_device/aaudio_recorder.cc",
1205        "src/jni/audio_device/aaudio_recorder.h",
1206        "src/jni/audio_device/aaudio_wrapper.cc",
1207        "src/jni/audio_device/aaudio_wrapper.h",
1208      ]
1209      libs = [ "aaudio" ]
1210      deps = [
1211        ":audio_device_module_base",
1212        ":base_jni",
1213        "../../api:array_view",
1214        "../../api:sequence_checker",
1215        "../../api/task_queue",
1216        "../../modules/audio_device",
1217        "../../modules/audio_device:audio_device_buffer",
1218        "../../rtc_base:checks",
1219        "../../rtc_base:logging",
1220        "../../rtc_base:macromagic",
1221        "../../rtc_base:stringutils",
1222        "../../rtc_base:timeutils",
1223        "../../system_wrappers",
1224      ]
1225      absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
1226    }
1227  }
1228
1229  rtc_library("opensles_audio_device_module") {
1230    visibility = [ "*" ]
1231    sources = [
1232      "src/jni/audio_device/opensles_common.cc",
1233      "src/jni/audio_device/opensles_common.h",
1234      "src/jni/audio_device/opensles_player.cc",
1235      "src/jni/audio_device/opensles_player.h",
1236      "src/jni/audio_device/opensles_recorder.cc",
1237      "src/jni/audio_device/opensles_recorder.h",
1238    ]
1239    libs = [ "OpenSLES" ]
1240    deps = [
1241      ":audio_device_module_base",
1242      ":base_jni",
1243      "../../api:array_view",
1244      "../../api:refcountedbase",
1245      "../../api:scoped_refptr",
1246      "../../api:sequence_checker",
1247      "../../modules/audio_device",
1248      "../../modules/audio_device:audio_device_buffer",
1249      "../../rtc_base:checks",
1250      "../../rtc_base:logging",
1251      "../../rtc_base:macromagic",
1252      "../../rtc_base:platform_thread",
1253      "../../rtc_base:timeutils",
1254    ]
1255    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
1256  }
1257
1258  #########################
1259  # Generated JNI targets #
1260  #########################
1261
1262  generate_jar_jni("generated_external_classes_jni") {
1263    classes = [
1264      "java/lang/Integer.class",
1265      "java/lang/Double.class",
1266      "java/lang/Long.class",
1267      "java/lang/Iterable.class",
1268      "java/util/Iterator.class",
1269      "java/lang/Boolean.class",
1270      "java/math/BigInteger.class",
1271      "java/util/Map.class",
1272      "java/util/LinkedHashMap.class",
1273      "java/util/ArrayList.class",
1274      "java/lang/Enum.class",
1275    ]
1276    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1277  }
1278
1279  generate_jni("generated_metrics_jni") {
1280    sources = [ "api/org/webrtc/Metrics.java" ]
1281    namespace = "webrtc::jni"
1282    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1283  }
1284
1285  # Generated JNI for public JNI targets, matching order of targets
1286
1287  generate_jni("generated_base_jni") {
1288    sources = [
1289      "api/org/webrtc/NetworkChangeDetector.java",
1290      "api/org/webrtc/NetworkMonitor.java",
1291      "api/org/webrtc/RefCounted.java",
1292      "src/java/org/webrtc/Histogram.java",
1293      "src/java/org/webrtc/JniCommon.java",
1294    ]
1295    namespace = "webrtc::jni"
1296    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1297  }
1298
1299  generate_jni("generated_video_jni") {
1300    sources = [
1301      "api/org/webrtc/EncodedImage.java",
1302      "api/org/webrtc/JavaI420Buffer.java",
1303      "api/org/webrtc/TimestampAligner.java",
1304      "api/org/webrtc/VideoCodecInfo.java",
1305      "api/org/webrtc/VideoCodecStatus.java",
1306      "api/org/webrtc/VideoDecoder.java",
1307      "api/org/webrtc/VideoDecoderFactory.java",
1308      "api/org/webrtc/VideoDecoderFallback.java",
1309      "api/org/webrtc/VideoEncoder.java",
1310      "api/org/webrtc/VideoEncoderFactory.java",
1311      "api/org/webrtc/VideoEncoderFallback.java",
1312      "api/org/webrtc/VideoFrame.java",
1313      "api/org/webrtc/VideoSink.java",
1314      "api/org/webrtc/VideoTrack.java",
1315      "api/org/webrtc/YuvHelper.java",
1316      "src/java/org/webrtc/H264Utils.java",
1317      "src/java/org/webrtc/NV12Buffer.java",
1318      "src/java/org/webrtc/NV21Buffer.java",
1319      "src/java/org/webrtc/NativeAndroidVideoTrackSource.java",
1320      "src/java/org/webrtc/NativeCapturerObserver.java",
1321      "src/java/org/webrtc/VideoDecoderWrapper.java",
1322      "src/java/org/webrtc/VideoEncoderWrapper.java",
1323      "src/java/org/webrtc/WrappedNativeI420Buffer.java",
1324    ]
1325    namespace = "webrtc::jni"
1326    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1327  }
1328
1329  generate_jni("generated_video_egl_jni") {
1330    sources = [ "src/java/org/webrtc/EglBase10Impl.java" ]
1331    namespace = "webrtc::jni"
1332    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1333  }
1334
1335  generate_jni("generated_libvpx_vp8_jni") {
1336    sources = [
1337      "api/org/webrtc/LibvpxVp8Decoder.java",
1338      "api/org/webrtc/LibvpxVp8Encoder.java",
1339    ]
1340
1341    namespace = "webrtc::jni"
1342    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1343  }
1344
1345  generate_jni("generated_libvpx_vp9_jni") {
1346    sources = [
1347      "api/org/webrtc/LibvpxVp9Decoder.java",
1348      "api/org/webrtc/LibvpxVp9Encoder.java",
1349    ]
1350
1351    namespace = "webrtc::jni"
1352    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1353  }
1354
1355  generate_jni("generated_libaom_av1_encoder_jni") {
1356    sources = [ "api/org/webrtc/LibaomAv1Encoder.java" ]
1357
1358    namespace = "webrtc::jni"
1359    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1360  }
1361
1362  generate_jni("generated_dav1d_jni") {
1363    sources = [ "api/org/webrtc/Dav1dDecoder.java" ]
1364
1365    namespace = "webrtc::jni"
1366    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1367  }
1368
1369  generate_jni("generated_swcodecs_jni") {
1370    sources = [
1371      "api/org/webrtc/SoftwareVideoDecoderFactory.java",
1372      "api/org/webrtc/SoftwareVideoEncoderFactory.java",
1373    ]
1374
1375    namespace = "webrtc::jni"
1376    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1377  }
1378
1379  generate_jni("generated_peerconnection_jni") {
1380    sources = [
1381      "api/org/webrtc/AddIceObserver.java",
1382      "api/org/webrtc/AudioTrack.java",
1383      "api/org/webrtc/CallSessionFileRotatingLogSink.java",
1384      "api/org/webrtc/CandidatePairChangeEvent.java",
1385      "api/org/webrtc/CryptoOptions.java",
1386      "api/org/webrtc/DataChannel.java",
1387      "api/org/webrtc/DtmfSender.java",
1388      "api/org/webrtc/IceCandidate.java",
1389      "api/org/webrtc/IceCandidateErrorEvent.java",
1390      "api/org/webrtc/MediaConstraints.java",
1391      "api/org/webrtc/MediaSource.java",
1392      "api/org/webrtc/MediaStream.java",
1393      "api/org/webrtc/MediaStreamTrack.java",
1394      "api/org/webrtc/PeerConnection.java",
1395      "api/org/webrtc/PeerConnectionFactory.java",
1396      "api/org/webrtc/RTCStats.java",
1397      "api/org/webrtc/RTCStatsCollectorCallback.java",
1398      "api/org/webrtc/RTCStatsReport.java",
1399      "api/org/webrtc/RtcCertificatePem.java",
1400      "api/org/webrtc/RtpParameters.java",
1401      "api/org/webrtc/RtpReceiver.java",
1402      "api/org/webrtc/RtpSender.java",
1403      "api/org/webrtc/RtpTransceiver.java",
1404      "api/org/webrtc/SSLCertificateVerifier.java",
1405      "api/org/webrtc/SdpObserver.java",
1406      "api/org/webrtc/SessionDescription.java",
1407      "api/org/webrtc/StatsObserver.java",
1408      "api/org/webrtc/StatsReport.java",
1409      "api/org/webrtc/TurnCustomizer.java",
1410    ]
1411    namespace = "webrtc::jni"
1412    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1413  }
1414
1415  generate_jni("generated_java_audio_jni") {
1416    sources = [ "api/org/webrtc/audio/JavaAudioDeviceModule.java" ]
1417    namespace = "webrtc::jni"
1418    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1419  }
1420
1421  generate_jni("generated_builtin_audio_codecs_jni") {
1422    sources = [
1423      "api/org/webrtc/BuiltinAudioDecoderFactoryFactory.java",
1424      "api/org/webrtc/BuiltinAudioEncoderFactoryFactory.java",
1425    ]
1426    namespace = "webrtc::jni"
1427    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1428  }
1429
1430  # Generated JNI for native API targets
1431
1432  generate_jni("generated_native_api_jni") {
1433    sources = [
1434      "src/java/org/webrtc/JniHelper.java",
1435      "src/java/org/webrtc/WebRtcClassLoader.java",
1436    ]
1437    namespace = "webrtc::jni"
1438    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1439  }
1440
1441  # Generated JNI for internal targets.
1442
1443  generate_jni("generated_logging_jni") {
1444    sources = [ "src/java/org/webrtc/JNILogging.java" ]
1445    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1446  }
1447
1448  generate_jni("generated_audio_device_module_base_jni") {
1449    sources = [ "src/java/org/webrtc/audio/WebRtcAudioManager.java" ]
1450    namespace = "webrtc::jni"
1451    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1452  }
1453
1454  generate_jni("generated_java_audio_device_module_native_jni") {
1455    sources = [
1456      "src/java/org/webrtc/audio/WebRtcAudioRecord.java",
1457      "src/java/org/webrtc/audio/WebRtcAudioTrack.java",
1458    ]
1459    namespace = "webrtc::jni"
1460    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1461  }
1462}
1463
1464if (is_android) {
1465  ################
1466  # Test targets #
1467  ################
1468
1469  if (rtc_include_tests) {
1470    rtc_instrumentation_test_apk("android_instrumentation_test_apk") {
1471      apk_name = "android_instrumentation_test_apk"
1472      android_manifest = "instrumentationtests/AndroidManifest.xml"
1473      min_sdk_version = 21
1474      target_sdk_version = 21
1475
1476      sources = [
1477        "instrumentationtests/src/org/webrtc/AndroidVideoDecoderInstrumentationTest.java",
1478        "instrumentationtests/src/org/webrtc/BuiltinAudioCodecsFactoryFactoryTest.java",
1479        "instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java",
1480        "instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java",
1481        "instrumentationtests/src/org/webrtc/Camera2CapturerTest.java",
1482        "instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java",
1483        "instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java",
1484        "instrumentationtests/src/org/webrtc/EglRendererTest.java",
1485        "instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java",
1486        "instrumentationtests/src/org/webrtc/GlRectDrawerTest.java",
1487        "instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java",
1488        "instrumentationtests/src/org/webrtc/LoggableTest.java",
1489        "instrumentationtests/src/org/webrtc/NetworkMonitorTest.java",
1490        "instrumentationtests/src/org/webrtc/PeerConnectionEndToEndTest.java",
1491        "instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java",
1492        "instrumentationtests/src/org/webrtc/PeerConnectionTest.java",
1493        "instrumentationtests/src/org/webrtc/RendererCommonTest.java",
1494        "instrumentationtests/src/org/webrtc/RtcCertificatePemTest.java",
1495        "instrumentationtests/src/org/webrtc/RtpSenderTest.java",
1496        "instrumentationtests/src/org/webrtc/RtpTransceiverTest.java",
1497        "instrumentationtests/src/org/webrtc/SoftwareVideoDecoderFactoryTest.java",
1498        "instrumentationtests/src/org/webrtc/SoftwareVideoEncoderFactoryTest.java",
1499        "instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java",
1500        "instrumentationtests/src/org/webrtc/SurfaceViewRendererOnMeasureTest.java",
1501        "instrumentationtests/src/org/webrtc/TestConstants.java",
1502        "instrumentationtests/src/org/webrtc/TimestampAlignerTest.java",
1503        "instrumentationtests/src/org/webrtc/VideoFileRendererTest.java",
1504        "instrumentationtests/src/org/webrtc/VideoFrameBufferTest.java",
1505        "instrumentationtests/src/org/webrtc/VideoTrackTest.java",
1506        "instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java",
1507        "instrumentationtests/src/org/webrtc/YuvHelperTest.java",
1508      ]
1509
1510      data = [ "../../sdk/android/instrumentationtests/src/org/webrtc/capturetestvideo.y4m" ]
1511
1512      deps = [
1513        ":audio_api_java",
1514        ":base_java",
1515        ":builtin_audio_codecs_java",
1516        ":camera_java",
1517        ":default_video_codec_factory_java",
1518        ":filevideo_java",
1519        ":hwcodecs_java",
1520        ":libjingle_peerconnection_java",
1521        ":libjingle_peerconnection_metrics_default_java",
1522        ":peerconnection_java",
1523        ":surfaceviewrenderer_java",
1524        ":swcodecs_java",
1525        ":video_api_java",
1526        ":video_java",
1527        "//base:base_java_test_support",
1528        "//rtc_base:base_java",
1529        "//third_party/android_deps:guava_android_java",
1530        "//third_party/android_support_test_runner:rules_java",
1531        "//third_party/android_support_test_runner:runner_java",
1532        "//third_party/androidx:androidx_annotation_annotation_java",
1533        "//third_party/androidx:androidx_test_runner_java",
1534        "//third_party/google-truth:google_truth_java",
1535        "//third_party/hamcrest:hamcrest_java",
1536        "//third_party/hamcrest:hamcrest_library_java",
1537        "//third_party/junit",
1538        "//third_party/mockito:mockito_java",
1539      ]
1540
1541      shared_libraries = [
1542        "../../sdk/android:libjingle_peerconnection_instrumentationtests_so",
1543      ]
1544    }
1545  }
1546
1547  rtc_shared_library("libjingle_peerconnection_instrumentationtests_so") {
1548    testonly = true
1549    sources = [ "src/jni/jni_onload.cc" ]
1550
1551    suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
1552    configs += [ "//build/config/android:hide_all_but_jni" ]
1553
1554    deps = [
1555      ":instrumentationtests_jni",
1556      ":libjingle_peerconnection_jni",
1557      ":libjingle_peerconnection_metrics_default_jni",
1558      ":native_api_jni",
1559      "../../pc:libjingle_peerconnection",
1560      "../../rtc_base",
1561    ]
1562    output_extension = "so"
1563  }
1564
1565  rtc_library("instrumentationtests_jni") {
1566    testonly = true
1567    sources = [
1568      "instrumentationtests/loggable_test.cc",
1569      "instrumentationtests/video_frame_buffer_test.cc",
1570    ]
1571
1572    deps = [
1573      ":base_jni",
1574      ":native_api_jni",
1575      ":videoframe_jni",
1576      "../../api/video:video_frame",
1577      "../../rtc_base:logging",
1578    ]
1579  }
1580
1581  rtc_library("native_test_jni_onload") {
1582    testonly = true
1583
1584    sources = [ "native_unittests/test_jni_onload.cc" ]
1585
1586    deps = [
1587      ":base_jni",
1588      ":internal_jni",
1589      ":native_api_base",
1590      ":native_api_jni",
1591      "../../rtc_base:checks",
1592    ]
1593  }
1594
1595  rtc_library("native_unittests") {
1596    testonly = true
1597
1598    sources = [
1599      "native_unittests/android_network_monitor_unittest.cc",
1600      "native_unittests/application_context_provider.cc",
1601      "native_unittests/application_context_provider.h",
1602      "native_unittests/audio_device/audio_device_unittest.cc",
1603      "native_unittests/codecs/wrapper_unittest.cc",
1604      "native_unittests/java_types_unittest.cc",
1605      "native_unittests/peerconnection/peer_connection_factory_unittest.cc",
1606      "native_unittests/stacktrace/stacktrace_unittest.cc",
1607      "native_unittests/video/video_source_unittest.cc",
1608    ]
1609
1610    data = [
1611      "../../resources/audio_device/audio_short44.pcm",
1612      "../../resources/audio_device/audio_short48.pcm",
1613    ]
1614
1615    deps = [
1616      ":audio_device_module_base",
1617      ":audio_jni",
1618      ":base_jni",
1619      ":generated_native_unittests_jni",
1620      ":native_api_audio_device_module",
1621      ":native_api_base",
1622      ":native_api_codecs",
1623      ":native_api_jni",
1624      ":native_api_peerconnection",
1625      ":native_api_stacktrace",
1626      ":native_api_video",
1627      ":native_test_jni_onload",
1628      ":opensles_audio_device_module",
1629      ":video_jni",
1630      "../../api:field_trials_view",
1631      "../../api:scoped_refptr",
1632      "../../api/rtc_event_log:rtc_event_log_factory",
1633      "../../api/task_queue:default_task_queue_factory",
1634      "../../api/video:video_frame",
1635      "../../api/video:video_rtp_headers",
1636      "../../media:rtc_audio_video",
1637      "../../media:rtc_internal_video_codecs",
1638      "../../media:rtc_media_base",
1639      "../../media:rtc_media_engine_defaults",
1640      "../../modules/audio_device",
1641      "../../modules/audio_device:mock_audio_device",
1642      "../../modules/audio_processing:api",
1643      "../../modules/utility",
1644      "../../pc:libjingle_peerconnection",
1645      "../../rtc_base:checks",
1646      "../../rtc_base:ip_address",
1647      "../../rtc_base:logging",
1648      "../../rtc_base:macromagic",
1649      "../../rtc_base:platform_thread",
1650      "../../rtc_base:rtc_base",
1651      "../../rtc_base:rtc_event",
1652      "../../rtc_base:stringutils",
1653      "../../rtc_base:threading",
1654      "../../rtc_base:timeutils",
1655      "../../rtc_base/synchronization:mutex",
1656      "../../rtc_base/system:inline",
1657      "../../system_wrappers",
1658      "../../test:fileutils",
1659      "../../test:scoped_key_value_config",
1660      "../../test:test_support",
1661      "../../testing/gtest",
1662    ]
1663    absl_deps = [
1664      "//third_party/abseil-cpp/absl/memory",
1665      "//third_party/abseil-cpp/absl/strings",
1666    ]
1667  }
1668
1669  rtc_android_library("native_unittests_java") {
1670    testonly = true
1671
1672    sources = [
1673      "native_unittests/org/webrtc/ApplicationContextProvider.java",
1674      "native_unittests/org/webrtc/BuildInfo.java",
1675      "native_unittests/org/webrtc/CodecsWrapperTestHelper.java",
1676      "native_unittests/org/webrtc/FakeVideoEncoder.java",
1677      "native_unittests/org/webrtc/JavaTypesTestHelper.java",
1678      "native_unittests/org/webrtc/JavaVideoSourceTestHelper.java",
1679      "native_unittests/org/webrtc/PeerConnectionFactoryInitializationHelper.java",
1680    ]
1681
1682    deps = [
1683      ":base_java",
1684      ":java_audio_device_module_java",
1685      ":peerconnection_java",
1686      ":video_api_java",
1687      ":video_java",
1688      "../../rtc_base:base_java",
1689      "//third_party/android_support_test_runner:runner_java",
1690      "//third_party/androidx:androidx_test_runner_java",
1691    ]
1692  }
1693
1694  generate_jni("generated_native_unittests_jni") {
1695    testonly = true
1696
1697    sources = [
1698      "native_unittests/org/webrtc/ApplicationContextProvider.java",
1699      "native_unittests/org/webrtc/BuildInfo.java",
1700      "native_unittests/org/webrtc/CodecsWrapperTestHelper.java",
1701      "native_unittests/org/webrtc/JavaTypesTestHelper.java",
1702      "native_unittests/org/webrtc/JavaVideoSourceTestHelper.java",
1703      "native_unittests/org/webrtc/PeerConnectionFactoryInitializationHelper.java",
1704    ]
1705    namespace = "webrtc::jni"
1706    jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
1707  }
1708
1709  robolectric_binary("android_sdk_junit_tests") {
1710    sources = [
1711      "tests/src/org/webrtc/AndroidVideoDecoderTest.java",
1712      "tests/src/org/webrtc/CameraEnumerationTest.java",
1713      "tests/src/org/webrtc/CodecTestHelper.java",
1714      "tests/src/org/webrtc/CryptoOptionsTest.java",
1715      "tests/src/org/webrtc/FakeMediaCodecWrapper.java",
1716      "tests/src/org/webrtc/FramerateBitrateAdjusterTest.java",
1717      "tests/src/org/webrtc/GlGenericDrawerTest.java",
1718      "tests/src/org/webrtc/HardwareVideoEncoderTest.java",
1719      "tests/src/org/webrtc/IceCandidateTest.java",
1720      "tests/src/org/webrtc/RefCountDelegateTest.java",
1721      "tests/src/org/webrtc/ScalingSettingsTest.java",
1722      "tests/src/org/webrtc/audio/LowLatencyAudioBufferManagerTest.java",
1723    ]
1724
1725    deps = [
1726      ":base_java",
1727      ":camera_java",
1728      ":hwcodecs_java",
1729      ":java_audio_device_module_java",
1730      ":libjingle_peerconnection_java",
1731      ":peerconnection_java",
1732      ":video_api_java",
1733      ":video_java",
1734      "//third_party/android_deps:guava_android_java",
1735      "//third_party/androidx:androidx_annotation_annotation_java",
1736      "//third_party/androidx:androidx_test_runner_java",
1737      "//third_party/google-truth:google_truth_java",
1738    ]
1739
1740    additional_jar_files = [ [
1741          "tests/resources/robolectric.properties",
1742          "robolectric.properties",
1743        ] ]
1744  }
1745}
1746