Include the returned IAudio{Track,Record} in response parcelable
In preparation to AIDLizing IAudioFlinger, having two return values is
inconvenient. It is also not consistent with most other methods, which
mostly return status_t. This change puts the returned
IAudio{Track,Record} in the response parcelable instead of having them
as separate return values.
Test: Audio-related CTS tests from CtsMediaTestCases
Change-Id: I97cbec21ca936b4e00e5caa06760ce00922739e8
diff --git a/media/libaudioclient/IAudioFlinger.cpp b/media/libaudioclient/IAudioFlinger.cpp
index a4e26ca..b5c6547 100644
--- a/media/libaudioclient/IAudioFlinger.cpp
+++ b/media/libaudioclient/IAudioFlinger.cpp
@@ -153,6 +153,7 @@
aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId));
aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
+ aidl.audioTrack = audioTrack;
return aidl;
}
@@ -173,6 +174,7 @@
legacy.afLatencyMs = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afLatencyMs));
legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
+ legacy.audioTrack = aidl.audioTrack;
return legacy;
}
@@ -226,6 +228,7 @@
aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
+ aidl.audioRecord = audioRecord;
return aidl;
}
@@ -245,6 +248,7 @@
legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
+ legacy.audioRecord = aidl.audioRecord;
return legacy;
}
@@ -256,75 +260,58 @@
{
}
- virtual sp<media::IAudioTrack> createTrack(const media::CreateTrackRequest& input,
- media::CreateTrackResponse& output,
- status_t* status)
+ virtual status_t createTrack(const media::CreateTrackRequest& input,
+ media::CreateTrackResponse& output)
{
Parcel data, reply;
- sp<media::IAudioTrack> track;
+ status_t status;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
-
- if (status == nullptr) {
- return track;
- }
-
data.writeParcelable(input);
status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply);
if (lStatus != NO_ERROR) {
ALOGE("createTrack transaction error %d", lStatus);
- *status = DEAD_OBJECT;
- return track;
+ return DEAD_OBJECT;
}
- *status = reply.readInt32();
- if (*status != NO_ERROR) {
- ALOGE("createTrack returned error %d", *status);
- return track;
- }
- track = interface_cast<media::IAudioTrack>(reply.readStrongBinder());
- if (track == 0) {
- ALOGE("createTrack returned an NULL IAudioTrack with status OK");
- *status = DEAD_OBJECT;
- return track;
+ status = reply.readInt32();
+ if (status != NO_ERROR) {
+ ALOGE("createTrack returned error %d", status);
+ return status;
}
output.readFromParcel(&reply);
- return track;
+ if (output.audioTrack == 0) {
+ ALOGE("createTrack returned an NULL IAudioTrack with status OK");
+ return DEAD_OBJECT;
+ }
+ return OK;
}
- virtual sp<media::IAudioRecord> createRecord(const media::CreateRecordRequest& input,
- media::CreateRecordResponse& output,
- status_t* status)
+ virtual status_t createRecord(const media::CreateRecordRequest& input,
+ media::CreateRecordResponse& output)
{
Parcel data, reply;
- sp<media::IAudioRecord> record;
+ status_t status;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- if (status == nullptr) {
- return record;
- }
-
data.writeParcelable(input);
status_t lStatus = remote()->transact(CREATE_RECORD, data, &reply);
if (lStatus != NO_ERROR) {
ALOGE("createRecord transaction error %d", lStatus);
- *status = DEAD_OBJECT;
- return record;
+ return DEAD_OBJECT;
}
- *status = reply.readInt32();
- if (*status != NO_ERROR) {
- ALOGE("createRecord returned error %d", *status);
- return record;
+ status = reply.readInt32();
+ if (status != NO_ERROR) {
+ ALOGE("createRecord returned error %d", status);
+ return status;
}
- record = interface_cast<media::IAudioRecord>(reply.readStrongBinder());
- if (record == 0) {
- ALOGE("createRecord returned a NULL IAudioRecord with status OK");
- *status = DEAD_OBJECT;
- return record;
- }
output.readFromParcel(&reply);
- return record;
+ if (output.audioRecord == 0) {
+ ALOGE("createRecord returned a NULL IAudioRecord with status OK");
+ return DEAD_OBJECT;
+ }
+ return OK;
}
virtual uint32_t sampleRate(audio_io_handle_t ioHandle) const
@@ -1199,16 +1186,13 @@
status_t status;
media::CreateTrackResponse output;
- sp<media::IAudioTrack> track= createTrack(input,
- output,
- &status);
+ status = createTrack(input, output);
- LOG_ALWAYS_FATAL_IF((track != 0) != (status == NO_ERROR));
+ LOG_ALWAYS_FATAL_IF((output.audioTrack != 0) != (status == NO_ERROR));
reply->writeInt32(status);
if (status != NO_ERROR) {
return NO_ERROR;
}
- reply->writeStrongBinder(IInterface::asBinder(track));
output.writeToParcel(reply);
return NO_ERROR;
} break;
@@ -1224,16 +1208,13 @@
status_t status;
media::CreateRecordResponse output;
- sp<media::IAudioRecord> record = createRecord(input,
- output,
- &status);
+ status = createRecord(input, output);
- LOG_ALWAYS_FATAL_IF((record != 0) != (status == NO_ERROR));
+ LOG_ALWAYS_FATAL_IF((output.audioRecord != 0) != (status == NO_ERROR));
reply->writeInt32(status);
if (status != NO_ERROR) {
return NO_ERROR;
}
- reply->writeStrongBinder(IInterface::asBinder(record));
output.writeToParcel(reply);
return NO_ERROR;
} break;