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

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

Issue 15217002: Using native sampling rate and optimal buffer size for audio on Android. (Closed) Base URL: https://src.chromium.org/svn/trunk/src/
Patch Set: rebase Created 7 years, 7 months 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
===================================================================
--- media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java (revision 200561)
+++ media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java (working copy)
@@ -8,7 +8,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.media.AudioFormat;
import android.media.AudioManager;
+import android.media.AudioRecord;
+import android.media.AudioTrack;
import android.os.Build;
import android.util.Log;
@@ -18,9 +22,11 @@
@JNINamespace("media")
class AudioManagerAndroid {
private static final String TAG = AudioManagerAndroid.class.getSimpleName();
+
// Most of Google lead devices use 44.1K as the default sampling rate, 44.1K
// is also widely used on other android devices.
private static final int DEFAULT_SAMPLING_RATE = 44100;
+ private static final int DEFAULT_FRAME_PER_BUFFER = 256;
private final AudioManager mAudioManager;
private final Context mContext;
@@ -81,8 +87,14 @@
mAudioManager.setSpeakerphoneOn(mOriginalSpeakerStatus);
}
+ private void logDeviceInfo() {
+ Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER +
+ " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
+ " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT);
+ }
+
@CalledByNative
- public int getNativeOutputSampleRate() {
+ private int getNativeOutputSampleRate() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
String sampleRateString = mAudioManager.getProperty(
AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
@@ -93,9 +105,44 @@
}
}
- private void logDeviceInfo() {
- Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER +
- " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
- " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT);
+ @CalledByNative
+ private static int getMinInputBufSize(int sampleRate, int channels) {
+ int channelConfig;
+ if (channels == 1)
+ channelConfig = AudioFormat.CHANNEL_IN_MONO;
+ else if (channels == 2)
+ channelConfig = AudioFormat.CHANNEL_IN_STEREO;
+ else
+ return -1;
+ return AudioRecord.getMinBufferSize(sampleRate, channelConfig,
+ AudioFormat.ENCODING_PCM_16BIT);
}
+
+ @CalledByNative
+ private static int getMinOutputBufSize(int sampleRate, int channels) {
+ int channelConfig;
+ if (channels == 1)
+ channelConfig = AudioFormat.CHANNEL_OUT_MONO;
+ else if (channels == 2)
+ channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
+ else
+ return -1;
+ return AudioTrack.getMinBufferSize(sampleRate, channelConfig,
+ AudioFormat.ENCODING_PCM_16BIT);
+ }
+
+ @CalledByNative
+ private boolean isAudioLowLatencySupported() {
+ return mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_AUDIO_LOW_LATENCY);
+ }
+
+ @CalledByNative
+ private int getAudioLowLatencyFrameSize() {
+ String framesPerBuffer =
+ mAudioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
+ return (framesPerBuffer == null ?
+ DEFAULT_FRAME_PER_BUFFER : Integer.parseInt(framesPerBuffer));
+ }
+
}
« media/audio/android/audio_manager_android.cc ('K') | « media/audio/android/audio_manager_android.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698