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

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
« no previous file with comments | « media/audio/android/audio_manager_android.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
===================================================================
--- media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java (revision 201553)
+++ 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,14 @@
@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;
+ // Randomly picked up frame size which is close to return value on N4.
+ // Return this default value when
+ // getProperty(PROPERTY_OUTPUT_FRAMES_PER_BUFFER) fails.
+ private static final int DEFAULT_FRAME_PER_BUFFER = 256;
private final AudioManager mAudioManager;
private final Context mContext;
@@ -81,8 +90,14 @@
mAudioManager.setSpeakerphoneOn(mOriginalSpeakerStatus);
}
+ private void logDeviceInfo() {
+ Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER +
+ " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
qinmin 2013/05/23 16:27:39 nit: fix the indentation
leozwang1 2013/05/23 21:13:46 Done.
+ " 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 +108,46 @@
}
}
- 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) {
no longer working on chromium 2013/05/22 21:00:00 I am wondering if you really need the |channels| t
leozwang1 2013/05/22 21:03:41 java api takes number of channel as the input para
no longer working on chromium 2013/05/22 21:21:37 I know, but please note that you divide the return
leozwang1 2013/05/22 21:27:42 which converts size in bytes to frames. I think I
no longer working on chromium 2013/05/22 21:41:53 Right, that is exactly what I am trying to say, we
+ 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) {
no longer working on chromium 2013/05/22 21:00:00 the same here, could you please verify it?
+ 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));
+ }
+
}
« no previous file with comments | « 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