From b7f36f39a2d7e67815a3e4505f105ab496fd1e50 Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Thu, 1 Oct 2026 08:39:39 +1000 Subject: [PATCH] [idd] network: support software video capture --- idd/LGIdd/transport/CTransportManager.cpp | 12 +++++++----- idd/LGIdd/transport/network/CNetworkVideo.cpp | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/idd/LGIdd/transport/CTransportManager.cpp b/idd/LGIdd/transport/CTransportManager.cpp index 30ddd3b7..f8d3f2cc 100644 --- a/idd/LGIdd/transport/CTransportManager.cpp +++ b/idd/LGIdd/transport/CTransportManager.cpp @@ -1352,18 +1352,20 @@ CfgResult CTransportManager::Cfg(const GraphCfg& cfg, bool frameService = false; bool required = false; bool primary = false; + bool texture = false; { CSRWSharedLock entryLock(entry.lock); frameService = (entry.config.services & TRANSPORT_SERVICE_FRAME) != 0; - required = entry.required; - primary = entry.primary; + required = entry.required; + primary = entry.primary; + texture = entry.texSink != nullptr; } - // Software capture writes directly into the primary frame target. - // Secondary routes add fan-out work and can require staging copies. + // Software capture writes legacy frames directly into the primary target. + // Texture routes fan out independently through the frame graph executor. if (!frameService) continue; - if (cfg.mode == GpuMode::SOFTWARE && !primary) + if (cfg.mode == GpuMode::SOFTWARE && !primary && !texture) { if (required) { diff --git a/idd/LGIdd/transport/network/CNetworkVideo.cpp b/idd/LGIdd/transport/network/CNetworkVideo.cpp index 5aa90c69..6e9f77b4 100644 --- a/idd/LGIdd/transport/network/CNetworkVideo.cpp +++ b/idd/LGIdd/transport/network/CNetworkVideo.cpp @@ -2421,7 +2421,7 @@ CfgResult CNetworkVideo::Probe(const FrameCfg& cfg) const CSRWSharedLock lock(m_impl->m_lock); if (m_impl->m_stopped || m_impl->m_failed) return CfgResult::FAILED; - if (cfg.mode != GpuMode::HARDWARE || !cfg.width || !cfg.height || + if (!Frame::Valid(cfg.mode) || !cfg.width || !cfg.height || cfg.width > MAX_WIDTH || cfg.height > MAX_HEIGHT || !SupportedProfile(cfg.profile)) return CfgResult::NEXT;