diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2024-03-04 20:07:36 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-03-04 20:07:36 +0000 |
commit | 886f4abc33ccf6d3ea683c428036318e842300c4 (patch) | |
tree | a6b15c2f63638a0228a3d8a2305f35434fbfc146 | |
parent | 20024657cdc911f2c229c1785a91e45aebbec3ab (diff) | |
parent | 777a180b4f44193c35a11ed8e9109509c10e21f5 (diff) | |
download | av-886f4abc33ccf6d3ea683c428036318e842300c4.tar.gz |
Merge "MultiAccessunitHelper: samplerate and channelCount" into main
-rw-r--r-- | media/codec2/hal/common/MultiAccessUnitHelper.cpp | 63 | ||||
-rw-r--r-- | media/codec2/hal/common/include/codec2/common/MultiAccessUnitHelper.h | 4 |
2 files changed, 31 insertions, 36 deletions
diff --git a/media/codec2/hal/common/MultiAccessUnitHelper.cpp b/media/codec2/hal/common/MultiAccessUnitHelper.cpp index 3a715208a2..03a76e901f 100644 --- a/media/codec2/hal/common/MultiAccessUnitHelper.cpp +++ b/media/codec2/hal/common/MultiAccessUnitHelper.cpp @@ -96,18 +96,23 @@ C2Component::kind_t MultiAccessUnitInterface::kind() const { return (C2Component::kind_t)(mKind.value); } -void MultiAccessUnitInterface::getDecoderSampleRateAndChannelCount( - uint32_t &sampleRate_, uint32_t &channelCount_) const { +bool MultiAccessUnitInterface::getDecoderSampleRateAndChannelCount( + uint32_t * const sampleRate_, uint32_t * const channelCount_) const { + if (sampleRate_ == nullptr || sampleRate_ == nullptr) { + return false; + } if (mC2ComponentIntf) { C2StreamSampleRateInfo::output sampleRate; C2StreamChannelCountInfo::output channelCount; c2_status_t res = mC2ComponentIntf->query_vb( {&sampleRate, &channelCount}, {}, C2_MAY_BLOCK, nullptr); - if (res == C2_OK) { - sampleRate_ = sampleRate.value; - channelCount_ = channelCount.value; + if (res == C2_OK && sampleRate.value > 0 && channelCount.value > 0) { + *sampleRate_ = sampleRate.value; + *channelCount_ = channelCount.value; + return true; } } + return false; } //C2MultiAccessUnitBuffer @@ -320,26 +325,10 @@ c2_status_t MultiAccessUnitHelper::scatter( } } if (!processedWork->empty()) { - { - C2LargeFrame::output multiAccessParams = mInterface->getLargeFrameParam(); - if (mInterface->kind() == C2Component::KIND_DECODER) { - uint32_t sampleRate = 0; - uint32_t channelCount = 0; - uint32_t frameSize = 0; - mInterface->getDecoderSampleRateAndChannelCount( - sampleRate, channelCount); - if (sampleRate > 0 && channelCount > 0) { - frameSize = channelCount * 2; - multiAccessParams.maxSize = - (multiAccessParams.maxSize / frameSize) * frameSize; - multiAccessParams.thresholdSize = - (multiAccessParams.thresholdSize / frameSize) * frameSize; - } - } - frameInfo.mLargeFrameTuning = multiAccessParams; - std::lock_guard<std::mutex> l(mLock); - mFrameHolder.push_back(std::move(frameInfo)); - } + C2LargeFrame::output multiAccessParams = mInterface->getLargeFrameParam(); + frameInfo.mLargeFrameTuning = multiAccessParams; + std::lock_guard<std::mutex> l(mLock); + mFrameHolder.push_back(std::move(frameInfo)); } } return C2_OK; @@ -506,6 +495,20 @@ c2_status_t MultiAccessUnitHelper::processWorklets(MultiAccessUnitInfo &frame, frame.reset(); return C2_OK; } + int64_t sampleTimeUs = 0; + uint32_t frameSize = 0; + uint32_t sampleRate = 0; + uint32_t channelCount = 0; + if (mInterface->getDecoderSampleRateAndChannelCount(&sampleRate, &channelCount)) { + sampleTimeUs = (1000000u) / (sampleRate * channelCount * 2); + frameSize = channelCount * 2; + if (mInterface->kind() == C2Component::KIND_DECODER) { + frame.mLargeFrameTuning.maxSize = + (frame.mLargeFrameTuning.maxSize / frameSize) * frameSize; + frame.mLargeFrameTuning.thresholdSize = + (frame.mLargeFrameTuning.thresholdSize / frameSize) * frameSize; + } + } c2_status_t c2ret = allocateWork(frame, true); if (c2ret != C2_OK) { return c2ret; @@ -520,15 +523,7 @@ c2_status_t MultiAccessUnitHelper::processWorklets(MultiAccessUnitInfo &frame, outputFramedata.infoBuffers.insert(outputFramedata.infoBuffers.begin(), (*worklet)->output.infoBuffers.begin(), (*worklet)->output.infoBuffers.end()); - int64_t sampleTimeUs = 0; - uint32_t frameSize = 0; - uint32_t sampleRate = 0; - uint32_t channelCount = 0; - mInterface->getDecoderSampleRateAndChannelCount(sampleRate, channelCount); - if (sampleRate > 0 && channelCount > 0) { - sampleTimeUs = (1000000u) / (sampleRate * channelCount * 2); - frameSize = channelCount * 2; - } + LOG(DEBUG) << "maxOutSize " << frame.mLargeFrameTuning.maxSize << " threshold " << frame.mLargeFrameTuning.thresholdSize; if ((*worklet)->output.buffers.size() > 0) { diff --git a/media/codec2/hal/common/include/codec2/common/MultiAccessUnitHelper.h b/media/codec2/hal/common/include/codec2/common/MultiAccessUnitHelper.h index a90ae5691b..a6d938eea2 100644 --- a/media/codec2/hal/common/include/codec2/common/MultiAccessUnitHelper.h +++ b/media/codec2/hal/common/include/codec2/common/MultiAccessUnitHelper.h @@ -44,8 +44,8 @@ struct MultiAccessUnitInterface : public C2InterfaceHelper { bool isValidField(const C2ParamField &field) const; protected: - void getDecoderSampleRateAndChannelCount( - uint32_t &sampleRate_, uint32_t &channelCount_) const; + bool getDecoderSampleRateAndChannelCount( + uint32_t * const sampleRate_, uint32_t * const channelCount_) const; const std::shared_ptr<C2ComponentInterface> mC2ComponentIntf; std::shared_ptr<C2LargeFrame::output> mLargeFrameParams; C2ComponentKindSetting mKind; |