tools: add na_patch.py for node-agent fmt injection
This commit is contained in:
parent
a61e385693
commit
ebeaf01a67
1 changed files with 49 additions and 0 deletions
49
tools/na_patch.py
Normal file
49
tools/na_patch.py
Normal file
|
|
@ -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")
|
||||||
Loading…
Reference in a new issue