Root cause A (main.c): audio_thread set the global g_stop flag on EPIPE (ffmpeg reader died). This killed ALL port threads across the entire bridge process. Bridge process then exited with all 8 ports gone. Root cause B (node-agent/index.js): startDeltacastBridge() skipped respawn when FIFOs existed in /dev/shm/deltacast, even if the bridge process was dead. Next ffmpeg opened the audio FIFO read-end and blocked forever (no writer) → no audio (or video) for any new recording. Fix A (main.c): - Add per-port atomic g_port_stop[MAX_PORTS] flags. - Audio thread: on EPIPE, close the FIFO fd and loop back to reopen it. The VHD ANC stream stays open across reconnects. Other ports unaffected. - Video thread: on EPIPE or stream error, set only g_port_stop[port], not the global g_stop. Other ports keep running. - MAX_PORTS #define moved before globals so g_port_stop[MAX_PORTS] compiles. Fix B (node-agent/index.js): - Add _dcBridgeProcessAlive() — scans /proc/<pid>/cmdline for deltacast-bridge. - startDeltacastBridge(): if FIFOs exist but no live bridge process is found, spawn a fresh bridge instead of silently returning. Detects bridges started externally (e.g. sudo on the host before node-agent started). Requires: bridge rebuild + restart on zampp3. No capture image rebuild needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| deltacast-bridge | ||
| sdk | ||
| src | ||
| build-with-decklink.sh | ||
| decklink-sdk16.patch | ||
| Dockerfile | ||
| package.json | ||
| patch_decklink.py | ||