Loading media/libaaudio/src/binding/AudioEndpointParcelable.cpp +41 −38 Original line number Diff line number Diff line Loading @@ -64,27 +64,54 @@ int32_t AudioEndpointParcelable::addFileDescriptor(const unique_fd& fd, * The read and write must be symmetric. */ status_t AudioEndpointParcelable::writeToParcel(Parcel* parcel) const { parcel->writeInt32(mNumSharedMemories); status_t status = AAudioConvert_aaudioToAndroidStatus(validate()); if (status != NO_ERROR) goto error; status = parcel->writeInt32(mNumSharedMemories); if (status != NO_ERROR) goto error; for (int i = 0; i < mNumSharedMemories; i++) { mSharedMemories[i].writeToParcel(parcel); status = mSharedMemories[i].writeToParcel(parcel); if (status != NO_ERROR) goto error; } mUpMessageQueueParcelable.writeToParcel(parcel); mDownMessageQueueParcelable.writeToParcel(parcel); mUpDataQueueParcelable.writeToParcel(parcel); mDownDataQueueParcelable.writeToParcel(parcel); return NO_ERROR; // TODO check for errors above status = mUpMessageQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; status = mDownMessageQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; status = mUpDataQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; status = mDownDataQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; return NO_ERROR; error: ALOGE("%s returning %d", __func__, status); return status; } status_t AudioEndpointParcelable::readFromParcel(const Parcel* parcel) { parcel->readInt32(&mNumSharedMemories); status_t status = parcel->readInt32(&mNumSharedMemories); if (status != NO_ERROR) goto error; for (int i = 0; i < mNumSharedMemories; i++) { mSharedMemories[i].readFromParcel(parcel); if (status != NO_ERROR) goto error; } mUpMessageQueueParcelable.readFromParcel(parcel); mDownMessageQueueParcelable.readFromParcel(parcel); mUpDataQueueParcelable.readFromParcel(parcel); mDownDataQueueParcelable.readFromParcel(parcel); return NO_ERROR; // TODO check for errors above status = mUpMessageQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; status = mDownMessageQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; status = mUpDataQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; status = mDownDataQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; return AAudioConvert_aaudioToAndroidStatus(validate()); error: ALOGE("%s returning %d", __func__, status); return status; } aaudio_result_t AudioEndpointParcelable::resolve(EndpointDescriptor *descriptor) { Loading @@ -109,35 +136,11 @@ aaudio_result_t AudioEndpointParcelable::close() { return AAudioConvert_androidToAAudioResult(err); } aaudio_result_t AudioEndpointParcelable::validate() { aaudio_result_t result; aaudio_result_t AudioEndpointParcelable::validate() const { if (mNumSharedMemories < 0 || mNumSharedMemories >= MAX_SHARED_MEMORIES) { ALOGE("invalid mNumSharedMemories = %d", mNumSharedMemories); return AAUDIO_ERROR_INTERNAL; } for (int i = 0; i < mNumSharedMemories; i++) { result = mSharedMemories[i].validate(); if (result != AAUDIO_OK) { ALOGE("invalid mSharedMemories[%d] = %d", i, result); return result; } } if ((result = mUpMessageQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mUpMessageQueueParcelable = %d", result); return result; } if ((result = mDownMessageQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mDownMessageQueueParcelable = %d", result); return result; } if ((result = mUpDataQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mUpDataQueueParcelable = %d", result); return result; } if ((result = mDownDataQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mDownDataQueueParcelable = %d", result); return result; } return AAUDIO_OK; } Loading media/libaaudio/src/binding/AudioEndpointParcelable.h +2 −2 Original line number Diff line number Diff line Loading @@ -56,8 +56,6 @@ public: aaudio_result_t resolve(EndpointDescriptor *descriptor); aaudio_result_t validate(); aaudio_result_t close(); void dump(); Loading @@ -70,6 +68,8 @@ public: // TODO add getters RingBufferParcelable mDownDataQueueParcelable; // eg. playback private: aaudio_result_t validate() const; int32_t mNumSharedMemories = 0; SharedMemoryParcelable mSharedMemories[MAX_SHARED_MEMORIES]; }; Loading media/libaaudio/src/binding/IAAudioService.cpp +10 −16 Original line number Diff line number Diff line Loading @@ -121,17 +121,11 @@ public: ALOGE("BpAAudioService::client GET_STREAM_DESCRIPTION passed result %d", result); return result; } err = parcelable.readFromParcel(&reply);; err = parcelable.readFromParcel(&reply); if (err != NO_ERROR) { ALOGE("BpAAudioService::client transact(GET_STREAM_DESCRIPTION) read endpoint %d", err); return AAudioConvert_androidToAAudioResult(err); } //parcelable.dump(); result = parcelable.validate(); if (result != AAUDIO_OK) { ALOGE("BpAAudioService::client GET_STREAM_DESCRIPTION validation fails %d", result); return result; } return result; } Loading Loading @@ -250,6 +244,7 @@ status_t BnAAudioService::onTransact(uint32_t code, const Parcel& data, pid_t tid; int64_t nanoseconds; aaudio_result_t result; status_t status = NO_ERROR; ALOGV("BnAAudioService::onTransact(%i) %i", code, flags); switch(code) { Loading Loading @@ -294,21 +289,20 @@ status_t BnAAudioService::onTransact(uint32_t code, const Parcel& data, case GET_STREAM_DESCRIPTION: { CHECK_INTERFACE(IAAudioService, data, reply); data.readInt32(&streamHandle); status = data.readInt32(&streamHandle); if (status != NO_ERROR) { return status; } aaudio::AudioEndpointParcelable parcelable; result = getStreamDescription(streamHandle, parcelable); if (result != AAUDIO_OK) { return AAudioConvert_aaudioToAndroidStatus(result); } result = parcelable.validate(); if (result != AAUDIO_OK) { ALOGE("BnAAudioService::onTransact getStreamDescription() returns %d", result); parcelable.dump(); return AAudioConvert_aaudioToAndroidStatus(result); status = reply->writeInt32(result); if (status != NO_ERROR) { return status; } reply->writeInt32(result); parcelable.writeToParcel(reply); return NO_ERROR; return parcelable.writeToParcel(reply); } break; case START_STREAM: { Loading media/libaaudio/src/binding/RingBufferParcelable.cpp +9 −18 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <stdint.h> #include <binder/Parcelable.h> #include <utility/AAudioUtilities.h> #include "binding/AAudioServiceDefinitions.h" #include "binding/SharedRegionParcelable.h" Loading Loading @@ -79,7 +80,10 @@ void RingBufferParcelable::setCapacityInFrames(int32_t capacityInFrames) { * The read and write must be symmetric. */ status_t RingBufferParcelable::writeToParcel(Parcel* parcel) const { status_t status = parcel->writeInt32(mCapacityInFrames); status_t status = AAudioConvert_aaudioToAndroidStatus(validate()); if (status != NO_ERROR) goto error; status = parcel->writeInt32(mCapacityInFrames); if (status != NO_ERROR) goto error; if (mCapacityInFrames > 0) { status = parcel->writeInt32(mBytesPerFrame); Loading @@ -97,7 +101,7 @@ status_t RingBufferParcelable::writeToParcel(Parcel* parcel) const { } return NO_ERROR; error: ALOGE("writeToParcel() error = %d", status); ALOGE("%s returning %d", __func__, status); return status; } Loading @@ -118,9 +122,9 @@ status_t RingBufferParcelable::readFromParcel(const Parcel* parcel) { status = mDataParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; } return NO_ERROR; return AAudioConvert_aaudioToAndroidStatus(validate()); error: ALOGE("readFromParcel() error = %d", status); ALOGE("%s returning %d", __func__, status); return status; } Loading Loading @@ -151,8 +155,7 @@ aaudio_result_t RingBufferParcelable::resolve(SharedMemoryParcelable *memoryParc return AAUDIO_OK; } aaudio_result_t RingBufferParcelable::validate() { aaudio_result_t result; aaudio_result_t RingBufferParcelable::validate() const { if (mCapacityInFrames < 0 || mCapacityInFrames >= 32 * 1024) { ALOGE("invalid mCapacityInFrames = %d", mCapacityInFrames); return AAUDIO_ERROR_INTERNAL; Loading @@ -165,18 +168,6 @@ aaudio_result_t RingBufferParcelable::validate() { ALOGE("invalid mFramesPerBurst = %d", mFramesPerBurst); return AAUDIO_ERROR_INTERNAL; } if ((result = mReadCounterParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mReadCounterParcelable = %d", result); return result; } if ((result = mWriteCounterParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mWriteCounterParcelable = %d", result); return result; } if ((result = mDataParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mDataParcelable = %d", result); return result; } return AAUDIO_OK; } Loading media/libaaudio/src/binding/RingBufferParcelable.h +3 −2 Original line number Diff line number Diff line Loading @@ -66,11 +66,12 @@ public: aaudio_result_t resolve(SharedMemoryParcelable *memoryParcels, RingBufferDescriptor *descriptor); aaudio_result_t validate(); void dump(); private: aaudio_result_t validate() const; SharedRegionParcelable mReadCounterParcelable; SharedRegionParcelable mWriteCounterParcelable; SharedRegionParcelable mDataParcelable; Loading Loading
media/libaaudio/src/binding/AudioEndpointParcelable.cpp +41 −38 Original line number Diff line number Diff line Loading @@ -64,27 +64,54 @@ int32_t AudioEndpointParcelable::addFileDescriptor(const unique_fd& fd, * The read and write must be symmetric. */ status_t AudioEndpointParcelable::writeToParcel(Parcel* parcel) const { parcel->writeInt32(mNumSharedMemories); status_t status = AAudioConvert_aaudioToAndroidStatus(validate()); if (status != NO_ERROR) goto error; status = parcel->writeInt32(mNumSharedMemories); if (status != NO_ERROR) goto error; for (int i = 0; i < mNumSharedMemories; i++) { mSharedMemories[i].writeToParcel(parcel); status = mSharedMemories[i].writeToParcel(parcel); if (status != NO_ERROR) goto error; } mUpMessageQueueParcelable.writeToParcel(parcel); mDownMessageQueueParcelable.writeToParcel(parcel); mUpDataQueueParcelable.writeToParcel(parcel); mDownDataQueueParcelable.writeToParcel(parcel); return NO_ERROR; // TODO check for errors above status = mUpMessageQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; status = mDownMessageQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; status = mUpDataQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; status = mDownDataQueueParcelable.writeToParcel(parcel); if (status != NO_ERROR) goto error; return NO_ERROR; error: ALOGE("%s returning %d", __func__, status); return status; } status_t AudioEndpointParcelable::readFromParcel(const Parcel* parcel) { parcel->readInt32(&mNumSharedMemories); status_t status = parcel->readInt32(&mNumSharedMemories); if (status != NO_ERROR) goto error; for (int i = 0; i < mNumSharedMemories; i++) { mSharedMemories[i].readFromParcel(parcel); if (status != NO_ERROR) goto error; } mUpMessageQueueParcelable.readFromParcel(parcel); mDownMessageQueueParcelable.readFromParcel(parcel); mUpDataQueueParcelable.readFromParcel(parcel); mDownDataQueueParcelable.readFromParcel(parcel); return NO_ERROR; // TODO check for errors above status = mUpMessageQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; status = mDownMessageQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; status = mUpDataQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; status = mDownDataQueueParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; return AAudioConvert_aaudioToAndroidStatus(validate()); error: ALOGE("%s returning %d", __func__, status); return status; } aaudio_result_t AudioEndpointParcelable::resolve(EndpointDescriptor *descriptor) { Loading @@ -109,35 +136,11 @@ aaudio_result_t AudioEndpointParcelable::close() { return AAudioConvert_androidToAAudioResult(err); } aaudio_result_t AudioEndpointParcelable::validate() { aaudio_result_t result; aaudio_result_t AudioEndpointParcelable::validate() const { if (mNumSharedMemories < 0 || mNumSharedMemories >= MAX_SHARED_MEMORIES) { ALOGE("invalid mNumSharedMemories = %d", mNumSharedMemories); return AAUDIO_ERROR_INTERNAL; } for (int i = 0; i < mNumSharedMemories; i++) { result = mSharedMemories[i].validate(); if (result != AAUDIO_OK) { ALOGE("invalid mSharedMemories[%d] = %d", i, result); return result; } } if ((result = mUpMessageQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mUpMessageQueueParcelable = %d", result); return result; } if ((result = mDownMessageQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mDownMessageQueueParcelable = %d", result); return result; } if ((result = mUpDataQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mUpDataQueueParcelable = %d", result); return result; } if ((result = mDownDataQueueParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mDownDataQueueParcelable = %d", result); return result; } return AAUDIO_OK; } Loading
media/libaaudio/src/binding/AudioEndpointParcelable.h +2 −2 Original line number Diff line number Diff line Loading @@ -56,8 +56,6 @@ public: aaudio_result_t resolve(EndpointDescriptor *descriptor); aaudio_result_t validate(); aaudio_result_t close(); void dump(); Loading @@ -70,6 +68,8 @@ public: // TODO add getters RingBufferParcelable mDownDataQueueParcelable; // eg. playback private: aaudio_result_t validate() const; int32_t mNumSharedMemories = 0; SharedMemoryParcelable mSharedMemories[MAX_SHARED_MEMORIES]; }; Loading
media/libaaudio/src/binding/IAAudioService.cpp +10 −16 Original line number Diff line number Diff line Loading @@ -121,17 +121,11 @@ public: ALOGE("BpAAudioService::client GET_STREAM_DESCRIPTION passed result %d", result); return result; } err = parcelable.readFromParcel(&reply);; err = parcelable.readFromParcel(&reply); if (err != NO_ERROR) { ALOGE("BpAAudioService::client transact(GET_STREAM_DESCRIPTION) read endpoint %d", err); return AAudioConvert_androidToAAudioResult(err); } //parcelable.dump(); result = parcelable.validate(); if (result != AAUDIO_OK) { ALOGE("BpAAudioService::client GET_STREAM_DESCRIPTION validation fails %d", result); return result; } return result; } Loading Loading @@ -250,6 +244,7 @@ status_t BnAAudioService::onTransact(uint32_t code, const Parcel& data, pid_t tid; int64_t nanoseconds; aaudio_result_t result; status_t status = NO_ERROR; ALOGV("BnAAudioService::onTransact(%i) %i", code, flags); switch(code) { Loading Loading @@ -294,21 +289,20 @@ status_t BnAAudioService::onTransact(uint32_t code, const Parcel& data, case GET_STREAM_DESCRIPTION: { CHECK_INTERFACE(IAAudioService, data, reply); data.readInt32(&streamHandle); status = data.readInt32(&streamHandle); if (status != NO_ERROR) { return status; } aaudio::AudioEndpointParcelable parcelable; result = getStreamDescription(streamHandle, parcelable); if (result != AAUDIO_OK) { return AAudioConvert_aaudioToAndroidStatus(result); } result = parcelable.validate(); if (result != AAUDIO_OK) { ALOGE("BnAAudioService::onTransact getStreamDescription() returns %d", result); parcelable.dump(); return AAudioConvert_aaudioToAndroidStatus(result); status = reply->writeInt32(result); if (status != NO_ERROR) { return status; } reply->writeInt32(result); parcelable.writeToParcel(reply); return NO_ERROR; return parcelable.writeToParcel(reply); } break; case START_STREAM: { Loading
media/libaaudio/src/binding/RingBufferParcelable.cpp +9 −18 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <stdint.h> #include <binder/Parcelable.h> #include <utility/AAudioUtilities.h> #include "binding/AAudioServiceDefinitions.h" #include "binding/SharedRegionParcelable.h" Loading Loading @@ -79,7 +80,10 @@ void RingBufferParcelable::setCapacityInFrames(int32_t capacityInFrames) { * The read and write must be symmetric. */ status_t RingBufferParcelable::writeToParcel(Parcel* parcel) const { status_t status = parcel->writeInt32(mCapacityInFrames); status_t status = AAudioConvert_aaudioToAndroidStatus(validate()); if (status != NO_ERROR) goto error; status = parcel->writeInt32(mCapacityInFrames); if (status != NO_ERROR) goto error; if (mCapacityInFrames > 0) { status = parcel->writeInt32(mBytesPerFrame); Loading @@ -97,7 +101,7 @@ status_t RingBufferParcelable::writeToParcel(Parcel* parcel) const { } return NO_ERROR; error: ALOGE("writeToParcel() error = %d", status); ALOGE("%s returning %d", __func__, status); return status; } Loading @@ -118,9 +122,9 @@ status_t RingBufferParcelable::readFromParcel(const Parcel* parcel) { status = mDataParcelable.readFromParcel(parcel); if (status != NO_ERROR) goto error; } return NO_ERROR; return AAudioConvert_aaudioToAndroidStatus(validate()); error: ALOGE("readFromParcel() error = %d", status); ALOGE("%s returning %d", __func__, status); return status; } Loading Loading @@ -151,8 +155,7 @@ aaudio_result_t RingBufferParcelable::resolve(SharedMemoryParcelable *memoryParc return AAUDIO_OK; } aaudio_result_t RingBufferParcelable::validate() { aaudio_result_t result; aaudio_result_t RingBufferParcelable::validate() const { if (mCapacityInFrames < 0 || mCapacityInFrames >= 32 * 1024) { ALOGE("invalid mCapacityInFrames = %d", mCapacityInFrames); return AAUDIO_ERROR_INTERNAL; Loading @@ -165,18 +168,6 @@ aaudio_result_t RingBufferParcelable::validate() { ALOGE("invalid mFramesPerBurst = %d", mFramesPerBurst); return AAUDIO_ERROR_INTERNAL; } if ((result = mReadCounterParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mReadCounterParcelable = %d", result); return result; } if ((result = mWriteCounterParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mWriteCounterParcelable = %d", result); return result; } if ((result = mDataParcelable.validate()) != AAUDIO_OK) { ALOGE("invalid mDataParcelable = %d", result); return result; } return AAUDIO_OK; } Loading
media/libaaudio/src/binding/RingBufferParcelable.h +3 −2 Original line number Diff line number Diff line Loading @@ -66,11 +66,12 @@ public: aaudio_result_t resolve(SharedMemoryParcelable *memoryParcels, RingBufferDescriptor *descriptor); aaudio_result_t validate(); void dump(); private: aaudio_result_t validate() const; SharedRegionParcelable mReadCounterParcelable; SharedRegionParcelable mWriteCounterParcelable; SharedRegionParcelable mDataParcelable; Loading