Add support for getting all available microphones characteristics.
Add MicrophoneInfo class in native side and native logic for supporting
query all available microphones.
Bug: 64038649
Test: Run test and check the print log.
Change-Id: Ic0a9cce55a1265a66ba08fe81b56b56cb88ba42f
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 113744f..b801752 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1972,6 +1972,43 @@
return NO_ERROR;
}
+status_t AudioFlinger::getMicrophones(std::vector<media::MicrophoneInfo> *microphones)
+{
+ // Fake data
+ size_t fakeNum = 2;
+ audio_devices_t fakeTypes[] = { AUDIO_DEVICE_IN_BUILTIN_MIC, AUDIO_DEVICE_IN_BACK_MIC };
+ for (size_t i = 0; i < fakeNum; i++) {
+ struct audio_microphone_characteristic_t characteristics;
+ sprintf(characteristics.device_id, "microphone:%zu", i);
+ characteristics.type = fakeTypes[i];
+ sprintf(characteristics.address, "");
+ characteristics.location = AUDIO_MICROPHONE_LOCATION_MAINBODY;
+ characteristics.group = 0;
+ characteristics.index_in_the_group = i;
+ characteristics.sensitivity = 1.0f;
+ characteristics.max_spl = 100.0f;
+ characteristics.min_spl = 0.0f;
+ characteristics.directionality = AUDIO_MICROPHONE_DIRECTIONALITY_OMNI;
+ characteristics.num_frequency_responses = 5 - i;
+ for (size_t j = 0; j < characteristics.num_frequency_responses; j++) {
+ characteristics.frequency_responses[0][j] = 100.0f - j;
+ characteristics.frequency_responses[1][j] = 100.0f + j;
+ }
+ for (size_t j = 0; j < AUDIO_CHANNEL_COUNT_MAX; j++) {
+ characteristics.channel_mapping[j] = AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED;
+ }
+ characteristics.geometric_location.x = 0.1f;
+ characteristics.geometric_location.y = 0.2f;
+ characteristics.geometric_location.z = 0.3f;
+ characteristics.orientation.x = 0.0f;
+ characteristics.orientation.y = 1.0f;
+ characteristics.orientation.z = 0.0f;
+ media::MicrophoneInfo microphoneInfo = media::MicrophoneInfo(characteristics);
+ microphones->push_back(microphoneInfo);
+ }
+ return NO_ERROR;
+}
+
// setAudioHwSyncForSession_l() must be called with AudioFlinger::mLock held
void AudioFlinger::setAudioHwSyncForSession_l(PlaybackThread *thread, audio_session_t sessionId)
{
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 296f092..83caca7 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -250,6 +250,8 @@
/* Indicate JAVA services are ready (scheduling, power management ...) */
virtual status_t systemReady();
+ virtual status_t getMicrophones(std::vector<media::MicrophoneInfo> *microphones);
+
virtual status_t onTransact(
uint32_t code,
const Parcel& data,