2015-03-09 12:39:53 +00:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 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.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "webrtc/modules/audio_device/android/ensure_initialized.h"
|
|
|
|
|
|
|
|
|
|
#include <pthread.h>
|
|
|
|
|
|
2015-09-17 00:24:34 -07:00
|
|
|
// Note: this dependency is dangerous since it reaches into Chromium's base.
|
|
|
|
|
// There's a risk of e.g. macro clashes. This file may only be used in tests.
|
2015-11-26 11:12:24 +01:00
|
|
|
#include "base/android/context_utils.h"
|
2015-03-09 12:39:53 +00:00
|
|
|
#include "base/android/jni_android.h"
|
2015-09-17 00:24:34 -07:00
|
|
|
#include "webrtc/base/checks.h"
|
2015-03-09 12:39:53 +00:00
|
|
|
#include "webrtc/modules/audio_device/android/audio_record_jni.h"
|
|
|
|
|
#include "webrtc/modules/audio_device/android/audio_track_jni.h"
|
2015-11-04 08:31:52 +01:00
|
|
|
#include "webrtc/modules/utility/include/jvm_android.h"
|
2015-03-09 12:39:53 +00:00
|
|
|
|
|
|
|
|
namespace webrtc {
|
|
|
|
|
namespace audiodevicemodule {
|
|
|
|
|
|
|
|
|
|
static pthread_once_t g_initialize_once = PTHREAD_ONCE_INIT;
|
|
|
|
|
|
|
|
|
|
void EnsureInitializedOnce() {
|
2015-09-17 00:24:34 -07:00
|
|
|
RTC_CHECK(::base::android::IsVMInitialized());
|
2015-03-09 12:39:53 +00:00
|
|
|
JNIEnv* jni = ::base::android::AttachCurrentThread();
|
|
|
|
|
JavaVM* jvm = NULL;
|
2015-09-17 00:24:34 -07:00
|
|
|
RTC_CHECK_EQ(0, jni->GetJavaVM(&jvm));
|
2015-03-09 12:39:53 +00:00
|
|
|
jobject context = ::base::android::GetApplicationContext();
|
|
|
|
|
|
Adding support for OpenSL ES output in native WebRTC
BUG=4573,2982,2175,3590
TEST=modules_unittests --gtest_filter=AudioDevice*, AppRTCDemo and WebRTCDemo
Summary:
- Removes dependency of the 'enable_android_opensl' compiler flag.
Instead, OpenSL ES is always supported, and will enabled for devices that
supports low-latency output.
- WebRTC no longer supports OpenSL ES for the input/recording side.
- Removes old code and demos using OpenSL ES for audio input.
- Improves accuracy of total delay estimates (better AEC performance).
- Reduces roundtrip audio latency; especially when OpenSL can be used.
Performance verified on: Nexus 5, 6, 7 and 9. Samsung Galaxy S4 and S6.
Android One device.
R=magjed@webrtc.org, phoglund@webrtc.org, tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/51759004
Cr-Commit-Position: refs/heads/master@{#9208}
2015-05-18 16:49:16 +02:00
|
|
|
// Initialize the Java environment (currently only used by the audio manager).
|
|
|
|
|
webrtc::JVM::Initialize(jvm, context);
|
2015-03-09 12:39:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EnsureInitialized() {
|
2015-09-17 00:24:34 -07:00
|
|
|
RTC_CHECK_EQ(0, pthread_once(&g_initialize_once, &EnsureInitializedOnce));
|
2015-03-09 12:39:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace audiodevicemodule
|
|
|
|
|
} // namespace webrtc
|