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

Commit 30bf42ca authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add parameters validation on AAudio MMap server" into oc-dr1-dev

parents 32ab0585 901f65de
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ LOCAL_SRC_FILES = \
    core/AudioStream.cpp \
    core/AudioStreamBuilder.cpp \
    core/AAudioAudio.cpp \
    core/AAudioStreamParameters.cpp \
    legacy/AudioStreamLegacy.cpp \
    legacy/AudioStreamRecord.cpp \
    legacy/AudioStreamTrack.cpp \
@@ -90,6 +91,7 @@ LOCAL_C_INCLUDES := \
LOCAL_SRC_FILES = core/AudioStream.cpp \
    core/AudioStreamBuilder.cpp \
    core/AAudioAudio.cpp \
    core/AAudioStreamParameters.cpp \
    legacy/AudioStreamLegacy.cpp \
    legacy/AudioStreamRecord.cpp \
    legacy/AudioStreamTrack.cpp \
+20 −50
Original line number Diff line number Diff line
@@ -36,17 +36,17 @@ AAudioStreamConfiguration::~AAudioStreamConfiguration() {}

status_t AAudioStreamConfiguration::writeToParcel(Parcel* parcel) const {
    status_t status;
    status = parcel->writeInt32(mDeviceId);
    status = parcel->writeInt32(getDeviceId());
    if (status != NO_ERROR) goto error;
    status = parcel->writeInt32(mSampleRate);
    status = parcel->writeInt32(getSampleRate());
    if (status != NO_ERROR) goto error;
    status = parcel->writeInt32(mSamplesPerFrame);
    status = parcel->writeInt32(getSamplesPerFrame());
    if (status != NO_ERROR) goto error;
    status = parcel->writeInt32((int32_t) mSharingMode);
    status = parcel->writeInt32((int32_t) getSharingMode());
    if (status != NO_ERROR) goto error;
    status = parcel->writeInt32((int32_t) mAudioFormat);
    status = parcel->writeInt32((int32_t) getFormat());
    if (status != NO_ERROR) goto error;
    status = parcel->writeInt32(mBufferCapacity);
    status = parcel->writeInt32(getBufferCapacity());
    if (status != NO_ERROR) goto error;
    return NO_ERROR;
error:
@@ -55,57 +55,27 @@ error:
}

status_t AAudioStreamConfiguration::readFromParcel(const Parcel* parcel) {
    status_t status = parcel->readInt32(&mDeviceId);
    int32_t value;
    status_t status = parcel->readInt32(&value);
    if (status != NO_ERROR) goto error;
    status = parcel->readInt32(&mSampleRate);
    setDeviceId(value);
    status = parcel->readInt32(&value);
    if (status != NO_ERROR) goto error;
    status = parcel->readInt32(&mSamplesPerFrame);
    setSampleRate(value);
    status = parcel->readInt32(&value);
    if (status != NO_ERROR) goto error;
    status = parcel->readInt32(&mSharingMode);
    setSamplesPerFrame(value);
    status = parcel->readInt32(&value);
    if (status != NO_ERROR) goto error;
    status = parcel->readInt32(&mAudioFormat);
    setSharingMode(value);
    status = parcel->readInt32(&value);
    if (status != NO_ERROR) goto error;
    status = parcel->readInt32(&mBufferCapacity);
    setFormat(value);
    status = parcel->readInt32(&value);
    if (status != NO_ERROR) goto error;
    setBufferCapacity(value);
    return NO_ERROR;
error:
    ALOGE("AAudioStreamConfiguration.readFromParcel(): read failed = %d", status);
    return status;
}
 No newline at end of file

aaudio_result_t AAudioStreamConfiguration::validate() const {
    // Validate results of the open.
    if (mSampleRate < 0 || mSampleRate >= 8 * 48000) { // TODO review limits
        ALOGE("AAudioStreamConfiguration.validate(): invalid sampleRate = %d", mSampleRate);
        return AAUDIO_ERROR_INTERNAL;
    }

    if (mSamplesPerFrame < 1 || mSamplesPerFrame >= 32) { // TODO review limits
        ALOGE("AAudioStreamConfiguration.validate() invalid samplesPerFrame = %d", mSamplesPerFrame);
        return AAUDIO_ERROR_INTERNAL;
    }

    switch (mAudioFormat) {
    case AAUDIO_FORMAT_PCM_I16:
    case AAUDIO_FORMAT_PCM_FLOAT:
        break;
    default:
        ALOGE("AAudioStreamConfiguration.validate() invalid audioFormat = %d", mAudioFormat);
        return AAUDIO_ERROR_INTERNAL;
    }

    if (mBufferCapacity < 0) {
        ALOGE("AAudioStreamConfiguration.validate() invalid mBufferCapacity = %d", mBufferCapacity);
        return AAUDIO_ERROR_INTERNAL;
    }
    return AAUDIO_OK;
}

