Convert AudioFlinger create* arguments to AIDL
This is a first step in AIDLizing IAudioFlinger, where we are
converting the in/out arguments from create{Track,Record} to stable
AIDL and add their respective conversion functions.
Bug: 160253486
Test: atest CtsMediaTestCases:Audio*
Manual verification of common playback and recording scenarios.
Change-Id: Iabb28472aedd90efbba673fb68574876528228df
diff --git a/media/libaudioclient/IAudioFlinger.cpp b/media/libaudioclient/IAudioFlinger.cpp
index d86182e..57142b0 100644
--- a/media/libaudioclient/IAudioFlinger.cpp
+++ b/media/libaudioclient/IAudioFlinger.cpp
@@ -97,6 +97,156 @@
#define MAX_ITEMS_PER_LIST 1024
+ConversionResult<media::CreateTrackRequest> IAudioFlinger::CreateTrackInput::toAidl() const {
+ media::CreateTrackRequest aidl;
+ aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
+ aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(config));
+ aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient(clientInfo));
+ aidl.sharedBuffer = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(sharedBuffer));
+ aidl.notificationsPerBuffer = VALUE_OR_RETURN(convertIntegral<int32_t>(notificationsPerBuffer));
+ aidl.speed = speed;
+ aidl.audioTrackCallback = audioTrackCallback;
+ aidl.opPackageName = opPackageName;
+ aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_mask(flags));
+ aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
+ aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
+ aidl.selectedDeviceId = VALUE_OR_RETURN(
+ legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
+ aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
+ return aidl;
+}
+
+ConversionResult<IAudioFlinger::CreateTrackInput>
+IAudioFlinger::CreateTrackInput::fromAidl(const media::CreateTrackRequest& aidl) {
+ IAudioFlinger::CreateTrackInput legacy;
+ legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
+ legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfig_audio_config_t(aidl.config));
+ legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient(aidl.clientInfo));
+ legacy.sharedBuffer = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.sharedBuffer));
+ legacy.notificationsPerBuffer = VALUE_OR_RETURN(
+ convertIntegral<uint32_t>(aidl.notificationsPerBuffer));
+ legacy.speed = aidl.speed;
+ legacy.audioTrackCallback = aidl.audioTrackCallback;
+ legacy.opPackageName = aidl.opPackageName;
+ legacy.flags = VALUE_OR_RETURN(aidl2legacy_audio_output_flags_mask(aidl.flags));
+ legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
+ legacy.notificationFrameCount = VALUE_OR_RETURN(
+ convertIntegral<size_t>(aidl.notificationFrameCount));
+ legacy.selectedDeviceId = VALUE_OR_RETURN(
+ aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
+ legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
+ return legacy;
+}
+
+ConversionResult<media::CreateTrackResponse>
+IAudioFlinger::CreateTrackOutput::toAidl() const {
+ media::CreateTrackResponse aidl;
+ aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_mask(flags));
+ aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
+ aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
+ aidl.selectedDeviceId = VALUE_OR_RETURN(
+ legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
+ aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
+ aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
+ aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
+ aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
+ 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));
+ return aidl;
+}
+
+ConversionResult<IAudioFlinger::CreateTrackOutput>
+IAudioFlinger::CreateTrackOutput::fromAidl(
+ const media::CreateTrackResponse& aidl) {
+ IAudioFlinger::CreateTrackOutput legacy;
+ legacy.flags = VALUE_OR_RETURN(aidl2legacy_audio_output_flags_mask(aidl.flags));
+ legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
+ legacy.notificationFrameCount = VALUE_OR_RETURN(
+ convertIntegral<size_t>(aidl.notificationFrameCount));
+ legacy.selectedDeviceId = VALUE_OR_RETURN(
+ aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
+ legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
+ legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
+ legacy.afFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.afFrameCount));
+ legacy.afSampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afSampleRate));
+ 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));
+ return legacy;
+}
+
+ConversionResult<media::CreateRecordRequest>
+IAudioFlinger::CreateRecordInput::toAidl() const {
+ media::CreateRecordRequest aidl;
+ aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
+ aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_base_t_AudioConfigBase(config));
+ aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient(clientInfo));
+ aidl.opPackageName = VALUE_OR_RETURN(legacy2aidl_String16_string(opPackageName));
+ aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
+ aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_mask(flags));
+ aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
+ aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
+ aidl.selectedDeviceId = VALUE_OR_RETURN(
+ legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
+ aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
+ return aidl;
+}
+
+ConversionResult<IAudioFlinger::CreateRecordInput>
+IAudioFlinger::CreateRecordInput::fromAidl(
+ const media::CreateRecordRequest& aidl) {
+ IAudioFlinger::CreateRecordInput legacy;
+ legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
+ legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config));
+ legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient(aidl.clientInfo));
+ legacy.opPackageName = VALUE_OR_RETURN(aidl2legacy_string_view_String16(aidl.opPackageName));
+ legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
+ legacy.flags = VALUE_OR_RETURN(aidl2legacy_audio_input_flags_mask(aidl.flags));
+ legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
+ legacy.notificationFrameCount = VALUE_OR_RETURN(
+ convertIntegral<size_t>(aidl.notificationFrameCount));
+ legacy.selectedDeviceId = VALUE_OR_RETURN(
+ aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
+ legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
+ return legacy;
+}
+
+ConversionResult<media::CreateRecordResponse>
+IAudioFlinger::CreateRecordOutput::toAidl() const {
+ media::CreateRecordResponse aidl;
+ aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_mask(flags));
+ aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
+ aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
+ aidl.selectedDeviceId = VALUE_OR_RETURN(
+ legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
+ aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
+ aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
+ aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
+ 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));
+ return aidl;
+}
+
+ConversionResult<IAudioFlinger::CreateRecordOutput>
+IAudioFlinger::CreateRecordOutput::fromAidl(
+ const media::CreateRecordResponse& aidl) {
+ IAudioFlinger::CreateRecordOutput legacy;
+ legacy.flags = VALUE_OR_RETURN(aidl2legacy_audio_input_flags_mask(aidl.flags));
+ legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
+ legacy.notificationFrameCount = VALUE_OR_RETURN(
+ convertIntegral<size_t>(aidl.notificationFrameCount));
+ legacy.selectedDeviceId = VALUE_OR_RETURN(
+ aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
+ legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
+ legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
+ legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
+ 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));
+ return legacy;
+}
class BpAudioFlinger : public BpInterface<IAudioFlinger>
{
@@ -106,9 +256,9 @@
{
}
- virtual sp<IAudioTrack> createTrack(const CreateTrackInput& input,
- CreateTrackOutput& output,
- status_t *status)
+ virtual sp<IAudioTrack> createTrack(const media::CreateTrackRequest& input,
+ media::CreateTrackResponse& output,
+ status_t* status)
{
Parcel data, reply;
sp<IAudioTrack> track;
@@ -118,7 +268,7 @@
return track;
}
- input.writeToParcel(&data);
+ data.writeParcelable(input);
status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply);
if (lStatus != NO_ERROR) {
@@ -141,9 +291,9 @@
return track;
}
- virtual sp<media::IAudioRecord> createRecord(const CreateRecordInput& input,
- CreateRecordOutput& output,
- status_t *status)
+ virtual sp<media::IAudioRecord> createRecord(const media::CreateRecordRequest& input,
+ media::CreateRecordResponse& output,
+ status_t* status)
{
Parcel data, reply;
sp<media::IAudioRecord> record;
@@ -153,7 +303,7 @@
return record;
}
- input.writeToParcel(&data);
+ data.writeParcelable(input);
status_t lStatus = remote()->transact(CREATE_RECORD, data, &reply);
if (lStatus != NO_ERROR) {
@@ -1040,14 +1190,14 @@
case CREATE_TRACK: {
CHECK_INTERFACE(IAudioFlinger, data, reply);
- CreateTrackInput input;
- if (input.readFromParcel((Parcel*)&data) != NO_ERROR) {
+ media::CreateTrackRequest input;
+ if (data.readParcelable(&input) != NO_ERROR) {
reply->writeInt32(DEAD_OBJECT);
return NO_ERROR;
}
status_t status;
- CreateTrackOutput output;
+ media::CreateTrackResponse output;
sp<IAudioTrack> track= createTrack(input,
output,
@@ -1065,14 +1215,14 @@
case CREATE_RECORD: {
CHECK_INTERFACE(IAudioFlinger, data, reply);
- CreateRecordInput input;
- if (input.readFromParcel((Parcel*)&data) != NO_ERROR) {
+ media::CreateRecordRequest input;
+ if (data.readParcelable(&input) != NO_ERROR) {
reply->writeInt32(DEAD_OBJECT);
return NO_ERROR;
}
status_t status;
- CreateRecordOutput output;
+ media::CreateRecordResponse output;
sp<media::IAudioRecord> record = createRecord(input,
output,