From efc89f11dc9dfa11b2ae9fd73a4ffeadbb8a4765 Mon Sep 17 00:00:00 2001 From: Vaidegi B Date: Tue, 14 Sep 2021 19:05:55 +0530 Subject: [PATCH] Support Set Mic Mute before Capturer inited Signed-off-by: Vaidegi B --- .../include/audio_capturer_source.h | 1 + .../include/audio_capturer_source_intf.h | 2 ++ .../src/audio_capturer_source.cpp | 23 ++++++++++++++++++- .../pulseaudio/src/modules/hdi/hdi_source.c | 17 ++++++++++---- services/src/server/audio_server.cpp | 16 ++++++++----- services/test/audio_policy_test.cpp | 21 ++++++++++++++++- 6 files changed, 67 insertions(+), 13 deletions(-) diff --git a/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source.h b/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source.h index 993b3319c5..e6b7fb8927 100644 --- a/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source.h +++ b/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source.h @@ -59,6 +59,7 @@ public: static AudioCapturerSource* GetInstance(void); bool capturerInited_; + static bool micMuteState_; private: const int32_t HALF_FACTOR = 2; diff --git a/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source_intf.h b/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source_intf.h index a7e89c3617..e419eb5988 100644 --- a/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source_intf.h +++ b/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source_intf.h @@ -34,6 +34,8 @@ int32_t AudioCapturerSourceStart(void); int32_t AudioCapturerSourceStop(void); int32_t AudioCapturerSourceFrame(char *, uint64_t, uint64_t *); int32_t AudioCapturerSourceSetVolume(float, float); +bool AudioCapturerSourceIsMuteRequired(void); +int32_t AudioCapturerSourceSetMute(bool); int32_t AudioCapturerSourceGetVolume(float *left, float *right); #ifdef __cplusplus } diff --git a/frameworks/innerkitsimpl/audiocapturer/src/audio_capturer_source.cpp b/frameworks/innerkitsimpl/audiocapturer/src/audio_capturer_source.cpp index fce1495c5e..2bd2ef049b 100644 --- a/frameworks/innerkitsimpl/audiocapturer/src/audio_capturer_source.cpp +++ b/frameworks/innerkitsimpl/audiocapturer/src/audio_capturer_source.cpp @@ -26,6 +26,8 @@ namespace AudioStandard { const char *g_audioOutTestFilePath = "/data/local/tmp/audio_capture.pcm"; #endif // CAPTURE_DUMP +bool AudioCapturerSource::micMuteState_ = false; + AudioCapturerSource::AudioCapturerSource() : capturerInited_(false), started_(false), paused_(false), leftVolume_(MAX_VOLUME_LEVEL), rightVolume_(MAX_VOLUME_LEVEL), audioManager_(nullptr), audioAdapter_(nullptr), audioCapture_(nullptr), @@ -262,7 +264,6 @@ int32_t AudioCapturerSource::Start(void) return ERR_NOT_STARTED; } started_ = true; - audioCapture_->volume.SetVolume(reinterpret_cast(audioCapture_), MAX_VOLUME_LEVEL); } return SUCCESS; @@ -315,6 +316,7 @@ int32_t AudioCapturerSource::SetMute(bool isMute) return ERR_OPERATION_FAILED; } + micMuteState_ = isMute; return SUCCESS; } @@ -493,6 +495,25 @@ int32_t AudioCapturerSourceGetVolume(float *left, float *right) return ret; } +bool AudioCapturerSourceIsMuteRequired(void) +{ + return AudioCapturerSource::micMuteState_; +} + +int32_t AudioCapturerSourceSetMute(bool isMute) +{ + int32_t ret; + + if (!g_audioCaptureSourceInstance->capturerInited_) { + MEDIA_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n"); + return ERR_DEVICE_INIT; + } + + ret = g_audioCaptureSourceInstance->SetMute(isMute); + + return ret; +} + #ifdef __cplusplus } #endif diff --git a/frameworks/innerkitsimpl/pulseaudio/src/modules/hdi/hdi_source.c b/frameworks/innerkitsimpl/pulseaudio/src/modules/hdi/hdi_source.c index ab38347c07..30b3eeef3c 100644 --- a/frameworks/innerkitsimpl/pulseaudio/src/modules/hdi/hdi_source.c +++ b/frameworks/innerkitsimpl/pulseaudio/src/modules/hdi/hdi_source.c @@ -252,19 +252,26 @@ static int pa_capturer_init(struct userdata *u) { ret = AudioCapturerSourceInit(&u->attrs); if (ret != 0) { - MEDIA_INFO_LOG("Audio capturer init failed!"); + MEDIA_ERR_LOG("Audio capturer init failed!"); return ret; } - ret = AudioCapturerSourceStart(); + ret = AudioCapturerSourceSetVolume(DEFAULT_LEFT_VOLUME, DEFAULT_RIGHT_VOLUME); if (ret != 0) { - MEDIA_INFO_LOG("Audio capturer start failed!"); + MEDIA_ERR_LOG("audio capturer set volume failed!"); goto fail; } - ret = AudioCapturerSourceSetVolume(DEFAULT_LEFT_VOLUME, DEFAULT_RIGHT_VOLUME); + bool muteState = AudioCapturerSourceIsMuteRequired(); + ret = AudioCapturerSourceSetMute(muteState); + if (ret != 0) { + MEDIA_ERR_LOG("audio capturer set muteState: %d failed!", muteState); + goto fail; + } + + ret = AudioCapturerSourceStart(); if (ret != 0) { - MEDIA_INFO_LOG("audio capturer set volume failed!"); + MEDIA_ERR_LOG("Audio capturer start failed!"); goto fail; } diff --git a/services/src/server/audio_server.cpp b/services/src/server/audio_server.cpp index f7ebe97253..ff7d99527b 100644 --- a/services/src/server/audio_server.cpp +++ b/services/src/server/audio_server.cpp @@ -114,10 +114,11 @@ int32_t AudioServer::SetMicrophoneMute(bool isMute) AudioCapturerSource* audioCapturerSourceInstance = AudioCapturerSource::GetInstance(); if (audioCapturerSourceInstance->capturerInited_ == false) { - MEDIA_ERR_LOG("Capturer is not initialized. Start the recording first !"); - return ERR_INVALID_OPERATION; + MEDIA_INFO_LOG("Capturer is not initialized. Set the flag mute state flag"); + AudioCapturerSource::micMuteState_ = isMute; + return 0; } - + return audioCapturerSourceInstance->SetMute(isMute); } @@ -127,11 +128,14 @@ bool AudioServer::IsMicrophoneMute() bool isMute = false; if (audioCapturerSourceInstance->capturerInited_ == false) { - MEDIA_ERR_LOG("Capturer is not initialized. Start the recording first !"); - } else if (audioCapturerSourceInstance->GetMute(isMute)) { + MEDIA_INFO_LOG("Capturer is not initialized. Get the mic mute state flag value!"); + return AudioCapturerSource::micMuteState_; + } + + if (audioCapturerSourceInstance->GetMute(isMute)) { MEDIA_ERR_LOG("GetMute status in capturer returned Error !"); } - + return isMute; } diff --git a/services/test/audio_policy_test.cpp b/services/test/audio_policy_test.cpp index 346f39c85c..3805af2e8d 100644 --- a/services/test/audio_policy_test.cpp +++ b/services/test/audio_policy_test.cpp @@ -57,6 +57,8 @@ static void PrintUsage(void) cout << "-d\n\tGets Device Active" << endl << endl; cout << "-M\n\tSets Mute for streams, -S to setStream" << endl << endl; cout << "-m\n\tGets Mute for streams, -S to setStream" << endl << endl; + cout << "-U\n\t Mutes the Microphone" << endl << endl; + cout << "-u\n\t Checks if the Microphone is muted " << endl << endl; cout << "-R\n\tSets RingerMode" << endl << endl; cout << "-r\n\tGets RingerMode status" << endl << endl; cout << "-s\n\tGet Stream Status" << endl << endl; @@ -92,6 +94,19 @@ static void HandleMute(const AudioSystemManager *audioSystemMgr, int streamType, } } +static void HandleMicMute(const AudioSystemManager *audioSystemMgr, char option) +{ + if (option == 'u') { + bool muteStatus = audioSystemMgr->IsMicrophoneMute(); + cout << "Is Mic Mute : " << muteStatus << endl; + } else { + int mute = strtol(optarg, nullptr, AudioPolicyTest::OPT_ARG_BASE); + cout << "Set Mic Mute : " << mute << endl; + int32_t result = audioSystemMgr->SetMicrophoneMute((mute) ? true : false); + cout << "Set Mic Mute Result: " << result << endl; + } +} + static void SetStreamType(int &streamType) { streamType = strtol(optarg, nullptr, AudioPolicyTest::OPT_ARG_BASE); @@ -169,7 +184,7 @@ int main(int argc, char* argv[]) int streamType = static_cast(AudioSystemManager::AudioVolumeType::STREAM_MUSIC); AudioSystemManager *audioSystemMgr = AudioSystemManager::GetInstance(); - while ((opt = getopt(argc, argv, ":V:S:D:M:R:d:s:vmr")) != -1) { + while ((opt = getopt(argc, argv, ":V:U:S:D:M:R:d:s:vmru")) != -1) { switch (opt) { case 'V': case 'v': @@ -179,6 +194,10 @@ int main(int argc, char* argv[]) case 'm': HandleMute(audioSystemMgr, streamType, opt); break; + case 'U': + case 'u': + HandleMicMute(audioSystemMgr, opt); + break; case 'S': SetStreamType(streamType); break; -- Gitee