Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3244f664 authored by Phil Burk's avatar Phil Burk
Browse files

aaudio: use unique_ptr for INPUT buffer

Bug: 151650670
Test: OboeTester "RECORD and PLAY" with EXCLUSIVE disabled
Change-Id: I7cd2d840fc4c5fb46d8eb3c3b7c7f406e300bfcd
parent 99f69fed
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -40,17 +40,12 @@ AAudioServiceEndpointCapture::AAudioServiceEndpointCapture(AAudioService &audioS
    mStreamInternal = &mStreamInternalCapture;
}

AAudioServiceEndpointCapture::~AAudioServiceEndpointCapture() {
    delete mDistributionBuffer;
}

aaudio_result_t AAudioServiceEndpointCapture::open(const aaudio::AAudioStreamRequest &request) {
    aaudio_result_t result = AAudioServiceEndpointShared::open(request);
    if (result == AAUDIO_OK) {
        delete mDistributionBuffer;
        int distributionBufferSizeBytes = getStreamInternal()->getFramesPerBurst()
                                          * getStreamInternal()->getBytesPerFrame();
        mDistributionBuffer = new uint8_t[distributionBufferSizeBytes];
        mDistributionBuffer = std::make_unique<uint8_t[]>(distributionBufferSizeBytes);
    }
    return result;
}
@@ -67,7 +62,8 @@ void *AAudioServiceEndpointCapture::callbackLoop() {
        int64_t mmapFramesRead = getStreamInternal()->getFramesRead();

        // Read audio data from stream using a blocking read.
        result = getStreamInternal()->read(mDistributionBuffer, getFramesPerBurst(), timeoutNanos);
        result = getStreamInternal()->read(mDistributionBuffer.get(),
                getFramesPerBurst(), timeoutNanos);
        if (result == AAUDIO_ERROR_DISCONNECTED) {
            disconnectRegisteredStreams();
            break;
@@ -107,7 +103,7 @@ void *AAudioServiceEndpointCapture::callbackLoop() {
                                    getFramesPerBurst()) {
                                streamShared->incrementXRunCount();
                            } else {
                                fifo->write(mDistributionBuffer, getFramesPerBurst());
                                fifo->write(mDistributionBuffer.get(), getFramesPerBurst());
                            }
                            clientFramesWritten = fifo->getWriteCounter();
                        }
+4 −3
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#ifndef AAUDIO_SERVICE_ENDPOINT_CAPTURE_H
#define AAUDIO_SERVICE_ENDPOINT_CAPTURE_H

#include <memory>

#include "client/AudioStreamInternal.h"
#include "client/AudioStreamInternalCapture.h"

@@ -28,16 +30,15 @@ namespace aaudio {
class AAudioServiceEndpointCapture : public AAudioServiceEndpointShared {
public:
    explicit AAudioServiceEndpointCapture(android::AAudioService &audioService);
    virtual ~AAudioServiceEndpointCapture();
    virtual ~AAudioServiceEndpointCapture() = default;

    aaudio_result_t open(const aaudio::AAudioStreamRequest &request) override;


    void *callbackLoop() override;

private:
    AudioStreamInternalCapture  mStreamInternalCapture;
    uint8_t                    *mDistributionBuffer = nullptr;
    std::unique_ptr<uint8_t[]>  mDistributionBuffer;
};

} /* namespace aaudio */