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

Side by Side 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: address Qinmin's comments 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.media; 5 package org.chromium.media;
6 6
7 import android.content.BroadcastReceiver; 7 import android.content.BroadcastReceiver;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.IntentFilter; 10 import android.content.IntentFilter;
11 import android.content.pm.PackageManager;
12 import android.media.AudioFormat;
11 import android.media.AudioManager; 13 import android.media.AudioManager;
14 import android.media.AudioRecord;
15 import android.media.AudioTrack;
12 import android.os.Build; 16 import android.os.Build;
13 import android.util.Log; 17 import android.util.Log;
14 18
15 import org.chromium.base.CalledByNative; 19 import org.chromium.base.CalledByNative;
16 import org.chromium.base.JNINamespace; 20 import org.chromium.base.JNINamespace;
17 21
18 @JNINamespace("media") 22 @JNINamespace("media")
19 class AudioManagerAndroid { 23 class AudioManagerAndroid {
20 private static final String TAG = AudioManagerAndroid.class.getSimpleName(); 24 private static final String TAG = AudioManagerAndroid.class.getSimpleName();
25
21 // Most of Google lead devices use 44.1K as the default sampling rate, 44.1K 26 // Most of Google lead devices use 44.1K as the default sampling rate, 44.1K
22 // is also widely used on other android devices. 27 // is also widely used on other android devices.
23 private static final int DEFAULT_SAMPLING_RATE = 44100; 28 private static final int DEFAULT_SAMPLING_RATE = 44100;
29 private static final int DEFAULT_FRAME_PER_BUFFER = 256;
no longer working on chromium 2013/05/20 09:59:26 why 256 is the default one? Add comment please.
leozwang1 2013/05/20 17:41:05 Done.
24 30
25 private final AudioManager mAudioManager; 31 private final AudioManager mAudioManager;
26 private final Context mContext; 32 private final Context mContext;
27 33
28 private BroadcastReceiver mReceiver; 34 private BroadcastReceiver mReceiver;
29 private boolean mOriginalSpeakerStatus; 35 private boolean mOriginalSpeakerStatus;
30 36
31 @CalledByNative 37 @CalledByNative
32 public void setMode(int mode) { 38 public void setMode(int mode) {
33 try { 39 try {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 mContext.registerReceiver(mReceiver, filter); 80 mContext.registerReceiver(mReceiver, filter);
75 } 81 }
76 82
77 @CalledByNative 83 @CalledByNative
78 public void unregisterHeadsetReceiver() { 84 public void unregisterHeadsetReceiver() {
79 mContext.unregisterReceiver(mReceiver); 85 mContext.unregisterReceiver(mReceiver);
80 mReceiver = null; 86 mReceiver = null;
81 mAudioManager.setSpeakerphoneOn(mOriginalSpeakerStatus); 87 mAudioManager.setSpeakerphoneOn(mOriginalSpeakerStatus);
82 } 88 }
83 89
90 private void logDeviceInfo() {
91 Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER +
92 " Board: " + Build.BOARD + " Device: " + Build.DEVICE +
93 " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT);
94 }
95
84 @CalledByNative 96 @CalledByNative
85 public int getNativeOutputSampleRate() { 97 private int getNativeOutputSampleRate() {
86 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.J ELLY_BEAN_MR1) { 98 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.J ELLY_BEAN_MR1) {
87 String sampleRateString = mAudioManager.getProperty( 99 String sampleRateString = mAudioManager.getProperty(
88 AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); 100 AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
89 return (sampleRateString == null ? 101 return (sampleRateString == null ?
90 DEFAULT_SAMPLING_RATE : Integer.parseInt(sampleRateString)); 102 DEFAULT_SAMPLING_RATE : Integer.parseInt(sampleRateString));
91 } else { 103 } else {
92 return DEFAULT_SAMPLING_RATE; 104 return DEFAULT_SAMPLING_RATE;
93 } 105 }
94 } 106 }
95 107
96 private void logDeviceInfo() { 108 @CalledByNative
97 Log.i(TAG, "Manufacturer:" + Build.MANUFACTURER + 109 private static int getMinInputBufSize(int sampleRate, int channels) {
98 " Board: " + Build.BOARD + " Device: " + Build.DEVICE + 110 int channelConfig;
99 " Model: " + Build.MODEL + " PRODUCT: " + Build.PRODUCT); 111 if (channels == 1) {
112 channelConfig = AudioFormat.CHANNEL_IN_MONO;
113 } else if (channels == 2) {
114 channelConfig = AudioFormat.CHANNEL_IN_STEREO;
115 } else {
116 return -1;
117 }
118 return AudioRecord.getMinBufferSize(sampleRate, channelConfig,
119 AudioFormat.ENCODING_PCM_16BIT);
100 } 120 }
121
122 @CalledByNative
123 private static int getMinOutputBufSize(int sampleRate, int channels) {
124 int channelConfig;
125 if (channels == 1) {
126 channelConfig = AudioFormat.CHANNEL_OUT_MONO;
127 } else if (channels == 2) {
128 channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
129 } else {
130 return -1;
131 }
132 return AudioTrack.getMinBufferSize(sampleRate, channelConfig,
133 AudioFormat.ENCODING_PCM_16BIT);
134 }
135
136 @CalledByNative
137 private boolean isAudioLowLatencySupported() {
138 return mContext.getPackageManager().hasSystemFeature(
139 PackageManager.FEATURE_AUDIO_LOW_LATENCY);
140 }
141
142 @CalledByNative
143 private int getAudioLowLatencyFrameSize() {
144 String framesPerBuffer =
145 mAudioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PE R_BUFFER);
146 return (framesPerBuffer == null ?
147 DEFAULT_FRAME_PER_BUFFER : Integer.parseInt(framesPerBuffer));
148 }
149
101 } 150 }
OLDNEW
« media/audio/android/audio_manager_android.cc ('K') | « 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