Support query active microphones information in AudioRecord.
This is part of device enumeration. With the new add API, developer
could get the active microphones information for each channel.
Bug: 64038649
Test: Run cts and check the print log.
Change-Id: Ic63d86e533a30e40697da7522a5a81f7cfcea988
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 7bfe802..f8fa094 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -7042,6 +7042,49 @@
#endif
}
+status_t AudioFlinger::RecordThread::getActiveMicrophones(
+ std::vector<media::MicrophoneInfo>* activeMicrophones)
+{
+ ALOGV("RecordThread::getActiveMicrophones");
+ AutoMutex _l(mLock);
+ // Fake data
+ struct audio_microphone_characteristic_t characteristic;
+ sprintf(characteristic.device_id, "builtin_mic");
+ characteristic.type = AUDIO_DEVICE_IN_BUILTIN_MIC;
+ sprintf(characteristic.address, "");
+ characteristic.location = AUDIO_MICROPHONE_LOCATION_MAINBODY;
+ characteristic.group = 0;
+ characteristic.index_in_the_group = 0;
+ characteristic.sensitivity = 1.0f;
+ characteristic.max_spl = 100.0f;
+ characteristic.min_spl = 0.0f;
+ characteristic.directionality = AUDIO_MICROPHONE_DIRECTIONALITY_OMNI;
+ characteristic.num_frequency_responses = 5;
+ for (size_t i = 0; i < characteristic.num_frequency_responses; i++) {
+ characteristic.frequency_responses[0][i] = 100.0f - i;
+ characteristic.frequency_responses[1][i] = 100.0f + i;
+ }
+ for (size_t i = 0; i < AUDIO_CHANNEL_COUNT_MAX; i++) {
+ characteristic.channel_mapping[i] = AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED;
+ }
+ audio_microphone_channel_mapping_t channel_mappings[] = {
+ AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT,
+ AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED,
+ };
+ for (size_t i = 0; i < mChannelCount; i++) {
+ characteristic.channel_mapping[i] = channel_mappings[i % 2];
+ }
+ characteristic.geometric_location.x = 0.1f;
+ characteristic.geometric_location.y = 0.2f;
+ characteristic.geometric_location.z = 0.3f;
+ characteristic.orientation.x = 0.0f;
+ characteristic.orientation.y = 1.0f;
+ characteristic.orientation.z = 0.0f;
+ media::MicrophoneInfo microphoneInfo = media::MicrophoneInfo(characteristic);
+ activeMicrophones->push_back(microphoneInfo);
+ return NO_ERROR;
+}
+
// destroyTrack_l() must be called with ThreadBase::mLock held
void AudioFlinger::RecordThread::destroyTrack_l(const sp<RecordTrack>& track)
{