The export read back 8MB RGBA per frame and ran swscale RGBA->YUV420p on the UI thread (~6ms/frame). Add a tight GPU compute converter (gpu_yuv, BT.709 full-range matching the encoder tags) and wire it into the triple-buffered ReadbackPipeline: render to RGBA, convert on the GPU, read back ~3MB of planar YUV, and skip the CPU pass. Gated on a runtime check that the encoder's YUV420P plane strides are tight (no linesize padding), with the swscale path as fallback for other dimensions; LB_DISABLE_GPU_YUV forces the CPU path. Includes a CPU reference + unit tests for the packing. Also guard render_next_video_frame against re-initializing/re-emitting "Complete" every frame after the render finishes while the encoder/mux drains (the completion nulled gpu_resources but left video_state set). |
||
|---|---|---|
| .. | ||
| assets | ||
| examples | ||
| src | ||
| Cargo.toml | ||
| PLAN.md | ||
| TOOL_IMPLEMENTATION_PLAN.md | ||
| build.rs | ||