186 lines
14 KiB
XML
186 lines
14 KiB
XML
<?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: client_pipeline Pages: 1 -->
|
||
<svg width="779pt" height="1234pt"
|
||
viewBox="0.00 0.00 779.00 1234.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(43.2 1191.25)">
|
||
<title>client_pipeline</title>
|
||
<polygon fill="#1e1e2e" stroke="none" points="-43.2,43.2 -43.2,-1191.25 735.58,-1191.25 735.58,43.2 -43.2,43.2"/>
|
||
<g id="clust1" class="cluster">
|
||
<title>cluster_main</title>
|
||
<polygon fill="#1e1e2e" stroke="#45475a" points="8,-132.56 8,-403.15 473,-403.15 473,-132.56 8,-132.56"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="240.5" y="-385.85" font-family="monospace" font-size="14.00" fill="#a6adc8">main thread  (tokio async)</text>
|
||
</g>
|
||
<g id="clust2" class="cluster">
|
||
<title>cluster_pipeline</title>
|
||
<polygon fill="#1e1e2e" stroke="#45475a" points="110,-422.15 110,-966.77 492,-966.77 492,-422.15 110,-422.15"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="301" y="-949.47" font-family="monospace" font-size="14.00" fill="#a6adc8">capture-pipeline thread  (blocking)</text>
|
||
</g>
|
||
<!-- drm -->
|
||
<g id="node1" class="node">
|
||
<title>drm</title>
|
||
<path fill="#1e3a2f" stroke="#a6e3a1" d="M383.75,-1116.79C383.75,-1120.36 349.8,-1123.26 308,-1123.26 266.2,-1123.26 232.25,-1120.36 232.25,-1116.79 232.25,-1116.79 232.25,-1058.53 232.25,-1058.53 232.25,-1054.96 266.2,-1052.06 308,-1052.06 349.8,-1052.06 383.75,-1054.96 383.75,-1058.53 383.75,-1058.53 383.75,-1116.79 383.75,-1116.79"/>
|
||
<path fill="none" stroke="#a6e3a1" d="M383.75,-1116.79C383.75,-1113.21 349.8,-1110.31 308,-1110.31 266.2,-1110.31 232.25,-1113.21 232.25,-1116.79"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-1091.61" font-family="monospace" font-size="14.00" fill="#cdd6f4">/dev/dri/card0</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-1074.36" font-family="monospace" font-size="14.00" fill="#cdd6f4">(KMS scanout)</text>
|
||
</g>
|
||
<!-- capture -->
|
||
<g id="node8" class="node">
|
||
<title>capture</title>
|
||
<polygon fill="#1e2d3e" stroke="#89b4fa" points="441.5,-933.52 174.5,-933.52 174.5,-812.74 441.5,-812.74 441.5,-933.52"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-911.58" font-family="monospace" font-size="14.00" fill="#cdd6f4">KmsCapture</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-894.33" font-family="monospace" font-size="14.00" fill="#cdd6f4">─────────────────</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-877.08" font-family="monospace" font-size="14.00" fill="#cdd6f4">ffmpeg kmsgrab device</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-859.83" font-family="monospace" font-size="14.00" fill="#cdd6f4">decoder: passthrough</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-842.58" font-family="monospace" font-size="14.00" fill="#cdd6f4">output: DRM_PRIME frames</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-825.33" font-family="monospace" font-size="14.00" fill="#cdd6f4">+ hw_frames_ctx (DRM device)</text>
|
||
</g>
|
||
<!-- drm->capture -->
|
||
<g id="edge1" class="edge">
|
||
<title>drm->capture</title>
|
||
<path fill="none" stroke="#585b70" d="M308,-1051.56C308,-1022.73 308,-980.97 308,-945.2"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="311.5,-945.34 308,-935.34 304.5,-945.34 311.5,-945.34"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="353.38" y="-995.97" font-family="monospace" font-size="14.00" fill="#a6adc8">DMA-BUF</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="353.38" y="-978.72" font-family="monospace" font-size="14.00" fill="#a6adc8">(zero copy)</text>
|
||
</g>
|
||
<!-- vaapi -->
|
||
<g id="node2" class="node">
|
||
<title>vaapi</title>
|
||
<path fill="#1e3a2f" stroke="#a6e3a1" d="M692.38,-902.26C692.38,-905.83 649.18,-908.73 596,-908.73 542.82,-908.73 499.62,-905.83 499.62,-902.26 499.62,-902.26 499.62,-844 499.62,-844 499.62,-840.43 542.82,-837.53 596,-837.53 649.18,-837.53 692.38,-840.43 692.38,-844 692.38,-844 692.38,-902.26 692.38,-902.26"/>
|
||
<path fill="none" stroke="#a6e3a1" d="M692.38,-902.26C692.38,-898.68 649.18,-895.78 596,-895.78 542.82,-895.78 499.62,-898.68 499.62,-902.26"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="596" y="-877.08" font-family="monospace" font-size="14.00" fill="#cdd6f4">/dev/dri/renderD128</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="596" y="-859.83" font-family="monospace" font-size="14.00" fill="#cdd6f4">(VAAPI)</text>
|
||
</g>
|
||
<!-- encoder -->
|
||
<g id="node9" class="node">
|
||
<title>encoder</title>
|
||
<polygon fill="#1e2d3e" stroke="#89b4fa" points="433.25,-742.24 182.75,-742.24 182.75,-604.21 433.25,-604.21 433.25,-742.24"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-720.3" font-family="monospace" font-size="14.00" fill="#cdd6f4">VaapiEncoder</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-703.05" font-family="monospace" font-size="14.00" fill="#cdd6f4">─────────────────</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-685.8" font-family="monospace" font-size="14.00" fill="#cdd6f4">[lazy init on frame 1]</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-668.55" font-family="monospace" font-size="14.00" fill="#cdd6f4">buffersrc ← hw_frames_ctx</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-651.3" font-family="monospace" font-size="14.00" fill="#cdd6f4">hwmap derive_device=vaapi</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-634.05" font-family="monospace" font-size="14.00" fill="#cdd6f4">scale_vaapi NV12 1920×1080</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="308" y="-616.8" font-family="monospace" font-size="14.00" fill="#cdd6f4">h264_vaapi QP=20 GOP=30</text>
|
||
</g>
|
||
<!-- vaapi->encoder -->
|
||
<g id="edge2" class="edge">
|
||
<title>vaapi->encoder</title>
|
||
<path fill="none" stroke="#a6e3a1" stroke-dasharray="5,2" d="M545.17,-837.2C509.67,-812.81 460.92,-779.31 416.85,-749.03"/>
|
||
<polygon fill="#a6e3a1" stroke="#a6e3a1" points="419,-746.25 408.78,-743.48 415.04,-752.02 419,-746.25"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="514.92" y="-781.44" font-family="monospace" font-size="14.00" fill="#a6adc8">hw device</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="514.92" y="-764.19" font-family="monospace" font-size="14.00" fill="#a6adc8">(derived)</text>
|
||
</g>
|
||
<!-- net -->
|
||
<g id="node3" class="node">
|
||
<title>net</title>
|
||
<polygon fill="#1e2a3e" stroke="#89b4fa" points="384.3,-103.56 202.47,-103.56 155.7,0 337.53,0 384.3,-103.56"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="270" y="-55.73" font-family="monospace" font-size="14.00" fill="#cdd6f4">TCP :4444</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="270" y="-38.48" font-family="monospace" font-size="14.00" fill="#cdd6f4">mcrndeb</text>
|
||
</g>
|
||
<!-- session_start -->
|
||
<g id="node4" class="node">
|
||
<title>session_start</title>
|
||
<polygon fill="#2d2038" stroke="#cba6f7" points="175.88,-281.12 16.12,-281.12 16.12,-229.34 175.88,-229.34 175.88,-281.12"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="96" y="-259.18" font-family="monospace" font-size="14.00" fill="#cdd6f4">session_start</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="96" y="-241.93" font-family="monospace" font-size="14.00" fill="#cdd6f4">control message</text>
|
||
</g>
|
||
<!-- write -->
|
||
<g id="node7" class="node">
|
||
<title>write</title>
|
||
<polygon fill="#1e2d3e" stroke="#89b4fa" points="345.75,-192.34 194.25,-192.34 194.25,-140.56 345.75,-140.56 345.75,-192.34"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="270" y="-170.4" font-family="monospace" font-size="14.00" fill="#cdd6f4">BufWriter</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="270" y="-153.15" font-family="monospace" font-size="14.00" fill="#cdd6f4">write_packet()</text>
|
||
</g>
|
||
<!-- session_start->write -->
|
||
<g id="edge6" class="edge">
|
||
<title>session_start->write</title>
|
||
<path fill="none" stroke="#585b70" d="M146.8,-228.9C166.28,-219.18 188.7,-208 209.04,-197.85"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="210.4,-201.09 217.79,-193.49 207.28,-194.82 210.4,-201.09"/>
|
||
</g>
|
||
<!-- mux -->
|
||
<g id="node5" class="node">
|
||
<title>mux</title>
|
||
<polygon fill="#2d2038" stroke="#cba6f7" points="446.88,-369.9 155.12,-369.9 155.12,-318.12 446.88,-318.12 446.88,-369.9"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="301" y="-347.96" font-family="monospace" font-size="14.00" fill="#cdd6f4">select!</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="301" y="-330.71" font-family="monospace" font-size="14.00" fill="#cdd6f4">pkt_rx  |  keepalive  |  ctrl-c</text>
|
||
</g>
|
||
<!-- keepalive -->
|
||
<g id="node6" class="node">
|
||
<title>keepalive</title>
|
||
<polygon fill="#2d2038" stroke="#cba6f7" points="345.75,-273.23 194.25,-273.23 194.25,-237.23 345.75,-237.23 345.75,-273.23"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="270" y="-250.55" font-family="monospace" font-size="14.00" fill="#cdd6f4">keepalive / 5s</text>
|
||
</g>
|
||
<!-- mux->keepalive -->
|
||
<g id="edge8" class="edge">
|
||
<title>mux->keepalive</title>
|
||
<path fill="none" stroke="#585b70" stroke-dasharray="5,2" d="M292.03,-317.91C288.26,-307.36 283.86,-295.04 279.99,-284.2"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="283.36,-283.24 276.7,-275 276.77,-285.59 283.36,-283.24"/>
|
||
</g>
|
||
<!-- mux->write -->
|
||
<g id="edge7" class="edge">
|
||
<title>mux->write</title>
|
||
<path fill="none" stroke="#585b70" d="M322.96,-317.84C337.91,-300.7 355,-281.12 355,-281.12 355,-281.12 355,-229.34 355,-229.34 355,-229.34 334.59,-214.48 313.78,-199.32"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="315.94,-196.57 305.8,-193.51 311.82,-202.23 315.94,-196.57"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="396.25" y="-250.55" font-family="monospace" font-size="14.00" fill="#a6adc8">WirePacket</text>
|
||
</g>
|
||
<!-- keepalive->write -->
|
||
<g id="edge9" class="edge">
|
||
<title>keepalive->write</title>
|
||
<path fill="none" stroke="#585b70" d="M270,-237.09C270,-227.6 270,-215.44 270,-203.94"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="273.5,-204.3 270,-194.3 266.5,-204.3 273.5,-204.3"/>
|
||
</g>
|
||
<!-- write->net -->
|
||
<g id="edge10" class="edge">
|
||
<title>write->net</title>
|
||
<path fill="none" stroke="#585b70" d="M270,-140.16C270,-132.59 270,-123.93 270,-115.07"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="273.5,-115.32 270,-105.32 266.5,-115.32 273.5,-115.32"/>
|
||
</g>
|
||
<!-- capture->encoder -->
|
||
<g id="edge3" class="edge">
|
||
<title>capture->encoder</title>
|
||
<path fill="none" stroke="#585b70" d="M308,-812.48C308,-794.03 308,-773.39 308,-753.81"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="311.5,-753.94 308,-743.94 304.5,-753.94 311.5,-753.94"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="345.12" y="-781.44" font-family="monospace" font-size="14.00" fill="#a6adc8">AVFrame</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="345.12" y="-764.19" font-family="monospace" font-size="14.00" fill="#a6adc8">DRM_PRIME</text>
|
||
</g>
|
||
<!-- chan -->
|
||
<g id="node10" class="node">
|
||
<title>chan</title>
|
||
<polygon fill="#2d2038" stroke="#cba6f7" points="483.73,-533.71 193.05,-533.71 118.27,-430.15 408.95,-430.15 483.73,-533.71"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="301" y="-485.88" font-family="monospace" font-size="14.00" fill="#cdd6f4">mpsc::channel(64)</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="301" y="-468.63" font-family="monospace" font-size="14.00" fill="#cdd6f4">EncodedPacket</text>
|
||
</g>
|
||
<!-- encoder->chan -->
|
||
<g id="edge4" class="edge">
|
||
<title>encoder->chan</title>
|
||
<path fill="none" stroke="#585b70" d="M305.47,-603.89C304.77,-584.77 304,-564.09 303.31,-545.34"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="306.81,-545.31 302.94,-535.45 299.81,-545.57 306.81,-545.31"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="411.96" y="-572.91" font-family="monospace" font-size="14.00" fill="#a6adc8">EncodedPacket</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="411.96" y="-555.66" font-family="monospace" font-size="14.00" fill="#a6adc8">{ data, pts, keyframe, … }</text>
|
||
</g>
|
||
<!-- chan->mux -->
|
||
<g id="edge5" class="edge">
|
||
<title>chan->mux</title>
|
||
<path fill="none" stroke="#585b70" d="M301,-429.93C301,-413.88 301,-396.49 301,-381.64"/>
|
||
<polygon fill="#585b70" stroke="#585b70" points="304.5,-381.87 301,-371.87 297.5,-381.87 304.5,-381.87"/>
|
||
</g>
|
||
<!-- types -->
|
||
<g id="node11" class="node">
|
||
<title>types</title>
|
||
<polygon fill="#2a2a3e" stroke="#585b70" points="662.5,-1148.05 401.5,-1148.05 401.5,-1027.27 668.5,-1027.27 668.5,-1142.05 662.5,-1148.05"/>
|
||
<polyline fill="none" stroke="#585b70" points="662.5,-1148.05 662.5,-1142.05"/>
|
||
<polyline fill="none" stroke="#585b70" points="668.5,-1142.05 662.5,-1142.05"/>
|
||
<text xml:space="preserve" text-anchor="middle" x="535" y="-1126.11" font-family="monospace" font-size="14.00" fill="#cdd6f4">EncodedPacket</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="535" y="-1108.86" font-family="monospace" font-size="14.00" fill="#cdd6f4">─────────────</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="535" y="-1091.61" font-family="monospace" font-size="14.00" fill="#cdd6f4">data: Vec<u8>  (H.264 NALUs)</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="535" y="-1074.36" font-family="monospace" font-size="14.00" fill="#cdd6f4">pts / dts: i64</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="535" y="-1057.11" font-family="monospace" font-size="14.00" fill="#cdd6f4">keyframe: bool</text>
|
||
<text xml:space="preserve" text-anchor="middle" x="535" y="-1039.86" font-family="monospace" font-size="14.00" fill="#cdd6f4">time_base: num/den</text>
|
||
</g>
|
||
</g>
|
||
</svg>
|