This commit is contained in:
2026-04-09 18:19:03 -03:00
parent 5921cd6562
commit 5b467ffba8
18 changed files with 1793 additions and 43 deletions

189
media/docs/crates.svg Normal file
View File

@@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.2 (0)
-->
<!-- Title: crates Pages: 1 -->
<svg width="1369pt" height="412pt"
viewBox="0.00 0.00 1369.00 412.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(36 375.75)">
<title>crates</title>
<polygon fill="#1e1e2e" stroke="none" points="-36,36 -36,-375.75 1333.17,-375.75 1333.17,36 -36,36"/>
<g id="clust1" class="cluster">
<title>cluster_legend</title>
<polygon fill="#1e1e2e" stroke="#585b70" points="829.17,-254.5 829.17,-331.75 1289.17,-331.75 1289.17,-254.5 829.17,-254.5"/>
<text xml:space="preserve" text-anchor="middle" x="1059.17" y="-314.45" font-family="monospace" font-size="14.00" fill="#a6adc8">Legend</text>
</g>
<!-- ffmpeg_next -->
<g id="node1" class="node">
<title>ffmpeg_next</title>
<polygon fill="#1e3a2f" stroke="#a6e3a1" points="196.7,-159.68 27.65,-159.68 27.65,-155.68 23.65,-155.68 23.65,-151.68 27.65,-151.68 27.65,-118.78 23.65,-118.78 23.65,-114.78 27.65,-114.78 27.65,-110.78 196.7,-110.78 196.7,-159.68"/>
<polyline fill="none" stroke="#a6e3a1" points="27.65,-155.68 31.65,-155.68 31.65,-151.68 27.65,-151.68"/>
<polyline fill="none" stroke="#a6e3a1" points="27.65,-118.78 31.65,-118.78 31.65,-114.78 27.65,-114.78"/>
<text xml:space="preserve" text-anchor="middle" x="112.17" y="-139.18" font-family="monospace" font-size="14.00" fill="#cdd6f4">ffmpeg&#45;next 8</text>
<text xml:space="preserve" text-anchor="middle" x="112.17" y="-121.93" font-family="monospace" font-size="14.00" fill="#cdd6f4">(ffmpeg&#45;sys&#45;next)</text>
</g>
<!-- tokio -->
<g id="node2" class="node">
<title>tokio</title>
<polygon fill="#1e2a3e" stroke="#89b4fa" points="554.45,-48.9 401.9,-48.9 401.9,-44.9 397.9,-44.9 397.9,-40.9 401.9,-40.9 401.9,-8 397.9,-8 397.9,-4 401.9,-4 401.9,0 554.45,0 554.45,-48.9"/>
<polyline fill="none" stroke="#89b4fa" points="401.9,-44.9 405.9,-44.9 405.9,-40.9 401.9,-40.9"/>
<polyline fill="none" stroke="#89b4fa" points="401.9,-8 405.9,-8 405.9,-4 401.9,-4"/>
<text xml:space="preserve" text-anchor="middle" x="478.17" y="-28.4" font-family="monospace" font-size="14.00" fill="#cdd6f4">tokio 1</text>
<text xml:space="preserve" text-anchor="middle" x="478.17" y="-11.15" font-family="monospace" font-size="14.00" fill="#cdd6f4">(async runtime)</text>
</g>
<!-- serde -->
<g id="node3" class="node">
<title>serde</title>
<polygon fill="#2a2a3e" stroke="#cba6f7" points="383.82,-42.45 206.52,-42.45 206.52,-38.45 202.52,-38.45 202.52,-34.45 206.52,-34.45 206.52,-14.45 202.52,-14.45 202.52,-10.45 206.52,-10.45 206.52,-6.45 383.82,-6.45 383.82,-42.45"/>
<polyline fill="none" stroke="#cba6f7" points="206.52,-38.45 210.52,-38.45 210.52,-34.45 206.52,-34.45"/>
<polyline fill="none" stroke="#cba6f7" points="206.52,-14.45 210.52,-14.45 210.52,-10.45 206.52,-10.45"/>
<text xml:space="preserve" text-anchor="middle" x="295.17" y="-19.78" font-family="monospace" font-size="14.00" fill="#cdd6f4">serde / serde_json</text>
</g>
<!-- tracing -->
<g id="node4" class="node">
<title>tracing</title>
<polygon fill="#2a2a3e" stroke="#cba6f7" points="749.82,-48.9 572.52,-48.9 572.52,-44.9 568.52,-44.9 568.52,-40.9 572.52,-40.9 572.52,-8 568.52,-8 568.52,-4 572.52,-4 572.52,0 749.82,0 749.82,-48.9"/>
<polyline fill="none" stroke="#cba6f7" points="572.52,-44.9 576.52,-44.9 576.52,-40.9 572.52,-40.9"/>
<polyline fill="none" stroke="#cba6f7" points="572.52,-8 576.52,-8 576.52,-4 572.52,-4"/>
<text xml:space="preserve" text-anchor="middle" x="661.17" y="-28.4" font-family="monospace" font-size="14.00" fill="#cdd6f4">tracing</text>
<text xml:space="preserve" text-anchor="middle" x="661.17" y="-11.15" font-family="monospace" font-size="14.00" fill="#cdd6f4">tracing&#45;subscriber</text>
</g>
<!-- anyhow -->
<g id="node5" class="node">
<title>anyhow</title>
<polygon fill="#2a2a3e" stroke="#cba6f7" points="188.32,-42.45 110.02,-42.45 110.02,-38.45 106.02,-38.45 106.02,-34.45 110.02,-34.45 110.02,-14.45 106.02,-14.45 106.02,-10.45 110.02,-10.45 110.02,-6.45 188.32,-6.45 188.32,-42.45"/>
<polyline fill="none" stroke="#cba6f7" points="110.02,-38.45 114.02,-38.45 114.02,-34.45 110.02,-34.45"/>
<polyline fill="none" stroke="#cba6f7" points="110.02,-14.45 114.02,-14.45 114.02,-10.45 110.02,-10.45"/>
<text xml:space="preserve" text-anchor="middle" x="149.17" y="-19.78" font-family="monospace" font-size="14.00" fill="#cdd6f4">anyhow</text>
</g>
<!-- common -->
<g id="node6" class="node">
<title>common</title>
<polygon fill="#2d2038" stroke="#cba6f7" points="592.7,-185.55 291.65,-185.55 291.65,-84.9 592.7,-84.9 592.7,-185.55"/>
<text xml:space="preserve" text-anchor="middle" x="442.17" y="-165.05" font-family="monospace" font-size="14.00" fill="#cdd6f4">cht&#45;common</text>
<text xml:space="preserve" text-anchor="middle" x="442.17" y="-147.8" font-family="monospace" font-size="14.00" fill="#cdd6f4">─────────────</text>
<text xml:space="preserve" text-anchor="middle" x="442.17" y="-130.55" font-family="monospace" font-size="14.00" fill="#cdd6f4">protocol.rs &#160;(wire framing)</text>
<text xml:space="preserve" text-anchor="middle" x="442.17" y="-113.3" font-family="monospace" font-size="14.00" fill="#cdd6f4">frame.rs &#160;&#160;&#160;&#160;(Frame, AudioBuffer)</text>
<text xml:space="preserve" text-anchor="middle" x="442.17" y="-96.05" font-family="monospace" font-size="14.00" fill="#cdd6f4">logging.rs</text>
</g>
<!-- common&#45;&gt;tokio -->
<g id="edge4" class="edge">
<title>common&#45;&gt;tokio</title>
<path fill="none" stroke="#585b70" d="M458.59,-84.61C461.33,-76.33 464.12,-67.9 466.71,-60.1"/>
<polygon fill="#585b70" stroke="#585b70" points="470.02,-61.23 469.84,-50.64 463.37,-59.03 470.02,-61.23"/>
</g>
<!-- common&#45;&gt;serde -->
<g id="edge3" class="edge">
<title>common&#45;&gt;serde</title>
<path fill="none" stroke="#585b70" d="M375.12,-84.61C358.64,-72.41 341.71,-59.89 327.7,-49.52"/>
<polygon fill="#585b70" stroke="#585b70" points="329.85,-46.76 319.73,-43.62 325.69,-52.38 329.85,-46.76"/>
</g>
<!-- common&#45;&gt;tracing -->
<g id="edge5" class="edge">
<title>common&#45;&gt;tracing</title>
<path fill="none" stroke="#585b70" d="M542.38,-84.45C563.19,-74.12 584.45,-63.56 603.13,-54.28"/>
<polygon fill="#585b70" stroke="#585b70" points="604.47,-57.52 611.87,-49.94 601.35,-51.25 604.47,-57.52"/>
</g>
<!-- common&#45;&gt;anyhow -->
<g id="edge6" class="edge">
<title>common&#45;&gt;anyhow</title>
<path fill="none" stroke="#585b70" d="M291.45,-84.91C260.03,-73.75 227.31,-61.46 197.17,-48.9 196.06,-48.44 194.94,-47.96 193.8,-47.47"/>
<polygon fill="#585b70" stroke="#585b70" points="195.49,-44.39 184.93,-43.48 192.62,-50.77 195.49,-44.39"/>
</g>
<!-- client -->
<g id="node7" class="node">
<title>client</title>
<polygon fill="#1e2d3e" stroke="#89b4fa" points="400.45,-339.45 49.9,-339.45 49.9,-221.55 400.45,-221.55 400.45,-339.45"/>
<text xml:space="preserve" text-anchor="middle" x="225.17" y="-318.95" font-family="monospace" font-size="14.00" fill="#cdd6f4">cht&#45;client &#160;[sender, Wayland]</text>
<text xml:space="preserve" text-anchor="middle" x="225.17" y="-301.7" font-family="monospace" font-size="14.00" fill="#cdd6f4">─────────────────────────────</text>
<text xml:space="preserve" text-anchor="middle" x="225.17" y="-284.45" font-family="monospace" font-size="14.00" fill="#cdd6f4">capture.rs &#160;&#160;KMS/DRM → DRM_PRIME frames</text>
<text xml:space="preserve" text-anchor="middle" x="225.17" y="-267.2" font-family="monospace" font-size="14.00" fill="#cdd6f4">encoder.rs &#160;&#160;VAAPI H.264 (lazy init)</text>
<text xml:space="preserve" text-anchor="middle" x="225.17" y="-249.95" font-family="monospace" font-size="14.00" fill="#cdd6f4">pipeline.rs &#160;capture→encode thread</text>
<text xml:space="preserve" text-anchor="middle" x="225.17" y="-232.7" font-family="monospace" font-size="14.00" fill="#cdd6f4">main.rs &#160;&#160;&#160;&#160;&#160;TCP transport + keepalive</text>
</g>
<!-- client&#45;&gt;ffmpeg_next -->
<g id="edge7" class="edge">
<title>client&#45;&gt;ffmpeg_next</title>
<path fill="none" stroke="#585b70" d="M179.21,-221.22C165.11,-203.35 150.11,-184.32 137.88,-168.82"/>
<polygon fill="#585b70" stroke="#585b70" points="140.9,-167 131.96,-161.31 135.4,-171.33 140.9,-167"/>
</g>
<!-- client&#45;&gt;tokio -->
<g id="edge8" class="edge">
<title>client&#45;&gt;tokio</title>
<path fill="none" stroke="#585b70" d="M227.82,-221.48C232.83,-178.38 246.37,-121.04 282.17,-84.9 286.38,-80.65 340.37,-64.43 390.61,-50"/>
<polygon fill="#585b70" stroke="#585b70" points="391.48,-53.39 400.13,-47.28 389.56,-46.66 391.48,-53.39"/>
</g>
<!-- client&#45;&gt;tracing -->
<g id="edge9" class="edge">
<title>client&#45;&gt;tracing</title>
<path fill="none" stroke="#585b70" d="M400.86,-230.22C412.46,-227.22 423.97,-224.3 435.17,-221.55 508.91,-203.44 544.84,-235.33 602.17,-185.55 638.8,-153.74 652.71,-97.11 657.98,-60.43"/>
<polygon fill="#585b70" stroke="#585b70" points="661.42,-61.14 659.21,-50.78 654.47,-60.26 661.42,-61.14"/>
</g>
<!-- client&#45;&gt;anyhow -->
<g id="edge10" class="edge">
<title>client&#45;&gt;anyhow</title>
<path fill="none" stroke="#585b70" d="M51.41,-221.15C38.48,-211.09 27.04,-199.32 18.17,-185.55 -6.06,-147.95 -6.06,-122.5 18.17,-84.9 35.92,-57.35 69.9,-42.42 98.8,-34.42"/>
<polygon fill="#585b70" stroke="#585b70" points="99.29,-37.9 108.12,-32.05 97.57,-31.12 99.29,-37.9"/>
</g>
<!-- client&#45;&gt;common -->
<g id="edge1" class="edge">
<title>client&#45;&gt;common</title>
<path fill="none" stroke="#585b70" d="M313.43,-221.22C327.97,-211.63 343.01,-201.7 357.45,-192.16"/>
<polygon fill="#585b70" stroke="#585b70" points="359.17,-195.22 365.58,-186.79 355.31,-189.38 359.17,-195.22"/>
</g>
<!-- server -->
<g id="node8" class="node">
<title>server</title>
<polygon fill="#2d1e1e" stroke="#f38ba8" points="819.82,-322.2 444.52,-322.2 444.52,-238.8 819.82,-238.8 819.82,-322.2"/>
<text xml:space="preserve" text-anchor="middle" x="632.17" y="-301.7" font-family="monospace" font-size="14.00" fill="#cdd6f4">cht&#45;server &#160;[receiver, mcrn]</text>
<text xml:space="preserve" text-anchor="middle" x="632.17" y="-284.45" font-family="monospace" font-size="14.00" fill="#cdd6f4">─────────────────────────────</text>
<text xml:space="preserve" text-anchor="middle" x="632.17" y="-267.2" font-family="monospace" font-size="14.00" fill="#cdd6f4">main.rs &#160;&#160;&#160;&#160;&#160;TCP listener (stub)</text>
<text xml:space="preserve" text-anchor="middle" x="632.17" y="-249.95" font-family="monospace" font-size="14.00" fill="#cdd6f4"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;counts packets, no decode yet</text>
</g>
<!-- server&#45;&gt;tokio -->
<g id="edge11" class="edge">
<title>server&#45;&gt;tokio</title>
<path fill="none" stroke="#585b70" d="M636.34,-238.44C638.44,-195.9 635.27,-129.51 602.17,-84.9 592.46,-71.81 579.12,-61.48 564.76,-53.36"/>
<polygon fill="#585b70" stroke="#585b70" points="566.52,-50.33 556.04,-48.79 563.27,-56.53 566.52,-50.33"/>
</g>
<!-- server&#45;&gt;tracing -->
<g id="edge12" class="edge">
<title>server&#45;&gt;tracing</title>
<path fill="none" stroke="#585b70" d="M654.37,-238.63C661.92,-222.57 669.39,-203.67 673.17,-185.55 682.02,-143.14 675.7,-93.22 669.37,-60.54"/>
<polygon fill="#585b70" stroke="#585b70" points="672.81,-59.89 667.37,-50.8 665.96,-61.3 672.81,-59.89"/>
</g>
<!-- server&#45;&gt;anyhow -->
<g id="edge13" class="edge">
<title>server&#45;&gt;anyhow</title>
<path fill="none" stroke="#585b70" d="M474.46,-238.36C383.66,-214.48 286.57,-188.52 282.17,-185.55 235.69,-154.22 242.52,-127.57 206.17,-84.9 196.39,-73.42 185,-61.31 174.98,-51.03"/>
<polygon fill="#585b70" stroke="#585b70" points="177.52,-48.63 168.01,-43.97 172.54,-53.55 177.52,-48.63"/>
</g>
<!-- server&#45;&gt;common -->
<g id="edge2" class="edge">
<title>server&#45;&gt;common</title>
<path fill="none" stroke="#585b70" d="M577.73,-238.44C558.9,-224.24 537.45,-208.07 517.26,-192.85"/>
<polygon fill="#585b70" stroke="#585b70" points="519.39,-190.07 509.3,-186.84 515.17,-195.66 519.39,-190.07"/>
</g>
<!-- l1 -->
<g id="node9" class="node">
<title>l1</title>
<polygon fill="#1e2d3e" stroke="#89b4fa" points="956.95,-298.5 837.4,-298.5 837.4,-262.5 956.95,-262.5 956.95,-298.5"/>
<text xml:space="preserve" text-anchor="middle" x="897.17" y="-275.82" font-family="monospace" font-size="14.00" fill="#cdd6f4">implemented</text>
</g>
<!-- l2 -->
<g id="node10" class="node">
<title>l2</title>
<polygon fill="#2d1e1e" stroke="#f38ba8" points="1119.32,-298.5 975.02,-298.5 975.02,-262.5 1119.32,-262.5 1119.32,-298.5"/>
<text xml:space="preserve" text-anchor="middle" x="1047.17" y="-275.82" font-family="monospace" font-size="14.00" fill="#cdd6f4">stub / planned</text>
</g>
<!-- l3 -->
<g id="node11" class="node">
<title>l3</title>
<polygon fill="#1e3a2f" stroke="#a6e3a1" points="1281.32,-298.5 1137.02,-298.5 1137.02,-294.5 1133.02,-294.5 1133.02,-290.5 1137.02,-290.5 1137.02,-270.5 1133.02,-270.5 1133.02,-266.5 1137.02,-266.5 1137.02,-262.5 1281.32,-262.5 1281.32,-298.5"/>
<polyline fill="none" stroke="#a6e3a1" points="1137.02,-294.5 1141.02,-294.5 1141.02,-290.5 1137.02,-290.5"/>
<polyline fill="none" stroke="#a6e3a1" points="1137.02,-270.5 1141.02,-270.5 1141.02,-266.5 1137.02,-266.5"/>
<text xml:space="preserve" text-anchor="middle" x="1209.17" y="-275.82" font-family="monospace" font-size="14.00" fill="#cdd6f4">external crate</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB