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

Unified Diff: webrtc/modules/audio_device/android/opensles_common.cc

Issue 2119633004: Adds support for OpenSL ES based audio capture on Android (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_device/android/opensles_common.cc
diff --git a/webrtc/modules/audio_device/android/opensles_common.cc b/webrtc/modules/audio_device/android/opensles_common.cc
index 9e3cbf7b9a9da6f5f20a53761d585d696701ee4a..d0768efaa6e89040f0d9e30a78e572f20a058560 100644
--- a/webrtc/modules/audio_device/android/opensles_common.cc
+++ b/webrtc/modules/audio_device/android/opensles_common.cc
@@ -10,13 +10,10 @@
#include "webrtc/modules/audio_device/android/opensles_common.h"
-#include <assert.h>
#include <SLES/OpenSLES.h>
#include "webrtc/base/arraysize.h"
-#include "webrtc/modules/audio_device/android/audio_common.h"
-
-using webrtc::kNumChannels;
+#include "webrtc/base/checks.h"
namespace webrtc {
@@ -49,24 +46,47 @@ const char* GetSLErrorString(size_t code) {
return sl_error_strings[code];
}
-SLDataFormat_PCM CreatePcmConfiguration(int sample_rate) {
- SLDataFormat_PCM configuration;
- configuration.formatType = SL_DATAFORMAT_PCM;
- configuration.numChannels = kNumChannels;
- // According to the opensles documentation in the ndk:
- // samplesPerSec is actually in units of milliHz, despite the misleading name.
- // It further recommends using constants. However, this would lead to a lot
- // of boilerplate code so it is not done here.
- configuration.samplesPerSec = sample_rate * 1000;
- configuration.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16;
- configuration.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16;
- configuration.channelMask = SL_SPEAKER_FRONT_CENTER;
- if (2 == configuration.numChannels) {
- configuration.channelMask =
- SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
+SLDataFormat_PCM CreatePCMConfiguration(size_t channels,
+ int sample_rate,
+ size_t bits_per_sample) {
+ RTC_CHECK_EQ(bits_per_sample, SL_PCMSAMPLEFORMAT_FIXED_16);
+ SLDataFormat_PCM format;
+ format.formatType = SL_DATAFORMAT_PCM;
+ format.numChannels = static_cast<SLuint32>(channels);
+ // Note that, the unit of sample rate is actually in milliHertz and not Hertz.
+ switch (sample_rate) {
+ case 8000:
+ format.samplesPerSec = SL_SAMPLINGRATE_8;
+ break;
+ case 16000:
+ format.samplesPerSec = SL_SAMPLINGRATE_16;
+ break;
+ case 22050:
+ format.samplesPerSec = SL_SAMPLINGRATE_22_05;
+ break;
+ case 32000:
+ format.samplesPerSec = SL_SAMPLINGRATE_32;
+ break;
+ case 44100:
+ format.samplesPerSec = SL_SAMPLINGRATE_44_1;
+ break;
+ case 48000:
+ format.samplesPerSec = SL_SAMPLINGRATE_48;
+ break;
+ default:
tommi 2016/09/15 09:34:13 I think I've read somewhere that 96kHz is supporte
henrika_webrtc 2016/09/16 13:30:47 Great feedback. You are correct. I have never seen
+ RTC_CHECK(false) << "Unsupported sample rate: " << sample_rate;
tommi 2016/09/15 09:34:12 nit: also include a break; here for consistency.
henrika_webrtc 2016/09/16 13:30:47 Done.
}
- configuration.endianness = SL_BYTEORDER_LITTLEENDIAN;
- return configuration;
+ format.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16;
+ format.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16;
+ format.endianness = SL_BYTEORDER_LITTLEENDIAN;
+ if (format.numChannels == 1)
tommi 2016/09/15 09:34:13 {} (see lines below)
henrika_webrtc 2016/09/16 13:30:47 Done.
+ format.channelMask = SL_SPEAKER_FRONT_CENTER;
+ else if (format.numChannels == 2)
+ format.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
+ else
+ RTC_CHECK(false) << "Unsupported number of channels: "
+ << format.numChannels;
+ return format;
}
-} // namespace webrtc_opensl
+} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698