Index: webrtc/modules/audio_device/android/opensles_player.h |
diff --git a/webrtc/modules/audio_device/android/opensles_player.h b/webrtc/modules/audio_device/android/opensles_player.h |
index e3978a19909f7594981bf87423be8956c2c5df45..1b2b1d78fdbebfeb7b2811cfee50f0e1e92c7f17 100644 |
--- a/webrtc/modules/audio_device/android/opensles_player.h |
+++ b/webrtc/modules/audio_device/android/opensles_player.h |
@@ -11,8 +11,6 @@ |
#ifndef WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_OPENSLES_PLAYER_H_ |
#define WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_OPENSLES_PLAYER_H_ |
-#include <memory> |
- |
#include <SLES/OpenSLES.h> |
#include <SLES/OpenSLES_Android.h> |
#include <SLES/OpenSLES_AndroidConfiguration.h> |
@@ -49,11 +47,13 @@ class FineAudioBuffer; |
// the output latency may be higher. |
class OpenSLESPlayer { |
public: |
- // The lower output latency path is used only if the application requests a |
- // buffer count of 2 or more, and a buffer size and sample rate that are |
- // compatible with the device's native output configuration provided via the |
- // audio manager at construction. |
- static const int kNumOfOpenSLESBuffers = 4; |
+ // Beginning with API level 17 (Android 4.2), a buffer count of 2 or more is |
+ // required for lower latency. Beginning with API level 18 (Android 4.3), a |
+ // buffer count of 1 is sufficient for lower latency. In addition, the buffer |
+ // size and sample rate must be compatible with the device's native output |
+ // configuration provided via the audio manager at construction. |
+ // TODO(henrika): perhaps set this value dynamically based on OS version. |
+ static const int kNumOfOpenSLESBuffers = 2; |
explicit OpenSLESPlayer(AudioManager* audio_manager); |
~OpenSLESPlayer(); |
@@ -88,11 +88,6 @@ class OpenSLESPlayer { |
// internal audio thread while output streaming is active. |
void EnqueuePlayoutData(); |
- // Configures the SL_DATAFORMAT_PCM structure. |
- SLDataFormat_PCM CreatePCMConfiguration(size_t channels, |
- int sample_rate, |
- size_t bits_per_sample); |
- |
// Allocate memory for audio buffers which will be used to render audio |
// via the SLAndroidSimpleBufferQueueItf interface. |
void AllocateDataBuffers(); |
@@ -144,11 +139,6 @@ class OpenSLESPlayer { |
// 32-bit float representation is needed. |
SLDataFormat_PCM pcm_format_; |
- // Number of bytes per audio buffer in each |audio_buffers_[i]|. |
- // Typical sizes are 480 or 512 bytes corresponding to native output buffer |
- // sizes of 240 or 256 audio frames respectively. |
- size_t bytes_per_buffer_; |
- |
// Queue of audio buffers to be used by the player object for rendering |
// audio. They will be used in a Round-robin way and the size of each buffer |
// is given by FineAudioBuffer::RequiredBufferSizeBytes(). |
@@ -159,12 +149,12 @@ class OpenSLESPlayer { |
// a finer or coarser granularity. I.e. interacting with this class instead |
// of directly with the AudioDeviceBuffer one can ask for any number of |
// audio data samples. |
- // Example: native buffer size is 240 audio frames at 48kHz sample rate. |
- // WebRTC will provide 480 audio frames per 10ms but OpenSL ES asks for 240 |
- // in each callback (one every 5ms). This class can then ask for 240 and the |
- // FineAudioBuffer will ask WebRTC for new data only every second callback |
- // and also cach non-utilized audio. |
- std::unique_ptr<FineAudioBuffer> fine_buffer_; |
+ // Example: native buffer size can be 192 audio frames at 48kHz sample rate. |
+ // WebRTC will provide 480 audio frames per 10ms but OpenSL ES asks for 192 |
+ // in each callback (one every 4th ms). This class can then ask for 192 and |
+ // the FineAudioBuffer will ask WebRTC for new data approximately only every |
+ // second callback and also cache non-utilized audio. |
+ std::unique_ptr<FineAudioBuffer> fine_audio_buffer_; |
// Keeps track of active audio buffer 'n' in the audio_buffers_[n] queue. |
// Example (kNumOfOpenSLESBuffers = 2): counts 0, 1, 0, 1, ... |