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

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: change func name 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 +
+ " 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,58 @@
}
}
- private void logDeviceInfo() {
- Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER +
- " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
- " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT);
+ /**
+ * Returns the minimum frame size required for audio input.
+ *
+ * @param sampleRate sampling rate
+ * @param channels number of channels
+ */
+ @CalledByNative
+ private static int getMinInputFrameSize(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) / 2 / channels;
}
+
+ /**
+ * Returns the minimum frame size required for audio output.
+ *
+ * @param sampleRate sampling rate
+ * @param channels number of channels
+ */
+ @CalledByNative
+ private static int getMinOutputFrameSize(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) / 2 / channels;
+ }
+
+ @CalledByNative
+ private boolean isAudioLowLatencySupported() {
+ return mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_AUDIO_LOW_LATENCY);
+ }
+
+ @CalledByNative
+ private int getAudioLowLatencyOutputFrameSize() {
+ 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