OWLOWL/← All findings

Which codec is cheapest to decode has no silicon-independent answer: near-flat on one hardware decoder but resolvable on another, up to ~60% spread in software — and the measurement regime can flip the ranking

🟡 Indicative · measured 2026-07-29 · refined 2026-09-22 · v2
Hw (Google TV): codec spread ≤0.08 W, unresolvable. Hw (Allwinner H618, n=3): H.264 +1.073 > HEVC +0.966 ≈ VP9 +0.971 W — H.264 dearer by 0.107 W, separated (t=4.96). Sw at 1× (both Pis): h264 +1.57 < av1 +1.83 < hevc +2.56 W. Sw saturated: ranking inverts.
SCOPE: Client device layer only (Google TV Streamer hw; TV Box W5 / Allwinner H618 hw, screen-attached; Raspberry Pi 5 / Pi 400 sw, headless pure decode). Network, CDN excluded; Pi rows exclude display and audio. The three decode paths sit in different sink regimes and are not pooled.
OWL Finding: Which codec is cheapest to decode has no silicon-independent answer: near-flat on one hardware decoder but resolvable on another, up to ~60% spread in software — and the measurement regime can flip the ranking measured 2026-07-29, refined 2026-09-22 https://wattlab.greeningofstreaming.org/findings/codec-decode-energy-depends-on-silicon-and-regime Greening of Streaming — wattlab.greeningofstreaming.org
Source measurement
Loading measurement decode/64e14084…
Loading measurement decode/0e55456b…
Loading measurement decode/35b5ff43…
Loading measurement decode/374a67b2…
Loading measurement decode/a6c84770…
Loading measurement decode/a574cbdf…
Loading measurement decode/3fb59067…
Loading measurement decode/23e5aba9…
Loading measurement decode/6da9885f…
Loading measurement decode/dec0de06…
Loading measurement decode/dec0de05…
Loading measurement decode/dec0de04…

Caveats

The result, in one sentence

On fixed-function hardware (Google TV) the three codecs decode within 0.08 W of each other; in software at playback pace the spread is up to ~60% with the same ordering on two different Pi generations (h264 < av1 < hevc); and when decode runs flat-out instead of paced, the ranking inverts (AV1 lowest, H.264 highest).

On a second fixed-function decoder (Allwinner H618) the codecs do not collapse: H.264 costs +0.107 W (≈11%) more than HEVC and VP9, which tie — separated at n=3 (t=4.96, 95% CI +0.038…+0.176). So "hardware makes codec choice free" is true of the part tested, not of hardware decode as such.

Why this matters

Codec-energy claims are routinely made without stating the decode path or the measurement regime — this data shows either omission can flip the conclusion. Concretely, for the industry's live HEVC-rollback question: rolling back to H.264 is energy-neutral on hardware-decode devices (≤0.08 W) and energy-reducing on software-decoding clients (−1.0 W of +2.56 on these boards). And a codec's "energy cost" is not one number: paced at 1×, H.264 software decode is cheapest; racing to idle, the same board makes AV1's instantaneous draw the lowest. If it can't be stated with silicon path and regime attached, it shouldn't be asserted.

How it was measured

Same 1080p matched-VMAF (~92–93) NVENC encodes across all three devices. Google TV: Just Player full playback, hw MediaTek decoders, July 2026 round (n=9, all 🟢). Pis: decode-bench headless pure decode from tmpfs, realtime (-re) and saturated (-stream_loop -1) regimes, Tapo P110 mW path, OWL confidence per row; key realtime rows n=2–3. Full narrative + conjecture list: docs/pi_decode_energy_2026-07.md.

Allwinner H618 (added 2026-09-22): TV Box W5, BBB iso-bitrate 1080p60 @8 Mb/s (same bit volume for every codec, so not a bitrate artefact), Just Player via VIEW intent, screen mode on the shared LG C2 (sink panel:HDMI_1), 1095 s windows, 1 s cadence, n=3 per codec, batch 3e54b322a9b4, 12 rows, none discarded; decoder provenance read from logcat on every row (OMX.allwinner.video.decoder.{avc,hevc,vp9}). Presented frame rate verified from SurfaceFlinger timestamps at 60.0 fps on all nine hardware rows. Onboarding record, traps and the AV1 exclusion: docs/w5_onboarding_2026-09-21.md.

What this finding does not measure

Methodology → (docs/wattlab_traffic_light_confidence.md)
decodecodecsclient-devicehevcav1methodology