diff --git a/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source.h b/frameworks/innerkitsimpl/audiocapturer/include/audio_capturer_source.h index 993b3319c5b0ad1dd2b3925597536ea588bbbdb0..e6b7fb89272412bb53a4a4cfedb6f15e006be52f 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 a7e89c3617bdfcf56f1cca7bbd42e81b66844342..e419eb5988d17cdddc1dc61ca1dfe5f069943bb0 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 fce1495c5e510b3ab88c18c2ab2a0dc02b40022e..2bd2ef049bb2ae9ace1be6ee5eb2721d69150b85 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 ab38347c07658d8df695798d09e97e9f65b5d374..30b3eeef3c198c599cac2a31497383774c7df410 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 f7ebe972538a7abb3a51b557a1b8fc63daebd76d..ff7d99527b74d5f36cbe407716b283435432a459 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 346f39c85ccffbf9ff40f2d0eff47f05d491679d..3805af2e8d28ba3b1c4d9147780c64c8c8385f7d 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;