Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Unified Diff: media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java

Issue 99033003: Enable platform echo cancellation through the AudioRecord path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
diff --git a/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java b/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
index 1a9cb0a383687af8f62e67fa8864f05a6917e742..9bf82cfefb760ba534f09419d4892b17b9e290ae 100644
--- a/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
+++ b/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
@@ -11,6 +11,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.media.audiofx.AcousticEchoCanceler;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
@@ -104,6 +105,14 @@ class AudioManagerAndroid {
// fails.
private static final int DEFAULT_FRAME_PER_BUFFER = 256;
+ // List of device models which have been vetted for good quality platform
+ // echo cancellation.
+ private static final Set<String> PLATFORM_AEC_MODEL_WHITELIST =
+ new HashSet<String>(Arrays.asList(new String[] {
+ "Nexus 5",
+ "Nexus 7"
+ }));
+
private final AudioManager mAudioManager;
private final Context mContext;
@@ -278,7 +287,7 @@ class AudioManagerAndroid {
@CalledByNative
private int getNativeOutputSampleRate() {
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
String sampleRateString = mAudioManager.getProperty(
AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
return (sampleRateString == null ?
@@ -342,6 +351,20 @@ class AudioManagerAndroid {
DEFAULT_FRAME_PER_BUFFER : Integer.parseInt(framesPerBuffer));
}
+ @CalledByNative
+ public static boolean isPlatformAECSupported() {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ // AcousticEchoCanceler was added in API level 16 (Jelly Bean).
+ return false;
+ }
+
+ boolean isAvailable = AcousticEchoCanceler.isAvailable();
+ boolean isWhitelisted = PLATFORM_AEC_MODEL_WHITELIST.contains(Build.MODEL);
+ logd("AcousticEchoCanceler.isAvailable: " + isAvailable);
+ logd("Build.MODEL: " + Build.MODEL + " isWhitelisted: " + isWhitelisted);
+ return isAvailable && isWhitelisted;
+ }
+
/** Sets the speaker phone mode. */
public void setSpeakerphoneOn(boolean on) {
boolean wasOn = mAudioManager.isSpeakerphoneOn();
@@ -567,12 +590,12 @@ class AudioManagerAndroid {
}
/** Trivial helper method for debug logging */
- private void logd(String msg) {
+ private static void logd(String msg) {
Log.d(TAG, msg);
}
/** Trivial helper method for error logging */
- private void loge(String msg) {
+ private static void loge(String msg) {
Log.e(TAG, msg);
}
}

Powered by Google App Engine
This is Rietveld 408576698