Add RLE compression and one-command recorder to WiFi video QA
Compress each RGB565 /stream frame with an own lossless run-length codec
(fmt=2, [u16 count][u16 value] tokens) before sending it over WiFi, falling
back to raw (fmt=1) whenever RLE would be larger so a frame never regresses.
On a typical Kleidos UI frame (flat menu surfaces) this cuts bytes/frame to
roughly 7-31% of raw, raising the effective fps the 2.4 GHz link can sustain.
- src/web/rle_codec.h: host-testable encode/decode, bit-exact wire format.
- src/web/video_stream.cpp: encode on the Core 0 snapshot path; raw fallback.
- src/web/video_frame_header.h: add kVideoFormatRgb565Rle.
- test/web/test_rle_codec: native round-trip + malformed-stream tests.
Make scripts/video_qa.py a one-command recorder: --serial reads WiFi creds
from a gitignored .env (password redacted), drives VIDEO WIFI/START, polls
VIDEO? until serving=1, captures the IP, and records. Default output is a
scrubbable MP4 at the real captured fps; decodes RLE frames; and prints a
baked-in frame-diff motion report (REAL MOTION vs MOSTLY STATIC). Manual
--host/--url mode is kept.
Docs: document the .env one-command workflow, the RLE format, MP4 output,
motion verification, and the on-HW gotchas.