| 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);
|
| }
|
| }
|
|
|