diff --git a/examples/BUILD.gn b/examples/BUILD.gn index bd8ab63ca4..aba2a37df5 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -116,6 +116,7 @@ if (is_android) { ":AppRTCMobile_resources", "../modules/audio_device:audio_device_java", "../rtc_base:base_java", + "../sdk/android:audio_java", "../sdk/android:base_java", "../sdk/android:hwcodecs_java", "../sdk/android:libjingle_peerconnection_java", diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index a90ac2f298..0d4b157f6c 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -145,21 +145,27 @@ rtc_source_set("native_api_audio_device_module") { ] deps = [ - ":audio_device_jni", + ":audio_device_base_jni", ":base_jni", + ":java_audio_device_jni", + ":opensles_audio_device_jni", "../../modules/audio_device:audio_device", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", "../../system_wrappers", "../../system_wrappers:metrics_api", ] + if (rtc_enable_android_aaudio) { + deps += [ ":aaudio_audio_device_jni" ] + } + if (!build_with_chromium && is_clang) { # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] } } -rtc_source_set("audio_device_jni") { +rtc_source_set("audio_device_base_jni") { visibility = [ "*" ] sources = [ @@ -168,12 +174,54 @@ rtc_source_set("audio_device_jni") { "src/jni/audio_device/audio_device_module.h", "src/jni/audio_device/audio_manager.cc", "src/jni/audio_device/audio_manager.h", - "src/jni/audio_device/audio_record_jni.cc", - "src/jni/audio_device/audio_record_jni.h", - "src/jni/audio_device/audio_track_jni.cc", - "src/jni/audio_device/audio_track_jni.h", "src/jni/audio_device/build_info.cc", "src/jni/audio_device/build_info.h", + ] + + deps = [ + ":base_jni", + ":generated_audio_device_base_jni", + ":native_api_jni", + "../../api:optional", + "../../modules/audio_device:audio_device", + "../../modules/audio_device:audio_device_buffer", + "../../rtc_base:checks", + "../../rtc_base:rtc_base_approved", + "../../system_wrappers:metrics_api", + ] +} + +if (rtc_enable_android_aaudio) { + rtc_source_set("aaudio_audio_device_jni") { + visibility = [ "*" ] + defines = [ "AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ] + sources = [ + "src/jni/audio_device/aaudio_player.cc", + "src/jni/audio_device/aaudio_player.h", + "src/jni/audio_device/aaudio_recorder.cc", + "src/jni/audio_device/aaudio_recorder.h", + "src/jni/audio_device/aaudio_wrapper.cc", + "src/jni/audio_device/aaudio_wrapper.h", + ] + libs = [ "aaudio" ] + deps = [ + ":audio_device_base_jni", + ":base_jni", + "../../api:array_view", + "../../api:optional", + "../../modules/audio_device:audio_device", + "../../modules/audio_device:audio_device_buffer", + "../../rtc_base:checks", + "../../rtc_base:rtc_base", + "../../rtc_base:rtc_base_approved", + "../../system_wrappers", + ] + } +} + +rtc_source_set("opensles_audio_device_jni") { + visibility = [ "*" ] + sources = [ "src/jni/audio_device/opensles_common.cc", "src/jni/audio_device/opensles_common.h", "src/jni/audio_device/opensles_player.cc", @@ -182,37 +230,38 @@ rtc_source_set("audio_device_jni") { "src/jni/audio_device/opensles_recorder.h", ] libs = [ "OpenSLES" ] - if (rtc_enable_android_aaudio) { - defines = [ "AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ] - sources += [ - "src/jni/audio_device/aaudio_player.cc", - "src/jni/audio_device/aaudio_player.h", - "src/jni/audio_device/aaudio_recorder.cc", - "src/jni/audio_device/aaudio_recorder.h", - "src/jni/audio_device/aaudio_wrapper.cc", - "src/jni/audio_device/aaudio_wrapper.h", - ] - libs += [ "aaudio" ] - } deps = [ + ":audio_device_base_jni", ":base_jni", - ":generated_audio_jni", - ":native_api_jni", "../../api:array_view", "../../api:optional", "../../modules/audio_device:audio_device", "../../modules/audio_device:audio_device_buffer", - "../../modules/utility:utility", "../../rtc_base:checks", - "../../rtc_base:rtc_base", "../../rtc_base:rtc_base_approved", - "../../system_wrappers", + ] +} + +rtc_source_set("java_audio_device_jni") { + visibility = [ "*" ] + + sources = [ + "src/jni/audio_device/audio_record_jni.cc", + "src/jni/audio_device/audio_record_jni.h", + "src/jni/audio_device/audio_track_jni.cc", + "src/jni/audio_device/audio_track_jni.h", + ] + deps = [ + ":audio_device_base_jni", + ":base_jni", + ":generated_java_audio_device_jni", + "../../api:optional", + "../../modules/audio_device:audio_device", + "../../modules/audio_device:audio_device_buffer", + "../../rtc_base:checks", + "../../rtc_base:rtc_base_approved", "../../system_wrappers:metrics_api", ] - if (!build_with_chromium && is_clang) { - # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). - suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] - } } rtc_static_library("null_audio_jni") { @@ -225,10 +274,17 @@ rtc_static_library("null_audio_jni") { ] } -generate_jni("generated_audio_jni") { +generate_jni("generated_audio_device_base_jni") { sources = [ "src/java/org/webrtc/audio/BuildInfo.java", "src/java/org/webrtc/audio/WebRtcAudioManager.java", + ] + jni_package = "" + jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h" +} + +generate_jni("generated_java_audio_device_jni") { + sources = [ "src/java/org/webrtc/audio/WebRtcAudioRecord.java", "src/java/org/webrtc/audio/WebRtcAudioTrack.java", ] @@ -595,10 +651,11 @@ rtc_static_library("peerconnection_jni") { } deps = [ - ":audio_device_jni", + ":audio_device_base_jni", ":base_jni", ":generated_external_classes_jni", ":generated_peerconnection_jni", + ":java_audio_device_jni", ":native_api_jni", "../..:webrtc_common", "../../api:libjingle_peerconnection_api", @@ -711,6 +768,7 @@ dist_jar("libwebrtc") { no_build_hooks = true deps = [ + ":audio_java", ":base_java", ":hwcodecs_java", ":libjingle_peerconnection_java", @@ -765,7 +823,6 @@ rtc_android_library("base_java") { "api/org/webrtc/VideoSink.java", "api/org/webrtc/YuvConverter.java", "api/org/webrtc/YuvHelper.java", - "api/org/webrtc/audio/JavaAudioDeviceModule.java", "src/java/org/webrtc/AndroidVideoTrackSourceObserver.java", "src/java/org/webrtc/CalledByNative.java", "src/java/org/webrtc/CalledByNativeUnchecked.java", @@ -790,16 +847,27 @@ rtc_android_library("base_java") { "src/java/org/webrtc/WrappedNativeI420Buffer.java", "src/java/org/webrtc/WrappedNativeVideoEncoder.java", "src/java/org/webrtc/WrappedNativeVideoDecoder.java", + ] + + deps = [ + "//rtc_base:base_java", + ] +} + +rtc_android_library("audio_java") { + java_files = [ + "api/org/webrtc/audio/JavaAudioDeviceModule.java", + "src/java/org/webrtc/audio/VolumeLogger.java", "src/java/org/webrtc/audio/BuildInfo.java", "src/java/org/webrtc/audio/WebRtcAudioEffects.java", "src/java/org/webrtc/audio/WebRtcAudioManager.java", - "src/java/org/webrtc/audio/VolumeLogger.java", "src/java/org/webrtc/audio/WebRtcAudioRecord.java", "src/java/org/webrtc/audio/WebRtcAudioTrack.java", "src/java/org/webrtc/audio/WebRtcAudioUtils.java", ] deps = [ + ":base_java", "//rtc_base:base_java", ] } @@ -889,6 +957,7 @@ rtc_android_library("libjingle_peerconnection_java") { ] deps = [ + ":audio_java", ":base_java", ":hwcodecs_java", "//modules/audio_device:audio_device_java", diff --git a/sdk/android/src/jni/audio_device/aaudio_player.h b/sdk/android/src/jni/audio_device/aaudio_player.h index 0770b4691e..0265aee496 100644 --- a/sdk/android/src/jni/audio_device/aaudio_player.h +++ b/sdk/android/src/jni/audio_device/aaudio_player.h @@ -56,7 +56,7 @@ class AAudioPlayer final : public AudioOutput, public rtc::MessageHandler { public: explicit AAudioPlayer(AudioManager* audio_manager); - ~AAudioPlayer(); + ~AAudioPlayer() override; int Init() override; int Terminate() override; diff --git a/sdk/android/src/jni/audio_device/aaudio_recorder.cc b/sdk/android/src/jni/audio_device/aaudio_recorder.cc index e940d3272c..ccdea810b5 100644 --- a/sdk/android/src/jni/audio_device/aaudio_recorder.cc +++ b/sdk/android/src/jni/audio_device/aaudio_recorder.cc @@ -66,6 +66,10 @@ int AAudioRecorder::InitRecording() { return 0; } +bool AAudioRecorder::RecordingIsInitialized() const { + return initialized_; +} + int AAudioRecorder::StartRecording() { RTC_LOG(INFO) << "StartRecording"; RTC_DCHECK(thread_checker_.CalledOnValidThread()); @@ -98,6 +102,10 @@ int AAudioRecorder::StopRecording() { return 0; } +bool AAudioRecorder::Recording() const { + return recording_; +} + void AAudioRecorder::AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) { RTC_LOG(INFO) << "AttachAudioBuffer"; RTC_DCHECK(thread_checker_.CalledOnValidThread()); diff --git a/sdk/android/src/jni/audio_device/aaudio_recorder.h b/sdk/android/src/jni/audio_device/aaudio_recorder.h index a424c47e26..4ceee27ead 100644 --- a/sdk/android/src/jni/audio_device/aaudio_recorder.h +++ b/sdk/android/src/jni/audio_device/aaudio_recorder.h @@ -48,17 +48,17 @@ class AAudioRecorder : public AudioInput, public rtc::MessageHandler { public: explicit AAudioRecorder(AudioManager* audio_manager); - ~AAudioRecorder(); + ~AAudioRecorder() override; int Init() override; int Terminate() override; int InitRecording() override; - bool RecordingIsInitialized() const override { return initialized_; } + bool RecordingIsInitialized() const override; int StartRecording() override; int StopRecording() override; - bool Recording() const override { return recording_; } + bool Recording() const override; void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) override; diff --git a/sdk/android/src/jni/audio_device/audio_device_module.cc b/sdk/android/src/jni/audio_device/audio_device_module.cc index c05393f50c..dbfc51984d 100644 --- a/sdk/android/src/jni/audio_device/audio_device_module.cc +++ b/sdk/android/src/jni/audio_device/audio_device_module.cc @@ -76,7 +76,7 @@ class AndroidAudioDeviceModule : public AudioDeviceModule { thread_checker_.DetachFromThread(); } - virtual ~AndroidAudioDeviceModule() { RTC_LOG(INFO) << __FUNCTION__; } + ~AndroidAudioDeviceModule() override { RTC_LOG(INFO) << __FUNCTION__; } int32_t ActiveAudioLayer( AudioDeviceModule::AudioLayer* audioLayer) const override { diff --git a/sdk/android/src/jni/audio_device/audio_manager.cc b/sdk/android/src/jni/audio_device/audio_manager.cc index 98c51d584b..d6942f564b 100644 --- a/sdk/android/src/jni/audio_device/audio_manager.cc +++ b/sdk/android/src/jni/audio_device/audio_manager.cc @@ -20,20 +20,11 @@ #include "rtc_base/refcount.h" #include "rtc_base/refcountedobject.h" -#include "sdk/android/generated_audio_jni/jni/WebRtcAudioManager_jni.h" +#include "sdk/android/generated_audio_device_base_jni/jni/WebRtcAudioManager_jni.h" #include "sdk/android/src/jni/audio_device/audio_common.h" -#include "sdk/android/src/jni/jni_helpers.h" - -#if defined(AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO) -#include "sdk/android/src/jni/audio_device/aaudio_player.h" -#include "sdk/android/src/jni/audio_device/aaudio_recorder.h" -#endif #include "sdk/android/src/jni/audio_device/audio_device_module.h" #include "sdk/android/src/jni/audio_device/audio_manager.h" -#include "sdk/android/src/jni/audio_device/audio_record_jni.h" -#include "sdk/android/src/jni/audio_device/audio_track_jni.h" -#include "sdk/android/src/jni/audio_device/opensles_player.h" -#include "sdk/android/src/jni/audio_device/opensles_recorder.h" +#include "sdk/android/src/jni/jni_helpers.h" namespace webrtc { diff --git a/sdk/android/src/jni/audio_device/audio_manager.h b/sdk/android/src/jni/audio_device/audio_manager.h index eebaa72c31..f288448c1d 100644 --- a/sdk/android/src/jni/audio_device/audio_manager.h +++ b/sdk/android/src/jni/audio_device/audio_manager.h @@ -11,7 +11,6 @@ #ifndef SDK_ANDROID_SRC_JNI_AUDIO_DEVICE_AUDIO_MANAGER_H_ #define SDK_ANDROID_SRC_JNI_AUDIO_DEVICE_AUDIO_MANAGER_H_ -#include #include #include @@ -20,7 +19,6 @@ #include "rtc_base/thread_checker.h" #include "sdk/android/native_api/jni/scoped_java_ref.h" #include "sdk/android/src/jni/audio_device/audio_common.h" -#include "sdk/android/src/jni/audio_device/opensles_common.h" namespace webrtc { diff --git a/sdk/android/src/jni/audio_device/audio_record_jni.cc b/sdk/android/src/jni/audio_device/audio_record_jni.cc index 93675f7462..0c529652bf 100644 --- a/sdk/android/src/jni/audio_device/audio_record_jni.cc +++ b/sdk/android/src/jni/audio_device/audio_record_jni.cc @@ -19,7 +19,7 @@ #include "rtc_base/logging.h" #include "rtc_base/platform_thread.h" #include "rtc_base/timeutils.h" -#include "sdk/android/generated_audio_jni/jni/WebRtcAudioRecord_jni.h" +#include "sdk/android/generated_java_audio_device_jni/jni/WebRtcAudioRecord_jni.h" #include "sdk/android/src/jni/audio_device/audio_common.h" #include "sdk/android/src/jni/jni_helpers.h" #include "system_wrappers/include/metrics.h" @@ -115,6 +115,10 @@ int32_t AudioRecordJni::InitRecording() { return 0; } +bool AudioRecordJni::RecordingIsInitialized() const { + return initialized_; +} + int32_t AudioRecordJni::StartRecording() { RTC_LOG(INFO) << "StartRecording"; RTC_DCHECK(thread_checker_.CalledOnValidThread()); @@ -153,6 +157,10 @@ int32_t AudioRecordJni::StopRecording() { return 0; } +bool AudioRecordJni::Recording() const { + return recording_; +} + void AudioRecordJni::AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) { RTC_LOG(INFO) << "AttachAudioBuffer"; RTC_DCHECK(thread_checker_.CalledOnValidThread()); diff --git a/sdk/android/src/jni/audio_device/audio_record_jni.h b/sdk/android/src/jni/audio_device/audio_record_jni.h index 40cfa0b60d..80b415a165 100644 --- a/sdk/android/src/jni/audio_device/audio_record_jni.h +++ b/sdk/android/src/jni/audio_device/audio_record_jni.h @@ -51,11 +51,11 @@ class AudioRecordJni : public AudioInput { int32_t Terminate() override; int32_t InitRecording() override; - bool RecordingIsInitialized() const override { return initialized_; } + bool RecordingIsInitialized() const override; int32_t StartRecording() override; int32_t StopRecording() override; - bool Recording() const override { return recording_; } + bool Recording() const override; void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) override; diff --git a/sdk/android/src/jni/audio_device/audio_track_jni.cc b/sdk/android/src/jni/audio_device/audio_track_jni.cc index c5ab6b33bc..fade1b1dc6 100644 --- a/sdk/android/src/jni/audio_device/audio_track_jni.cc +++ b/sdk/android/src/jni/audio_device/audio_track_jni.cc @@ -9,7 +9,6 @@ */ #include "sdk/android/src/jni/audio_device/audio_track_jni.h" -#include "sdk/android/src/jni/audio_device/audio_manager.h" #include @@ -18,7 +17,8 @@ #include "rtc_base/format_macros.h" #include "rtc_base/logging.h" #include "rtc_base/platform_thread.h" -#include "sdk/android/generated_audio_jni/jni/WebRtcAudioTrack_jni.h" +#include "sdk/android/generated_java_audio_device_jni/jni/WebRtcAudioTrack_jni.h" +#include "sdk/android/src/jni/audio_device/audio_manager.h" #include "sdk/android/src/jni/jni_helpers.h" namespace webrtc { @@ -80,6 +80,10 @@ int32_t AudioTrackJni::InitPlayout() { return 0; } +bool AudioTrackJni::PlayoutIsInitialized() const { + return initialized_; +} + int32_t AudioTrackJni::StartPlayout() { RTC_LOG(INFO) << "StartPlayout"; RTC_DCHECK(thread_checker_.CalledOnValidThread()); @@ -117,6 +121,10 @@ int32_t AudioTrackJni::StopPlayout() { return 0; } +bool AudioTrackJni::Playing() const { + return playing_; +} + bool AudioTrackJni::SpeakerVolumeIsAvailable() { return true; } diff --git a/sdk/android/src/jni/audio_device/audio_track_jni.h b/sdk/android/src/jni/audio_device/audio_track_jni.h index d56f30ce18..9de8ef7744 100644 --- a/sdk/android/src/jni/audio_device/audio_track_jni.h +++ b/sdk/android/src/jni/audio_device/audio_track_jni.h @@ -48,11 +48,11 @@ class AudioTrackJni : public AudioOutput { int32_t Terminate() override; int32_t InitPlayout() override; - bool PlayoutIsInitialized() const override { return initialized_; } + bool PlayoutIsInitialized() const override; int32_t StartPlayout() override; int32_t StopPlayout() override; - bool Playing() const override { return playing_; } + bool Playing() const override; bool SpeakerVolumeIsAvailable() override; int SetSpeakerVolume(uint32_t volume) override; diff --git a/sdk/android/src/jni/audio_device/build_info.cc b/sdk/android/src/jni/audio_device/build_info.cc index 14213d6496..972a8cf9b5 100644 --- a/sdk/android/src/jni/audio_device/build_info.cc +++ b/sdk/android/src/jni/audio_device/build_info.cc @@ -10,7 +10,7 @@ #include "sdk/android/src/jni/audio_device/build_info.h" -#include "sdk/android/generated_audio_jni/jni/BuildInfo_jni.h" +#include "sdk/android/generated_audio_device_base_jni/jni/BuildInfo_jni.h" #include "sdk/android/src/jni/jni_helpers.h" namespace webrtc { diff --git a/sdk/android/src/jni/audio_device/opensles_common.cc b/sdk/android/src/jni/audio_device/opensles_common.cc index 59ade32908..e21b7bfb35 100644 --- a/sdk/android/src/jni/audio_device/opensles_common.cc +++ b/sdk/android/src/jni/audio_device/opensles_common.cc @@ -106,6 +106,8 @@ OpenSLEngineManager::OpenSLEngineManager() { thread_checker_.DetachFromThread(); } +OpenSLEngineManager::~OpenSLEngineManager() = default; + SLObjectItf OpenSLEngineManager::GetOpenSLEngine() { RTC_LOG(INFO) << "GetOpenSLEngine"; RTC_DCHECK(thread_checker_.CalledOnValidThread()); diff --git a/sdk/android/src/jni/audio_device/opensles_common.h b/sdk/android/src/jni/audio_device/opensles_common.h index da14a50305..a498aec584 100644 --- a/sdk/android/src/jni/audio_device/opensles_common.h +++ b/sdk/android/src/jni/audio_device/opensles_common.h @@ -70,6 +70,7 @@ typedef ScopedSLObject ScopedSLObjectItf; class OpenSLEngineManager { public: OpenSLEngineManager(); + ~OpenSLEngineManager(); SLObjectItf GetOpenSLEngine(); private: diff --git a/sdk/android/src/jni/audio_device/opensles_player.cc b/sdk/android/src/jni/audio_device/opensles_player.cc index e2c1d75ed8..ad7363f333 100644 --- a/sdk/android/src/jni/audio_device/opensles_player.cc +++ b/sdk/android/src/jni/audio_device/opensles_player.cc @@ -114,6 +114,10 @@ int OpenSLESPlayer::InitPlayout() { return 0; } +bool OpenSLESPlayer::PlayoutIsInitialized() const { + return initialized_; +} + int OpenSLESPlayer::StartPlayout() { ALOGD("StartPlayout[tid=%d]", rtc::CurrentThreadId()); RTC_DCHECK(thread_checker_.CalledOnValidThread()); @@ -168,6 +172,10 @@ int OpenSLESPlayer::StopPlayout() { return 0; } +bool OpenSLESPlayer::Playing() const { + return playing_; +} + bool OpenSLESPlayer::SpeakerVolumeIsAvailable() { return false; } diff --git a/sdk/android/src/jni/audio_device/opensles_player.h b/sdk/android/src/jni/audio_device/opensles_player.h index e4da19769b..9ac49b726e 100644 --- a/sdk/android/src/jni/audio_device/opensles_player.h +++ b/sdk/android/src/jni/audio_device/opensles_player.h @@ -68,11 +68,11 @@ class OpenSLESPlayer : public AudioOutput { int Terminate() override; int InitPlayout() override; - bool PlayoutIsInitialized() const override { return initialized_; } + bool PlayoutIsInitialized() const override; int StartPlayout() override; int StopPlayout() override; - bool Playing() const override { return playing_; } + bool Playing() const override; bool SpeakerVolumeIsAvailable() override; int SetSpeakerVolume(uint32_t volume) override; diff --git a/sdk/android/src/jni/audio_device/opensles_recorder.cc b/sdk/android/src/jni/audio_device/opensles_recorder.cc index e77e62eb5d..ecef308318 100644 --- a/sdk/android/src/jni/audio_device/opensles_recorder.cc +++ b/sdk/android/src/jni/audio_device/opensles_recorder.cc @@ -110,6 +110,10 @@ int OpenSLESRecorder::InitRecording() { return 0; } +bool OpenSLESRecorder::RecordingIsInitialized() const { + return initialized_; +} + int OpenSLESRecorder::StartRecording() { ALOGD("StartRecording[tid=%d]", rtc::CurrentThreadId()); RTC_DCHECK(thread_checker_.CalledOnValidThread()); @@ -168,6 +172,10 @@ int OpenSLESRecorder::StopRecording() { return 0; } +bool OpenSLESRecorder::Recording() const { + return recording_; +} + void OpenSLESRecorder::AttachAudioBuffer(AudioDeviceBuffer* audio_buffer) { ALOGD("AttachAudioBuffer"); RTC_DCHECK(thread_checker_.CalledOnValidThread()); diff --git a/sdk/android/src/jni/audio_device/opensles_recorder.h b/sdk/android/src/jni/audio_device/opensles_recorder.h index f1b0cbfd6e..994335f307 100644 --- a/sdk/android/src/jni/audio_device/opensles_recorder.h +++ b/sdk/android/src/jni/audio_device/opensles_recorder.h @@ -71,11 +71,11 @@ class OpenSLESRecorder : public AudioInput { int Terminate() override; int InitRecording() override; - bool RecordingIsInitialized() const override { return initialized_; } + bool RecordingIsInitialized() const override; int StartRecording() override; int StopRecording() override; - bool Recording() const override { return recording_; } + bool Recording() const override; void AttachAudioBuffer(AudioDeviceBuffer* audio_buffer) override;