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