audo policy: more info in onRecordingConfigurationUpdate
Report more information in onRecordingConfigurationUpdate() callback:
- For client:
- Port ID
- Enabled effects
- Silenced by policy
- For stream:
- Active effects
- Active audio source
Bug: 111438757
Test: make
Change-Id: I34c3d0ee6251576de7d793bfaa2bc2c34efa2319
diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index 3e91717..dc7531c 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -1388,9 +1388,14 @@
}
void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
- int event, const record_client_info_t *clientInfo,
- const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
- audio_patch_handle_t patchHandle) {
+ int event,
+ const record_client_info_t *clientInfo,
+ const audio_config_base_t *clientConfig,
+ std::vector<effect_descriptor_t> clientEffects,
+ const audio_config_base_t *deviceConfig,
+ std::vector<effect_descriptor_t> effects,
+ audio_patch_handle_t patchHandle,
+ audio_source_t source) {
record_config_callback cb = NULL;
{
Mutex::Autolock _l(AudioSystem::gLock);
@@ -1398,7 +1403,8 @@
}
if (cb != NULL) {
- cb(event, clientInfo, clientConfig, deviceConfig, patchHandle);
+ cb(event, clientInfo, clientConfig, clientEffects,
+ deviceConfig, effects, patchHandle, source);
}
}
diff --git a/media/libaudioclient/IAudioPolicyServiceClient.cpp b/media/libaudioclient/IAudioPolicyServiceClient.cpp
index ad7f1de..1f9eab7 100644
--- a/media/libaudioclient/IAudioPolicyServiceClient.cpp
+++ b/media/libaudioclient/IAudioPolicyServiceClient.cpp
@@ -52,12 +52,37 @@
clientInfo->uid = (uid_t) data.readUint32();
clientInfo->session = (audio_session_t) data.readInt32();
clientInfo->source = (audio_source_t) data.readInt32();
+ data.read(&clientInfo->port_id, sizeof(audio_port_handle_t));
+ clientInfo->silenced = data.readBool();
}
-inline void writeRecordClientInfoFromParcel(Parcel& data, const record_client_info_t *clientInfo) {
+inline void writeRecordClientInfoToParcel(Parcel& data, const record_client_info_t *clientInfo) {
data.writeUint32((uint32_t) clientInfo->uid);
data.writeInt32((int32_t) clientInfo->session);
data.writeInt32((int32_t) clientInfo->source);
+ data.write(&clientInfo->port_id, sizeof(audio_port_handle_t));
+ data.writeBool(clientInfo->silenced);
+}
+
+inline void readEffectVectorFromParcel(const Parcel& data,
+ std::vector<effect_descriptor_t> *effects) {
+ int32_t numEffects = data.readInt32();
+ for (int32_t i = 0; i < numEffects; i++) {
+ effect_descriptor_t effect;
+ if (data.read(&effect, sizeof(effect_descriptor_t)) != NO_ERROR) {
+ break;
+ }
+ (*effects).push_back(effect);
+ }
+}
+
+inline void writeEffectVectorToParcel(Parcel& data, std::vector<effect_descriptor_t> effects) {
+ data.writeUint32((uint32_t) effects.size());
+ for (const auto& effect : effects) {
+ if (data.write(&effect, sizeof(effect_descriptor_t)) != NO_ERROR) {
+ break;
+ }
+ }
}
// ----------------------------------------------------------------------
@@ -92,16 +117,24 @@
remote()->transact(MIX_STATE_UPDATE, data, &reply, IBinder::FLAG_ONEWAY);
}
- void onRecordingConfigurationUpdate(int event, const record_client_info_t *clientInfo,
- const audio_config_base_t *clientConfig,
- const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle) {
+ void onRecordingConfigurationUpdate(int event,
+ const record_client_info_t *clientInfo,
+ const audio_config_base_t *clientConfig,
+ std::vector<effect_descriptor_t> clientEffects,
+ const audio_config_base_t *deviceConfig,
+ std::vector<effect_descriptor_t> effects,
+ audio_patch_handle_t patchHandle,
+ audio_source_t source) {
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor());
data.writeInt32(event);
- writeRecordClientInfoFromParcel(data, clientInfo);
+ writeRecordClientInfoToParcel(data, clientInfo);
writeAudioConfigBaseToParcel(data, clientConfig);
+ writeEffectVectorToParcel(data, clientEffects);
writeAudioConfigBaseToParcel(data, deviceConfig);
+ writeEffectVectorToParcel(data, effects);
data.writeInt32(patchHandle);
+ data.writeInt32((int32_t) source);
remote()->transact(RECORDING_CONFIGURATION_UPDATE, data, &reply, IBinder::FLAG_ONEWAY);
}
};
@@ -139,10 +172,15 @@
audio_config_base_t deviceConfig;
readRecordClientInfoFromParcel(data, &clientInfo);
readAudioConfigBaseFromParcel(data, &clientConfig);
+ std::vector<effect_descriptor_t> clientEffects;
+ readEffectVectorFromParcel(data, &clientEffects);
readAudioConfigBaseFromParcel(data, &deviceConfig);
+ std::vector<effect_descriptor_t> effects;
+ readEffectVectorFromParcel(data, &effects);
audio_patch_handle_t patchHandle = (audio_patch_handle_t) data.readInt32();
- onRecordingConfigurationUpdate(event, &clientInfo, &clientConfig, &deviceConfig,
- patchHandle);
+ audio_source_t source = (audio_source_t) data.readInt32();
+ onRecordingConfigurationUpdate(event, &clientInfo, &clientConfig, clientEffects,
+ &deviceConfig, effects, patchHandle, source);
return NO_ERROR;
} break;
default:
diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h
index 74156ca..b0da5b8 100644
--- a/media/libaudioclient/include/media/AudioSystem.h
+++ b/media/libaudioclient/include/media/AudioSystem.h
@@ -35,9 +35,14 @@
typedef void (*audio_error_callback)(status_t err);
typedef void (*dynamic_policy_callback)(int event, String8 regId, int val);
-typedef void (*record_config_callback)(int event, const record_client_info_t *clientInfo,
- const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
- audio_patch_handle_t patchHandle);
+typedef void (*record_config_callback)(int event,
+ const record_client_info_t *clientInfo,
+ const audio_config_base_t *clientConfig,
+ std::vector<effect_descriptor_t> clientEffects,
+ const audio_config_base_t *deviceConfig,
+ std::vector<effect_descriptor_t> effects,
+ audio_patch_handle_t patchHandle,
+ audio_source_t source);
class IAudioFlinger;
class IAudioPolicyService;
@@ -448,9 +453,13 @@
virtual void onAudioPatchListUpdate();
virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state);
virtual void onRecordingConfigurationUpdate(int event,
- const record_client_info_t *clientInfo,
- const audio_config_base_t *clientConfig,
- const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle);
+ const record_client_info_t *clientInfo,
+ const audio_config_base_t *clientConfig,
+ std::vector<effect_descriptor_t> clientEffects,
+ const audio_config_base_t *deviceConfig,
+ std::vector<effect_descriptor_t> effects,
+ audio_patch_handle_t patchHandle,
+ audio_source_t source);
private:
Mutex mLock;
diff --git a/media/libaudioclient/include/media/IAudioPolicyServiceClient.h b/media/libaudioclient/include/media/IAudioPolicyServiceClient.h
index e0d2495..b3c0381 100644
--- a/media/libaudioclient/include/media/IAudioPolicyServiceClient.h
+++ b/media/libaudioclient/include/media/IAudioPolicyServiceClient.h
@@ -17,10 +17,12 @@
#ifndef ANDROID_IAUDIOPOLICYSERVICECLIENT_H
#define ANDROID_IAUDIOPOLICYSERVICECLIENT_H
+#include <vector>
#include <utils/RefBase.h>
#include <binder/IInterface.h>
#include <system/audio.h>
+#include <system/audio_effect.h>
namespace android {
@@ -30,6 +32,8 @@
uid_t uid;
audio_session_t session;
audio_source_t source;
+ audio_port_handle_t port_id;
+ bool silenced;
};
typedef struct record_client_info record_client_info_t;
@@ -51,8 +55,11 @@
virtual void onRecordingConfigurationUpdate(int event,
const record_client_info_t *clientInfo,
const audio_config_base_t *clientConfig,
+ std::vector<effect_descriptor_t> clientEffects,
const audio_config_base_t *deviceConfig,
- audio_patch_handle_t patchHandle) = 0;
+ std::vector<effect_descriptor_t> effects,
+ audio_patch_handle_t patchHandle,
+ audio_source_t source) = 0;
};