void AAudioStreamConfiguration::dump() const {
    ALOGD("AAudioStreamConfiguration mDeviceId        = %d", mDeviceId);
    ALOGD("AAudioStreamConfiguration mSampleRate      = %d", mSampleRate);
    ALOGD("AAudioStreamConfiguration mSamplesPerFrame = %d", mSamplesPerFrame);
    ALOGD("AAudioStreamConfiguration mSharingMode     = %d", (int)mSharingMode);
    ALOGD("AAudioStreamConfiguration mAudioFormat     = %d", (int)mAudioFormat);
    ALOGD("AAudioStreamConfiguration mBufferCapacity  = %d", mBufferCapacity);
}
+2 −61
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <aaudio/AAudio.h>
#include <binder/Parcel.h>
#include <binder/Parcelable.h>
#include "core/AAudioStreamParameters.h"

using android::status_t;
using android::Parcel;
@@ -29,74 +30,14 @@ using android::Parcelable;

namespace aaudio {

class AAudioStreamConfiguration : public Parcelable {
class AAudioStreamConfiguration : public AAudioStreamParameters, public Parcelable {
public:
    AAudioStreamConfiguration();
    virtual ~AAudioStreamConfiguration();

    int32_t getDeviceId() const {
        return mDeviceId;
    }

    void setDeviceId(int32_t deviceId) {
        mDeviceId = deviceId;
    }

    int32_t getSampleRate() const {
        return mSampleRate;
    }

    void setSampleRate(int32_t sampleRate) {
        mSampleRate = sampleRate;
    }

    int32_t getSamplesPerFrame() const {
        return mSamplesPerFrame;
    }

    void setSamplesPerFrame(int32_t samplesPerFrame) {
        mSamplesPerFrame = samplesPerFrame;
    }

    aaudio_format_t getAudioFormat() const {
        return mAudioFormat;
    }

    void setAudioFormat(aaudio_format_t audioFormat) {
        mAudioFormat = audioFormat;
    }

    aaudio_sharing_mode_t getSharingMode() const {
        return mSharingMode;
    }

    void setSharingMode(aaudio_sharing_mode_t sharingMode) {
        mSharingMode = sharingMode;
    }

    int32_t getBufferCapacity() const {
        return mBufferCapacity;
    }

    void setBufferCapacity(int32_t frames) {
        mBufferCapacity = frames;
    }

    virtual status_t writeToParcel(Parcel* parcel) const override;

    virtual status_t readFromParcel(const Parcel* parcel) override;

    aaudio_result_t validate() const;

    void dump() const;

private:
    int32_t               mDeviceId        = AAUDIO_UNSPECIFIED;
    int32_t               mSampleRate      = AAUDIO_UNSPECIFIED;
    int32_t               mSamplesPerFrame = AAUDIO_UNSPECIFIED;
    aaudio_sharing_mode_t mSharingMode     = AAUDIO_SHARING_MODE_SHARED;
    aaudio_format_t       mAudioFormat     = AAUDIO_FORMAT_UNSPECIFIED;
    int32_t               mBufferCapacity  = AAUDIO_UNSPECIFIED;
};

} /* namespace aaudio */
+13 −7
Original line number Diff line number Diff line
@@ -264,13 +264,19 @@ status_t BnAAudioService::onTransact(uint32_t code, const Parcel& data,
        case OPEN_STREAM: {
            CHECK_INTERFACE(IAAudioService, data, reply);
            request.readFromParcel(&data);
            result = request.validate();
            if (result != AAUDIO_OK) {
                streamHandle = result;
            } else {
                //ALOGD("BnAAudioService::client openStream request dump --------------------");
                //request.dump();
                // Override the uid and pid from the client in case they are incorrect.
                request.setUserId(IPCThreadState::self()->getCallingUid());
                request.setProcessId(IPCThreadState::self()->getCallingPid());
                streamHandle = openStream(request, configuration);
            //ALOGD("BnAAudioService::onTransact OPEN_STREAM server handle = 0x%08X", streamHandle);
                //ALOGD("BnAAudioService::onTransact OPEN_STREAM server handle = 0x%08X",
                //        streamHandle);
            }
            reply->writeInt32(streamHandle);
            configuration.writeToParcel(reply);
            return NO_ERROR;
+2 −2
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ aaudio_result_t AudioStreamInternal::open(const AudioStreamBuilder &builder) {
        setFormat(AAUDIO_FORMAT_PCM_FLOAT);
    }
    // Request FLOAT for the shared mixer.
    request.getConfiguration().setAudioFormat(AAUDIO_FORMAT_PCM_FLOAT);
    request.getConfiguration().setFormat(AAUDIO_FORMAT_PCM_FLOAT);

    // Build the request to send to the server.
    request.setUserId(getuid());
@@ -119,7 +119,7 @@ aaudio_result_t AudioStreamInternal::open(const AudioStreamBuilder &builder) {
        setSharingMode(configuration.getSharingMode());

        // Save device format so we can do format conversion and volume scaling together.
        mDeviceFormat = configuration.getAudioFormat();
        mDeviceFormat = configuration.getFormat();

        result = mServiceInterface.getStreamDescription(mServiceStreamHandle, mEndPointParcelable);
        if (result != AAUDIO_OK) {
Loading