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

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

Issue 115413002: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.media; 5 package org.chromium.media;
6 6
7 import android.bluetooth.BluetoothAdapter; 7 import android.bluetooth.BluetoothAdapter;
8 import android.bluetooth.BluetoothManager; 8 import android.bluetooth.BluetoothManager;
9 import android.content.BroadcastReceiver; 9 import android.content.BroadcastReceiver;
10 import android.content.ContentResolver; 10 import android.content.ContentResolver;
11 import android.content.Context; 11 import android.content.Context;
12 import android.content.Intent; 12 import android.content.Intent;
13 import android.content.IntentFilter; 13 import android.content.IntentFilter;
14 import android.content.pm.PackageManager; 14 import android.content.pm.PackageManager;
15 import android.database.ContentObserver; 15 import android.database.ContentObserver;
16 import android.media.AudioFormat; 16 import android.media.AudioFormat;
17 import android.media.AudioManager; 17 import android.media.AudioManager;
18 import android.media.AudioRecord; 18 import android.media.AudioRecord;
19 import android.media.AudioTrack; 19 import android.media.AudioTrack;
20 import android.media.audiofx.AcousticEchoCanceler;
20 import android.os.Build; 21 import android.os.Build;
21 import android.os.Handler; 22 import android.os.Handler;
22 import android.os.Looper; 23 import android.os.Looper;
23 import android.os.Process; 24 import android.os.Process;
24 import android.provider.Settings; 25 import android.provider.Settings;
25 import android.util.Log; 26 import android.util.Log;
26 27
27 import org.chromium.base.CalledByNative; 28 import org.chromium.base.CalledByNative;
28 import org.chromium.base.JNINamespace; 29 import org.chromium.base.JNINamespace;
29 30
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 i++; 304 i++;
304 } 305 }
305 } 306 }
306 logd("getAudioInputDeviceNames: " + devices); 307 logd("getAudioInputDeviceNames: " + devices);
307 return array; 308 return array;
308 } 309 }
309 } 310 }
310 311
311 @CalledByNative 312 @CalledByNative
312 private int getNativeOutputSampleRate() { 313 private int getNativeOutputSampleRate() {
313 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.J ELLY_BEAN_MR1) { 314 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
314 String sampleRateString = mAudioManager.getProperty( 315 String sampleRateString = mAudioManager.getProperty(
315 AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); 316 AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
316 return (sampleRateString == null ? 317 return (sampleRateString == null ?
317 DEFAULT_SAMPLING_RATE : Integer.parseInt(sampleRateString)); 318 DEFAULT_SAMPLING_RATE : Integer.parseInt(sampleRateString));
318 } else { 319 } else {
319 return DEFAULT_SAMPLING_RATE; 320 return DEFAULT_SAMPLING_RATE;
320 } 321 }
321 } 322 }
322 323
323 /** 324 /**
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 368 }
368 369
369 @CalledByNative 370 @CalledByNative
370 private int getAudioLowLatencyOutputFrameSize() { 371 private int getAudioLowLatencyOutputFrameSize() {
371 String framesPerBuffer = 372 String framesPerBuffer =
372 mAudioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PE R_BUFFER); 373 mAudioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PE R_BUFFER);
373 return (framesPerBuffer == null ? 374 return (framesPerBuffer == null ?
374 DEFAULT_FRAME_PER_BUFFER : Integer.parseInt(framesPerBuffer)); 375 DEFAULT_FRAME_PER_BUFFER : Integer.parseInt(framesPerBuffer));
375 } 376 }
376 377
378 @CalledByNative
379 public static boolean shouldUseAcousticEchoCanceler() {
380 // AcousticEchoCanceler was added in API level 16 (Jelly Bean).
381 // Next is a list of device models which have been vetted for good
382 // quality platform echo cancellation.
383 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN &&
384 AcousticEchoCanceler.isAvailable() &&
385 (Build.MODEL.equals("Nexus 5") ||
386 Build.MODEL.equals("Nexus 7"));
387 }
388
377 /** Sets the speaker phone mode. */ 389 /** Sets the speaker phone mode. */
378 public void setSpeakerphoneOn(boolean on) { 390 public void setSpeakerphoneOn(boolean on) {
379 boolean wasOn = mAudioManager.isSpeakerphoneOn(); 391 boolean wasOn = mAudioManager.isSpeakerphoneOn();
380 if (wasOn == on) { 392 if (wasOn == on) {
381 return; 393 return;
382 } 394 }
383 mAudioManager.setSpeakerphoneOn(on); 395 mAudioManager.setSpeakerphoneOn(on);
384 } 396 }
385 397
386 /** Sets the microphone mute state. */ 398 /** Sets the microphone mute state. */
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 } 603 }
592 } 604 }
593 605
594 private void logDeviceInfo() { 606 private void logDeviceInfo() {
595 Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER + 607 Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER +
596 " Board: " + Build.BOARD + " Device: " + Build.DEVICE + 608 " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
597 " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT); 609 " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT);
598 } 610 }
599 611
600 /** Trivial helper method for debug logging */ 612 /** Trivial helper method for debug logging */
601 private void logd(String msg) { 613 private static void logd(String msg) {
602 Log.d(TAG, msg); 614 Log.d(TAG, msg);
603 } 615 }
604 616
605 /** Trivial helper method for error logging */ 617 /** Trivial helper method for error logging */
606 private void loge(String msg) { 618 private static void loge(String msg) {
607 Log.e(TAG, msg); 619 Log.e(TAG, msg);
608 } 620 }
609 621
610 private class SettingsObserver extends ContentObserver { 622 private class SettingsObserver extends ContentObserver {
611 SettingsObserver() { 623 SettingsObserver() {
612 super(new Handler()); 624 super(new Handler());
613 mContentResolver.registerContentObserver(Settings.System.CONTENT_URI , true, this); 625 mContentResolver.registerContentObserver(Settings.System.CONTENT_URI , true, this);
614 } 626 }
615 627
616 @Override 628 @Override
(...skipping 19 matching lines...) Expand all
636 synchronized (mSettingsObserverLock) { 648 synchronized (mSettingsObserverLock) {
637 mSettingsObserver = new SettingsObserver(); 649 mSettingsObserver = new SettingsObserver();
638 mSettingsObserverLock.notify(); 650 mSettingsObserverLock.notify();
639 } 651 }
640 652
641 // Listen for volume change. 653 // Listen for volume change.
642 Looper.loop(); 654 Looper.loop();
643 } 655 }
644 } 656 }
645 } 657 }
OLDNEW
« no previous file with comments | « media/audio/win/audio_manager_win.cc ('k') | media/base/android/java/src/org/chromium/media/AudioRecordInput.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698