From ebeaf01a67f579b478afb23a0b9f554e4b439602 Mon Sep 17 00:00:00 2001 From: ZGaetano Date: Mon, 1 Jun 2026 20:27:03 -0400 Subject: [PATCH] tools: add na_patch.py for node-agent fmt injection --- tools/na_patch.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tools/na_patch.py diff --git a/tools/na_patch.py b/tools/na_patch.py new file mode 100644 index 0000000..399c054 --- /dev/null +++ b/tools/na_patch.py @@ -0,0 +1,49 @@ +"""Patches node-agent to store bridge per-port format JSON and inject into sidecar env.""" +with open('services/node-agent/index.js') as f: + s = f.read() + +# 1. Add per-port format cache +old1 = "const _containerSourceType = new Map();" +new1 = ("const _containerSourceType = new Map();\n" + "// port -> fmt JSON from bridge stderr (inject into sidecar env)\n" + "const _dcPortFmt = new Map();") +assert old1 in s, "MISS: _containerSourceType" +s = s.replace(old1, new1, 1) + +# 2. Parse format JSON in bridge stderr handler +old2 = (" if (t.startsWith('{')) console.log('[dc-bridge] ' + t);\n" + " else console.error('[dc-bridge] ' + t);") +new2 = (" if (t.startsWith('{')) {\n" + " console.log('[dc-bridge] ' + t);\n" + " try { const f = JSON.parse(t); if (typeof f.port === 'number') _dcPortFmt.set(f.port, f); } catch (_) {}\n" + " } else {\n" + " console.error('[dc-bridge] ' + t);\n" + " }") +assert old2 in s, "MISS: stderr handler" +s = s.replace(old2, new2, 1) + +# 3. Inject env after startDeltacastBridge() +old3 = (" if (sourceType === 'deltacast') {\n" + " _dcSidecarCount++;\n" + " startDeltacastBridge();") +new3 = (" if (sourceType === 'deltacast') {\n" + " _dcSidecarCount++;\n" + " startDeltacastBridge();\n" + " // Inject per-port signal format so capture-manager uses real dimensions/fps\n" + " const _srcCfg = (env.find(e => e.startsWith('SOURCE_CONFIG=')) || '').slice(14);\n" + " let _portNum = NaN;\n" + " try { _portNum = JSON.parse(_srcCfg).port; } catch (_) {}\n" + " if (Number.isFinite(_portNum) && _dcPortFmt.has(_portNum)) {\n" + " const _fmt = _dcPortFmt.get(_portNum);\n" + " const _fps = (_fmt.fps_den && _fmt.fps_den !== 1) ? `${_fmt.fps_num}/${_fmt.fps_den}` : String(_fmt.fps_num);\n" + " sidecarEnv.push(`DELTACAST_VIDEO_SIZE=${_fmt.width}x${_fmt.height}`);\n" + " sidecarEnv.push(`DELTACAST_FRAMERATE=${_fps}`);\n" + " sidecarEnv.push(`DELTACAST_INTERLACED=${_fmt.interlaced ? '1' : '0'}`);\n" + " console.log(`[dc-bridge] port ${_portNum} fmt: ${_fmt.width}x${_fmt.height} ${_fps} interlaced=${_fmt.interlaced}`);\n" + " }") +assert old3 in s, "MISS: sidecar start deltacast block" +s = s.replace(old3, new3, 1) + +with open('services/node-agent/index.js', 'w') as f: + f.write(s) +print("PATCHED OK")