Chromium Code Reviews| 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)); |
| + } |
| + |
| } |