diff --git a/frameworks/native/soundpool/cache_buffer.cpp b/frameworks/native/soundpool/cache_buffer.cpp index f5d38b43a20afe9152f682e6fc3d5494e517950e..7c1f022b7336dc86612c0772e309f0c0b7f68ae5 100644 --- a/frameworks/native/soundpool/cache_buffer.cpp +++ b/frameworks/native/soundpool/cache_buffer.cpp @@ -84,8 +84,15 @@ std::unique_ptr CacheBuffer::CreateAudioRenderer(c } CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, nullptr, "Invalid audioRenderer."); + size_t targetSize = 0; + int32_t ret = audioRenderer_->GetBufferSize(targetSize); audioRenderer->SetRenderMode(AudioStandard::AudioRenderMode::RENDER_MODE_CALLBACK); - int32_t ret = audioRenderer->SetRendererWriteCallback(shared_from_this()); + if (ret == 0 && targetSize != 0 && !audioRenderer_->IsFastRenderer()) { + size_t bufferDuration = 20; // 20 -> 20ms + audioRenderer_->SetBufferDuration(bufferDuration); + MEDIA_LOGI("Using buffer size:%{public}zu, duration %{public}zu", targetSize, bufferDuration); + } + ret = audioRenderer->SetRendererWriteCallback(shared_from_this()); if (ret != MSERR_OK) { MEDIA_LOGE("audio renderer write callback fail, ret %{public}d.", ret); } @@ -183,6 +190,7 @@ int32_t CacheBuffer::DealPlayParamsBeforePlay(const int32_t streamID, const Play { std::lock_guard lock(cacheBufferLock_); CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, MSERR_INVALID_VAL, "Invalid audioRenderer."); + audioRenderer_->SetOffloadAllowed(false); loop_ = playParams.loop; audioRenderer_->SetRenderRate(CheckAndAlignRendererRate(playParams.rate)); audioRenderer_->SetVolume(playParams.leftVolume);