Prepare openOutput() signature to AIDL conversion
The purpose is to avoid having more than one primitive output
argument and to avoid in/out arguments.
Test: Audio-related CTS tests from CtsMediaTestCases
Change-Id: I827f99755f85bd58f3088c9445add52848763fa0
diff --git a/media/libaudiofoundation/AudioPort.cpp b/media/libaudiofoundation/AudioPort.cpp
index d650c67..559c711 100644
--- a/media/libaudiofoundation/AudioPort.cpp
+++ b/media/libaudiofoundation/AudioPort.cpp
@@ -150,32 +150,33 @@
status_t AudioPort::writeToParcel(Parcel *parcel) const
{
- status_t status = NO_ERROR;
- if ((status = parcel->writeUtf8AsUtf16(mName)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mType)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mRole)) != NO_ERROR) return status;
- if ((status = parcel->writeParcelable(mProfiles)) != NO_ERROR) return status;
- if ((status = parcel->writeParcelable(mGains)) != NO_ERROR) return status;
- return status;
+ media::AudioPort parcelable;
+ return writeToParcelable(&parcelable)
+ ?: parcelable.writeToParcel(parcel);
}
-status_t AudioPort::readFromParcel(const Parcel *parcel)
-{
- status_t status = NO_ERROR;
- if ((status = parcel->readUtf8FromUtf16(&mName)) != NO_ERROR) return status;
- static_assert(sizeof(mType) == sizeof(uint32_t));
- if ((status = parcel->readUint32(reinterpret_cast<uint32_t*>(&mType))) != NO_ERROR) {
- return status;
- }
- static_assert(sizeof(mRole) == sizeof(uint32_t));
- if ((status = parcel->readUint32(reinterpret_cast<uint32_t*>(&mRole))) != NO_ERROR) {
- return status;
- }
- mProfiles.clear();
- if ((status = parcel->readParcelable(&mProfiles)) != NO_ERROR) return status;
- mGains.clear();
- if ((status = parcel->readParcelable(&mGains)) != NO_ERROR) return status;
- return status;
+status_t AudioPort::writeToParcelable(media::AudioPort* parcelable) const {
+ parcelable->name = mName;
+ parcelable->type = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_type_t_AudioPortType(mType));
+ parcelable->role = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_role_t_AudioPortRole(mRole));
+ parcelable->profiles = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioProfileVector(mProfiles));
+ parcelable->gains = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioGains(mGains));
+ return OK;
+}
+
+status_t AudioPort::readFromParcel(const Parcel *parcel) {
+ media::AudioPort parcelable;
+ return parcelable.readFromParcel(parcel)
+ ?: readFromParcelable(parcelable);
+}
+
+status_t AudioPort::readFromParcelable(const media::AudioPort& parcelable) {
+ mName = parcelable.name;
+ mType = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPortType_audio_port_type_t(parcelable.type));
+ mRole = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPortRole_audio_port_role_t(parcelable.role));
+ mProfiles = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioProfileVector(parcelable.profiles));
+ mGains = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioGains(parcelable.gains));
+ return OK;
}
// --- AudioPortConfig class implementation
@@ -276,50 +277,56 @@
mGain.ramp_duration_ms == other->mGain.ramp_duration_ms;
}
-status_t AudioPortConfig::writeToParcel(Parcel *parcel) const
-{
- status_t status = NO_ERROR;
- if ((status = parcel->writeUint32(mSamplingRate)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mFormat)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mChannelMask)) != NO_ERROR) return status;
- if ((status = parcel->writeInt32(mId)) != NO_ERROR) return status;
- // Write mGain to parcel.
- if ((status = parcel->writeInt32(mGain.index)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mGain.mode)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mGain.channel_mask)) != NO_ERROR) return status;
- if ((status = parcel->writeUint32(mGain.ramp_duration_ms)) != NO_ERROR) return status;
- std::vector<int> values(std::begin(mGain.values), std::end(mGain.values));
- if ((status = parcel->writeInt32Vector(values)) != NO_ERROR) return status;
- return status;
+status_t AudioPortConfig::writeToParcel(Parcel *parcel) const {
+ media::AudioPortConfig parcelable;
+ return writeToParcelable(&parcelable)
+ ?: parcelable.writeToParcel(parcel);
}
-status_t AudioPortConfig::readFromParcel(const Parcel *parcel)
-{
- status_t status = NO_ERROR;
- if ((status = parcel->readUint32(&mSamplingRate)) != NO_ERROR) return status;
- static_assert(sizeof(mFormat) == sizeof(uint32_t));
- if ((status = parcel->readUint32(reinterpret_cast<uint32_t*>(&mFormat))) != NO_ERROR) {
- return status;
- }
- uint32_t rawChannelMask;
- if ((status = parcel->readUint32(&rawChannelMask)) != NO_ERROR) return status;
- mChannelMask = static_cast<audio_channel_mask_t>(rawChannelMask);
- if ((status = parcel->readInt32(&mId)) != NO_ERROR) return status;
- // Read mGain from parcel.
- if ((status = parcel->readInt32(&mGain.index)) != NO_ERROR) return status;
- uint32_t rawGainMode;
- if ((status = parcel->readUint32(&rawGainMode)) != NO_ERROR) return status;
- mGain.mode = static_cast<audio_gain_mode_t>(rawGainMode);
- if ((status = parcel->readUint32(&rawChannelMask)) != NO_ERROR) return status;
- mGain.channel_mask = static_cast<audio_channel_mask_t>(rawChannelMask);
- if ((status = parcel->readUint32(&mGain.ramp_duration_ms)) != NO_ERROR) return status;
- std::vector<int> values;
- if ((status = parcel->readInt32Vector(&values)) != NO_ERROR) return status;
- if (values.size() != std::size(mGain.values)) {
+status_t AudioPortConfig::writeToParcelable(media::AudioPortConfig* parcelable) const {
+ parcelable->sampleRate = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(mSamplingRate));
+ parcelable->format = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_format_t_AudioFormat(mFormat));
+ parcelable->channelMask = VALUE_OR_RETURN_STATUS(
+ legacy2aidl_audio_channel_mask_t_int32_t(mChannelMask));
+ parcelable->id = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_handle_t_int32_t(mId));
+ parcelable->gain.index = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(mGain.index));
+ parcelable->gain.mode = VALUE_OR_RETURN_STATUS(
+ legacy2aidl_audio_gain_mode_t_int32_t(mGain.mode));
+ parcelable->gain.channelMask = VALUE_OR_RETURN_STATUS(
+ legacy2aidl_audio_channel_mask_t_int32_t(mGain.channel_mask));
+ parcelable->gain.rampDurationMs = VALUE_OR_RETURN_STATUS(
+ convertIntegral<int32_t>(mGain.ramp_duration_ms));
+ parcelable->gain.values = VALUE_OR_RETURN_STATUS(convertContainer<std::vector<int32_t>>(
+ mGain.values, convertIntegral<int32_t, int>));
+ return OK;
+}
+
+status_t AudioPortConfig::readFromParcel(const Parcel *parcel) {
+ media::AudioPortConfig parcelable;
+ return parcelable.readFromParcel(parcel)
+ ?: readFromParcelable(parcelable);
+}
+
+status_t AudioPortConfig::readFromParcelable(const media::AudioPortConfig& parcelable) {
+ mSamplingRate = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(parcelable.sampleRate));
+ mFormat = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioFormat_audio_format_t(parcelable.format));
+ mChannelMask = VALUE_OR_RETURN_STATUS(
+ aidl2legacy_int32_t_audio_channel_mask_t(parcelable.channelMask));
+ mId = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_port_handle_t(parcelable.id));
+ mGain.index = VALUE_OR_RETURN_STATUS(convertIntegral<int>(parcelable.gain.index));
+ mGain.mode = VALUE_OR_RETURN_STATUS(
+ aidl2legacy_int32_t_audio_gain_mode_t(parcelable.gain.mode));
+ mGain.channel_mask = VALUE_OR_RETURN_STATUS(
+ aidl2legacy_int32_t_audio_channel_mask_t(parcelable.gain.channelMask));
+ mGain.ramp_duration_ms = VALUE_OR_RETURN_STATUS(
+ convertIntegral<unsigned int>(parcelable.gain.rampDurationMs));
+ if (parcelable.gain.values.size() > std::size(mGain.values)) {
return BAD_VALUE;
}
- std::copy(values.begin(), values.end(), mGain.values);
- return status;
+ for (size_t i = 0; i < parcelable.gain.values.size(); ++i) {
+ mGain.values[i] = VALUE_OR_RETURN_STATUS(convertIntegral<int>(parcelable.gain.values[i]));
+ }
+ return OK;
}
} // namespace android