| 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 9066380d62c230dc9fd74c632085e0d991794746..5b51c012d006fa54af8f424e32c26f75068e3032 100644
|
| --- a/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
|
| +++ b/media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java
|
| @@ -8,7 +8,11 @@ import android.content.BroadcastReceiver;
|
| 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,6 +22,10 @@ import org.chromium.base.JNINamespace;
|
| @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;
|
| @@ -83,4 +91,57 @@ class AudioManagerAndroid {
|
| " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
|
| " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT);
|
| }
|
| +
|
| + @CalledByNative
|
| + 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);
|
| + return (sampleRateString == null ?
|
| + DEFAULT_SAMPLING_RATE : Integer.parseInt(sampleRateString));
|
| + } else {
|
| + return DEFAULT_SAMPLING_RATE;
|
| + }
|
| + }
|
| +
|
| + @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));
|
| + }
|
| +
|
| }
|
|
|