Chromium Code Reviews| 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 0c37c0a9e3a51c92e52e907ba449fcc76cd7019b..ee95b63aa942e1fb3cdada4346589fa20e1081f3 100644 |
| --- a/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java |
| +++ b/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java |
| @@ -13,6 +13,7 @@ import android.content.Intent; |
| import android.content.IntentFilter; |
| import android.content.pm.PackageManager; |
| import android.database.ContentObserver; |
| +import android.media.audiofx.AcousticEchoCanceler; |
| import android.media.AudioFormat; |
| import android.media.AudioManager; |
| import android.media.AudioRecord; |
| @@ -111,6 +112,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 = |
|
henrika (OOO until Aug 14)
2013/12/06 22:51:57
Just FYI, I was once told that every byte counts,
ajm
2013/12/10 06:37:16
Thanks, removed it.
|
| + new HashSet<String>(Arrays.asList(new String[] { |
| + "Nexus 5", |
| + "Nexus 7" |
| + })); |
| + |
| private final AudioManager mAudioManager; |
| private final Context mContext; |
| private final long mNativeAudioManagerAndroid; |
| @@ -314,7 +323,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 ? |
| @@ -378,6 +387,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(); |
| @@ -603,12 +626,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); |
| } |