GStreamer caps fixation always picks the identity value for unconstrained
dimensions (width-only caps keeps source height unchanged, giving 640x1080
instead of 640x360 for a 1920x1080 source).
Fix: compute a 16:9 output box that fits inside the video area, use both
width and height in the capsfilter, and set add-borders=True so GStreamer
letterboxes or pillarboxes any non-16:9 source without distortion.
For the test device (720x720 KMSDRM, ~120px HUD):
video area: ~720x600 → scale target: 720x404 (16:9)
For default viewport (640x480):
video area: 640x480 → scale target: 640x360 (16:9)
Section 8 test updated to mirror the same 16:9+add-borders strategy.