From dd3c14b84a46f9d2d933de63f88aeb48b8b0a19a Mon Sep 17 00:00:00 2001 From: t00605578 Date: Fri, 26 May 2023 11:42:56 +0800 Subject: [PATCH] add mmap dmic fill buffer Signed-off-by: t00605578 --- .../audiomanager/managersource/include/dmic_dev.h | 2 ++ .../audiomanager/managersource/src/dmic_dev.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/services/audiomanager/managersource/include/dmic_dev.h b/services/audiomanager/managersource/include/dmic_dev.h index 3c328b4d..4c2e049b 100644 --- a/services/audiomanager/managersource/include/dmic_dev.h +++ b/services/audiomanager/managersource/include/dmic_dev.h @@ -73,6 +73,7 @@ private: int32_t EnableDevice(const int32_t dhId, const std::string &capability); int32_t DisableDevice(const int32_t dhId); void EnqueueThread(); + void FillJitterQueue(); private: static constexpr uint8_t CHANNEL_WAIT_SECONDS = 5; @@ -80,6 +81,7 @@ private: static constexpr size_t DATA_QUEUE_HALF_SIZE = DATA_QUEUE_MAX_SIZE >> 1U; static constexpr size_t LOW_LATENCY_DATA_QUEUE_MAX_SIZE = 40; static constexpr size_t LOW_LATENCY_DATA_QUEUE_HALF_SIZE = LOW_LATENCY_DATA_QUEUE_MAX_SIZE >> 1U; + static constexpr uint32_t MMAP_WAIT_FRAME_US = 5000; static constexpr const char* ENQUEUE_THREAD = "micEnqueueTh"; std::string devId_; diff --git a/services/audiomanager/managersource/src/dmic_dev.cpp b/services/audiomanager/managersource/src/dmic_dev.cpp index 2863579c..dafcf757 100644 --- a/services/audiomanager/managersource/src/dmic_dev.cpp +++ b/services/audiomanager/managersource/src/dmic_dev.cpp @@ -351,6 +351,7 @@ void DMicDev::EnqueueThread() writeIndex_ = 0; writeNum_ = 0; DHLOGI("Enqueue thread start, lengthPerWrite length: %d.", lengthPerTrans_); + FillJitterQueue(); while (ashmem_ != nullptr && isEnqueueRunning_.load()) { int64_t timeOffset = UpdateTimeOffset(frameIndex_, LOW_LATENCY_INTERVAL_NS, startTime_); @@ -383,6 +384,20 @@ void DMicDev::EnqueueThread() } } +void DMicDev::FillJitterQueue() +{ + while (true) { + { + std::lock_guard lock(dataQueueMtx_); + if (dataQueue_.size() >= LOW_LATENCY_DATA_QUEUE_HALF_SIZE) { + break; + } + } + usleep(MMAP_WAIT_FRAME_US); + } + DHLOGI("Mic jitter data queue fill end."); +} + int32_t DMicDev::MmapStop() { std::lock_guard lock(writeAshmemMutex_); -- Gitee