# TW Streamer 0.4.17

Changes since 0.4.13 (covers 0.4.14, 0.4.15, 0.4.16, 0.4.17). Applies to every board:
ROCK 4 SE (RK3399), ROCK 3A (RK3568), Radxa Zero 3W (RK3566), Raspberry Pi 4.

Rolls up 0.4.14–0.4.16, which were never published.

## Fixed — the 7" operator panel turned white when you chose a resolution

- **Picking any fixed resolution under Display blanked the DSI panel.** The unit was applying the HDMI resolution to the operator panel as well, and the panel cannot display it. It was reported on 1080p50 (PAL), but *every* fixed resolution did it — and the interlaced choices (1080i50 / 1080i60) were the worst, because a DSI panel cannot show an interlaced picture at all.
- **The panel now always keeps its own resolution.** The Display resolution setting applies to the HDMI output only, which is what it was always meant to describe: the format your monitor or broadcast switcher has to receive.
- **When a setting cannot apply to the panel, the panel now says so** instead of going dark — a card names the resolution you chose and the one it is using. Nothing is ever drawn on the HDMI program feed.
- Along the way: choosing **1080i50** now really sends 1080i50 to HDMI. It used to send 1080p50 (progressive), which a broadcast switcher can refuse.

## Fixed — standby video in aerial (controller) mode

- **One upload now genuinely covers both modes.** Uploading a clip is meant to produce a goggles (H.264) and an aerial (H.265) version; on ROCK 4 SE the aerial version was being stored as a broken file, so aerial mode fell back to the standby image and you had to upload again.
- **The aerial version is built about six times faster** on ROCK 4 SE — roughly 2–3 minutes instead of 14 — and it no longer competes with the live picture while it runs.
- **A damaged standby clip no longer leaves the screen stuck.** The unit used to retry an unreadable clip every 5 seconds forever, filling its event log. It now retires that version after two attempts, falls back to the standby image, and records one line explaining why.
- Deleting the standby video now clears everything it left behind on the unit.
- The Standby card no longer shows a stale "encoding…" after a restart, and a second upload started while one is still encoding is refused cleanly instead of damaging the first.

## Fixed — web interface

- **The browser's own username/password box no longer appears over the TW Streamer login page** on iPhones and iPads running older Safari. (Raspberry Pi units only — Radxa already had this fix.)
- Removed a leftover **"Buttons"** button on the player page that only led back to Settings.

## From 0.4.15 — USB capture and streaming

- **USB HDMI capture: a camera that already outputs H.264 is passed straight through** instead of being decoded and re-encoded — lower latency and far less CPU.
- **USB webcams that output MJPEG now work on Radxa** (the hardware decoder returned no frames; they are decoded in software now).
- **OMT / vMix output no longer starves the HDMI picture** — the encoder is kept off the cores the live feed needs.

## From 0.4.16

- **A licence can now be re-activated or upgraded from the Settings page** on a unit that is already licensed. Previously an activated unit had no way to change its coverage without SSH.

## Security — 0.4.14

- The video-start handshake frames are stored obfuscated in the binary and deobfuscated only at runtime, so a static byte-scan of the shipped binary no longer yields them. Bar-raising, not secrecy: the frames remain visible on the USB wire. Licence signing (Ed25519, key offline) is unchanged.

## Update paths

- No re-flash needed for the fixes above: the binary update channel serves 0.4.17
  (`download/radxa/`), and the app-bundle `.tgz` field update works over the unit's hotspot
  (System -> Firmware upgrade). ABI-compatible with every image from 0.4.0 onward.
- Fresh-flash images for all boards are in this folder (see MD5SUMS).
