From 6376ac7967267b6042e9525b804030317d7c1786 Mon Sep 17 00:00:00 2001 From: byndyx Date: Thu, 13 Jun 2024 20:50:38 +0800 Subject: [PATCH] modify halfsize Signed-off-by: byndyx --- .../audiomanager/managersource/include/dmic_dev.h | 9 ++++++--- services/audiomanager/managersource/src/dmic_dev.cpp | 12 ++++++++++-- .../test/unittest/sourcedevice/src/dmic_dev_test.cpp | 11 ++++++++++- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/services/audiomanager/managersource/include/dmic_dev.h b/services/audiomanager/managersource/include/dmic_dev.h index d2278ed1..9f3fb18f 100644 --- a/services/audiomanager/managersource/include/dmic_dev.h +++ b/services/audiomanager/managersource/include/dmic_dev.h @@ -92,9 +92,10 @@ private: static constexpr uint8_t CHANNEL_WAIT_SECONDS = 5; static constexpr size_t DATA_QUEUE_MAX_SIZE = 10; static constexpr size_t DATA_QUEUE_HALF_SIZE = DATA_QUEUE_MAX_SIZE >> 1U; - static constexpr size_t LOW_LATENCY_DATA_QUEUE_MAX_SIZE = 30; - static constexpr size_t LOW_LATENCY_DATA_QUEUE_HALF_SIZE = 10; - static constexpr size_t LOW_LATENCY_JITTER_TIME_MS = 50; + static constexpr uint32_t LOW_LATENCY_JITTER_MAX_TIME_MS = 150; + static constexpr uint32_t LOW_LATENCY_JITTER_TIME_MS = 50; + static constexpr uint8_t MMAP_NORMAL_PERIOD = 5; + static constexpr uint8_t MMAP_VOIP_PERIOD = 20; static constexpr uint32_t MMAP_WAIT_FRAME_US = 5000; static constexpr const char* ENQUEUE_THREAD = "micEnqueueTh"; const std::string DUMP_DAUDIO_MIC_READ_FROM_BUF_NAME = "dump_source_mic_read_from_trans.pcm"; @@ -139,6 +140,8 @@ private: bool echoCannelOn_ = false; FILE *dumpFileCommn_ = nullptr; FILE *dumpFileFast_ = nullptr; + uint32_t lowLatencyHalfSize_ = 0; + uint32_t lowLatencyMaxfSize_ = 0; }; } // DistributedHardware } // OHOS diff --git a/services/audiomanager/managersource/src/dmic_dev.cpp b/services/audiomanager/managersource/src/dmic_dev.cpp index 236c8443..2bb23f4c 100644 --- a/services/audiomanager/managersource/src/dmic_dev.cpp +++ b/services/audiomanager/managersource/src/dmic_dev.cpp @@ -179,6 +179,10 @@ int32_t DMicDev::SetParameters(const int32_t streamId, const AudioParamHDF ¶ DHLOGD("Set mic parameters {samplerate: %{public}d, channelmask: %{public}d, format: %{public}d, " "period: %{public}d, framesize: %{public}d, ext{%{public}s}}.", param.sampleRate, param.channelMask, param.bitFormat, param.period, param.frameSize, param.ext.c_str()); + if (param.capturerFlags == MMAP_MODE && param.period != MMAP_NORMAL_PERIOD && param.period != MMAP_VOIP_PERIOD) { + DHLOGE("The period is invalid : %{public}" PRIu32, param.period); + return ERR_DH_AUDIO_SA_PARAM_INVALID; + } curPort_ = dhId_; paramHDF_ = param; @@ -193,6 +197,10 @@ int32_t DMicDev::SetParameters(const int32_t streamId, const AudioParamHDF ¶ param_.captureOpts.sourceType = SOURCE_TYPE_MIC; } param_.captureOpts.capturerFlags = paramHDF_.capturerFlags; + if (paramHDF_.capturerFlags == MMAP_MODE) { + lowLatencyHalfSize_ = LOW_LATENCY_JITTER_TIME_MS / paramHDF_.period; + lowLatencyMaxfSize_ = LOW_LATENCY_JITTER_MAX_TIME_MS / paramHDF_.period; + } return DH_SUCCESS; } @@ -550,8 +558,8 @@ int32_t DMicDev::OnDecodeTransDataDone(const std::shared_ptr &audioDa CHECK_NULL_RETURN(audioData, ERR_DH_AUDIO_NULLPTR); std::lock_guard lock(dataQueueMtx_); dataQueSize_ = curStatus_ != AudioStatus::STATUS_START ? - (param_.captureOpts.capturerFlags == MMAP_MODE ? LOW_LATENCY_DATA_QUEUE_HALF_SIZE : DATA_QUEUE_HALF_SIZE) : - (param_.captureOpts.capturerFlags == MMAP_MODE ? LOW_LATENCY_DATA_QUEUE_MAX_SIZE : DATA_QUEUE_MAX_SIZE); + (param_.captureOpts.capturerFlags == MMAP_MODE ? lowLatencyHalfSize_ : DATA_QUEUE_HALF_SIZE) : + (param_.captureOpts.capturerFlags == MMAP_MODE ? lowLatencyMaxfSize_ : DATA_QUEUE_MAX_SIZE); if (isExistedEmpty_.load()) { dataQueSize_ = param_.captureOpts.capturerFlags == MMAP_MODE ? dataQueSize_ : DATA_QUEUE_EXT_SIZE; } diff --git a/services/audiomanager/test/unittest/sourcedevice/src/dmic_dev_test.cpp b/services/audiomanager/test/unittest/sourcedevice/src/dmic_dev_test.cpp index 78833f84..6b6ed82d 100644 --- a/services/audiomanager/test/unittest/sourcedevice/src/dmic_dev_test.cpp +++ b/services/audiomanager/test/unittest/sourcedevice/src/dmic_dev_test.cpp @@ -126,7 +126,7 @@ HWTEST_F(DMicDevTest, DestroyStream_001, TestSize.Level1) */ HWTEST_F(DMicDevTest, SetParameters_001, TestSize.Level1) { - const AudioParamHDF param = { + AudioParamHDF param = { .sampleRate = SAMPLE_RATE_8000, .channelMask = STEREO, .bitFormat = SAMPLE_U8, @@ -137,6 +137,15 @@ HWTEST_F(DMicDevTest, SetParameters_001, TestSize.Level1) }; EXPECT_EQ(DH_SUCCESS, mic_->SetParameters(streamId_, param)); mic_->GetAudioParam(); + param.streamUsage = StreamUsage::STREAM_USAGE_VOICE_COMMUNICATION; + EXPECT_EQ(DH_SUCCESS, mic_->SetParameters(streamId_, param)); + + param.capturerFlags = MMAP_MODE; + EXPECT_EQ(ERR_DH_AUDIO_SA_PARAM_INVALID, mic_->SetParameters(streamId_, param)); + param.period = 5; + EXPECT_EQ(DH_SUCCESS, mic_->SetParameters(streamId_, param)); + param.period = 20; + EXPECT_EQ(DH_SUCCESS, mic_->SetParameters(streamId_, param)); } /** -- Gitee