Merge "Fix AudioSystem::getAudioPort implementation" into tm-dev
diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index 32c77c7..4c2284b 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -1497,13 +1497,12 @@
if (port == nullptr) {
return BAD_VALUE;
}
-
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return PERMISSION_DENIED;
- media::AudioPort portAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_v7_AudioPort(*port));
+ media::AudioPort portAidl;
RETURN_STATUS_IF_ERROR(
- statusTFromBinderStatus(aps->getAudioPort(portAidl, &portAidl)));
+ statusTFromBinderStatus(aps->getAudioPort(port->id, &portAidl)));
*port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPort_audio_port_v7(portAidl));
return OK;
}
diff --git a/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl b/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
index de0f75b..f10c5d0 100644
--- a/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
+++ b/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
@@ -216,8 +216,8 @@
inout Int count,
out AudioPort[] ports);
- /** Get attributes for a given audio port. */
- AudioPort getAudioPort(in AudioPort port);
+ /** Get attributes for the audio port with the given id (AudioPort.hal.id field). */
+ AudioPort getAudioPort(int /* audio_port_handle_t */ portId);
/**
* Create an audio patch between several source and sink ports.
diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h
index baefee3..a1fb125 100644
--- a/media/libaudioclient/include/media/AudioSystem.h
+++ b/media/libaudioclient/include/media/AudioSystem.h
@@ -374,7 +374,8 @@
struct audio_port_v7 *ports,
unsigned int *generation);
- /* Get attributes for a given audio port */
+ /* Get attributes for a given audio port. On input, the port
+ * only needs the 'id' field to be filled in. */
static status_t getAudioPort(struct audio_port_v7 *port);
/* Create an audio patch between several source and sink ports */
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 4da4ea0..391d60a 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -1567,12 +1567,9 @@
return Status::ok();
}
-Status AudioPolicyService::getAudioPort(const media::AudioPort& portAidl,
+Status AudioPolicyService::getAudioPort(int portId,
media::AudioPort* _aidl_return) {
- audio_port_v7 port = VALUE_OR_RETURN_BINDER_STATUS(
- aidl2legacy_AudioPort_audio_port_v7(portAidl));
- RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(AudioValidator::validateAudioPort(port)));
-
+ audio_port_v7 port{ .id = portId };
Mutex::Autolock _l(mLock);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index 4944497..0a01b7b 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -176,7 +176,7 @@
binder::Status listAudioPorts(media::AudioPortRole role, media::AudioPortType type,
Int* count, std::vector<media::AudioPort>* ports,
int32_t* _aidl_return) override;
- binder::Status getAudioPort(const media::AudioPort& port,
+ binder::Status getAudioPort(int portId,
media::AudioPort* _aidl_return) override;
binder::Status createAudioPatch(const media::AudioPatch& patch, int32_t handle,
int32_t* _aidl_return) override;