What 'HDR Photo' Actually Means When PanoGO Saves One (Android)

"HDR" gets used loosely, so here's exactly what determines whether the photo PanoGO saves from your video is genuinely HDR, and what's actually inside the file. This is Android-specific — the APIs involved are Android's own.

Does your video have HDR to give?

A frame grabber can't invent brightness that isn't there.

Check What passes
Codec ✅ H.264 or HEVC — HDR in practice basically always means HEVC
Was it shot in HDR? ✅ HLG or PQ/HDR10 (the two flavours Android phones record)
Bit depth ✅ Genuinely 10-bit — an 8-bit file has no extra range to pull out, however it's labelled
Colour tagging ✅ Read straight from the video, whatever it is (BT.601/709/2020)
Dolby Vision ✅ Confirmed working on a Galaxy S23 Ultra — real HDR output, not an SDR fallback

PanoGO has no Dolby-Vision-specific code, but on a Galaxy S23 Ultra a Dolby Vision clip still produced a genuine HDR gain-map photo. The phone's decoder exposed that stream with a plain HLG transfer tag, and PanoGO checks the decoder's own reported transfer function rather than only trusting the container's declared type — so it picked it up like any other HLG video. An HLG or HDR10(PQ) recording is still the more predictable source, since this depends on how a given device's decoder happens to expose a DV stream.

Does your phone's Android version cooperate?

Android version Can it grab HDR?
Up to 12 (API ≤31) ❌ No. Normal SDR photo, always.
13 (API 33) 🟡 The phone can hand over raw 10-bit pixels, but PanoGO can't pack them into an HDR file yet — you still get a clean SDR photo.
14+ (API 34+) ✅ Yes. Raw 10-bit capture plus the ability to write a real HDR file.

Android 14 is the real cutoff, not 13 — a 13 phone can see the HDR data, but PanoGO won't hand you a half-built HDR file, it gives you an honest SDR one instead.

Even on a 14+ phone, PanoGO tries a few different ways to decode a frame, and not all of them preserve HDR data. Usually invisible, but on some devices a given clip can still land as SDR even though the phone is capable — PanoGO would rather give you a good SDR photo than a broken or mislabelled HDR one.

What's a gain map?

  • A PanoGO HDR photo is a completely normal, valid JPEG. Any app can open it and it looks fine.
  • Bundled inside is a second, much smaller image called a gain map — an instruction sheet for how much brighter each part of the photo should get, for screens that know how to read it.
  • A normal photo viewer ignores the gain map and just shows the base photo. An HDR-aware viewer applies it, and that's when the highlights glow.

So it's one file that looks correct everywhere, and better somewhere. The gain map is computed from the actual 10-bit footage, not a flag on the file — so the SDR rendition in that same file is a properly tone-mapped photo in its own right, not a discard.

When the source or the phone doesn't qualify for HDR, PanoGO just doesn't add a gain map — a normal SDR JPEG, nothing pretended.

Gets a gain map?
HDR source + Android 14+ + a decode path that kept the raw data
HDR source, but phone is on Android 13 or older
SDR source video

Colour: read from your video, not assumed

Some frame-grab tools assume one fixed colour formula for every video, which quietly shifts colours on anything that doesn't match. PanoGO reads two things straight off your video for every frame instead:

  • Colour standard (BT.601 / BT.709 / BT.2020) — applied correctly rather than assumed.
  • Full or limited range — full range is only used when the video explicitly says so; everything else defaults to limited, which is what most real-world footage actually is.

This applies whether the frame ends up as HDR or SDR.

What colour space does the file end up in?

HDR photos from PanoGO are tagged as Display P3 — not the raw BT.2020 the video was shot in, and not plain sRGB either. BT.2020 without a matching profile tag renders dull and wrong on most screens, and P3 gives the gain map more headroom to work with than sRGB. Resolution stays untouched, and the pixels and colour tag always match.

Cheat sheet

Want... Need...
Any HDR at all HLG or HDR10(PQ) source video
The file to actually contain a gain map Android 14+
A file that opens fine on any device regardless Nothing — it's always a normal JPEG underneath
Accurate colour on any footage Nothing — handled automatically
To actually see the HDR pop An HDR screen (a normal screen still shows a correct, just non-HDR, photo)

If you want to see this working on your own footage, PanoGO's on Google Play.


← All posts