diff --git a/services/media_engine/filters/audio_capture_filter.cpp b/services/media_engine/filters/audio_capture_filter.cpp index a2b84ddf27e8abbefcb9afa98fda8565eb89b536..a9d77c418c01e15c62a44f471bc1f85773b49f7a 100644 --- a/services/media_engine/filters/audio_capture_filter.cpp +++ b/services/media_engine/filters/audio_capture_filter.cpp @@ -523,7 +523,7 @@ int32_t AudioCaptureFilter::FillLostFrameNum() { int64_t audioDataTime = 0; int32_t lostCount = 0; - int64_t cachedAudioDateTime = cachedAudioDataDeque_.size() * AUDIO_CAPTURE_READ_FRAME_TIME; + int64_t cachedAudioDateTime = static_cast(cachedAudioDataDeque_.size()) * AUDIO_CAPTURE_READ_FRAME_TIME; audioCaptureModule_->GetAudioTime(audioDataTime, false); if (audioDataTime > currentTime_ + cachedAudioDateTime && (audioDataTime - currentTime_ - cachedAudioDateTime) > static_cast(AUDIO_UNREGULAR_DELTA_TIME) @@ -581,11 +581,18 @@ void AudioCaptureFilter::RecordCachedData(int32_t recordFrameNum) uint64_t bufferSize = 0; audioCaptureModule_->GetSize(bufferSize); - std::lock_guard lock(cachedAudioDataMutex_); - MEDIA_LOG_I("cachedAudioDataList count: " PUBLIC_LOG_D32, static_cast(cachedAudioDataDeque_.size())); - while (!cachedAudioDataDeque_.empty() && outputBufferQueue_ && recordFrameNum > 0) { - auto tmpData = cachedAudioDataDeque_.front(); - cachedAudioDataDeque_.pop_front(); + std::deque> tempDataDeque; + { + std::lock_guard lock(cachedAudioDataMutex_); + MEDIA_LOG_I("cachedAudioDataList count: " PUBLIC_LOG_D32, static_cast(cachedAudioDataDeque_.size())); + auto endIt = cachedAudioDataDeque_.begin() + + std::min(recordFrameNum, static_cast(cachedAudioDataDeque_.size())); + tempDataDeque.assign(cachedAudioDataDeque_.begin(), endIt); + cachedAudioDataDeque_.erase(cachedAudioDataDeque_.begin(), endIt); + } + while (!tempDataDeque.empty() && outputBufferQueue_ && recordFrameNum > 0) { + auto tmpData = tempDataDeque.front(); + tempDataDeque.pop_front(); std::shared_ptr buffer; AVBufferConfig avBufferConfig;