getInputForAttr perm check cleanup pt2

Update param types for AudioPolicyManager::getInputForAttr to avoid
ptrs/inout for clarity.

No behavior changes for now.

Test: CtsMediaAudioTestCases
Bug: 374870131
Bug: 343523722
Flag: EXEMPT mechanical refactoring

Change-Id: Ic179b09159b47b5af5a56811af9ef759e47eea0c
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 20bc788..9d9836f 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -815,23 +815,21 @@
                                            int32_t selectedDeviceIdAidl,
                                            media::GetInputForAttrResponse* _aidl_return) {
     auto inputSource = attrAidl.source;
-    audio_attributes_t attr = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_attributes_t attr = VALUE_OR_RETURN_BINDER_STATUS(
             aidl2legacy_AudioAttributes_audio_attributes_t(attrAidl));
-    audio_io_handle_t input = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_io_handle_t requestedInput = VALUE_OR_RETURN_BINDER_STATUS(
             aidl2legacy_int32_t_audio_io_handle_t(inputAidl));
-    audio_unique_id_t riid = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_unique_id_t riid = VALUE_OR_RETURN_BINDER_STATUS(
             aidl2legacy_int32_t_audio_unique_id_t(riidAidl));
-    audio_session_t session = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_session_t session = VALUE_OR_RETURN_BINDER_STATUS(
             aidl2legacy_int32_t_audio_session_t(sessionAidl));
-    audio_config_base_t config = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_config_base_t config = VALUE_OR_RETURN_BINDER_STATUS(
             aidl2legacy_AudioConfigBase_audio_config_base_t(configAidl, true /*isInput*/));
-    audio_input_flags_t flags = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_input_flags_t flags = VALUE_OR_RETURN_BINDER_STATUS(
             aidl2legacy_int32_t_audio_input_flags_t_mask(flagsAidl));
-    audio_port_handle_t selectedDeviceId = VALUE_OR_RETURN_BINDER_STATUS(
+    const audio_port_handle_t requestedDeviceId = VALUE_OR_RETURN_BINDER_STATUS(
                 aidl2legacy_int32_t_audio_port_handle_t(selectedDeviceIdAidl));
 
-    audio_port_handle_t portId;
-
     if (mAudioPolicyManager == NULL) {
         return binderStatusFromStatusT(NO_INIT);
     }
@@ -881,77 +879,72 @@
                                              toString(inputSource).c_str()));
     }
 
-    uint32_t virtualDeviceId = kDefaultVirtualDeviceId;
-
-    sp<AudioPolicyEffects>audioPolicyEffects;
+    sp<AudioPolicyEffects> audioPolicyEffects;
+    base::expected<media::GetInputForAttrResponse, std::variant<binder::Status, AudioConfigBase>>
+            res;
     {
-        status_t status;
         AudioPolicyInterface::input_type_t inputType;
 
         audio_utils::lock_guard _l(mMutex);
         {
             AutoCallerClear acc;
             // the audio_in_acoustics_t parameter is ignored by get_input()
-            status = mAudioPolicyManager->getInputForAttr(&attr, &input, riid, session,
-                                                          attributionSource, &config,
-                                                          flags, &selectedDeviceId,
-                                                          &inputType, &portId,
-                                                          &virtualDeviceId);
+            res = mAudioPolicyManager->getInputForAttr(attr, requestedInput, requestedDeviceId,
+                    config, flags, riid, session, attributionSource, &inputType);
 
         }
         audioPolicyEffects = mAudioPolicyEffects;
 
-        if (status == NO_ERROR) {
+        if (res.has_value()) {
             const auto permResult = evaluatePermsForDevice(attributionSource,
-                    inputSource, inputType, virtualDeviceId,
+                    inputSource, inputType, res->virtualDeviceId,
                     isCallRedir);
 
             if (!permResult.has_value()) {
                 AutoCallerClear acc;
-                mAudioPolicyManager->releaseInput(portId);
+                mAudioPolicyManager->releaseInput(res->portId);
                 return permResult.error();
             } else if (!permResult.value()) {
                 AutoCallerClear acc;
-                mAudioPolicyManager->releaseInput(portId);
+                mAudioPolicyManager->releaseInput(res->portId);
                 return Status::fromExceptionCode(
                         EX_SECURITY,
                         String8::format(
                                 "%s: %s missing perms for input type %d, inputSource %d, vdi %d",
                                 __func__, attributionSource.toString().c_str(), inputType,
-                                inputSource, virtualDeviceId));
+                                inputSource, res->virtualDeviceId));
             }
         }
 
-        if (status != NO_ERROR) {
-            _aidl_return->config = VALUE_OR_RETURN_BINDER_STATUS(
-                    legacy2aidl_audio_config_base_t_AudioConfigBase(config, true /*isInput*/));
-            return binderStatusFromStatusT(status);
+        if (!res.has_value()) {
+            if (res.error().index() == 1) {
+                _aidl_return->config = std::get<1>(res.error());
+                return Status::fromExceptionCode(EX_ILLEGAL_STATE);
+            } else {
+                return std::get<0>(res.error());
+            }
         }
 
-        DeviceIdVector selectedDeviceIds = { selectedDeviceId };
-        sp<AudioRecordClient> client = new AudioRecordClient(attr, input, session, portId,
+        DeviceIdVector selectedDeviceIds = { res->selectedDeviceId };
+        sp<AudioRecordClient> client = new AudioRecordClient(attr, res->input, session, res->portId,
                                                              selectedDeviceIds, attributionSource,
-                                                             virtualDeviceId,
+                                                             res->virtualDeviceId,
                                                              canBypassConcurrentPolicy,
                                                              mOutputCommandThread);
-        mAudioRecordClients.add(portId, client);
+        mAudioRecordClients.add(res->portId, client);
     }
 
     if (audioPolicyEffects != 0) {
         // create audio pre processors according to input source
-        status_t status = audioPolicyEffects->addInputEffects(input,
+        status_t status = audioPolicyEffects->addInputEffects(res->input,
                 aidl2legacy_AudioSource_audio_source_t(inputSource).value(), session);
         if (status != NO_ERROR && status != ALREADY_EXISTS) {
-            ALOGW("Failed to add effects on input %d", input);
+            ALOGW("Failed to add effects on input %d", res->input);
         }
     }
 
-    _aidl_return->input = VALUE_OR_RETURN_BINDER_STATUS(
-            legacy2aidl_audio_io_handle_t_int32_t(input));
-    _aidl_return->selectedDeviceId = VALUE_OR_RETURN_BINDER_STATUS(
-            legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
-    _aidl_return->portId = VALUE_OR_RETURN_BINDER_STATUS(
-            legacy2aidl_audio_port_handle_t_int32_t(portId));
+    *_aidl_return = res.value();
+
     return Status::ok();
 }