diff --git a/media/codec2/sfplugin/CCodecBuffers.cpp b/media/codec2/sfplugin/CCodecBuffers.cpp index 265eeb7731..668f892017 100644 --- a/media/codec2/sfplugin/CCodecBuffers.cpp +++ b/media/codec2/sfplugin/CCodecBuffers.cpp @@ -127,20 +127,26 @@ void OutputBuffers::initSkipCutBuffer( mDelay = delay; mPadding = padding; mSampleRate = sampleRate; - setSkipCutBuffer(delay, padding, channelCount); + mChannelCount = channelCount; + setSkipCutBuffer(delay, padding); } void OutputBuffers::updateSkipCutBuffer(int32_t sampleRate, int32_t channelCount) { if (mSkipCutBuffer == nullptr) { return; } + if (mSampleRate == sampleRate && mChannelCount == channelCount) { + return; + } int32_t delay = mDelay; int32_t padding = mPadding; if (sampleRate != mSampleRate) { delay = ((int64_t)delay * sampleRate) / mSampleRate; padding = ((int64_t)padding * sampleRate) / mSampleRate; } - setSkipCutBuffer(delay, padding, channelCount); + mSampleRate = sampleRate; + mChannelCount = channelCount; + setSkipCutBuffer(delay, padding); } void OutputBuffers::submit(const sp &buffer) { @@ -153,14 +159,14 @@ void OutputBuffers::transferSkipCutBuffer(const sp &scb) { mSkipCutBuffer = scb; } -void OutputBuffers::setSkipCutBuffer(int32_t skip, int32_t cut, int32_t channelCount) { +void OutputBuffers::setSkipCutBuffer(int32_t skip, int32_t cut) { if (mSkipCutBuffer != nullptr) { size_t prevSize = mSkipCutBuffer->size(); if (prevSize != 0u) { ALOGD("[%s] Replacing SkipCutBuffer holding %zu bytes", mName, prevSize); } } - mSkipCutBuffer = new SkipCutBuffer(skip, cut, channelCount); + mSkipCutBuffer = new SkipCutBuffer(skip, cut, mChannelCount); } // LocalBufferPool diff --git a/media/codec2/sfplugin/CCodecBuffers.h b/media/codec2/sfplugin/CCodecBuffers.h index bae08e0dbb..85ca5d5ac3 100644 --- a/media/codec2/sfplugin/CCodecBuffers.h +++ b/media/codec2/sfplugin/CCodecBuffers.h @@ -228,8 +228,9 @@ private: int32_t mDelay; int32_t mPadding; int32_t mSampleRate; + int32_t mChannelCount; - void setSkipCutBuffer(int32_t skip, int32_t cut, int32_t channelCount); + void setSkipCutBuffer(int32_t skip, int32_t cut); DISALLOW_EVIL_CONSTRUCTORS(OutputBuffers); };