Loading media/codec2/sfplugin/CCodec.cpp +92 −78 Original line number Diff line number Diff line Loading @@ -1796,6 +1796,7 @@ void CCodec::release(bool sendCallback) { } status_t CCodec::setSurface(const sp<Surface> &surface) { { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; if (config->mTunneled && config->mSidebandHandle != nullptr) { Loading @@ -1809,6 +1810,7 @@ status_t CCodec::setSurface(const sp<Surface> &surface) { return err; } } } return mChannel->setSurface(surface); } Loading Loading @@ -2147,9 +2149,12 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { } // handle configuration changes in work done const C2StreamInitDataInfo::output *initData = nullptr; sp<AMessage> outputFormat = nullptr; { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; Config::Watcher<C2StreamInitDataInfo::output> initData = Config::Watcher<C2StreamInitDataInfo::output> initDataWatcher = config->watch<C2StreamInitDataInfo::output>(); if (!work->worklets.empty() && (work->worklets.front()->output.flags Loading @@ -2162,10 +2167,13 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { updates.push_back(C2Param::Copy(*param)); } unsigned stream = 0; for (const std::shared_ptr<C2Buffer> &buf : work->worklets.front()->output.buffers) { std::vector<std::shared_ptr<C2Buffer>> &outputBuffers = work->worklets.front()->output.buffers; for (const std::shared_ptr<C2Buffer> &buf : outputBuffers) { for (const std::shared_ptr<const C2Info> &info : buf->info()) { // move all info into output-stream #0 domain updates.emplace_back(C2Param::CopyAsStream(*info, true /* output */, stream)); updates.emplace_back( C2Param::CopyAsStream(*info, true /* output */, stream)); } const std::vector<C2ConstGraphicBlock> blocks = buf->data().graphicBlocks(); Loading @@ -2176,16 +2184,17 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { // block.crop().width, block.crop().height, // block.width(), block.height()); const C2ConstGraphicBlock &block = blocks[0]; updates.emplace_back(new C2StreamCropRectInfo::output(stream, block.crop())); updates.emplace_back(new C2StreamCropRectInfo::output( stream, block.crop())); updates.emplace_back(new C2StreamPictureSizeInfo::output( stream, block.crop().width, block.crop().height)); } ++stream; } sp<AMessage> outputFormat = config->mOutputFormat; sp<AMessage> oldFormat = config->mOutputFormat; config->updateConfiguration(updates, config->mOutputDomain); RevertOutputFormatIfNeeded(outputFormat, config->mOutputFormat); RevertOutputFormatIfNeeded(oldFormat, config->mOutputFormat); // copy standard infos to graphic buffers if not already present (otherwise, we // may overwrite the actual intermediate value with a final value) Loading @@ -2199,7 +2208,7 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { C2StreamPixelAspectRatioInfo::output::PARAM_TYPE, C2StreamSurfaceScalingInfo::output::PARAM_TYPE }; for (const std::shared_ptr<C2Buffer> &buf : work->worklets.front()->output.buffers) { for (const std::shared_ptr<C2Buffer> &buf : outputBuffers) { if (buf->data().graphicBlocks().size()) { for (C2Param::Index ix : stdGfxInfos) { if (!buf->hasInfo(ix)) { Loading @@ -2218,9 +2227,10 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { if (config->mInputSurface) { config->mInputSurface->onInputBufferDone(work->input.ordinal.frameIndex); } mChannel->onWorkDone( std::move(work), config->mOutputFormat, initData.hasChanged() ? initData.update().get() : nullptr); initData = initDataWatcher.hasChanged() ? initDataWatcher.update().get() : nullptr; outputFormat = config->mOutputFormat; } mChannel->onWorkDone(std::move(work), outputFormat, initData); break; } case kWhatWatch: { Loading Loading @@ -2305,9 +2315,13 @@ void CCodec::initiateReleaseIfStuck() { pendingDeadline = true; } } bool tunneled = false; { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; if (config->mTunneled == false && name.empty()) { tunneled = config->mTunneled; } if (!tunneled && name.empty()) { constexpr std::chrono::steady_clock::duration kWorkDurationThreshold = 3s; std::chrono::steady_clock::duration elapsed = mChannel->elapsed(); if (elapsed >= kWorkDurationThreshold) { Loading Loading
media/codec2/sfplugin/CCodec.cpp +92 −78 Original line number Diff line number Diff line Loading @@ -1796,6 +1796,7 @@ void CCodec::release(bool sendCallback) { } status_t CCodec::setSurface(const sp<Surface> &surface) { { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; if (config->mTunneled && config->mSidebandHandle != nullptr) { Loading @@ -1809,6 +1810,7 @@ status_t CCodec::setSurface(const sp<Surface> &surface) { return err; } } } return mChannel->setSurface(surface); } Loading Loading @@ -2147,9 +2149,12 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { } // handle configuration changes in work done const C2StreamInitDataInfo::output *initData = nullptr; sp<AMessage> outputFormat = nullptr; { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; Config::Watcher<C2StreamInitDataInfo::output> initData = Config::Watcher<C2StreamInitDataInfo::output> initDataWatcher = config->watch<C2StreamInitDataInfo::output>(); if (!work->worklets.empty() && (work->worklets.front()->output.flags Loading @@ -2162,10 +2167,13 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { updates.push_back(C2Param::Copy(*param)); } unsigned stream = 0; for (const std::shared_ptr<C2Buffer> &buf : work->worklets.front()->output.buffers) { std::vector<std::shared_ptr<C2Buffer>> &outputBuffers = work->worklets.front()->output.buffers; for (const std::shared_ptr<C2Buffer> &buf : outputBuffers) { for (const std::shared_ptr<const C2Info> &info : buf->info()) { // move all info into output-stream #0 domain updates.emplace_back(C2Param::CopyAsStream(*info, true /* output */, stream)); updates.emplace_back( C2Param::CopyAsStream(*info, true /* output */, stream)); } const std::vector<C2ConstGraphicBlock> blocks = buf->data().graphicBlocks(); Loading @@ -2176,16 +2184,17 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { // block.crop().width, block.crop().height, // block.width(), block.height()); const C2ConstGraphicBlock &block = blocks[0]; updates.emplace_back(new C2StreamCropRectInfo::output(stream, block.crop())); updates.emplace_back(new C2StreamCropRectInfo::output( stream, block.crop())); updates.emplace_back(new C2StreamPictureSizeInfo::output( stream, block.crop().width, block.crop().height)); } ++stream; } sp<AMessage> outputFormat = config->mOutputFormat; sp<AMessage> oldFormat = config->mOutputFormat; config->updateConfiguration(updates, config->mOutputDomain); RevertOutputFormatIfNeeded(outputFormat, config->mOutputFormat); RevertOutputFormatIfNeeded(oldFormat, config->mOutputFormat); // copy standard infos to graphic buffers if not already present (otherwise, we // may overwrite the actual intermediate value with a final value) Loading @@ -2199,7 +2208,7 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { C2StreamPixelAspectRatioInfo::output::PARAM_TYPE, C2StreamSurfaceScalingInfo::output::PARAM_TYPE }; for (const std::shared_ptr<C2Buffer> &buf : work->worklets.front()->output.buffers) { for (const std::shared_ptr<C2Buffer> &buf : outputBuffers) { if (buf->data().graphicBlocks().size()) { for (C2Param::Index ix : stdGfxInfos) { if (!buf->hasInfo(ix)) { Loading @@ -2218,9 +2227,10 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { if (config->mInputSurface) { config->mInputSurface->onInputBufferDone(work->input.ordinal.frameIndex); } mChannel->onWorkDone( std::move(work), config->mOutputFormat, initData.hasChanged() ? initData.update().get() : nullptr); initData = initDataWatcher.hasChanged() ? initDataWatcher.update().get() : nullptr; outputFormat = config->mOutputFormat; } mChannel->onWorkDone(std::move(work), outputFormat, initData); break; } case kWhatWatch: { Loading Loading @@ -2305,9 +2315,13 @@ void CCodec::initiateReleaseIfStuck() { pendingDeadline = true; } } bool tunneled = false; { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; if (config->mTunneled == false && name.empty()) { tunneled = config->mTunneled; } if (!tunneled && name.empty()) { constexpr std::chrono::steady_clock::duration kWorkDurationThreshold = 3s; std::chrono::steady_clock::duration elapsed = mChannel->elapsed(); if (elapsed >= kWorkDurationThreshold) { Loading