From dc74eb573d61d94117c25d124b852df966c6c3b6 Mon Sep 17 00:00:00 2001 From: liuyuehua1 Date: Thu, 28 Jul 2022 09:41:37 +0800 Subject: [PATCH 1/2] Solve application probabilistic crash and optimize discount volume test demo. Signed-off-by: liuyuehua1 --- .../src/adapter/audiocapturer_adapter.cpp | 35 ++++++++++++++ .../src/adapter/audioplayer_adapter.cpp | 46 +++++++++++++++++++ services/test/audio_policy_test.cpp | 40 ++++++++++++---- 3 files changed, 111 insertions(+), 10 deletions(-) diff --git a/frameworks/native/opensles/src/adapter/audiocapturer_adapter.cpp b/frameworks/native/opensles/src/adapter/audiocapturer_adapter.cpp index ae6b890383..99a9f3f29b 100644 --- a/frameworks/native/opensles/src/adapter/audiocapturer_adapter.cpp +++ b/frameworks/native/opensles/src/adapter/audiocapturer_adapter.cpp @@ -73,6 +73,11 @@ SLresult AudioCapturerAdapter::SetCaptureStateAdapter(SLuint32 id, SLuint32 stat { AUDIO_INFO_LOG("AudioCapturerAdapter::SetCaptureStateAdapter state: %{public}lu.", state); AudioCapturer *audioCapturer = GetAudioCapturerById(id); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::SetCaptureStateAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + SLresult slResult = SL_RESULT_SUCCESS; bool reseult = false; switch (state) { @@ -99,6 +104,11 @@ SLresult AudioCapturerAdapter::SetCaptureStateAdapter(SLuint32 id, SLuint32 stat SLresult AudioCapturerAdapter::GetCaptureStateAdapter(SLuint32 id, SLuint32 *state) { AudioCapturer *audioCapturer = GetAudioCapturerById(id); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::GetCaptureStateAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + CapturerState capturerState = audioCapturer->GetStatus(); switch (capturerState) { case CAPTURER_RUNNING: @@ -121,6 +131,11 @@ SLresult AudioCapturerAdapter::GetCaptureStateAdapter(SLuint32 id, SLuint32 *sta SLresult AudioCapturerAdapter::EnqueueAdapter(SLuint32 id, const void *buffer, SLuint32 size) { AudioCapturer *audioCapturer = GetAudioCapturerById(id); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::EnqueueAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + BufferDesc bufDesc = {}; bufDesc.buffer = (uint8_t*) buffer; bufDesc.bufLength = size; @@ -132,6 +147,11 @@ SLresult AudioCapturerAdapter::EnqueueAdapter(SLuint32 id, const void *buffer, S SLresult AudioCapturerAdapter::ClearAdapter(SLuint32 id) { AudioCapturer *audioCapturer = GetAudioCapturerById(id); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::ClearAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + audioCapturer->Clear(); return SL_RESULT_SUCCESS; } @@ -139,6 +159,11 @@ SLresult AudioCapturerAdapter::ClearAdapter(SLuint32 id) SLresult AudioCapturerAdapter::GetStateAdapter(SLuint32 id, SLOHBufferQueueState *state) { AudioCapturer *audioCapturer = GetAudioCapturerById(id); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::GetStateAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + BufferQueueState queueState = {0, 0}; audioCapturer->GetBufQueueState(queueState); state->count = queueState.numBuffers; @@ -149,6 +174,11 @@ SLresult AudioCapturerAdapter::GetStateAdapter(SLuint32 id, SLOHBufferQueueState SLresult AudioCapturerAdapter::GetBufferAdapter(SLuint32 id, SLuint8 **buffer, SLuint32 *size) { AudioCapturer *audioCapturer = GetAudioCapturerById(id); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::GetBufferAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + BufferDesc bufferDesc = {}; audioCapturer->GetBufferDesc(bufferDesc); *buffer = bufferDesc.buffer; @@ -161,6 +191,11 @@ SLresult AudioCapturerAdapter::RegisterCallbackAdapter(SLOHBufferQueueItf itf, { IOHBufferQueue *thiz = (IOHBufferQueue *)itf; AudioCapturer *audioCapturer = GetAudioCapturerById(thiz->mId); + if (audioCapturer == nullptr) { + AUDIO_ERR_LOG("AudioCapturerAdapter::RegisterCallbackAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + callbackPtr_ = make_shared(callback, itf, pContext); audioCapturer->SetCapturerReadCallback(static_pointer_cast(callbackPtr_)); callbackMap_.insert(make_pair(thiz->mId, callbackPtr_)); diff --git a/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp b/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp index 6fba2afd9e..a1a7a13db6 100644 --- a/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp +++ b/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp @@ -75,6 +75,11 @@ SLresult AudioPlayerAdapter::CreateAudioPlayerAdapter SLresult AudioPlayerAdapter::SetPlayStateAdapter(SLuint32 id, SLuint32 state) { AudioRenderer* pRender = GetAudioRenderById(id); + if (pRender == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::SetPlayStateAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + SLresult slResult = SL_RESULT_SUCCESS; bool reseult = false; switch (state) { @@ -94,12 +99,18 @@ SLresult AudioPlayerAdapter::SetPlayStateAdapter(SLuint32 id, SLuint32 state) AUDIO_ERR_LOG("AudioPlayerAdapter::play state not supported "); break; } + slResult = reseult ? SL_RESULT_SUCCESS : SL_RESULT_RESOURCE_ERROR; return slResult; } SLresult AudioPlayerAdapter::GetPlayStateAdapter(SLuint32 id, SLuint32 *state) { AudioRenderer* pRender = GetAudioRenderById(id); + if (pRender == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::GetPlayStateAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + RendererState rendererState = pRender->GetStatus(); switch (rendererState) { case RENDERER_RUNNING: @@ -121,6 +132,11 @@ SLresult AudioPlayerAdapter::GetPlayStateAdapter(SLuint32 id, SLuint32 *state) SLresult AudioPlayerAdapter::SetVolumeLevelAdapter(SLuint32 id, SLmillibel level) { AudioRenderer *audioRenderer = GetAudioRenderById(id); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::SetVolumeLevelAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + int base = 10; float volume = pow(base, level / MAGNIFICATION); float volumeMaxLevel = 15; @@ -131,6 +147,11 @@ SLresult AudioPlayerAdapter::SetVolumeLevelAdapter(SLuint32 id, SLmillibel level SLresult AudioPlayerAdapter::GetVolumeLevelAdapter(SLuint32 id, SLmillibel *level) { AudioRenderer *audioRenderer = GetAudioRenderById(id); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::GetVolumeLevelAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + float volume = audioRenderer->GetVolume(); *level = (SLmillibel) (MAGNIFICATION * log10(volume)); return SL_RESULT_SUCCESS; @@ -146,6 +167,11 @@ SLresult AudioPlayerAdapter::GetMaxVolumeLevelAdapter(SLuint32 id, SLmillibel *l SLresult AudioPlayerAdapter::EnqueueAdapter(SLuint32 id, const void *buffer, SLuint32 size) { AudioRenderer *audioRenderer = GetAudioRenderById(id); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::EnqueueAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + BufferDesc bufDesc = {}; bufDesc.buffer = (uint8_t*) buffer; bufDesc.dataLength = size; @@ -156,6 +182,11 @@ SLresult AudioPlayerAdapter::EnqueueAdapter(SLuint32 id, const void *buffer, SLu SLresult AudioPlayerAdapter::ClearAdapter(SLuint32 id) { AudioRenderer *audioRenderer = GetAudioRenderById(id); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::ClearAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + audioRenderer->Clear(); return SL_RESULT_SUCCESS; } @@ -163,6 +194,11 @@ SLresult AudioPlayerAdapter::ClearAdapter(SLuint32 id) SLresult AudioPlayerAdapter::GetStateAdapter(SLuint32 id, SLOHBufferQueueState *state) { AudioRenderer *audioRenderer = GetAudioRenderById(id); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::GetStateAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + BufferQueueState queueState = {0, 0}; audioRenderer->GetBufQueueState(queueState); state->count = queueState.numBuffers; @@ -173,6 +209,11 @@ SLresult AudioPlayerAdapter::GetStateAdapter(SLuint32 id, SLOHBufferQueueState * SLresult AudioPlayerAdapter::GetBufferAdapter(SLuint32 id, SLuint8 **buffer, SLuint32 *size) { AudioRenderer *audioRenderer = GetAudioRenderById(id); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::GetBufferAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + BufferDesc bufferDesc = {}; audioRenderer->GetBufferDesc(bufferDesc); *buffer = bufferDesc.buffer; @@ -185,6 +226,11 @@ SLresult AudioPlayerAdapter::RegisterCallbackAdapter { IOHBufferQueue *thiz = (IOHBufferQueue *)itf; AudioRenderer *audioRenderer = GetAudioRenderById(thiz->mId); + if (audioRenderer == nullptr) { + AUDIO_ERR_LOG("AudioPlayerAdapter::RegisterCallbackAdapter invalid id."); + return SL_RESULT_RESOURCE_ERROR; + } + callbackPtr_ = make_shared(callback, itf, pContext); audioRenderer->SetRendererWriteCallback(static_pointer_cast(callbackPtr_)); callbackMap_.insert(make_pair(thiz->mId, callbackPtr_)); diff --git a/services/test/audio_policy_test.cpp b/services/test/audio_policy_test.cpp index d056d82830..15e7a551a9 100644 --- a/services/test/audio_policy_test.cpp +++ b/services/test/audio_policy_test.cpp @@ -63,6 +63,10 @@ static void PrintUsage(void) cout << "-r\n\tGets RingerMode status" << endl << endl; cout << "-C\n\tSets AudioScene" << endl << endl; cout << "-c\n\tGets AudioScene status" << endl << endl; + cout << "-N\n\tSet the discount volume factor to 0" << endl << endl; + cout << "-O\n\tSet the discount volume factor to 0.5f" << endl << endl; + cout << "-P\n\tSet the discount volume factor to 1.0f" << endl << endl; + cout << "-G\n\tGet the discount volume factor" << endl << endl; cout << "-s\n\tGet Stream Status" << endl << endl; cout << "AUTHOR" << endl << endl; cout << "\tWritten by Sajeesh Sidharthan and Anurup M" << endl << endl; @@ -208,13 +212,27 @@ static void HandleLowPowerVolumeOption(char option) { AudioSystemManager *audioSystemMgr = AudioSystemManager::GetInstance(); int32_t streamId = stoi(optarg); - if (option == 'L') { - cout << "set low power volume" << endl; - audioSystemMgr->SetLowPowerVolume(streamId, 0.5f); - } else { - cout << "Get low power volume" << endl; - float volume = audioSystemMgr->GetLowPowerVolume(streamId); - cout << "low power volume is: " << volume << endl; + switch (option) { + case 'N': + audioSystemMgr->SetLowPowerVolume(streamId, 0); + cout << "Set low power volume 0" << endl; + break; + case 'O': + audioSystemMgr->SetLowPowerVolume(streamId, 0.5f); + cout << "Set low power volume 0.5" << endl; + break; + case 'P': + audioSystemMgr->SetLowPowerVolume(streamId, 1.0f); + cout << "Set low power volume 1.0" << endl; + break; + case 'G': { + float volume = audioSystemMgr->GetLowPowerVolume(streamId); + cout << "Get low power volume is: " << volume << endl; + break; + } + default : + cout << "This operation is not supported" << endl; + break; } } @@ -228,7 +246,7 @@ int main(int argc, char* argv[]) } int streamType = static_cast(AudioSystemManager::AudioVolumeType::STREAM_MUSIC); - while ((opt = getopt(argc, argv, ":V:U:S:D:M:R:C:d:s:L:l:vmruc")) != -1) { + while ((opt = getopt(argc, argv, ":V:U:S:D:M:R:C:d:s:N:O:P:G:vmruc")) != -1) { switch (opt) { case 'V': case 'v': @@ -262,8 +280,10 @@ int main(int argc, char* argv[]) case 'c': HandleAudioScene(opt); break; - case 'L': - case 'l': + case 'N': + case 'O': + case 'P': + case 'G': HandleLowPowerVolumeOption(opt); break; case ':': -- Gitee From d12ee7a283b5e1642203e629a658b2fc360c2f67 Mon Sep 17 00:00:00 2001 From: liuyuehua1 Date: Thu, 28 Jul 2022 10:46:20 +0800 Subject: [PATCH 2/2] Word spelling error correction. Signed-off-by: liuyuehua1 --- .../opensles/src/adapter/audioplayer_adapter.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp b/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp index a1a7a13db6..73b7eed351 100644 --- a/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp +++ b/frameworks/native/opensles/src/adapter/audioplayer_adapter.cpp @@ -81,25 +81,25 @@ SLresult AudioPlayerAdapter::SetPlayStateAdapter(SLuint32 id, SLuint32 state) } SLresult slResult = SL_RESULT_SUCCESS; - bool reseult = false; + bool result = false; switch (state) { case SL_PLAYSTATE_PLAYING: - reseult = pRender->Start(); + result = pRender->Start(); break; case SL_PLAYSTATE_PAUSED: - reseult = pRender->Pause(); + result = pRender->Pause(); break; case SL_PLAYSTATE_STOPPED: { - reseult = pRender->Clear(); - reseult = reseult && pRender->Stop(); - reseult = reseult && pRender->Release(); + result = pRender->Clear(); + result = result && pRender->Stop(); + result = result && pRender->Release(); break; } default: AUDIO_ERR_LOG("AudioPlayerAdapter::play state not supported "); break; } - slResult = reseult ? SL_RESULT_SUCCESS : SL_RESULT_RESOURCE_ERROR; + slResult = result ? SL_RESULT_SUCCESS : SL_RESULT_RESOURCE_ERROR; return slResult; } -- Gitee