diff --git a/media/libaaudio/src/client/AudioStreamInternal.cpp b/media/libaaudio/src/client/AudioStreamInternal.cpp index 6723ec9225..076c92ddce 100644 --- a/media/libaaudio/src/client/AudioStreamInternal.cpp +++ b/media/libaaudio/src/client/AudioStreamInternal.cpp @@ -230,7 +230,7 @@ aaudio_result_t AudioStreamInternal::open(const AudioStreamBuilder &builder) { } const int32_t callbackBufferSize = mCallbackFrames * getBytesPerFrame(); - mCallbackBuffer = new uint8_t[callbackBufferSize]; + mCallbackBuffer = std::make_unique(callbackBufferSize); } // For debugging and analyzing the distribution of MMAP timestamps. @@ -279,8 +279,7 @@ aaudio_result_t AudioStreamInternal::release_l() { mServiceStreamHandle = AAUDIO_HANDLE_INVALID; mServiceInterface.closeStream(serviceStreamHandle); - delete[] mCallbackBuffer; - mCallbackBuffer = nullptr; + mCallbackBuffer.reset(); result = mEndPointParcelable.close(); aaudio_result_t result2 = AudioStream::release_l(); return (result != AAUDIO_OK) ? result : result2; diff --git a/media/libaaudio/src/client/AudioStreamInternal.h b/media/libaaudio/src/client/AudioStreamInternal.h index 095f30c280..42f2889e89 100644 --- a/media/libaaudio/src/client/AudioStreamInternal.h +++ b/media/libaaudio/src/client/AudioStreamInternal.h @@ -164,7 +164,7 @@ protected: // Offset from underlying frame position. int64_t mFramesOffsetFromService = 0; // offset for timestamps - uint8_t *mCallbackBuffer = nullptr; + std::unique_ptr mCallbackBuffer; int32_t mCallbackFrames = 0; // The service uses this for SHARED mode. diff --git a/media/libaaudio/src/client/AudioStreamInternalCapture.cpp b/media/libaaudio/src/client/AudioStreamInternalCapture.cpp index 9684ee4475..32cf368a30 100644 --- a/media/libaaudio/src/client/AudioStreamInternalCapture.cpp +++ b/media/libaaudio/src/client/AudioStreamInternalCapture.cpp @@ -243,7 +243,7 @@ void *AudioStreamInternalCapture::callbackLoop() { int64_t timeoutNanos = calculateReasonableTimeout(mCallbackFrames); // This is a BLOCKING READ! - result = read(mCallbackBuffer, mCallbackFrames, timeoutNanos); + result = read(mCallbackBuffer.get(), mCallbackFrames, timeoutNanos); if ((result != mCallbackFrames)) { ALOGE("callbackLoop: read() returned %d", result); if (result >= 0) { @@ -255,7 +255,7 @@ void *AudioStreamInternalCapture::callbackLoop() { } // Call application using the AAudio callback interface. - callbackResult = maybeCallDataCallback(mCallbackBuffer, mCallbackFrames); + callbackResult = maybeCallDataCallback(mCallbackBuffer.get(), mCallbackFrames); if (callbackResult == AAUDIO_CALLBACK_RESULT_STOP) { ALOGD("%s(): callback returned AAUDIO_CALLBACK_RESULT_STOP", __func__); diff --git a/media/libaaudio/src/client/AudioStreamInternalPlay.cpp b/media/libaaudio/src/client/AudioStreamInternalPlay.cpp index 536009a4e1..b50a5121e1 100644 --- a/media/libaaudio/src/client/AudioStreamInternalPlay.cpp +++ b/media/libaaudio/src/client/AudioStreamInternalPlay.cpp @@ -268,11 +268,11 @@ void *AudioStreamInternalPlay::callbackLoop() { // result might be a frame count while (mCallbackEnabled.load() && isActive() && (result >= 0)) { // Call application using the AAudio callback interface. - callbackResult = maybeCallDataCallback(mCallbackBuffer, mCallbackFrames); + callbackResult = maybeCallDataCallback(mCallbackBuffer.get(), mCallbackFrames); if (callbackResult == AAUDIO_CALLBACK_RESULT_CONTINUE) { // Write audio data to stream. This is a BLOCKING WRITE! - result = write(mCallbackBuffer, mCallbackFrames, timeoutNanos); + result = write(mCallbackBuffer.get(), mCallbackFrames, timeoutNanos); if ((result != mCallbackFrames)) { if (result >= 0) { // Only wrote some of the frames requested. Must have timed out.