Revert "audio policy: refactor audio record APIs"
This reverts commit 0f4b3c5449f85c1cd78e1b9ac4850de962b8edbe.
Bug: 72628781
Test: Capture several videos from camera app
Change-Id: I6bcc87c618ac9bfe5c911915cbb37de616bc727a
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 0ce562c..f1d7d86 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -287,7 +287,6 @@
audio_session_t session,
pid_t pid,
uid_t uid,
- const String16& opPackageName,
const audio_config_base_t *config,
audio_input_flags_t flags,
audio_port_handle_t *selectedDeviceId,
@@ -368,13 +367,6 @@
}
return status;
}
-
- sp<AudioRecordClient> client =
- new AudioRecordClient(*attr, *input, uid, pid, opPackageName, session);
- client->active = false;
- client->isConcurrent = false;
- client->isVirtualDevice = false; //TODO : update from APM->getInputForAttr()
- mAudioRecordClients.add(*portId, client);
}
if (audioPolicyEffects != 0) {
@@ -387,28 +379,23 @@
return NO_ERROR;
}
-status_t AudioPolicyService::startInput(audio_port_handle_t portId, bool *silenced)
+status_t AudioPolicyService::startInput(audio_io_handle_t input,
+ audio_session_t session,
+ audio_devices_t device,
+ uid_t uid,
+ bool *silenced)
{
+ // If UID inactive it records silence until becoming active
+ *silenced = !mUidPolicy->isUidActive(uid) && !is_virtual_input_device(device);
+
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
Mutex::Autolock _l(mLock);
-
- ssize_t index = mAudioRecordClients.indexOfKey(portId);
- if (index < 0) {
- return INVALID_OPERATION;
- }
- sp<AudioRecordClient> client = mAudioRecordClients.valueAt(index);
-
- // If UID inactive it records silence until becoming active
- *silenced = !mUidPolicy->isUidActive(client->uid) && !client->isVirtualDevice;
-
AudioPolicyInterface::concurrency_type__mask_t concurrency =
AudioPolicyInterface::API_INPUT_CONCURRENCY_NONE;
-
- status_t status = mAudioPolicyManager->startInput(
- client->input, client->session, *silenced, &concurrency);
+ status_t status = mAudioPolicyManager->startInput(input, session, *silenced, &concurrency);
if (status == NO_ERROR) {
LOG_ALWAYS_FATAL_IF(concurrency & ~AudioPolicyInterface::API_INPUT_CONCURRENCY_ALL,
@@ -426,52 +413,38 @@
return status;
}
-status_t AudioPolicyService::stopInput(audio_port_handle_t portId)
+status_t AudioPolicyService::stopInput(audio_io_handle_t input,
+ audio_session_t session)
{
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
Mutex::Autolock _l(mLock);
- ssize_t index = mAudioRecordClients.indexOfKey(portId);
- if (index < 0) {
- return INVALID_OPERATION;
- }
- sp<AudioRecordClient> client = mAudioRecordClients.valueAt(index);
-
- return mAudioPolicyManager->stopInput(client->input, client->session);
+ return mAudioPolicyManager->stopInput(input, session);
}
-void AudioPolicyService::releaseInput(audio_port_handle_t portId)
+void AudioPolicyService::releaseInput(audio_io_handle_t input,
+ audio_session_t session)
{
if (mAudioPolicyManager == NULL) {
return;
}
sp<AudioPolicyEffects>audioPolicyEffects;
- sp<AudioRecordClient> client;
{
Mutex::Autolock _l(mLock);
audioPolicyEffects = mAudioPolicyEffects;
- ssize_t index = mAudioRecordClients.indexOfKey(portId);
- if (index < 0) {
- return;
- }
- client = mAudioRecordClients.valueAt(index);
- mAudioRecordClients.removeItem(portId);
- }
- if (client == 0) {
- return;
}
if (audioPolicyEffects != 0) {
// release audio processors from the input
- status_t status = audioPolicyEffects->releaseInputEffects(client->input, client->session);
+ status_t status = audioPolicyEffects->releaseInputEffects(input, session);
if(status != NO_ERROR) {
- ALOGW("Failed to release effects on input %d", client->input);
+ ALOGW("Failed to release effects on input %d", input);
}
}
{
Mutex::Autolock _l(mLock);
- mAudioPolicyManager->releaseInput(client->input, client->session);
+ mAudioPolicyManager->releaseInput(input, session);
}
}
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index bfa3ef4..c21aa58 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -98,15 +98,19 @@
audio_session_t session,
pid_t pid,
uid_t uid,
- const String16& opPackageName,
const audio_config_base_t *config,
audio_input_flags_t flags,
audio_port_handle_t *selectedDeviceId = NULL,
audio_port_handle_t *portId = NULL);
- virtual status_t startInput(audio_port_handle_t portId,
+ virtual status_t startInput(audio_io_handle_t input,
+ audio_session_t session,
+ audio_devices_t device,
+ uid_t uid,
bool *silenced);
- virtual status_t stopInput(audio_port_handle_t portId);
- virtual void releaseInput(audio_port_handle_t portId);
+ virtual status_t stopInput(audio_io_handle_t input,
+ audio_session_t session);
+ virtual void releaseInput(audio_io_handle_t input,
+ audio_session_t session);
virtual status_t initStreamVolume(audio_stream_type_t stream,
int indexMin,
int indexMax);
@@ -607,31 +611,6 @@
bool mAudioPortCallbacksEnabled;
};
- // --- AudioRecordClient ---
- // Information about each registered AudioRecord client
- // (between calls to getInputForAttr() and releaseInput())
- class AudioRecordClient : public RefBase {
- public:
- AudioRecordClient(const audio_attributes_t attributes,
- const audio_io_handle_t input, uid_t uid, pid_t pid,
- const String16& opPackageName, const audio_session_t session) :
- attributes(attributes),
- input(input), uid(uid), pid(pid),
- opPackageName(opPackageName), session(session),
- active(false), isConcurrent(false), isVirtualDevice(false) {}
- virtual ~AudioRecordClient() {}
-
- const audio_attributes_t attributes; // source, flags ...
- const audio_io_handle_t input; // audio HAL input IO handle
- const uid_t uid; // client UID
- const pid_t pid; // client PID
- const String16 opPackageName; // client package name
- const audio_session_t session; // audio session ID
- bool active; // Capture is active or inactive
- bool isConcurrent; // is allowed to concurrent capture
- bool isVirtualDevice; // uses vitual device: updated by APM::getInputForAttr()
- };
-
// Internal dump utilities.
status_t dumpPermissionDenial(int fd);
@@ -657,7 +636,6 @@
audio_mode_t mPhoneState;
sp<UidPolicy> mUidPolicy;
- DefaultKeyedVector< audio_port_handle_t, sp<AudioRecordClient> > mAudioRecordClients;
};
} // namespace android