From ba126a9d5bf5bbcd3b928d4f959d2088bb95edf1 Mon Sep 17 00:00:00 2001 From: pingkai Date: Thu, 17 Sep 2020 17:02:53 +0800 Subject: [PATCH] fix(filteraudiorender): calculate the out frame nb_samples todo: splite the speed filter from the whole filter, and calculate the mSpeedDeltaDuration on speed filter only Signed-off-by: pingkai --- framework/render/audio/filterAudioRender.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/framework/render/audio/filterAudioRender.cpp b/framework/render/audio/filterAudioRender.cpp index f636c792b..01e8deff2 100644 --- a/framework/render/audio/filterAudioRender.cpp +++ b/framework/render/audio/filterAudioRender.cpp @@ -52,6 +52,11 @@ namespace Cicada { AF_LOGE("subInit failed , ret = %d ", ret); return ret; } + if (mOutputInfo.nb_samples > 0) { + float rate = (float) mInputInfo.sample_rate / mOutputInfo.sample_rate; + float nb_samples = mOutputInfo.nb_samples /= rate; + mOutputInfo.nb_samples = nb_samples; + } if (needFilter) { mFilter = std::unique_ptr(filterFactory::createAudioFilter(mInputInfo, mOutputInfo, mUseActiveFilter)); @@ -82,7 +87,8 @@ namespace Cicada { } if (mOutputInfo.nb_samples == 0) { - mOutputInfo.nb_samples = frame->getInfo().audio.nb_samples; + float rate = mInputInfo.sample_rate / mOutputInfo.sample_rate; + mOutputInfo.nb_samples = frame->getInfo().audio.nb_samples / rate; } mFrameQue.push(move(frame));