From 768c64877e8ab88e1864b5017241325f28a3ef34 Mon Sep 17 00:00:00 2001 From: magjed Date: Tue, 6 Dec 2016 04:29:37 -0800 Subject: [PATCH] Move /webrtc/api/android files to /webrtc/sdk/android I decided to make one webrtc/sdk/android/BUILD.gn for both tests and Java/jni src. External dependencies needs to be updated after this CL. Future work is required to clean up the Android api and move implementation details to /webrtc/sdk/android/src. BUG=webrtc:5882,webrtc:6804 NOPRESUBMIT=True Review-Url: https://codereview.webrtc.org/2547483003 Cr-Commit-Position: refs/heads/master@{#15443} --- webrtc/BUILD.gn | 4 +- webrtc/api/BUILD.gn | 195 +--------------- webrtc/api/android/OWNERS | 1 - webrtc/api/android/jni/DEPS | 3 + .../api/android/jni/androidmediadecoder_jni.h | 36 +-- .../api/android/jni/androidmediaencoder_jni.h | 44 +--- .../android/jni/androidnetworkmonitor_jni.h | 88 +------ webrtc/api/android/jni/classreferenceholder.h | 36 +-- webrtc/api/android/jni/jni_helpers.h | 186 +-------------- webrtc/api/test/androidtestinitializer.cc | 4 - webrtc/build/gn_isolate_map.pyl | 2 +- webrtc/examples/BUILD.gn | 8 +- webrtc/modules/BUILD.gn | 2 +- webrtc/sdk/android/BUILD.gn | 221 ++++++++++++++++++ webrtc/{api => sdk}/android/PRESUBMIT.py | 0 webrtc/{api => sdk}/android/README | 0 .../android/api}/org/webrtc/AudioSource.java | 0 .../android/api}/org/webrtc/AudioTrack.java | 0 .../CallSessionFileRotatingLogSink.java | 0 .../api}/org/webrtc/Camera1Capturer.java | 0 .../api}/org/webrtc/Camera1Enumerator.java | 0 .../api}/org/webrtc/Camera1Session.java | 0 .../api}/org/webrtc/Camera2Capturer.java | 0 .../api}/org/webrtc/Camera2Enumerator.java | 0 .../api}/org/webrtc/Camera2Session.java | 0 .../api}/org/webrtc/CameraCapturer.java | 0 .../org/webrtc/CameraEnumerationAndroid.java | 0 .../api}/org/webrtc/CameraEnumerator.java | 0 .../api}/org/webrtc/CameraSession.java | 0 .../api}/org/webrtc/CameraVideoCapturer.java | 0 .../android/api}/org/webrtc/DataChannel.java | 0 .../android/api}/org/webrtc/EglBase.java | 0 .../android/api}/org/webrtc/EglBase10.java | 0 .../android/api}/org/webrtc/EglBase14.java | 0 .../android/api}/org/webrtc/EglRenderer.java | 0 .../api}/org/webrtc/FileVideoCapturer.java | 0 .../android/api}/org/webrtc/GlRectDrawer.java | 0 .../android/api}/org/webrtc/GlShader.java | 0 .../api}/org/webrtc/GlTextureFrameBuffer.java | 0 .../android/api}/org/webrtc/GlUtil.java | 0 .../android/api}/org/webrtc/Histogram.java | 0 .../android/api}/org/webrtc/IceCandidate.java | 0 .../org/webrtc/MediaCodecVideoDecoder.java | 0 .../org/webrtc/MediaCodecVideoEncoder.java | 0 .../api}/org/webrtc/MediaConstraints.java | 0 .../android/api}/org/webrtc/MediaSource.java | 0 .../android/api}/org/webrtc/MediaStream.java | 0 .../api}/org/webrtc/MediaStreamTrack.java | 0 .../android/api}/org/webrtc/Metrics.java | 0 .../api}/org/webrtc/NetworkMonitor.java | 0 .../org/webrtc/NetworkMonitorAutoDetect.java | 0 .../src => sdk/android/api}/org/webrtc/OWNERS | 0 .../api}/org/webrtc/PeerConnection.java | 0 .../org/webrtc/PeerConnectionFactory.java | 0 .../api}/org/webrtc/RendererCommon.java | 0 .../api}/org/webrtc/RtpParameters.java | 0 .../android/api}/org/webrtc/RtpReceiver.java | 0 .../android/api}/org/webrtc/RtpSender.java | 0 .../org/webrtc/ScreenCapturerAndroid.java | 0 .../android/api}/org/webrtc/SdpObserver.java | 0 .../api}/org/webrtc/SessionDescription.java | 0 .../api}/org/webrtc/StatsObserver.java | 0 .../android/api}/org/webrtc/StatsReport.java | 0 .../api}/org/webrtc/SurfaceTextureHelper.java | 0 .../api}/org/webrtc/SurfaceViewRenderer.java | 0 .../api}/org/webrtc/VideoCapturer.java | 0 .../api}/org/webrtc/VideoCapturerAndroid.java | 0 .../api}/org/webrtc/VideoFileRenderer.java | 0 .../api}/org/webrtc/VideoRenderer.java | 0 .../api}/org/webrtc/VideoRendererGui.java | 0 .../android/api}/org/webrtc/VideoSource.java | 0 .../android/api}/org/webrtc/VideoTrack.java | 0 .../android/api}/org/webrtc/YuvConverter.java | 0 .../sdk/android/instrumentationtests/BUILD.gn | 51 ---- webrtc/sdk/android/src/jni/DEPS | 5 + .../android => sdk/android/src}/jni/OWNERS | 0 .../android/src}/jni/androidhistogram_jni.cc | 6 +- .../src}/jni/androidmediacodeccommon.h | 10 +- .../src}/jni/androidmediadecoder_jni.cc | 10 +- .../android/src/jni/androidmediadecoder_jni.h | 41 ++++ .../src}/jni/androidmediaencoder_jni.cc | 8 +- .../android/src/jni/androidmediaencoder_jni.h | 49 ++++ .../android/src}/jni/androidmetrics_jni.cc | 4 +- .../src}/jni/androidnetworkmonitor_jni.cc | 6 +- .../src/jni/androidnetworkmonitor_jni.h | 93 ++++++++ .../src}/jni/androidvideotracksource.cc | 2 +- .../src}/jni/androidvideotracksource.h | 4 +- .../src}/jni/androidvideotracksource_jni.cc | 4 +- .../android/src}/jni/classreferenceholder.cc | 4 +- .../android/src/jni/classreferenceholder.h | 41 ++++ .../android/src}/jni/jni_helpers.cc | 4 +- webrtc/sdk/android/src/jni/jni_helpers.h | 191 +++++++++++++++ .../android/src}/jni/jni_onload.cc | 4 +- .../android/src}/jni/native_handle_impl.cc | 4 +- .../android/src}/jni/native_handle_impl.h | 6 +- .../android/src}/jni/peerconnection_jni.cc | 14 +- .../src}/jni/surfacetexturehelper_jni.cc | 4 +- .../src}/jni/surfacetexturehelper_jni.h | 10 +- 98 files changed, 721 insertions(+), 684 deletions(-) delete mode 100644 webrtc/api/android/OWNERS create mode 100644 webrtc/api/android/jni/DEPS create mode 100644 webrtc/sdk/android/BUILD.gn rename webrtc/{api => sdk}/android/PRESUBMIT.py (100%) rename webrtc/{api => sdk}/android/README (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/AudioSource.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/AudioTrack.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/CallSessionFileRotatingLogSink.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Camera1Capturer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Camera1Enumerator.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Camera1Session.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Camera2Capturer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Camera2Enumerator.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Camera2Session.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/CameraCapturer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/CameraEnumerationAndroid.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/CameraEnumerator.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/CameraSession.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/CameraVideoCapturer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/DataChannel.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/EglBase.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/EglBase10.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/EglBase14.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/EglRenderer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/FileVideoCapturer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/GlRectDrawer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/GlShader.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/GlTextureFrameBuffer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/GlUtil.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Histogram.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/IceCandidate.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/MediaCodecVideoDecoder.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/MediaCodecVideoEncoder.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/MediaConstraints.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/MediaSource.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/MediaStream.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/MediaStreamTrack.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/Metrics.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/NetworkMonitor.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/NetworkMonitorAutoDetect.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/OWNERS (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/PeerConnection.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/PeerConnectionFactory.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/RendererCommon.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/RtpParameters.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/RtpReceiver.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/RtpSender.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/ScreenCapturerAndroid.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/SdpObserver.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/SessionDescription.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/StatsObserver.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/StatsReport.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/SurfaceTextureHelper.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/SurfaceViewRenderer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoCapturer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoCapturerAndroid.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoFileRenderer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoRenderer.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoRendererGui.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoSource.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/VideoTrack.java (100%) rename webrtc/{api/android/java/src => sdk/android/api}/org/webrtc/YuvConverter.java (100%) delete mode 100644 webrtc/sdk/android/instrumentationtests/BUILD.gn create mode 100644 webrtc/sdk/android/src/jni/DEPS rename webrtc/{api/android => sdk/android/src}/jni/OWNERS (100%) rename webrtc/{api/android => sdk/android/src}/jni/androidhistogram_jni.cc (88%) rename webrtc/{api/android => sdk/android/src}/jni/androidmediacodeccommon.h (92%) rename webrtc/{api/android => sdk/android/src}/jni/androidmediadecoder_jni.cc (99%) create mode 100644 webrtc/sdk/android/src/jni/androidmediadecoder_jni.h rename webrtc/{api/android => sdk/android/src}/jni/androidmediaencoder_jni.cc (99%) create mode 100644 webrtc/sdk/android/src/jni/androidmediaencoder_jni.h rename webrtc/{api/android => sdk/android/src}/jni/androidmetrics_jni.cc (95%) rename webrtc/{api/android => sdk/android/src}/jni/androidnetworkmonitor_jni.cc (98%) create mode 100644 webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h rename webrtc/{api/android => sdk/android/src}/jni/androidvideotracksource.cc (98%) rename webrtc/{api/android => sdk/android/src}/jni/androidvideotracksource.h (95%) rename webrtc/{api/android => sdk/android/src}/jni/androidvideotracksource_jni.cc (96%) rename webrtc/{api/android => sdk/android/src}/jni/classreferenceholder.cc (97%) create mode 100644 webrtc/sdk/android/src/jni/classreferenceholder.h rename webrtc/{api/android => sdk/android/src}/jni/jni_helpers.cc (99%) create mode 100644 webrtc/sdk/android/src/jni/jni_helpers.h rename webrtc/{api/android => sdk/android/src}/jni/jni_onload.cc (90%) rename webrtc/{api/android => sdk/android/src}/jni/native_handle_impl.cc (98%) rename webrtc/{api/android => sdk/android/src}/jni/native_handle_impl.h (93%) rename webrtc/{api/android => sdk/android/src}/jni/peerconnection_jni.cc (99%) rename webrtc/{api/android => sdk/android/src}/jni/surfacetexturehelper_jni.cc (95%) rename webrtc/{api/android => sdk/android/src}/jni/surfacetexturehelper_jni.h (88%) diff --git a/webrtc/BUILD.gn b/webrtc/BUILD.gn index 5e7226be4b..62f6a73009 100644 --- a/webrtc/BUILD.gn +++ b/webrtc/BUILD.gn @@ -309,7 +309,7 @@ if (!build_with_chromium) { if (is_android) { deps += [ ":android_junit_tests", - "//webrtc/sdk/android/instrumentationtests", + "//webrtc/sdk/android:libjingle_peerconnection_android_unittest", ] } else { deps += [ "modules/video_capture:video_capture_tests" ] @@ -712,8 +712,8 @@ if (rtc_include_tests) { deps = [ "//base:base_java_test_support", - "//webrtc/api:libjingle_peerconnection_java", "//webrtc/examples:AppRTCMobile_javalib", + "//webrtc/sdk/android:libjingle_peerconnection_java", ] } } diff --git a/webrtc/api/BUILD.gn b/webrtc/api/BUILD.gn index b2f28ab4e2..20cf3fa2b6 100644 --- a/webrtc/api/BUILD.gn +++ b/webrtc/api/BUILD.gn @@ -16,12 +16,6 @@ group("api") { public_deps = [ ":libjingle_peerconnection", ] - if (is_android && !build_with_chromium) { - public_deps += [ - ":libjingle_peerconnection_java", - ":libjingle_peerconnection_so", - ] - } } rtc_source_set("call_api") { @@ -155,191 +149,6 @@ rtc_static_library("libjingle_peerconnection") { } } -# Exclude the targets below from the Chromium build since they cannot be built -# due to incompability with Chromium's logging implementation. -if (is_android && !build_with_chromium) { - config("libjingle_peerconnection_jni_warnings_config") { - # The warnings below are enabled by default. Since GN orders compiler flags - # for a target before flags from configs, the only way to disable such - # warnings is by having them in a separate config, loaded from the target. - if (!is_win) { - cflags = [ - "-Wno-sign-compare", - "-Wno-unused-variable", - ] - } - } - - rtc_static_library("libjingle_peerconnection_jni") { - sources = [ - "android/jni/androidhistogram_jni.cc", - "android/jni/androidmediacodeccommon.h", - "android/jni/androidmediadecoder_jni.cc", - "android/jni/androidmediadecoder_jni.h", - "android/jni/androidmediaencoder_jni.cc", - "android/jni/androidmediaencoder_jni.h", - "android/jni/androidnetworkmonitor_jni.cc", - "android/jni/androidnetworkmonitor_jni.h", - "android/jni/androidvideotracksource.cc", - "android/jni/androidvideotracksource.h", - "android/jni/androidvideotracksource_jni.cc", - "android/jni/classreferenceholder.cc", - "android/jni/classreferenceholder.h", - "android/jni/jni_helpers.cc", - "android/jni/jni_helpers.h", - "android/jni/native_handle_impl.cc", - "android/jni/native_handle_impl.h", - "android/jni/peerconnection_jni.cc", - "android/jni/surfacetexturehelper_jni.cc", - "android/jni/surfacetexturehelper_jni.h", - ] - - configs += [ ":libjingle_peerconnection_jni_warnings_config" ] - - if (!build_with_chromium && is_clang) { - # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). - suppressed_configs += [ - "//build/config/clang:extra_warnings", - "//build/config/clang:find_bad_constructs", - ] - } - - # TODO(jschuh): Bug 1348: fix this warning. - configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] - - if (is_win) { - cflags += [ - "/wd4245", # conversion from "int" to "size_t", signed/unsigned mismatch. - "/wd4389", # signed/unsigned mismatch. - ] - } - - deps = [ - ":libjingle_peerconnection", - ] - - if (rtc_build_libyuv) { - deps += [ "$rtc_libyuv_dir" ] - public_deps = [ - "$rtc_libyuv_dir", - ] - } else { - # Need to add a directory normally exported by libyuv. - include_dirs = [ "$rtc_libyuv_dir/include" ] - } - } - - rtc_static_library("libjingle_peerconnection_metrics_default_jni") { - sources = [ - "android/jni/androidmetrics_jni.cc", - ] - - configs += [ ":libjingle_peerconnection_jni_warnings_config" ] - - deps = [ - ":libjingle_peerconnection", - "../system_wrappers:field_trial_default", - "../system_wrappers:metrics_default", - ] - } - - rtc_shared_library("libjingle_peerconnection_so") { - sources = [ - "android/jni/jni_onload.cc", - ] - - suppressed_configs += [ "//build/config/android:hide_native_jni_exports" ] - - deps = [ - ":libjingle_peerconnection", - ":libjingle_peerconnection_jni", - ":libjingle_peerconnection_metrics_default_jni", - ] - output_extension = "so" - } -} - -# Classes that don't require jni can be used in Chromium. -if (is_android) { - android_library("libjingle_peerconnection_java") { - java_files = [ - "../modules/audio_device/android/java/src/org/webrtc/voiceengine/BuildInfo.java", - "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java", - "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioManager.java", - "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java", - "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java", - "../modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java", - "android/java/src/org/webrtc/AudioSource.java", - "android/java/src/org/webrtc/AudioTrack.java", - "android/java/src/org/webrtc/CallSessionFileRotatingLogSink.java", - "android/java/src/org/webrtc/Camera1Capturer.java", - "android/java/src/org/webrtc/Camera1Enumerator.java", - "android/java/src/org/webrtc/Camera1Session.java", - "android/java/src/org/webrtc/Camera2Capturer.java", - "android/java/src/org/webrtc/Camera2Enumerator.java", - "android/java/src/org/webrtc/Camera2Session.java", - "android/java/src/org/webrtc/CameraCapturer.java", - "android/java/src/org/webrtc/CameraEnumerationAndroid.java", - "android/java/src/org/webrtc/CameraEnumerator.java", - "android/java/src/org/webrtc/CameraSession.java", - "android/java/src/org/webrtc/CameraVideoCapturer.java", - "android/java/src/org/webrtc/DataChannel.java", - "android/java/src/org/webrtc/EglBase.java", - "android/java/src/org/webrtc/EglBase10.java", - "android/java/src/org/webrtc/EglBase14.java", - "android/java/src/org/webrtc/EglRenderer.java", - "android/java/src/org/webrtc/FileVideoCapturer.java", - "android/java/src/org/webrtc/GlRectDrawer.java", - "android/java/src/org/webrtc/GlShader.java", - "android/java/src/org/webrtc/GlTextureFrameBuffer.java", - "android/java/src/org/webrtc/GlUtil.java", - "android/java/src/org/webrtc/Histogram.java", - "android/java/src/org/webrtc/IceCandidate.java", - "android/java/src/org/webrtc/MediaCodecVideoDecoder.java", - "android/java/src/org/webrtc/MediaCodecVideoEncoder.java", - "android/java/src/org/webrtc/MediaConstraints.java", - "android/java/src/org/webrtc/MediaSource.java", - "android/java/src/org/webrtc/MediaStream.java", - "android/java/src/org/webrtc/MediaStreamTrack.java", - "android/java/src/org/webrtc/NetworkMonitor.java", - "android/java/src/org/webrtc/NetworkMonitorAutoDetect.java", - "android/java/src/org/webrtc/PeerConnection.java", - "android/java/src/org/webrtc/PeerConnectionFactory.java", - "android/java/src/org/webrtc/RendererCommon.java", - "android/java/src/org/webrtc/RtpParameters.java", - "android/java/src/org/webrtc/RtpReceiver.java", - "android/java/src/org/webrtc/RtpSender.java", - "android/java/src/org/webrtc/ScreenCapturerAndroid.java", - "android/java/src/org/webrtc/SdpObserver.java", - "android/java/src/org/webrtc/SessionDescription.java", - "android/java/src/org/webrtc/StatsObserver.java", - "android/java/src/org/webrtc/StatsReport.java", - "android/java/src/org/webrtc/SurfaceTextureHelper.java", - "android/java/src/org/webrtc/SurfaceViewRenderer.java", - "android/java/src/org/webrtc/VideoCapturer.java", - "android/java/src/org/webrtc/VideoCapturerAndroid.java", - "android/java/src/org/webrtc/VideoFileRenderer.java", - "android/java/src/org/webrtc/VideoRenderer.java", - "android/java/src/org/webrtc/VideoRendererGui.java", - "android/java/src/org/webrtc/VideoSource.java", - "android/java/src/org/webrtc/VideoTrack.java", - "android/java/src/org/webrtc/YuvConverter.java", - ] - - deps = [ - "../base:base_java", - ] - } - - android_library("libjingle_peerconnection_metrics_default_java") { - java_files = [ "android/java/src/org/webrtc/Metrics.java" ] - - deps = [ - "../base:base_java", - ] - } -} - rtc_source_set("rtc_stats_api") { cflags = [] sources = [ @@ -491,9 +300,9 @@ if (rtc_include_tests) { "test/androidtestinitializer.h", ] deps += [ - ":libjingle_peerconnection_java", - ":libjingle_peerconnection_jni", "//testing/android/native_test:native_test_support", + "//webrtc/sdk/android:libjingle_peerconnection_java", + "//webrtc/sdk/android:libjingle_peerconnection_jni", ] } diff --git a/webrtc/api/android/OWNERS b/webrtc/api/android/OWNERS deleted file mode 100644 index 4d31ffb663..0000000000 --- a/webrtc/api/android/OWNERS +++ /dev/null @@ -1 +0,0 @@ -magjed@webrtc.org diff --git a/webrtc/api/android/jni/DEPS b/webrtc/api/android/jni/DEPS new file mode 100644 index 0000000000..0b7026207b --- /dev/null +++ b/webrtc/api/android/jni/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+webrtc/sdk/android/src/jni", +] diff --git a/webrtc/api/android/jni/androidmediadecoder_jni.h b/webrtc/api/android/jni/androidmediadecoder_jni.h index f8e8fa6abd..cdd843ce9e 100644 --- a/webrtc/api/android/jni/androidmediadecoder_jni.h +++ b/webrtc/api/android/jni/androidmediadecoder_jni.h @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source @@ -7,35 +7,5 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ - -#ifndef WEBRTC_API_JAVA_JNI_ANDROIDMEDIADECODER_JNI_H_ -#define WEBRTC_API_JAVA_JNI_ANDROIDMEDIADECODER_JNI_H_ - -#include "webrtc/api/android/jni/jni_helpers.h" -#include "webrtc/media/engine/webrtcvideodecoderfactory.h" - -namespace webrtc_jni { - -// Implementation of Android MediaCodec based decoder factory. -class MediaCodecVideoDecoderFactory - : public cricket::WebRtcVideoDecoderFactory { - public: - MediaCodecVideoDecoderFactory(); - virtual ~MediaCodecVideoDecoderFactory(); - - void SetEGLContext(JNIEnv* jni, jobject render_egl_context); - - // WebRtcVideoDecoderFactory implementation. - webrtc::VideoDecoder* CreateVideoDecoder(webrtc::VideoCodecType type) - override; - - void DestroyVideoDecoder(webrtc::VideoDecoder* decoder) override; - - private: - jobject egl_context_; - std::vector supported_codec_types_; -}; - -} // namespace webrtc_jni - -#endif // WEBRTC_API_JAVA_JNI_ANDROIDMEDIADECODER_JNI_H_ +// TODO(magjed): Update external dependencies and remove this. +#include "webrtc/sdk/android/src/jni/androidmediadecoder_jni.h" diff --git a/webrtc/api/android/jni/androidmediaencoder_jni.h b/webrtc/api/android/jni/androidmediaencoder_jni.h index 74442ddfbc..9680ca8c3b 100644 --- a/webrtc/api/android/jni/androidmediaencoder_jni.h +++ b/webrtc/api/android/jni/androidmediaencoder_jni.h @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source @@ -7,43 +7,5 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ - -#ifndef WEBRTC_API_JAVA_JNI_ANDROIDMEDIAENCODER_JNI_H_ -#define WEBRTC_API_JAVA_JNI_ANDROIDMEDIAENCODER_JNI_H_ - -#include - -#include "webrtc/api/android/jni/jni_helpers.h" -#include "webrtc/media/engine/webrtcvideoencoderfactory.h" - -namespace webrtc_jni { - -// Implementation of Android MediaCodec based encoder factory. -class MediaCodecVideoEncoderFactory - : public cricket::WebRtcVideoEncoderFactory { - public: - MediaCodecVideoEncoderFactory(); - virtual ~MediaCodecVideoEncoderFactory(); - - void SetEGLContext(JNIEnv* jni, jobject egl_context); - - // WebRtcVideoEncoderFactory implementation. - webrtc::VideoEncoder* CreateVideoEncoder( - const cricket::VideoCodec& codec) override; - const std::vector& supported_codecs() const override; - void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) override; - - private: - // Disable overloaded virtual function warning. TODO(magjed): Remove once - // http://crbug/webrtc/6402 is fixed. - using cricket::WebRtcVideoEncoderFactory::CreateVideoEncoder; - - jobject egl_context_; - - // Empty if platform support is lacking, const after ctor returns. - std::vector supported_codecs_; -}; - -} // namespace webrtc_jni - -#endif // WEBRTC_API_JAVA_JNI_ANDROIDMEDIAENCODER_JNI_H_ +// TODO(magjed): Update external dependencies and remove this. +#include "webrtc/sdk/android/src/jni/androidmediaencoder_jni.h" diff --git a/webrtc/api/android/jni/androidnetworkmonitor_jni.h b/webrtc/api/android/jni/androidnetworkmonitor_jni.h index 3ce6ff4be8..0836972a8b 100644 --- a/webrtc/api/android/jni/androidnetworkmonitor_jni.h +++ b/webrtc/api/android/jni/androidnetworkmonitor_jni.h @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source @@ -7,87 +7,5 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ - -#ifndef WEBRTC_API_JAVA_JNI_ANDROIDNETWORKMONITOR_JNI_H_ -#define WEBRTC_API_JAVA_JNI_ANDROIDNETWORKMONITOR_JNI_H_ - -#include "webrtc/base/networkmonitor.h" - -#include - -#include "webrtc/api/android/jni/jni_helpers.h" -#include "webrtc/base/basictypes.h" -#include "webrtc/base/thread_checker.h" - -namespace webrtc_jni { - -typedef int64_t NetworkHandle; - -// c++ equivalent of java NetworkMonitorAutoDetect.ConnectionType. -enum NetworkType { - NETWORK_UNKNOWN, - NETWORK_ETHERNET, - NETWORK_WIFI, - NETWORK_4G, - NETWORK_3G, - NETWORK_2G, - NETWORK_UNKNOWN_CELLULAR, - NETWORK_BLUETOOTH, - NETWORK_NONE -}; - -// The information is collected from Android OS so that the native code can get -// the network type and handle (Android network ID) for each interface. -struct NetworkInformation { - std::string interface_name; - NetworkHandle handle; - NetworkType type; - std::vector ip_addresses; - - std::string ToString() const; -}; - -class AndroidNetworkMonitor : public rtc::NetworkMonitorBase, - public rtc::NetworkBinderInterface { - public: - AndroidNetworkMonitor(); - - static void SetAndroidContext(JNIEnv* jni, jobject context); - - void Start() override; - void Stop() override; - - int BindSocketToNetwork(int socket_fd, - const rtc::IPAddress& address) override; - rtc::AdapterType GetAdapterType(const std::string& if_name) override; - void OnNetworkConnected(const NetworkInformation& network_info); - void OnNetworkDisconnected(NetworkHandle network_handle); - void SetNetworkInfos(const std::vector& network_infos); - - private: - static jobject application_context_; - static int android_sdk_int_; - JNIEnv* jni() { return AttachCurrentThreadIfNeeded(); } - - void OnNetworkConnected_w(const NetworkInformation& network_info); - void OnNetworkDisconnected_w(NetworkHandle network_handle); - - ScopedGlobalRef j_network_monitor_class_; - ScopedGlobalRef j_network_monitor_; - rtc::ThreadChecker thread_checker_; - bool started_ = false; - std::map adapter_type_by_name_; - std::map network_handle_by_address_; - std::map network_info_by_handle_; -}; - -class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory { - public: - AndroidNetworkMonitorFactory() {} - - rtc::NetworkMonitorInterface* CreateNetworkMonitor() override; -}; - -} // namespace webrtc_jni - -#endif // WEBRTC_API_JAVA_JNI_ANDROIDNETWORKMONITOR_JNI_H_ +// TODO(magjed): Update external dependencies and remove this. +#include "webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h" diff --git a/webrtc/api/android/jni/classreferenceholder.h b/webrtc/api/android/jni/classreferenceholder.h index 41202780d0..e4a5fded92 100644 --- a/webrtc/api/android/jni/classreferenceholder.h +++ b/webrtc/api/android/jni/classreferenceholder.h @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source @@ -7,35 +7,5 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ - -// Android's FindClass() is trickier than usual because the app-specific -// ClassLoader is not consulted when there is no app-specific frame on the -// stack. Consequently, we only look up all classes once in app/webrtc. -// http://developer.android.com/training/articles/perf-jni.html#faq_FindClass - -#ifndef WEBRTC_API_JAVA_JNI_CLASSREFERENCEHOLDER_H_ -#define WEBRTC_API_JAVA_JNI_CLASSREFERENCEHOLDER_H_ - -#include -#include -#include - -namespace webrtc_jni { - -// LoadGlobalClassReferenceHolder must be called in JNI_OnLoad. -void LoadGlobalClassReferenceHolder(); -// FreeGlobalClassReferenceHolder must be called in JNI_UnLoad. -void FreeGlobalClassReferenceHolder(); - -// Returns a global reference guaranteed to be valid for the lifetime of the -// process. -jclass FindClass(JNIEnv* jni, const char* name); - -// Convenience macro defining JNI-accessible methods in the org.webrtc package. -// Eliminates unnecessary boilerplate and line-wraps, reducing visual clutter. -#define JOW(rettype, name) extern "C" rettype JNIEXPORT JNICALL \ - Java_org_webrtc_##name - -} // namespace webrtc_jni - -#endif // WEBRTC_API_JAVA_JNI_CLASSREFERENCEHOLDER_H_ +// TODO(magjed): Update external dependencies and remove this. +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" diff --git a/webrtc/api/android/jni/jni_helpers.h b/webrtc/api/android/jni/jni_helpers.h index 2832df14b3..c6da1934ad 100644 --- a/webrtc/api/android/jni/jni_helpers.h +++ b/webrtc/api/android/jni/jni_helpers.h @@ -1,5 +1,5 @@ /* - * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * Copyright 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source @@ -7,185 +7,5 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ - -// This file contain convenience functions and classes for JNI. -// Before using any of the methods, InitGlobalJniVariables must be called. - -#ifndef WEBRTC_API_JAVA_JNI_JNI_HELPERS_H_ -#define WEBRTC_API_JAVA_JNI_JNI_HELPERS_H_ - -#include -#include - -#include "webrtc/base/constructormagic.h" -#include "webrtc/base/checks.h" -#include "webrtc/base/thread_checker.h" - -// Abort the process if |jni| has a Java exception pending. -// This macros uses the comma operator to execute ExceptionDescribe -// and ExceptionClear ignoring their return values and sending "" -// to the error stream. -#define CHECK_EXCEPTION(jni) \ - RTC_CHECK(!jni->ExceptionCheck()) \ - << (jni->ExceptionDescribe(), jni->ExceptionClear(), "") - -// Helper that calls ptr->Release() and aborts the process with a useful -// message if that didn't actually delete *ptr because of extra refcounts. -#define CHECK_RELEASE(ptr) \ - RTC_CHECK_EQ(0, (ptr)->Release()) << "Unexpected refcount." - -namespace webrtc_jni { - -jint InitGlobalJniVariables(JavaVM *jvm); - -// Return a |JNIEnv*| usable on this thread or NULL if this thread is detached. -JNIEnv* GetEnv(); - -JavaVM *GetJVM(); - -// Return a |JNIEnv*| usable on this thread. Attaches to |g_jvm| if necessary. -JNIEnv* AttachCurrentThreadIfNeeded(); - -// Return a |jlong| that will correctly convert back to |ptr|. This is needed -// because the alternative (of silently passing a 32-bit pointer to a vararg -// function expecting a 64-bit param) picks up garbage in the high 32 bits. -jlong jlongFromPointer(void* ptr); - -// JNIEnv-helper methods that RTC_CHECK success: no Java exception thrown and -// found object/class/method/field is non-null. -jmethodID GetMethodID( - JNIEnv* jni, jclass c, const std::string& name, const char* signature); - -jmethodID GetStaticMethodID( - JNIEnv* jni, jclass c, const char* name, const char* signature); - -jfieldID GetFieldID(JNIEnv* jni, jclass c, const char* name, - const char* signature); - -jclass GetObjectClass(JNIEnv* jni, jobject object); - -// Throws an exception if the object field is null. -jobject GetObjectField(JNIEnv* jni, jobject object, jfieldID id); - -jobject GetNullableObjectField(JNIEnv* jni, jobject object, jfieldID id); - -jstring GetStringField(JNIEnv* jni, jobject object, jfieldID id); - -jlong GetLongField(JNIEnv* jni, jobject object, jfieldID id); - -jint GetIntField(JNIEnv* jni, jobject object, jfieldID id); - -bool GetBooleanField(JNIEnv* jni, jobject object, jfieldID id); - -// Returns true if |obj| == null in Java. -bool IsNull(JNIEnv* jni, jobject obj); - -// Given a UTF-8 encoded |native| string return a new (UTF-16) jstring. -jstring JavaStringFromStdString(JNIEnv* jni, const std::string& native); - -// Given a (UTF-16) jstring return a new UTF-8 native string. -std::string JavaToStdString(JNIEnv* jni, const jstring& j_string); - -// Return the (singleton) Java Enum object corresponding to |index|; -jobject JavaEnumFromIndex(JNIEnv* jni, jclass state_class, - const std::string& state_class_name, int index); - -// Returns the name of a Java enum. -std::string GetJavaEnumName(JNIEnv* jni, - const std::string& className, - jobject j_enum); - -jobject NewGlobalRef(JNIEnv* jni, jobject o); - -void DeleteGlobalRef(JNIEnv* jni, jobject o); - -// Scope Java local references to the lifetime of this object. Use in all C++ -// callbacks (i.e. entry points that don't originate in a Java callstack -// through a "native" method call). -class ScopedLocalRefFrame { - public: - explicit ScopedLocalRefFrame(JNIEnv* jni); - ~ScopedLocalRefFrame(); - - private: - JNIEnv* jni_; -}; - -// Scoped holder for global Java refs. -template // T is jclass, jobject, jintArray, etc. -class ScopedGlobalRef { - public: - ScopedGlobalRef(JNIEnv* jni, T obj) - : obj_(static_cast(jni->NewGlobalRef(obj))) {} - ~ScopedGlobalRef() { - DeleteGlobalRef(AttachCurrentThreadIfNeeded(), obj_); - } - T operator*() const { - return obj_; - } - private: - T obj_; -}; - -// Provides a convenient way to iterate over a Java Iterable using the -// C++ range-for loop. -// E.g. for (jobject value : Iterable(jni, j_iterable)) { ... } -// Note: Since Java iterators cannot be duplicated, the iterator class is not -// copyable to prevent creating multiple C++ iterators that refer to the same -// Java iterator. -class Iterable { - public: - Iterable(JNIEnv* jni, jobject iterable) : jni_(jni), iterable_(iterable) {} - - class Iterator { - public: - // Creates an iterator representing the end of any collection. - Iterator(); - // Creates an iterator pointing to the beginning of the specified - // collection. - Iterator(JNIEnv* jni, jobject iterable); - - // Move constructor - necessary to be able to return iterator types from - // functions. - Iterator(Iterator&& other); - - // Move assignment should not be used. - Iterator& operator=(Iterator&&) = delete; - - // Advances the iterator one step. - Iterator& operator++(); - - // Provides a way to compare the iterator with itself and with the end - // iterator. - // Note: all other comparison results are undefined, just like for C++ input - // iterators. - bool operator==(const Iterator& other); - bool operator!=(const Iterator& other) { return !(*this == other); } - jobject operator*(); - - private: - bool AtEnd() const; - - JNIEnv* jni_ = nullptr; - jobject iterator_ = nullptr; - jobject value_ = nullptr; - jmethodID has_next_id_ = nullptr; - jmethodID next_id_ = nullptr; - rtc::ThreadChecker thread_checker_; - - RTC_DISALLOW_COPY_AND_ASSIGN(Iterator); - }; - - Iterable::Iterator begin() { return Iterable::Iterator(jni_, iterable_); } - Iterable::Iterator end() { return Iterable::Iterator(); } - - private: - JNIEnv* jni_; - jobject iterable_; - - RTC_DISALLOW_COPY_AND_ASSIGN(Iterable); -}; - -} // namespace webrtc_jni - -#endif // WEBRTC_API_JAVA_JNI_JNI_HELPERS_H_ +// TODO(magjed): Update external dependencies and remove this. +#include "webrtc/sdk/android/src/jni/jni_helpers.h" diff --git a/webrtc/api/test/androidtestinitializer.cc b/webrtc/api/test/androidtestinitializer.cc index 2d18ae5857..7c1f5f8046 100644 --- a/webrtc/api/test/androidtestinitializer.cc +++ b/webrtc/api/test/androidtestinitializer.cc @@ -23,8 +23,6 @@ RTC_PUSH_IGNORING_WUNDEF() #include "base/android/jni_android.h" RTC_POP_IGNORING_WUNDEF() -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" #include "webrtc/base/checks.h" #include "webrtc/base/ssladapter.h" #include "webrtc/voice_engine/include/voe_base.h" @@ -45,9 +43,7 @@ void EnsureInitializedOnce() { RTC_CHECK_EQ(0, jni->GetJavaVM(&jvm)); jobject context = ::base::android::GetApplicationContext().obj(); - RTC_CHECK_GE(webrtc_jni::InitGlobalJniVariables(jvm), 0); RTC_CHECK(rtc::InitializeSSL()) << "Failed to InitializeSSL()"; - webrtc_jni::LoadGlobalClassReferenceHolder(); webrtc::VoiceEngine::SetAndroidObjects(jvm, context); } diff --git a/webrtc/build/gn_isolate_map.pyl b/webrtc/build/gn_isolate_map.pyl index 84005040ab..95b9d8e9ea 100644 --- a/webrtc/build/gn_isolate_map.pyl +++ b/webrtc/build/gn_isolate_map.pyl @@ -40,7 +40,7 @@ "type": "console_test_launcher", }, "libjingle_peerconnection_android_unittest": { - "label": "//webrtc/sdk/android/instrumentationtests:libjingle_peerconnection_android_unittest", + "label": "//webrtc/sdk/android:libjingle_peerconnection_android_unittest", "type": "additional_compile_target", }, "modules_tests": { diff --git a/webrtc/examples/BUILD.gn b/webrtc/examples/BUILD.gn index d419d948ac..8d1dcbb3a1 100644 --- a/webrtc/examples/BUILD.gn +++ b/webrtc/examples/BUILD.gn @@ -62,7 +62,7 @@ if (is_android) { "//webrtc/base:base_java", ] - shared_libraries = [ "//webrtc/api:libjingle_peerconnection_so" ] + shared_libraries = [ "//webrtc/sdk/android:libjingle_peerconnection_so" ] } android_library("AppRTCMobile_javalib") { @@ -92,10 +92,10 @@ if (is_android) { deps = [ ":AppRTCMobile_resources", - "//webrtc/api:libjingle_peerconnection_java", - "//webrtc/api:libjingle_peerconnection_metrics_default_java", "//webrtc/base:base_java", "//webrtc/examples/androidapp/third_party/autobanh:autobanh_java", + "//webrtc/sdk/android:libjingle_peerconnection_java", + "//webrtc/sdk/android:libjingle_peerconnection_metrics_default_java", ] } @@ -118,7 +118,7 @@ if (is_android) { deps = [ ":AppRTCMobile_javalib", - "//webrtc/api:libjingle_peerconnection_java", + "//webrtc/sdk/android:libjingle_peerconnection_java", ] data = [ diff --git a/webrtc/modules/BUILD.gn b/webrtc/modules/BUILD.gn index e853ea477c..6471ac4040 100644 --- a/webrtc/modules/BUILD.gn +++ b/webrtc/modules/BUILD.gn @@ -688,7 +688,7 @@ if (rtc_include_tests) { if (is_android) { deps += [ "//testing/android/native_test:native_test_support", - "//webrtc/api:libjingle_peerconnection_java", + "//webrtc/sdk/android:libjingle_peerconnection_java", ] # Need to disable error due to the line in diff --git a/webrtc/sdk/android/BUILD.gn b/webrtc/sdk/android/BUILD.gn new file mode 100644 index 0000000000..174a90e5d3 --- /dev/null +++ b/webrtc/sdk/android/BUILD.gn @@ -0,0 +1,221 @@ +# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +import("//webrtc/build/webrtc.gni") +import("//build/config/android/config.gni") +import("//build/config/android/rules.gni") + +config("libjingle_peerconnection_jni_warnings_config") { + # The warnings below are enabled by default. Since GN orders compiler flags + # for a target before flags from configs, the only way to disable such + # warnings is by having them in a separate config, loaded from the target. + if (!is_win) { + cflags = [ + "-Wno-sign-compare", + "-Wno-unused-variable", + ] + } +} + +rtc_static_library("libjingle_peerconnection_jni") { + sources = [ + "src/jni/androidhistogram_jni.cc", + "src/jni/androidmediacodeccommon.h", + "src/jni/androidmediadecoder_jni.cc", + "src/jni/androidmediadecoder_jni.h", + "src/jni/androidmediaencoder_jni.cc", + "src/jni/androidmediaencoder_jni.h", + "src/jni/androidnetworkmonitor_jni.cc", + "src/jni/androidnetworkmonitor_jni.h", + "src/jni/androidvideotracksource.cc", + "src/jni/androidvideotracksource.h", + "src/jni/androidvideotracksource_jni.cc", + "src/jni/classreferenceholder.cc", + "src/jni/classreferenceholder.h", + "src/jni/jni_helpers.cc", + "src/jni/jni_helpers.h", + "src/jni/native_handle_impl.cc", + "src/jni/native_handle_impl.h", + "src/jni/peerconnection_jni.cc", + "src/jni/surfacetexturehelper_jni.cc", + "src/jni/surfacetexturehelper_jni.h", + ] + + configs += [ ":libjingle_peerconnection_jni_warnings_config" ] + + if (is_clang) { + # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). + suppressed_configs += [ + "//build/config/clang:extra_warnings", + "//build/config/clang:find_bad_constructs", + ] + } + + # TODO(jschuh): Bug 1348: fix this warning. + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] + + if (is_win) { + cflags += [ + "/wd4245", # conversion from "int" to "size_t", signed/unsigned mismatch. + "/wd4389", # signed/unsigned mismatch. + ] + } + + deps = [ + "//webrtc/api:libjingle_peerconnection", + ] + + if (rtc_build_libyuv) { + deps += [ "$rtc_libyuv_dir" ] + public_deps = [ + "$rtc_libyuv_dir", + ] + } else { + # Need to add a directory normally exported by libyuv. + include_dirs = [ "$rtc_libyuv_dir/include" ] + } +} + +rtc_static_library("libjingle_peerconnection_metrics_default_jni") { + sources = [ + "src/jni/androidmetrics_jni.cc", + ] + + configs += [ ":libjingle_peerconnection_jni_warnings_config" ] + + deps = [ + "//webrtc/api:libjingle_peerconnection", + "//webrtc/system_wrappers:field_trial_default", + "//webrtc/system_wrappers:metrics_default", + ] +} + +rtc_shared_library("libjingle_peerconnection_so") { + sources = [ + "src/jni/jni_onload.cc", + ] + + suppressed_configs += [ "//build/config/android:hide_native_jni_exports" ] + + deps = [ + ":libjingle_peerconnection_jni", + ":libjingle_peerconnection_metrics_default_jni", + "//webrtc/api:libjingle_peerconnection", + ] + output_extension = "so" +} + +android_library("libjingle_peerconnection_java") { + java_files = [ + "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/BuildInfo.java", + "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java", + "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioManager.java", + "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java", + "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java", + "//webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java", + "api/org/webrtc/AudioSource.java", + "api/org/webrtc/AudioTrack.java", + "api/org/webrtc/CallSessionFileRotatingLogSink.java", + "api/org/webrtc/Camera1Capturer.java", + "api/org/webrtc/Camera1Enumerator.java", + "api/org/webrtc/Camera1Session.java", + "api/org/webrtc/Camera2Capturer.java", + "api/org/webrtc/Camera2Enumerator.java", + "api/org/webrtc/Camera2Session.java", + "api/org/webrtc/CameraCapturer.java", + "api/org/webrtc/CameraEnumerationAndroid.java", + "api/org/webrtc/CameraEnumerator.java", + "api/org/webrtc/CameraSession.java", + "api/org/webrtc/CameraVideoCapturer.java", + "api/org/webrtc/DataChannel.java", + "api/org/webrtc/EglBase.java", + "api/org/webrtc/EglBase10.java", + "api/org/webrtc/EglBase14.java", + "api/org/webrtc/EglRenderer.java", + "api/org/webrtc/FileVideoCapturer.java", + "api/org/webrtc/GlRectDrawer.java", + "api/org/webrtc/GlShader.java", + "api/org/webrtc/GlTextureFrameBuffer.java", + "api/org/webrtc/GlUtil.java", + "api/org/webrtc/Histogram.java", + "api/org/webrtc/IceCandidate.java", + "api/org/webrtc/MediaCodecVideoDecoder.java", + "api/org/webrtc/MediaCodecVideoEncoder.java", + "api/org/webrtc/MediaConstraints.java", + "api/org/webrtc/MediaSource.java", + "api/org/webrtc/MediaStream.java", + "api/org/webrtc/MediaStreamTrack.java", + "api/org/webrtc/NetworkMonitor.java", + "api/org/webrtc/NetworkMonitorAutoDetect.java", + "api/org/webrtc/PeerConnection.java", + "api/org/webrtc/PeerConnectionFactory.java", + "api/org/webrtc/RendererCommon.java", + "api/org/webrtc/RtpParameters.java", + "api/org/webrtc/RtpReceiver.java", + "api/org/webrtc/RtpSender.java", + "api/org/webrtc/ScreenCapturerAndroid.java", + "api/org/webrtc/SdpObserver.java", + "api/org/webrtc/SessionDescription.java", + "api/org/webrtc/StatsObserver.java", + "api/org/webrtc/StatsReport.java", + "api/org/webrtc/SurfaceTextureHelper.java", + "api/org/webrtc/SurfaceViewRenderer.java", + "api/org/webrtc/VideoCapturer.java", + "api/org/webrtc/VideoCapturerAndroid.java", + "api/org/webrtc/VideoFileRenderer.java", + "api/org/webrtc/VideoRenderer.java", + "api/org/webrtc/VideoRendererGui.java", + "api/org/webrtc/VideoSource.java", + "api/org/webrtc/VideoTrack.java", + "api/org/webrtc/YuvConverter.java", + ] + + deps = [ + "//webrtc/base:base_java", + ] +} + +android_library("libjingle_peerconnection_metrics_default_java") { + java_files = [ "api/org/webrtc/Metrics.java" ] + + deps = [ + "//webrtc/base:base_java", + ] +} + +if (rtc_include_tests) { + instrumentation_test_apk("libjingle_peerconnection_android_unittest") { + apk_name = "libjingle_peerconnection_android_unittest" + android_manifest = "instrumentationtests/AndroidManifest.xml" + + java_files = [ + "instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java", + "instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java", + "instrumentationtests/src/org/webrtc/Camera2CapturerTest.java", + "instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java", + "instrumentationtests/src/org/webrtc/EglRendererTest.java", + "instrumentationtests/src/org/webrtc/GlRectDrawerTest.java", + "instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java", + "instrumentationtests/src/org/webrtc/NetworkMonitorTest.java", + "instrumentationtests/src/org/webrtc/PeerConnectionTest.java", + "instrumentationtests/src/org/webrtc/RendererCommonTest.java", + "instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java", + "instrumentationtests/src/org/webrtc/SurfaceViewRendererOnMeasureTest.java", + "instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java", + ] + + deps = [ + "//base:base_java", + "//webrtc/base:base_java", + "//webrtc/sdk/android:libjingle_peerconnection_java", + "//webrtc/sdk/android:libjingle_peerconnection_metrics_default_java", + ] + + shared_libraries = [ "//webrtc/sdk/android:libjingle_peerconnection_so" ] + } +} diff --git a/webrtc/api/android/PRESUBMIT.py b/webrtc/sdk/android/PRESUBMIT.py similarity index 100% rename from webrtc/api/android/PRESUBMIT.py rename to webrtc/sdk/android/PRESUBMIT.py diff --git a/webrtc/api/android/README b/webrtc/sdk/android/README similarity index 100% rename from webrtc/api/android/README rename to webrtc/sdk/android/README diff --git a/webrtc/api/android/java/src/org/webrtc/AudioSource.java b/webrtc/sdk/android/api/org/webrtc/AudioSource.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/AudioSource.java rename to webrtc/sdk/android/api/org/webrtc/AudioSource.java diff --git a/webrtc/api/android/java/src/org/webrtc/AudioTrack.java b/webrtc/sdk/android/api/org/webrtc/AudioTrack.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/AudioTrack.java rename to webrtc/sdk/android/api/org/webrtc/AudioTrack.java diff --git a/webrtc/api/android/java/src/org/webrtc/CallSessionFileRotatingLogSink.java b/webrtc/sdk/android/api/org/webrtc/CallSessionFileRotatingLogSink.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/CallSessionFileRotatingLogSink.java rename to webrtc/sdk/android/api/org/webrtc/CallSessionFileRotatingLogSink.java diff --git a/webrtc/api/android/java/src/org/webrtc/Camera1Capturer.java b/webrtc/sdk/android/api/org/webrtc/Camera1Capturer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Camera1Capturer.java rename to webrtc/sdk/android/api/org/webrtc/Camera1Capturer.java diff --git a/webrtc/api/android/java/src/org/webrtc/Camera1Enumerator.java b/webrtc/sdk/android/api/org/webrtc/Camera1Enumerator.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Camera1Enumerator.java rename to webrtc/sdk/android/api/org/webrtc/Camera1Enumerator.java diff --git a/webrtc/api/android/java/src/org/webrtc/Camera1Session.java b/webrtc/sdk/android/api/org/webrtc/Camera1Session.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Camera1Session.java rename to webrtc/sdk/android/api/org/webrtc/Camera1Session.java diff --git a/webrtc/api/android/java/src/org/webrtc/Camera2Capturer.java b/webrtc/sdk/android/api/org/webrtc/Camera2Capturer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Camera2Capturer.java rename to webrtc/sdk/android/api/org/webrtc/Camera2Capturer.java diff --git a/webrtc/api/android/java/src/org/webrtc/Camera2Enumerator.java b/webrtc/sdk/android/api/org/webrtc/Camera2Enumerator.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Camera2Enumerator.java rename to webrtc/sdk/android/api/org/webrtc/Camera2Enumerator.java diff --git a/webrtc/api/android/java/src/org/webrtc/Camera2Session.java b/webrtc/sdk/android/api/org/webrtc/Camera2Session.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Camera2Session.java rename to webrtc/sdk/android/api/org/webrtc/Camera2Session.java diff --git a/webrtc/api/android/java/src/org/webrtc/CameraCapturer.java b/webrtc/sdk/android/api/org/webrtc/CameraCapturer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/CameraCapturer.java rename to webrtc/sdk/android/api/org/webrtc/CameraCapturer.java diff --git a/webrtc/api/android/java/src/org/webrtc/CameraEnumerationAndroid.java b/webrtc/sdk/android/api/org/webrtc/CameraEnumerationAndroid.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/CameraEnumerationAndroid.java rename to webrtc/sdk/android/api/org/webrtc/CameraEnumerationAndroid.java diff --git a/webrtc/api/android/java/src/org/webrtc/CameraEnumerator.java b/webrtc/sdk/android/api/org/webrtc/CameraEnumerator.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/CameraEnumerator.java rename to webrtc/sdk/android/api/org/webrtc/CameraEnumerator.java diff --git a/webrtc/api/android/java/src/org/webrtc/CameraSession.java b/webrtc/sdk/android/api/org/webrtc/CameraSession.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/CameraSession.java rename to webrtc/sdk/android/api/org/webrtc/CameraSession.java diff --git a/webrtc/api/android/java/src/org/webrtc/CameraVideoCapturer.java b/webrtc/sdk/android/api/org/webrtc/CameraVideoCapturer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/CameraVideoCapturer.java rename to webrtc/sdk/android/api/org/webrtc/CameraVideoCapturer.java diff --git a/webrtc/api/android/java/src/org/webrtc/DataChannel.java b/webrtc/sdk/android/api/org/webrtc/DataChannel.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/DataChannel.java rename to webrtc/sdk/android/api/org/webrtc/DataChannel.java diff --git a/webrtc/api/android/java/src/org/webrtc/EglBase.java b/webrtc/sdk/android/api/org/webrtc/EglBase.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/EglBase.java rename to webrtc/sdk/android/api/org/webrtc/EglBase.java diff --git a/webrtc/api/android/java/src/org/webrtc/EglBase10.java b/webrtc/sdk/android/api/org/webrtc/EglBase10.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/EglBase10.java rename to webrtc/sdk/android/api/org/webrtc/EglBase10.java diff --git a/webrtc/api/android/java/src/org/webrtc/EglBase14.java b/webrtc/sdk/android/api/org/webrtc/EglBase14.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/EglBase14.java rename to webrtc/sdk/android/api/org/webrtc/EglBase14.java diff --git a/webrtc/api/android/java/src/org/webrtc/EglRenderer.java b/webrtc/sdk/android/api/org/webrtc/EglRenderer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/EglRenderer.java rename to webrtc/sdk/android/api/org/webrtc/EglRenderer.java diff --git a/webrtc/api/android/java/src/org/webrtc/FileVideoCapturer.java b/webrtc/sdk/android/api/org/webrtc/FileVideoCapturer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/FileVideoCapturer.java rename to webrtc/sdk/android/api/org/webrtc/FileVideoCapturer.java diff --git a/webrtc/api/android/java/src/org/webrtc/GlRectDrawer.java b/webrtc/sdk/android/api/org/webrtc/GlRectDrawer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/GlRectDrawer.java rename to webrtc/sdk/android/api/org/webrtc/GlRectDrawer.java diff --git a/webrtc/api/android/java/src/org/webrtc/GlShader.java b/webrtc/sdk/android/api/org/webrtc/GlShader.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/GlShader.java rename to webrtc/sdk/android/api/org/webrtc/GlShader.java diff --git a/webrtc/api/android/java/src/org/webrtc/GlTextureFrameBuffer.java b/webrtc/sdk/android/api/org/webrtc/GlTextureFrameBuffer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/GlTextureFrameBuffer.java rename to webrtc/sdk/android/api/org/webrtc/GlTextureFrameBuffer.java diff --git a/webrtc/api/android/java/src/org/webrtc/GlUtil.java b/webrtc/sdk/android/api/org/webrtc/GlUtil.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/GlUtil.java rename to webrtc/sdk/android/api/org/webrtc/GlUtil.java diff --git a/webrtc/api/android/java/src/org/webrtc/Histogram.java b/webrtc/sdk/android/api/org/webrtc/Histogram.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Histogram.java rename to webrtc/sdk/android/api/org/webrtc/Histogram.java diff --git a/webrtc/api/android/java/src/org/webrtc/IceCandidate.java b/webrtc/sdk/android/api/org/webrtc/IceCandidate.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/IceCandidate.java rename to webrtc/sdk/android/api/org/webrtc/IceCandidate.java diff --git a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java b/webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java rename to webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java diff --git a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoEncoder.java b/webrtc/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/MediaCodecVideoEncoder.java rename to webrtc/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java diff --git a/webrtc/api/android/java/src/org/webrtc/MediaConstraints.java b/webrtc/sdk/android/api/org/webrtc/MediaConstraints.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/MediaConstraints.java rename to webrtc/sdk/android/api/org/webrtc/MediaConstraints.java diff --git a/webrtc/api/android/java/src/org/webrtc/MediaSource.java b/webrtc/sdk/android/api/org/webrtc/MediaSource.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/MediaSource.java rename to webrtc/sdk/android/api/org/webrtc/MediaSource.java diff --git a/webrtc/api/android/java/src/org/webrtc/MediaStream.java b/webrtc/sdk/android/api/org/webrtc/MediaStream.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/MediaStream.java rename to webrtc/sdk/android/api/org/webrtc/MediaStream.java diff --git a/webrtc/api/android/java/src/org/webrtc/MediaStreamTrack.java b/webrtc/sdk/android/api/org/webrtc/MediaStreamTrack.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/MediaStreamTrack.java rename to webrtc/sdk/android/api/org/webrtc/MediaStreamTrack.java diff --git a/webrtc/api/android/java/src/org/webrtc/Metrics.java b/webrtc/sdk/android/api/org/webrtc/Metrics.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/Metrics.java rename to webrtc/sdk/android/api/org/webrtc/Metrics.java diff --git a/webrtc/api/android/java/src/org/webrtc/NetworkMonitor.java b/webrtc/sdk/android/api/org/webrtc/NetworkMonitor.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/NetworkMonitor.java rename to webrtc/sdk/android/api/org/webrtc/NetworkMonitor.java diff --git a/webrtc/api/android/java/src/org/webrtc/NetworkMonitorAutoDetect.java b/webrtc/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/NetworkMonitorAutoDetect.java rename to webrtc/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java diff --git a/webrtc/api/android/java/src/org/webrtc/OWNERS b/webrtc/sdk/android/api/org/webrtc/OWNERS similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/OWNERS rename to webrtc/sdk/android/api/org/webrtc/OWNERS diff --git a/webrtc/api/android/java/src/org/webrtc/PeerConnection.java b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/PeerConnection.java rename to webrtc/sdk/android/api/org/webrtc/PeerConnection.java diff --git a/webrtc/api/android/java/src/org/webrtc/PeerConnectionFactory.java b/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/PeerConnectionFactory.java rename to webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java diff --git a/webrtc/api/android/java/src/org/webrtc/RendererCommon.java b/webrtc/sdk/android/api/org/webrtc/RendererCommon.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/RendererCommon.java rename to webrtc/sdk/android/api/org/webrtc/RendererCommon.java diff --git a/webrtc/api/android/java/src/org/webrtc/RtpParameters.java b/webrtc/sdk/android/api/org/webrtc/RtpParameters.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/RtpParameters.java rename to webrtc/sdk/android/api/org/webrtc/RtpParameters.java diff --git a/webrtc/api/android/java/src/org/webrtc/RtpReceiver.java b/webrtc/sdk/android/api/org/webrtc/RtpReceiver.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/RtpReceiver.java rename to webrtc/sdk/android/api/org/webrtc/RtpReceiver.java diff --git a/webrtc/api/android/java/src/org/webrtc/RtpSender.java b/webrtc/sdk/android/api/org/webrtc/RtpSender.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/RtpSender.java rename to webrtc/sdk/android/api/org/webrtc/RtpSender.java diff --git a/webrtc/api/android/java/src/org/webrtc/ScreenCapturerAndroid.java b/webrtc/sdk/android/api/org/webrtc/ScreenCapturerAndroid.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/ScreenCapturerAndroid.java rename to webrtc/sdk/android/api/org/webrtc/ScreenCapturerAndroid.java diff --git a/webrtc/api/android/java/src/org/webrtc/SdpObserver.java b/webrtc/sdk/android/api/org/webrtc/SdpObserver.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/SdpObserver.java rename to webrtc/sdk/android/api/org/webrtc/SdpObserver.java diff --git a/webrtc/api/android/java/src/org/webrtc/SessionDescription.java b/webrtc/sdk/android/api/org/webrtc/SessionDescription.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/SessionDescription.java rename to webrtc/sdk/android/api/org/webrtc/SessionDescription.java diff --git a/webrtc/api/android/java/src/org/webrtc/StatsObserver.java b/webrtc/sdk/android/api/org/webrtc/StatsObserver.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/StatsObserver.java rename to webrtc/sdk/android/api/org/webrtc/StatsObserver.java diff --git a/webrtc/api/android/java/src/org/webrtc/StatsReport.java b/webrtc/sdk/android/api/org/webrtc/StatsReport.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/StatsReport.java rename to webrtc/sdk/android/api/org/webrtc/StatsReport.java diff --git a/webrtc/api/android/java/src/org/webrtc/SurfaceTextureHelper.java b/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/SurfaceTextureHelper.java rename to webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java diff --git a/webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java b/webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java rename to webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoCapturer.java b/webrtc/sdk/android/api/org/webrtc/VideoCapturer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoCapturer.java rename to webrtc/sdk/android/api/org/webrtc/VideoCapturer.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoCapturerAndroid.java b/webrtc/sdk/android/api/org/webrtc/VideoCapturerAndroid.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoCapturerAndroid.java rename to webrtc/sdk/android/api/org/webrtc/VideoCapturerAndroid.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java b/webrtc/sdk/android/api/org/webrtc/VideoFileRenderer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java rename to webrtc/sdk/android/api/org/webrtc/VideoFileRenderer.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoRenderer.java b/webrtc/sdk/android/api/org/webrtc/VideoRenderer.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoRenderer.java rename to webrtc/sdk/android/api/org/webrtc/VideoRenderer.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoRendererGui.java b/webrtc/sdk/android/api/org/webrtc/VideoRendererGui.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoRendererGui.java rename to webrtc/sdk/android/api/org/webrtc/VideoRendererGui.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoSource.java b/webrtc/sdk/android/api/org/webrtc/VideoSource.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoSource.java rename to webrtc/sdk/android/api/org/webrtc/VideoSource.java diff --git a/webrtc/api/android/java/src/org/webrtc/VideoTrack.java b/webrtc/sdk/android/api/org/webrtc/VideoTrack.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/VideoTrack.java rename to webrtc/sdk/android/api/org/webrtc/VideoTrack.java diff --git a/webrtc/api/android/java/src/org/webrtc/YuvConverter.java b/webrtc/sdk/android/api/org/webrtc/YuvConverter.java similarity index 100% rename from webrtc/api/android/java/src/org/webrtc/YuvConverter.java rename to webrtc/sdk/android/api/org/webrtc/YuvConverter.java diff --git a/webrtc/sdk/android/instrumentationtests/BUILD.gn b/webrtc/sdk/android/instrumentationtests/BUILD.gn deleted file mode 100644 index ab193b462e..0000000000 --- a/webrtc/sdk/android/instrumentationtests/BUILD.gn +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. -# -# Use of this source code is governed by a BSD-style license -# that can be found in the LICENSE file in the root of the source -# tree. An additional intellectual property rights grant can be found -# in the file PATENTS. All contributing project authors may -# be found in the AUTHORS file in the root of the source tree. - -import("//build/config/android/config.gni") -import("//build/config/android/rules.gni") -import("//webrtc/build/webrtc.gni") - -group("instrumentationtests") { - # This target shall build all targets in instrumentationtests. - testonly = true - public_deps = [] - - public_deps += [ ":libjingle_peerconnection_android_unittest" ] -} - -if (rtc_include_tests) { - instrumentation_test_apk("libjingle_peerconnection_android_unittest") { - apk_name = "libjingle_peerconnection_android_unittest" - android_manifest = "AndroidManifest.xml" - - java_files = [ - "src/org/webrtc/Camera1CapturerUsingByteBufferTest.java", - "src/org/webrtc/Camera1CapturerUsingTextureTest.java", - "src/org/webrtc/Camera2CapturerTest.java", - "src/org/webrtc/CameraVideoCapturerTestFixtures.java", - "src/org/webrtc/EglRendererTest.java", - "src/org/webrtc/GlRectDrawerTest.java", - "src/org/webrtc/MediaCodecVideoEncoderTest.java", - "src/org/webrtc/NetworkMonitorTest.java", - "src/org/webrtc/PeerConnectionTest.java", - "src/org/webrtc/RendererCommonTest.java", - "src/org/webrtc/SurfaceTextureHelperTest.java", - "src/org/webrtc/SurfaceViewRendererOnMeasureTest.java", - "src/org/webrtc/WebRtcJniBootTest.java", - ] - - deps = [ - "../../../api:libjingle_peerconnection_java", - "../../../api:libjingle_peerconnection_metrics_default_java", - "../../../base:base_java", - "//base:base_java", - ] - - shared_libraries = [ "../../../api:libjingle_peerconnection_so" ] - } -} diff --git a/webrtc/sdk/android/src/jni/DEPS b/webrtc/sdk/android/src/jni/DEPS new file mode 100644 index 0000000000..e803553c71 --- /dev/null +++ b/webrtc/sdk/android/src/jni/DEPS @@ -0,0 +1,5 @@ +include_rules = [ + "+third_party/libyuv", + "+webrtc/common_video/libyuv/include/webrtc_libyuv.h", + "+webrtc/voice_engine/include/voe_base.h", +] \ No newline at end of file diff --git a/webrtc/api/android/jni/OWNERS b/webrtc/sdk/android/src/jni/OWNERS similarity index 100% rename from webrtc/api/android/jni/OWNERS rename to webrtc/sdk/android/src/jni/OWNERS diff --git a/webrtc/api/android/jni/androidhistogram_jni.cc b/webrtc/sdk/android/src/jni/androidhistogram_jni.cc similarity index 88% rename from webrtc/api/android/jni/androidhistogram_jni.cc rename to webrtc/sdk/android/src/jni/androidhistogram_jni.cc index 9ccd2b78ec..74ddcfbb58 100644 --- a/webrtc/api/android/jni/androidhistogram_jni.cc +++ b/webrtc/sdk/android/src/jni/androidhistogram_jni.cc @@ -11,9 +11,9 @@ #include #include -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" -#include "webrtc/api/android/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" #include "webrtc/system_wrappers/include/metrics.h" // Enables collection of native histograms and creating them. diff --git a/webrtc/api/android/jni/androidmediacodeccommon.h b/webrtc/sdk/android/src/jni/androidmediacodeccommon.h similarity index 92% rename from webrtc/api/android/jni/androidmediacodeccommon.h rename to webrtc/sdk/android/src/jni/androidmediacodeccommon.h index a7c5eaa03d..9f8e960336 100644 --- a/webrtc/api/android/jni/androidmediacodeccommon.h +++ b/webrtc/sdk/android/src/jni/androidmediacodeccommon.h @@ -8,15 +8,15 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_API_JAVA_JNI_ANDROIDMEDIACODECCOMMON_H_ -#define WEBRTC_API_JAVA_JNI_ANDROIDMEDIACODECCOMMON_H_ +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIACODECCOMMON_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIACODECCOMMON_H_ #include #include #include "webrtc/base/thread.h" -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" #include "webrtc/base/logging.h" #include "webrtc/base/thread.h" @@ -94,4 +94,4 @@ static inline bool CheckException(JNIEnv* jni) { } // namespace webrtc_jni -#endif // WEBRTC_API_JAVA_JNI_ANDROIDMEDIACODECCOMMON_H_ +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIACODECCOMMON_H_ diff --git a/webrtc/api/android/jni/androidmediadecoder_jni.cc b/webrtc/sdk/android/src/jni/androidmediadecoder_jni.cc similarity index 99% rename from webrtc/api/android/jni/androidmediadecoder_jni.cc rename to webrtc/sdk/android/src/jni/androidmediadecoder_jni.cc index 96c0fc2f7c..c89f902a62 100644 --- a/webrtc/api/android/jni/androidmediadecoder_jni.cc +++ b/webrtc/sdk/android/src/jni/androidmediadecoder_jni.cc @@ -14,15 +14,15 @@ // NOTICE: androidmediadecoder_jni.h must be included before // androidmediacodeccommon.h to avoid build errors. -#include "webrtc/api/android/jni/androidmediadecoder_jni.h" +#include "webrtc/sdk/android/src/jni/androidmediadecoder_jni.h" #include "third_party/libyuv/include/libyuv/convert.h" #include "third_party/libyuv/include/libyuv/convert_from.h" #include "third_party/libyuv/include/libyuv/video_common.h" -#include "webrtc/api/android/jni/androidmediacodeccommon.h" -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/native_handle_impl.h" -#include "webrtc/api/android/jni/surfacetexturehelper_jni.h" +#include "webrtc/sdk/android/src/jni/androidmediacodeccommon.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h" #include "webrtc/base/bind.h" #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" diff --git a/webrtc/sdk/android/src/jni/androidmediadecoder_jni.h b/webrtc/sdk/android/src/jni/androidmediadecoder_jni.h new file mode 100644 index 0000000000..be536fae56 --- /dev/null +++ b/webrtc/sdk/android/src/jni/androidmediadecoder_jni.h @@ -0,0 +1,41 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIADECODER_JNI_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIADECODER_JNI_H_ + +#include "webrtc/sdk/android/src/jni/jni_helpers.h" +#include "webrtc/media/engine/webrtcvideodecoderfactory.h" + +namespace webrtc_jni { + +// Implementation of Android MediaCodec based decoder factory. +class MediaCodecVideoDecoderFactory + : public cricket::WebRtcVideoDecoderFactory { + public: + MediaCodecVideoDecoderFactory(); + virtual ~MediaCodecVideoDecoderFactory(); + + void SetEGLContext(JNIEnv* jni, jobject render_egl_context); + + // WebRtcVideoDecoderFactory implementation. + webrtc::VideoDecoder* CreateVideoDecoder(webrtc::VideoCodecType type) + override; + + void DestroyVideoDecoder(webrtc::VideoDecoder* decoder) override; + + private: + jobject egl_context_; + std::vector supported_codec_types_; +}; + +} // namespace webrtc_jni + +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIADECODER_JNI_H_ diff --git a/webrtc/api/android/jni/androidmediaencoder_jni.cc b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc similarity index 99% rename from webrtc/api/android/jni/androidmediaencoder_jni.cc rename to webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc index ca62442342..9efe53c396 100644 --- a/webrtc/api/android/jni/androidmediaencoder_jni.cc +++ b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc @@ -10,7 +10,7 @@ // NOTICE: androidmediaencoder_jni.h must be included before // androidmediacodeccommon.h to avoid build errors. -#include "webrtc/api/android/jni/androidmediaencoder_jni.h" +#include "webrtc/sdk/android/src/jni/androidmediaencoder_jni.h" #include #include @@ -19,9 +19,9 @@ #include "third_party/libyuv/include/libyuv/convert.h" #include "third_party/libyuv/include/libyuv/convert_from.h" #include "third_party/libyuv/include/libyuv/video_common.h" -#include "webrtc/api/android/jni/androidmediacodeccommon.h" -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/androidmediacodeccommon.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" #include "webrtc/base/bind.h" #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" diff --git a/webrtc/sdk/android/src/jni/androidmediaencoder_jni.h b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.h new file mode 100644 index 0000000000..76834ba9af --- /dev/null +++ b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.h @@ -0,0 +1,49 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIAENCODER_JNI_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIAENCODER_JNI_H_ + +#include + +#include "webrtc/sdk/android/src/jni/jni_helpers.h" +#include "webrtc/media/engine/webrtcvideoencoderfactory.h" + +namespace webrtc_jni { + +// Implementation of Android MediaCodec based encoder factory. +class MediaCodecVideoEncoderFactory + : public cricket::WebRtcVideoEncoderFactory { + public: + MediaCodecVideoEncoderFactory(); + virtual ~MediaCodecVideoEncoderFactory(); + + void SetEGLContext(JNIEnv* jni, jobject egl_context); + + // WebRtcVideoEncoderFactory implementation. + webrtc::VideoEncoder* CreateVideoEncoder( + const cricket::VideoCodec& codec) override; + const std::vector& supported_codecs() const override; + void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) override; + + private: + // Disable overloaded virtual function warning. TODO(magjed): Remove once + // http://crbug/webrtc/6402 is fixed. + using cricket::WebRtcVideoEncoderFactory::CreateVideoEncoder; + + jobject egl_context_; + + // Empty if platform support is lacking, const after ctor returns. + std::vector supported_codecs_; +}; + +} // namespace webrtc_jni + +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDMEDIAENCODER_JNI_H_ diff --git a/webrtc/api/android/jni/androidmetrics_jni.cc b/webrtc/sdk/android/src/jni/androidmetrics_jni.cc similarity index 95% rename from webrtc/api/android/jni/androidmetrics_jni.cc rename to webrtc/sdk/android/src/jni/androidmetrics_jni.cc index 62efc1b553..9da07927b4 100644 --- a/webrtc/api/android/jni/androidmetrics_jni.cc +++ b/webrtc/sdk/android/src/jni/androidmetrics_jni.cc @@ -11,8 +11,8 @@ #include #include -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" #include "webrtc/system_wrappers/include/metrics.h" #include "webrtc/system_wrappers/include/metrics_default.h" diff --git a/webrtc/api/android/jni/androidnetworkmonitor_jni.cc b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc similarity index 98% rename from webrtc/api/android/jni/androidnetworkmonitor_jni.cc rename to webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc index 16da5faa92..d69214beec 100644 --- a/webrtc/api/android/jni/androidnetworkmonitor_jni.cc +++ b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc @@ -8,14 +8,14 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/api/android/jni/androidnetworkmonitor_jni.h" +#include "webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h" #include // This was added in Lollipop to dlfcn.h #define RTLD_NOLOAD 4 -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" #include "webrtc/base/bind.h" #include "webrtc/base/common.h" #include "webrtc/base/ipaddress.h" diff --git a/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h new file mode 100644 index 0000000000..1e40341042 --- /dev/null +++ b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h @@ -0,0 +1,93 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDNETWORKMONITOR_JNI_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDNETWORKMONITOR_JNI_H_ + +#include "webrtc/base/networkmonitor.h" + +#include + +#include "webrtc/sdk/android/src/jni/jni_helpers.h" +#include "webrtc/base/basictypes.h" +#include "webrtc/base/thread_checker.h" + +namespace webrtc_jni { + +typedef int64_t NetworkHandle; + +// c++ equivalent of java NetworkMonitorAutoDetect.ConnectionType. +enum NetworkType { + NETWORK_UNKNOWN, + NETWORK_ETHERNET, + NETWORK_WIFI, + NETWORK_4G, + NETWORK_3G, + NETWORK_2G, + NETWORK_UNKNOWN_CELLULAR, + NETWORK_BLUETOOTH, + NETWORK_NONE +}; + +// The information is collected from Android OS so that the native code can get +// the network type and handle (Android network ID) for each interface. +struct NetworkInformation { + std::string interface_name; + NetworkHandle handle; + NetworkType type; + std::vector ip_addresses; + + std::string ToString() const; +}; + +class AndroidNetworkMonitor : public rtc::NetworkMonitorBase, + public rtc::NetworkBinderInterface { + public: + AndroidNetworkMonitor(); + + static void SetAndroidContext(JNIEnv* jni, jobject context); + + void Start() override; + void Stop() override; + + int BindSocketToNetwork(int socket_fd, + const rtc::IPAddress& address) override; + rtc::AdapterType GetAdapterType(const std::string& if_name) override; + void OnNetworkConnected(const NetworkInformation& network_info); + void OnNetworkDisconnected(NetworkHandle network_handle); + void SetNetworkInfos(const std::vector& network_infos); + + private: + static jobject application_context_; + static int android_sdk_int_; + JNIEnv* jni() { return AttachCurrentThreadIfNeeded(); } + + void OnNetworkConnected_w(const NetworkInformation& network_info); + void OnNetworkDisconnected_w(NetworkHandle network_handle); + + ScopedGlobalRef j_network_monitor_class_; + ScopedGlobalRef j_network_monitor_; + rtc::ThreadChecker thread_checker_; + bool started_ = false; + std::map adapter_type_by_name_; + std::map network_handle_by_address_; + std::map network_info_by_handle_; +}; + +class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory { + public: + AndroidNetworkMonitorFactory() {} + + rtc::NetworkMonitorInterface* CreateNetworkMonitor() override; +}; + +} // namespace webrtc_jni + +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_ANDROIDNETWORKMONITOR_JNI_H_ diff --git a/webrtc/api/android/jni/androidvideotracksource.cc b/webrtc/sdk/android/src/jni/androidvideotracksource.cc similarity index 98% rename from webrtc/api/android/jni/androidvideotracksource.cc rename to webrtc/sdk/android/src/jni/androidvideotracksource.cc index 4f708a6b4f..57bbc4a312 100644 --- a/webrtc/api/android/jni/androidvideotracksource.cc +++ b/webrtc/sdk/android/src/jni/androidvideotracksource.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/api/android/jni/androidvideotracksource.h" +#include "webrtc/sdk/android/src/jni/androidvideotracksource.h" #include diff --git a/webrtc/api/android/jni/androidvideotracksource.h b/webrtc/sdk/android/src/jni/androidvideotracksource.h similarity index 95% rename from webrtc/api/android/jni/androidvideotracksource.h rename to webrtc/sdk/android/src/jni/androidvideotracksource.h index be8da956a0..ae34c8d563 100644 --- a/webrtc/api/android/jni/androidvideotracksource.h +++ b/webrtc/sdk/android/src/jni/androidvideotracksource.h @@ -11,8 +11,8 @@ #ifndef WEBRTC_API_ANDROID_JNI_ANDROIDVIDEOTRACKSOURCE_H_ #define WEBRTC_API_ANDROID_JNI_ANDROIDVIDEOTRACKSOURCE_H_ -#include "webrtc/api/android/jni/native_handle_impl.h" -#include "webrtc/api/android/jni/surfacetexturehelper_jni.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h" #include "webrtc/base/asyncinvoker.h" #include "webrtc/base/checks.h" #include "webrtc/base/thread_checker.h" diff --git a/webrtc/api/android/jni/androidvideotracksource_jni.cc b/webrtc/sdk/android/src/jni/androidvideotracksource_jni.cc similarity index 96% rename from webrtc/api/android/jni/androidvideotracksource_jni.cc rename to webrtc/sdk/android/src/jni/androidvideotracksource_jni.cc index 5aba4c6dcd..0b2cdccbb2 100644 --- a/webrtc/api/android/jni/androidvideotracksource_jni.cc +++ b/webrtc/sdk/android/src/jni/androidvideotracksource_jni.cc @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/api/android/jni/androidvideotracksource.h" -#include "webrtc/api/android/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/androidvideotracksource.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" #include "webrtc/api/videosourceproxy.h" // Identifiers are over 80 characters long so this is needed to fit them on one diff --git a/webrtc/api/android/jni/classreferenceholder.cc b/webrtc/sdk/android/src/jni/classreferenceholder.cc similarity index 97% rename from webrtc/api/android/jni/classreferenceholder.cc rename to webrtc/sdk/android/src/jni/classreferenceholder.cc index ee68112435..c5dca97f9d 100644 --- a/webrtc/api/android/jni/classreferenceholder.cc +++ b/webrtc/sdk/android/src/jni/classreferenceholder.cc @@ -7,9 +7,9 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/api/android/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" namespace webrtc_jni { diff --git a/webrtc/sdk/android/src/jni/classreferenceholder.h b/webrtc/sdk/android/src/jni/classreferenceholder.h new file mode 100644 index 0000000000..f3e1f69788 --- /dev/null +++ b/webrtc/sdk/android/src/jni/classreferenceholder.h @@ -0,0 +1,41 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// Android's FindClass() is trickier than usual because the app-specific +// ClassLoader is not consulted when there is no app-specific frame on the +// stack. Consequently, we only look up all classes once in app/webrtc. +// http://developer.android.com/training/articles/perf-jni.html#faq_FindClass + +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_CLASSREFERENCEHOLDER_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_CLASSREFERENCEHOLDER_H_ + +#include +#include +#include + +namespace webrtc_jni { + +// LoadGlobalClassReferenceHolder must be called in JNI_OnLoad. +void LoadGlobalClassReferenceHolder(); +// FreeGlobalClassReferenceHolder must be called in JNI_UnLoad. +void FreeGlobalClassReferenceHolder(); + +// Returns a global reference guaranteed to be valid for the lifetime of the +// process. +jclass FindClass(JNIEnv* jni, const char* name); + +// Convenience macro defining JNI-accessible methods in the org.webrtc package. +// Eliminates unnecessary boilerplate and line-wraps, reducing visual clutter. +#define JOW(rettype, name) extern "C" rettype JNIEXPORT JNICALL \ + Java_org_webrtc_##name + +} // namespace webrtc_jni + +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_CLASSREFERENCEHOLDER_H_ diff --git a/webrtc/api/android/jni/jni_helpers.cc b/webrtc/sdk/android/src/jni/jni_helpers.cc similarity index 99% rename from webrtc/api/android/jni/jni_helpers.cc rename to webrtc/sdk/android/src/jni/jni_helpers.cc index 3bc0ff995c..5262f067ed 100644 --- a/webrtc/api/android/jni/jni_helpers.cc +++ b/webrtc/sdk/android/src/jni/jni_helpers.cc @@ -7,9 +7,9 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" -#include "webrtc/api/android/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" #include #include diff --git a/webrtc/sdk/android/src/jni/jni_helpers.h b/webrtc/sdk/android/src/jni/jni_helpers.h new file mode 100644 index 0000000000..91f0a41a36 --- /dev/null +++ b/webrtc/sdk/android/src/jni/jni_helpers.h @@ -0,0 +1,191 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// This file contain convenience functions and classes for JNI. +// Before using any of the methods, InitGlobalJniVariables must be called. + +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_JNI_HELPERS_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_JNI_HELPERS_H_ + +#include +#include + +#include "webrtc/base/constructormagic.h" +#include "webrtc/base/checks.h" +#include "webrtc/base/thread_checker.h" + +// Abort the process if |jni| has a Java exception pending. +// This macros uses the comma operator to execute ExceptionDescribe +// and ExceptionClear ignoring their return values and sending "" +// to the error stream. +#define CHECK_EXCEPTION(jni) \ + RTC_CHECK(!jni->ExceptionCheck()) \ + << (jni->ExceptionDescribe(), jni->ExceptionClear(), "") + +// Helper that calls ptr->Release() and aborts the process with a useful +// message if that didn't actually delete *ptr because of extra refcounts. +#define CHECK_RELEASE(ptr) \ + RTC_CHECK_EQ(0, (ptr)->Release()) << "Unexpected refcount." + +namespace webrtc_jni { + +jint InitGlobalJniVariables(JavaVM *jvm); + +// Return a |JNIEnv*| usable on this thread or NULL if this thread is detached. +JNIEnv* GetEnv(); + +JavaVM *GetJVM(); + +// Return a |JNIEnv*| usable on this thread. Attaches to |g_jvm| if necessary. +JNIEnv* AttachCurrentThreadIfNeeded(); + +// Return a |jlong| that will correctly convert back to |ptr|. This is needed +// because the alternative (of silently passing a 32-bit pointer to a vararg +// function expecting a 64-bit param) picks up garbage in the high 32 bits. +jlong jlongFromPointer(void* ptr); + +// JNIEnv-helper methods that RTC_CHECK success: no Java exception thrown and +// found object/class/method/field is non-null. +jmethodID GetMethodID( + JNIEnv* jni, jclass c, const std::string& name, const char* signature); + +jmethodID GetStaticMethodID( + JNIEnv* jni, jclass c, const char* name, const char* signature); + +jfieldID GetFieldID(JNIEnv* jni, jclass c, const char* name, + const char* signature); + +jclass GetObjectClass(JNIEnv* jni, jobject object); + +// Throws an exception if the object field is null. +jobject GetObjectField(JNIEnv* jni, jobject object, jfieldID id); + +jobject GetNullableObjectField(JNIEnv* jni, jobject object, jfieldID id); + +jstring GetStringField(JNIEnv* jni, jobject object, jfieldID id); + +jlong GetLongField(JNIEnv* jni, jobject object, jfieldID id); + +jint GetIntField(JNIEnv* jni, jobject object, jfieldID id); + +bool GetBooleanField(JNIEnv* jni, jobject object, jfieldID id); + +// Returns true if |obj| == null in Java. +bool IsNull(JNIEnv* jni, jobject obj); + +// Given a UTF-8 encoded |native| string return a new (UTF-16) jstring. +jstring JavaStringFromStdString(JNIEnv* jni, const std::string& native); + +// Given a (UTF-16) jstring return a new UTF-8 native string. +std::string JavaToStdString(JNIEnv* jni, const jstring& j_string); + +// Return the (singleton) Java Enum object corresponding to |index|; +jobject JavaEnumFromIndex(JNIEnv* jni, jclass state_class, + const std::string& state_class_name, int index); + +// Returns the name of a Java enum. +std::string GetJavaEnumName(JNIEnv* jni, + const std::string& className, + jobject j_enum); + +jobject NewGlobalRef(JNIEnv* jni, jobject o); + +void DeleteGlobalRef(JNIEnv* jni, jobject o); + +// Scope Java local references to the lifetime of this object. Use in all C++ +// callbacks (i.e. entry points that don't originate in a Java callstack +// through a "native" method call). +class ScopedLocalRefFrame { + public: + explicit ScopedLocalRefFrame(JNIEnv* jni); + ~ScopedLocalRefFrame(); + + private: + JNIEnv* jni_; +}; + +// Scoped holder for global Java refs. +template // T is jclass, jobject, jintArray, etc. +class ScopedGlobalRef { + public: + ScopedGlobalRef(JNIEnv* jni, T obj) + : obj_(static_cast(jni->NewGlobalRef(obj))) {} + ~ScopedGlobalRef() { + DeleteGlobalRef(AttachCurrentThreadIfNeeded(), obj_); + } + T operator*() const { + return obj_; + } + private: + T obj_; +}; + +// Provides a convenient way to iterate over a Java Iterable using the +// C++ range-for loop. +// E.g. for (jobject value : Iterable(jni, j_iterable)) { ... } +// Note: Since Java iterators cannot be duplicated, the iterator class is not +// copyable to prevent creating multiple C++ iterators that refer to the same +// Java iterator. +class Iterable { + public: + Iterable(JNIEnv* jni, jobject iterable) : jni_(jni), iterable_(iterable) {} + + class Iterator { + public: + // Creates an iterator representing the end of any collection. + Iterator(); + // Creates an iterator pointing to the beginning of the specified + // collection. + Iterator(JNIEnv* jni, jobject iterable); + + // Move constructor - necessary to be able to return iterator types from + // functions. + Iterator(Iterator&& other); + + // Move assignment should not be used. + Iterator& operator=(Iterator&&) = delete; + + // Advances the iterator one step. + Iterator& operator++(); + + // Provides a way to compare the iterator with itself and with the end + // iterator. + // Note: all other comparison results are undefined, just like for C++ input + // iterators. + bool operator==(const Iterator& other); + bool operator!=(const Iterator& other) { return !(*this == other); } + jobject operator*(); + + private: + bool AtEnd() const; + + JNIEnv* jni_ = nullptr; + jobject iterator_ = nullptr; + jobject value_ = nullptr; + jmethodID has_next_id_ = nullptr; + jmethodID next_id_ = nullptr; + rtc::ThreadChecker thread_checker_; + + RTC_DISALLOW_COPY_AND_ASSIGN(Iterator); + }; + + Iterable::Iterator begin() { return Iterable::Iterator(jni_, iterable_); } + Iterable::Iterator end() { return Iterable::Iterator(); } + + private: + JNIEnv* jni_; + jobject iterable_; + + RTC_DISALLOW_COPY_AND_ASSIGN(Iterable); +}; + +} // namespace webrtc_jni + +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_JNI_HELPERS_H_ diff --git a/webrtc/api/android/jni/jni_onload.cc b/webrtc/sdk/android/src/jni/jni_onload.cc similarity index 90% rename from webrtc/api/android/jni/jni_onload.cc rename to webrtc/sdk/android/src/jni/jni_onload.cc index 092e5c73ee..a57d0783c8 100644 --- a/webrtc/api/android/jni/jni_onload.cc +++ b/webrtc/sdk/android/src/jni/jni_onload.cc @@ -12,8 +12,8 @@ #undef JNIEXPORT #define JNIEXPORT __attribute__((visibility("default"))) -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" #include "webrtc/base/ssladapter.h" namespace webrtc_jni { diff --git a/webrtc/api/android/jni/native_handle_impl.cc b/webrtc/sdk/android/src/jni/native_handle_impl.cc similarity index 98% rename from webrtc/api/android/jni/native_handle_impl.cc rename to webrtc/sdk/android/src/jni/native_handle_impl.cc index 1e98559954..c40cbf5f3d 100644 --- a/webrtc/api/android/jni/native_handle_impl.cc +++ b/webrtc/sdk/android/src/jni/native_handle_impl.cc @@ -8,11 +8,11 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/api/android/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" #include -#include "webrtc/api/android/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" #include "webrtc/base/bind.h" #include "webrtc/base/checks.h" #include "webrtc/base/keep_ref_until_done.h" diff --git a/webrtc/api/android/jni/native_handle_impl.h b/webrtc/sdk/android/src/jni/native_handle_impl.h similarity index 93% rename from webrtc/api/android/jni/native_handle_impl.h rename to webrtc/sdk/android/src/jni/native_handle_impl.h index 0d0153281e..d8fb153d38 100644 --- a/webrtc/api/android/jni/native_handle_impl.h +++ b/webrtc/sdk/android/src/jni/native_handle_impl.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_API_JAVA_JNI_NATIVE_HANDLE_IMPL_H_ -#define WEBRTC_API_JAVA_JNI_NATIVE_HANDLE_IMPL_H_ +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_NATIVE_HANDLE_IMPL_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_NATIVE_HANDLE_IMPL_H_ #include @@ -84,4 +84,4 @@ class AndroidTextureBuffer : public webrtc::NativeHandleBuffer { } // namespace webrtc_jni -#endif // WEBRTC_API_JAVA_JNI_NATIVE_HANDLE_IMPL_H_ +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_NATIVE_HANDLE_IMPL_H_ diff --git a/webrtc/api/android/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc similarity index 99% rename from webrtc/api/android/jni/peerconnection_jni.cc rename to webrtc/sdk/android/src/jni/peerconnection_jni.cc index 1579a55832..6416a17489 100644 --- a/webrtc/api/android/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -45,13 +45,13 @@ #include "third_party/libyuv/include/libyuv/convert_from.h" #include "third_party/libyuv/include/libyuv/scale.h" -#include "webrtc/api/android/jni/androidmediadecoder_jni.h" -#include "webrtc/api/android/jni/androidmediaencoder_jni.h" -#include "webrtc/api/android/jni/androidnetworkmonitor_jni.h" -#include "webrtc/api/android/jni/androidvideotracksource.h" -#include "webrtc/api/android/jni/classreferenceholder.h" -#include "webrtc/api/android/jni/jni_helpers.h" -#include "webrtc/api/android/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/androidmediadecoder_jni.h" +#include "webrtc/sdk/android/src/jni/androidmediaencoder_jni.h" +#include "webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h" +#include "webrtc/sdk/android/src/jni/androidvideotracksource.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" #include "webrtc/api/mediaconstraintsinterface.h" #include "webrtc/api/peerconnectioninterface.h" #include "webrtc/api/rtpreceiverinterface.h" diff --git a/webrtc/api/android/jni/surfacetexturehelper_jni.cc b/webrtc/sdk/android/src/jni/surfacetexturehelper_jni.cc similarity index 95% rename from webrtc/api/android/jni/surfacetexturehelper_jni.cc rename to webrtc/sdk/android/src/jni/surfacetexturehelper_jni.cc index 29b20e1126..81e7ac4b9e 100644 --- a/webrtc/api/android/jni/surfacetexturehelper_jni.cc +++ b/webrtc/sdk/android/src/jni/surfacetexturehelper_jni.cc @@ -9,9 +9,9 @@ */ -#include "webrtc/api/android/jni/surfacetexturehelper_jni.h" +#include "webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h" -#include "webrtc/api/android/jni/classreferenceholder.h" +#include "webrtc/sdk/android/src/jni/classreferenceholder.h" #include "webrtc/base/bind.h" #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" diff --git a/webrtc/api/android/jni/surfacetexturehelper_jni.h b/webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h similarity index 88% rename from webrtc/api/android/jni/surfacetexturehelper_jni.h rename to webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h index 5a28edc874..deea41475e 100644 --- a/webrtc/api/android/jni/surfacetexturehelper_jni.h +++ b/webrtc/sdk/android/src/jni/surfacetexturehelper_jni.h @@ -8,13 +8,13 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_API_JAVA_JNI_SURFACETEXTUREHELPER_JNI_H_ -#define WEBRTC_API_JAVA_JNI_SURFACETEXTUREHELPER_JNI_H_ +#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_SURFACETEXTUREHELPER_JNI_H_ +#define WEBRTC_SDK_ANDROID_SRC_JNI_SURFACETEXTUREHELPER_JNI_H_ #include -#include "webrtc/api/android/jni/jni_helpers.h" -#include "webrtc/api/android/jni/native_handle_impl.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" +#include "webrtc/sdk/android/src/jni/native_handle_impl.h" #include "webrtc/base/refcount.h" #include "webrtc/base/scoped_ref_ptr.h" #include "webrtc/common_video/include/video_frame_buffer.h" @@ -65,4 +65,4 @@ class SurfaceTextureHelper : public rtc::RefCountInterface { } // namespace webrtc_jni -#endif // WEBRTC_API_JAVA_JNI_SURFACETEXTUREHELPER_JNI_H_ +#endif // WEBRTC_SDK_ANDROID_SRC_JNI_SURFACETEXTUREHELPER_JNI_H_