OWLOWL/← All findings

A hardware decoder cuts client decode power ~3.7× — and having the silicon isn't enough: stock software must be able to reach it, while having none at all can put the codec out of reach entirely

🟢 Repeatable · measured 2026-07-29 · refined 2026-09-22 · v2
Pi 400, same board, same 1080p60 file — H.264 hw +0.41 W vs sw +1.50 W playing (3.7×, n=6/3); +0.59 vs +2.72 W saturated (4.6×, n=3). Pi 5 (block dropped): +1.57 W.
SCOPE: Client device layer only (Raspberry Pi 400 / Pi 5, headless pure decode; Google TV as playback context). Network, CDN, display excluded on the Pis.
OWL Finding: A hardware decoder cuts client decode power ~3.7× — and having the silicon isn't enough: stock software must be able to reach it, while having none at all can put the codec out of reach entirely measured 2026-07-29, refined 2026-09-22 https://wattlab.greeningofstreaming.org/findings/hw-decoder-cuts-client-energy-4x Greening of Streaming — wattlab.greeningofstreaming.org
Source measurement
Loading measurement decode/dec0de04…
Loading measurement decode/dec0de05…
Loading measurement decode/c22219b7…
Loading measurement decode/37374ca2…
Loading measurement decode/bffab9f5…
Loading measurement decode/596c3ee6…

Caveats

The result, in one sentence

On the same Raspberry Pi 400, decoding the same 1080p60 H.264 file, the hardware decode path (bcm2835-codec v4l2m2m) drew +0.41 W (n=6) where software drew +1.50 W (n=3) while playing at 1× — 3.7× less — and the Raspberry Pi 5, which shipped without that hardware block, pays +1.57 W in software for the same stream.

Why this matters

Encode energy is paid once per title; decode energy is paid per viewer, per hour. OWL's bench has measured the server side since day one — this is the first OWL-grade measurement (per-run idle baseline, ΔW, traffic-light confidence, raw samples persisted) of the client layer that REM's field fleet observes, using the local-mW plug principle LEM documents. A device generation that drops a decoder block, or an OS release that can't reach one, multiplies the per-viewer number by ~4 — invisible in any spec sheet, visible at the wall.

The second half of the headline is the sharper finding: on both Pi generations the HEVC hardware sits idle behind software that cannot drive it. Stock-OS users software-decode everything. Stranded silicon is an energy bug.

How it was measured

decode-bench harness (/srv/data/owl/decode-bench/): clips staged in tmpfs (no network, no SD I/O), ffmpeg -f null pure decode (every frame decoded, none displayed), Tapo P110 local mW API at 1.5 s, per-run baseline, OWL confidence.py per row. Two regimes per cell: realtime (-re, 150 s) and full-speed (-stream_loop -1, 120 s). All cited rows 🟢; key realtime rows replicated n=2–3. Full narrative + conjecture list: docs/pi_decode_energy_2026-07.md.

What this finding does not measure

Methodology → (docs/wattlab_traffic_light_confidence.md)
decodeclient-devicehw-vs-swraspberry-piowl-rem-lemprotocol-v3