mh_PLAYer - Display Transform & EV Sanity Kit
============================================
Kit v1.0  |  targets mh_PLAYer v2.12.2  |  2026-08-22
(c) 2026 Martin P. Heigan / mh_vfx_tools - anti-matter-3d.com
Licence: CC BY-NC-ND 4.0  (see "Licence & credits" at the end)

Purpose
-------
A measurable check of the display transforms and the EV control. Every mode is
designed to fail this chart differently, so you can tell them apart by reading
numbers rather than judging by eye. All reference values below were computed
from mh_PLAYer's own transform code.

Files
-----
  mh_display_ev_test_chart.exr       Scene-linear float EXR, 1920x1080,
                                     linear Rec.709 primaries.
  mh_display_ev_test_chart_srgb.png  Plain sRGB render of the same chart,
                                     clamped, for a quick non-EXR reference.

Chart layout (sample at these pixel rows)
-----------------------------------------
  y = 120   EV ladder ....... 13 patches, 0.18 x 2^k for k = -6 .. +6
  y = 320   Shadow wedge .... 16 patches, 0.0002 -> 0.02 log spaced
  y = 520   Clip wedge ...... 12 patches, 0.85 -> 1.25 linear
  y = 720   Primaries ....... R G B C M Y at 0.18, then the same six at 1.0
  y = 870   Neutral strip ... solid 0.18 across the frame
  y = 1000  Gradient ........ 0 -> 4.0 linear, left to right

Test A - EV is exact (needs no reference numbers)
-------------------------------------------------
1. Open the EXR. Display Transform > sRGB. EV = 0.
2. Note the code value of any EV-ladder patch.
3. Set EV = +1. That patch must now read exactly what its right-hand neighbour
   read at EV 0 - the ladder is spaced in exact stops, so +1 EV slides it by
   one patch. If it lands between patches, the exposure multiply is wrong.

Test B - sRGB is not gamma 2.2
------------------------------
Sample the shadow wedge in Display Transform > sRGB, then in Gamma with gamma
set to 2.2. The two curves diverge below about 0.002 linear because sRGB has a
linear toe and a pure power curve does not:

   linear        sRGB   g2.2    diff
   0.000200        0      5     -5
   0.000502        1      8     -7
   0.001262        4     12     -8
   0.003170       10     18     -8
   0.007962       21     28     -7
   0.020000       38     43     -5

If the two modes agree in the deep shadows, the sRGB toe is missing.

Test C - where each mode clips
------------------------------
Sample the clip wedge:

   linear         sRGB    Lin   g2.2    ACESf
   0.8500        237    216    236     226
   0.9227        246    235    245     229
   0.9955        254    253    254     231
   1.0682        255    255    255     233
   1.1409        255    255    255     234
   1.2136        255    255    255     236

sRGB, Linear and Gamma all hit maximum at 1.0 and stay there. ACES Filmic keeps
climbing past 1.0 - that is the roll-off, and it is the whole point.

Test D - the full EV ladder
---------------------------
Expected 8-bit code values at EV 0:

   stop     linear      sRGB    Lin   g2.2   ACESf
   -6     0.00281        9      0     17       2
   -5     0.00562       17      1     24       5
   -4     0.01125       27      2     33      14
   -3     0.02250       41      5     45      29
   -2     0.04500       59     11     62      54
   -1     0.09000       84     22     85      92
   +0     0.18000      117     45    116     141
   +1     0.36000      161     91    160     188
   +2     0.72000      220    183    219     221
   +3     1.44000      255    255    255     239
   +4     2.88000      255    255    255     249
   +5     5.76000      255    255    255     254
   +6    11.52000      255    255    255     254

Values may differ by one code value from 8-bit truncation. Read them with the
pixel inspector rather than a screen grab, and note that Linear mode crushes
everything below about -3 stops while ACES Filmic still separates them.

What this kit does NOT test
---------------------------
ACES accuracy. Both ACES columns above are the built-in Narkowicz approximation,
which is a fast look, not a facility match. For the accurate OCIO ACES 2.0 path
use the ACES Sanity Kit. For LUT and OCIO config loading use the OCIO / LUT
Sanity Kit.

Licence & credits
-----------------
Kit (c) 2026 Martin P. Heigan / mh_vfx_tools, anti-matter-3d.com.
Released under Creative Commons BY-NC-ND 4.0
(https://creativecommons.org/licenses/by-nc-nd/4.0/).
The test chart and this document are original works generated for this kit.
