Use std::vector over uint8_t[]
diff --git a/src/opensles/AudioStreamOpenSLES.cpp b/src/opensles/AudioStreamOpenSLES.cpp
index f08b3ab..89f00e3 100644
--- a/src/opensles/AudioStreamOpenSLES.cpp
+++ b/src/opensles/AudioStreamOpenSLES.cpp
@@ -37,28 +37,24 @@
mSessionId = SessionId::None;
}
-AudioStreamOpenSLES::~AudioStreamOpenSLES() {
- delete[] mCallbackBuffer;
-}
-
constexpr SLuint32 kAudioChannelCountMax = 30;
constexpr SLuint32 SL_ANDROID_UNKNOWN_CHANNELMASK = 0; // Matches name used internally.
SLuint32 AudioStreamOpenSLES::channelCountToChannelMaskDefault(int channelCount) {
if (channelCount > kAudioChannelCountMax) {
return SL_ANDROID_UNKNOWN_CHANNELMASK;
- } else {
- SLuint32 bitfield = (1 << channelCount) - 1;
-
- // Check for OS at run-time.
- if(getSdkVersion() >= __ANDROID_API_N__) {
- return SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield);
- } else {
- // Indexed channels masks were added in N.
- // For before N, the best we can do is use a positional channel mask.
- return bitfield;
- }
}
+
+ SLuint32 bitfield = (1 << channelCount) - 1;
+
+ // Check for OS at run-time.
+ if(getSdkVersion() >= __ANDROID_API_N__) {
+ return SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield);
+ }
+
+ // Indexed channels masks were added in N.
+ // For before N, the best we can do is use a positional channel mask.
+ return bitfield;
}
static bool s_isLittleEndian() {
@@ -109,8 +105,8 @@
LOGE("AudioStreamOpenSLES::open() bytesPerCallback < 0, bad format?");
return Result::ErrorInvalidFormat; // causing bytesPerFrame == 0
}
- delete[] mCallbackBuffer; // to prevent memory leaks
- mCallbackBuffer = new uint8_t[mBytesPerCallback];
+
+ mCallbackBuffer.reserve(mBytesPerCallback);
mSharingMode = SharingMode::Shared;
@@ -211,38 +207,36 @@
}
Result AudioStreamOpenSLES::close() {
-
- if (mState == StreamState::Closed){
+ if (mState == StreamState::Closed) {
return Result::ErrorClosed;
- } else {
- AudioStreamBuffered::close();
-
- onBeforeDestroy();
-
- if (mObjectInterface != nullptr) {
- (*mObjectInterface)->Destroy(mObjectInterface);
- mObjectInterface = nullptr;
-
- }
-
- onAfterDestroy();
-
- mSimpleBufferQueueInterface = nullptr;
- EngineOpenSLES::getInstance().close();
-
- setState(StreamState::Closed);
- return Result::OK;
}
+
+ AudioStreamBuffered::close();
+
+ onBeforeDestroy();
+
+ if (mObjectInterface != nullptr) {
+ (*mObjectInterface)->Destroy(mObjectInterface);
+ mObjectInterface = nullptr;
+ }
+
+ onAfterDestroy();
+
+ mSimpleBufferQueueInterface = nullptr;
+ EngineOpenSLES::getInstance().close();
+
+ setState(StreamState::Closed);
+ return Result::OK;
}
SLresult AudioStreamOpenSLES::enqueueCallbackBuffer(SLAndroidSimpleBufferQueueItf bq) {
- return (*bq)->Enqueue(bq, mCallbackBuffer, mBytesPerCallback);
+ return (*bq)->Enqueue(bq, mCallbackBuffer.data(), mBytesPerCallback);
}
void AudioStreamOpenSLES::processBufferCallback(SLAndroidSimpleBufferQueueItf bq) {
bool stopStream = false;
// Ask the callback to fill the output buffer with data.
- DataCallbackResult result = fireDataCallback(mCallbackBuffer, mFramesPerCallback);
+ DataCallbackResult result = fireDataCallback(mCallbackBuffer.data(), mFramesPerCallback);
if (result == DataCallbackResult::Continue) {
// Update Oboe service position based on OpenSL ES position.
updateServiceFrameCounter();
diff --git a/src/opensles/AudioStreamOpenSLES.h b/src/opensles/AudioStreamOpenSLES.h
index 3d6996a..082e9e6 100644
--- a/src/opensles/AudioStreamOpenSLES.h
+++ b/src/opensles/AudioStreamOpenSLES.h
@@ -17,6 +17,8 @@
#ifndef OBOE_AUDIO_STREAM_OPENSL_ES_H_
#define OBOE_AUDIO_STREAM_OPENSL_ES_H_
+#include <vector>
+
#include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Android.h>
@@ -45,7 +47,7 @@
AudioStreamOpenSLES();
explicit AudioStreamOpenSLES(const AudioStreamBuilder &builder);
- virtual ~AudioStreamOpenSLES();
+ virtual ~AudioStreamOpenSLES() = default;
virtual Result open() override;
virtual Result close() override;
@@ -110,7 +112,7 @@
SLObjectItf mObjectInterface = nullptr;
SLAndroidSimpleBufferQueueItf mSimpleBufferQueueInterface = nullptr;
- uint8_t *mCallbackBuffer = nullptr;
+ std::vector<uint8_t> mCallbackBuffer;
int32_t mBytesPerCallback = oboe::kUnspecified;
MonotonicCounter mPositionMillis; // for tracking OpenSL ES service position