Android audio code: Replace C++ template with input/output interface

Bug: webrtc:7452
Change-Id: Id816500051e065918bba5c2235d38ad8eb50a8eb
Reviewed-on: https://webrtc-review.googlesource.com/64442
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Paulina Hensman <phensman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22660}
This commit is contained in:
Magnus Jedvert
2018-03-28 16:51:15 +02:00
committed by Commit Bot
parent 85eef49fa2
commit 1a18e0ac46
21 changed files with 321 additions and 286 deletions

View File

@ -11,31 +11,76 @@
#include "sdk/android/native_api/audio_device_module/audio_device_android.h"
#include <stdlib.h>
#include <utility>
#include "rtc_base/logging.h"
#include "rtc_base/ptr_util.h"
#include "rtc_base/refcount.h"
#include "rtc_base/refcountedobject.h"
#include "system_wrappers/include/metrics.h"
#include "sdk/android/src/jni/audio_device/aaudio_player.h"
#include "sdk/android/src/jni/audio_device/aaudio_recorder.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 "system_wrappers/include/metrics.h"
namespace webrtc {
namespace {
// This template function takes care of some boiler plate.
template <typename AudioInputT, typename AudioOutputT>
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceModuleTemplate(
AudioDeviceModule::AudioLayer audio_layer,
JNIEnv* env,
jobject application_context) {
auto audio_manager = rtc::MakeUnique<android_adm::AudioManager>(
env, audio_layer, JavaParamRef<jobject>(application_context));
auto audio_input = rtc::MakeUnique<AudioInputT>(audio_manager.get());
auto audio_output = rtc::MakeUnique<AudioOutputT>(audio_manager.get());
return CreateAudioDeviceModuleFromInputAndOutput(
audio_layer, std::move(audio_manager), std::move(audio_input),
std::move(audio_output));
}
} // namespace
#if defined(AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO)
rtc::scoped_refptr<AudioDeviceModule> CreateAAudioAudioDeviceModule(
JNIEnv* env,
jobject application_context) {
return android_adm::AudioManager::CreateAAudioAudioDeviceModule(
env, JavaParamRef<jobject>(application_context));
RTC_LOG(INFO) << __FUNCTION__;
return CreateAudioDeviceModuleTemplate<android_adm::AAudioRecorder,
android_adm::AAudioPlayer>(
AudioDeviceModule::kAndroidAAudioAudio, env, application_context);
}
#endif
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceModule(
rtc::scoped_refptr<AudioDeviceModule> CreateJavaAudioDeviceModule(
JNIEnv* env,
jobject application_context,
bool use_opensles_input,
bool use_opensles_output) {
return android_adm::AudioManager::CreateAudioDeviceModule(
env, JavaParamRef<jobject>(application_context), use_opensles_input,
use_opensles_output);
jobject application_context) {
return CreateAudioDeviceModuleTemplate<android_adm::AudioRecordJni,
android_adm::AudioTrackJni>(
AudioDeviceModule::kAndroidJavaAudio, env, application_context);
}
rtc::scoped_refptr<AudioDeviceModule> CreateOpenSLESAudioDeviceModule(
JNIEnv* env,
jobject application_context) {
return CreateAudioDeviceModuleTemplate<android_adm::OpenSLESRecorder,
android_adm::OpenSLESPlayer>(
AudioDeviceModule::kAndroidJavaAudio, env, application_context);
}
rtc::scoped_refptr<AudioDeviceModule>
CreateJavaInputAndOpenSLESOutputAudioDeviceModule(JNIEnv* env,
jobject application_context) {
return CreateAudioDeviceModuleTemplate<android_adm::AudioRecordJni,
android_adm::OpenSLESPlayer>(
AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio, env,
application_context);
}
} // namespace webrtc

View File

@ -23,11 +23,17 @@ rtc::scoped_refptr<AudioDeviceModule> CreateAAudioAudioDeviceModule(
jobject application_context);
#endif
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceModule(
rtc::scoped_refptr<AudioDeviceModule> CreateJavaAudioDeviceModule(
JNIEnv* env,
jobject application_context,
bool use_opensles_input,
bool use_opensles_output);
jobject application_context);
rtc::scoped_refptr<AudioDeviceModule> CreateOpenSLESAudioDeviceModule(
JNIEnv* env,
jobject application_context);
rtc::scoped_refptr<AudioDeviceModule>
CreateJavaInputAndOpenSLESOutputAudioDeviceModule(JNIEnv* env,
jobject application_context);
} // namespace webrtc