// Mitus — Rust transport workspace (media/) crate dependency graph digraph crates { graph [fontname="monospace" bgcolor="#1e1e2e" pad="0.5"] node [fontname="monospace" fontcolor="#cdd6f4" style=filled shape=box fillcolor="#313244" color="#585b70" margin="0.2,0.1"] edge [color="#585b70" fontname="monospace" fontcolor="#a6adc8"] // External ffmpeg_next [label="ffmpeg-next 8\n(client: NUT demux)" shape=component fillcolor="#1e3a2f" color="#a6e3a1"] tokio [label="tokio 1 (full)\n(async runtime)" shape=component fillcolor="#1e2a3e" color="#89b4fa"] serde [label="serde / serde_json" shape=component fillcolor="#2a2a3e" color="#cba6f7"] tracing [label="tracing\ntracing-subscriber" shape=component fillcolor="#2a2a3e" color="#cba6f7"] anyhow [label="anyhow" shape=component fillcolor="#2a2a3e" color="#cba6f7"] libc_crate [label="libc 0.2" shape=component fillcolor="#2a2a3e" color="#cba6f7"] nix_crate [label="nix 0.29\n(signal, process)" shape=component fillcolor="#2a2a3e" color="#cba6f7"] // Workspace crates common [label="cht-common\n─────────────\nprotocol.rs (WirePacket framing)\n PacketType: Video|Audio|Control\n ControlMessage: Start|Stop|...\nlogging.rs (tracing init)" fillcolor="#2d2038" color="#cba6f7"] client [label="cht-client [sender, Wayland]\n─────────────────────────────\nbackends/subprocess.rs ffmpeg CLI + PulseAudio\n NUT demux → EncodedPacket\nbackends/mod.rs Backend enum\ncapture.rs KmsCapture (direct backend)\nencoder.rs VaapiEncoder + MediaType\npipeline.rs capture→encode thread\nmain.rs wait_for_server, transport,\n YYYYMMDD_HHMMSS session IDs" fillcolor="#1e2d3e" color="#89b4fa"] server [label="cht-server [receiver, mcrn]\n─────────────────────────────\nmain.rs TCP listener\n routes Video/Audio/Control\nsession.rs ffmpeg subprocess:\n fMP4 + UDP relay\n ADTS audio writer\n Scene relay (Unix socket)\n keyframe buffering" fillcolor="#1e2d3e" color="#89b4fa"] // Deps client -> common server -> common common -> serde common -> tokio common -> tracing common -> anyhow client -> ffmpeg_next client -> tokio client -> tracing client -> anyhow client -> libc_crate client -> nix_crate server -> tokio server -> tracing server -> anyhow // Legend subgraph cluster_legend { label="Legend" fontcolor="#a6adc8" color="#585b70" fontname="monospace" l1 [label="implemented" fillcolor="#1e2d3e" color="#89b4fa" shape=box] l3 [label="external crate" fillcolor="#1e3a2f" color="#a6e3a1" shape=component] } }