Send audio patch in recording callback
Remove direct access to patch handle in AudioInputDescriptor, replace with
set / get functions.
Add interface for AudioSession to query configuration from enclosing
input descriptor.
When input descriptor's patch handle changes during a recording, propagate
the change through the recording notification callback.
Bug 26798796
Change-Id: Ia1395d44da7ccfe69ca46877638d1eb49b3935ad
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index 45f260a..94e0701 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -240,20 +240,20 @@
void AudioPolicyService::onRecordingConfigurationUpdate(int event, audio_session_t session,
audio_source_t source, const audio_config_base_t *clientConfig,
- const audio_config_base_t *deviceConfig)
+ const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle)
{
mOutputCommandThread->recordingConfigurationUpdateCommand(event, session, source,
- clientConfig, deviceConfig);
+ clientConfig, deviceConfig, patchHandle);
}
void AudioPolicyService::doOnRecordingConfigurationUpdate(int event, audio_session_t session,
audio_source_t source, const audio_config_base_t *clientConfig,
- const audio_config_base_t *deviceConfig)
+ const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle)
{
Mutex::Autolock _l(mNotificationClientsLock);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onRecordingConfigurationUpdate(event, session, source,
- clientConfig, deviceConfig);
+ clientConfig, deviceConfig, patchHandle);
}
}
@@ -321,11 +321,12 @@
void AudioPolicyService::NotificationClient::onRecordingConfigurationUpdate(
int event, audio_session_t session, audio_source_t source,
- const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig)
+ const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
+ audio_patch_handle_t patchHandle)
{
if (mAudioPolicyServiceClient != 0) {
mAudioPolicyServiceClient->onRecordingConfigurationUpdate(event, session, source,
- clientConfig, deviceConfig);
+ clientConfig, deviceConfig, patchHandle);
}
}
@@ -607,7 +608,8 @@
}
mLock.unlock();
svc->doOnRecordingConfigurationUpdate(data->mEvent, data->mSession,
- data->mSource, &data->mClientConfig, &data->mDeviceConfig);
+ data->mSource, &data->mClientConfig, &data->mDeviceConfig,
+ data->mPatchHandle);
mLock.lock();
} break;
default:
@@ -872,7 +874,8 @@
void AudioPolicyService::AudioCommandThread::recordingConfigurationUpdateCommand(
int event, audio_session_t session, audio_source_t source,
- const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig)
+ const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
+ audio_patch_handle_t patchHandle)
{
sp<AudioCommand>command = new AudioCommand();
command->mCommand = RECORDING_CONFIGURATION_UPDATE;
@@ -882,6 +885,7 @@
data->mSource = source;
data->mClientConfig = *clientConfig;
data->mDeviceConfig = *deviceConfig;
+ data->mPatchHandle = patchHandle;
command->mParam = data;
ALOGV("AudioCommandThread() adding recording configuration update event %d, source %d",
event, source);