wyze-t20x-jxf23T20 · 2026-11-08 · lamps 3000 (fair pass, supplement) + 5000 (colour pass) K26 pass19 failContents

Light-box protocol: T20 wyze-t20x-jxf23, 2026-11-08

OpenIMP #230 light-box test, generated 2026-11-08 12:13 by lightbox_report.py from run-1108-0211, run-1108-0211-lb. Open vs vendor on one camera.

At a glance

The open stack passes 26 of 45 compared checks against the vendor stack; 7 of 19 failed checks still have no follow-up.

26
pass
19
fail
2
info / warn
11
planned, not run
Failed checks by handling:7 open1 fixed4 vendor difference1 accepted6 invalid (test setup)

Key numbers, open vs vendor

Where a direction is defined, open is better in 13, equal (within 3 %) in 2 and worse in 7 rows. This direction chip is the raw open-vs-vendor comparison; pass/fail uses the tolerance of each row.

Contents

  1. At a glance
  2. Summary (full text)
  3. Findings and follow-up (19 rows)
  4. Deviations and warnings (6)
  5. Checks (pass/fail) (26 pass, 19 fail)
  6. Protocol (camera, stacks, lamps)
  7. A1 P1 defaults (default AE, comp 128)
  8. A2 Matched exposure + NV12 noise (P2)
  9. A3 Colour (dE00) and grey row
  10. A4 Sharpness (slanted edge at the chart edges)
  11. Pictures (33)
  12. Method

Summary (full text)

Camera wyze-t20x-jxf23 (T20) in the light box with the SpyderCheckr 24 chart, lamps 3000 (fair pass, supplement) + 5000 (colour pass) K. Both stacks ran on the same camera, the same chart position and the same light: the open stack (open-tx-isp + OpenIMP + streamer) and the vendor stack (Ingenic ISP module + vendor libimp + streamer built for it), one after the other.

Result: 26 pass, 19 fail (6 invalid by test setup, 4 vendor differences, 1 fixed, 1 accepted, 7 open), 2 info/warn, 11 planned checks not run in these runs.

Failed checks: chart grey BG (AWB, 1.0 = neutral) (open 0.9698, vendor 0.8991; pass = |open - vendor| <= 0.02); p2_a frame luma at the same exposure (open 93.7, vendor 71.9; pass = within +-3 %); p2_a NV12 temporal noise Y (Y 32..224) (open 1.417, vendor 1.232; pass = open <= vendor x (1 + 2 x A/A spread 5 %)); p2_a NV12 temporal noise V (open 0.439, vendor 0.383; pass = open <= vendor x (1 + 2 x A/A spread 5 %)); p2_b frame luma at the same exposure (open 92.4, vendor 55.4; pass = within +-3 %); p2_b NV12 temporal noise Y (Y 32..224) (open 2.037, vendor 1.702; pass = open <= vendor x (1 + 2 x A/A spread 5 %)); p2_c frame luma at the same exposure (open 91.6, vendor 82.3; pass = within +-3 %); p2_c NV12 temporal noise Y (Y 32..224) (open 1.406, vendor 1.152; pass = open <= vendor x (1 + 2 x A/A spread 5 %)).

Passed: frame luma p1_day (AE target, default comp 128); frame luma p1_night (AE target, default comp 128); chart grey RG (AWB, 1.0 = neutral); p2_a NV12 temporal noise U; p2_b NV12 temporal noise U; p2_b NV12 temporal noise V; p2_c NV12 temporal noise U; p2_night NV12 temporal noise Y (Y 32..224); p1_day dE00 mean, unclipped patches; p1_day dE00 mean, grey-normalised; ...

How to read: "pass" means the open stack is equal to or better than the vendor stack within the tolerance named in each row; matched-exposure rows (A2) compare the same integration time and gain on both stacks, read back from the ISP.

Findings and follow-up

19 rows

One row per failed or deviating (warn) check and how it is handled. Issue states were read from GitHub at generation time. The check name links to its row in the checks table.

checkstacksopenvendorverdicthandling
chart grey BG (AWB, 1.0 = neutral)open, vendor0.96980.8991failopen no follow-up yet
p2_a frame luma at the same exposureopen, vendor93.771.9failvendor difference vendor gain step is non-linear, so matched exposure gives a different brightness
p2_a NV12 temporal noise Y (Y 32..224)open, vendor1.4171.232failopen no follow-up yet
p2_a NV12 temporal noise Vopen, vendor0.4390.383failopen no follow-up yet
p2_b frame luma at the same exposureopen, vendor92.455.4failvendor difference vendor gain step is non-linear, so matched exposure gives a different brightness
p2_b NV12 temporal noise Y (Y 32..224)open, vendor2.0371.702failopen no follow-up yet
p2_c frame luma at the same exposureopen, vendor91.682.3failvendor difference vendor gain step is non-linear, so matched exposure gives a different brightness
p2_c NV12 temporal noise Y (Y 32..224)open, vendor1.4061.152failopen no follow-up yet
p2_c NV12 temporal noise Vopen, vendor0.5440.457failopen no follow-up yet
p2_night frame luma at the same exposureopen, vendor69.755.5failaccepted night tone curve differs, low priority
grey row tone slopeopen, vendor0.8630.776failopen no follow-up yet
OSD text item appearsopen, vendor3.1 2.2 mean |diff| OSD corner / elsewhere3.1 2.2 mean |diff| OSD corner / elsewherefailinvalid (test setup) test method, the OSD change was too small to measure
hflip: picture mirroredopen, vendorcorr mirrored 0.977 / same 0.530 corr mirrored 0.006 / same 0.046 failvendor difference vendor hflip does not mirror the picture
max_again 0: applied AGain (x1024) <= capopen, vendor31378 <= 1024 1024 <= 1024 failfixed in open-tx-isp 36e7da60 (Lu-Fi/openimp#238, closed): applied AGain now respects the cap
cycles with module bound + valid pictureopen0/10 - failinvalid (test setup) T20 binds the sensor on stream open, not on module load; check fixed
SSIM/PSNR-- - failinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
RTSP client 1 frames in 60 s / errorsopen, vendor0 / 4 0 / 4 failinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
RTSP client 2 frames in 60 s / errorsopen, vendor0 / 4 0 / 4 failinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
RTSP client 3 frames in 60 s / errorsopen, vendor0 / 4 0 / 4 failinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials

Deviations and warnings

6

Checks (pass/fail)

26 pass, 19 fail

Cells: open / vendor value, Δ = open - vendor (relative to vendor), then the direction chip (better / equal / worse, where the row defines one) and the pass/fail verdict with its rule. Rows are grouped by test section.

checksettingopenvendorΔ open-vendoropen vs vendorverdictrule / notehandling
A1 P1 defaults
frame luma p1_day (AE target, default comp 128)default AE, comp 128105.8113.5-7.7 (-7 %)passpass = open within +-10 % of vendor
frame luma p1_night (AE target, default comp 128)default AE, comp 12880.778.4+2.3 (+3 %)passpass = open within +-10 % of vendor
chart grey RG (AWB, 1.0 = neutral)lamps 3000 (fair pass, supplement) + 5000 (colour pass) K1.04091.0468-0.0059 (-1 %)equalpasspass = |open - vendor| <= 0.02
chart grey BG (AWB, 1.0 = neutral)lamps 3000 (fair pass, supplement) + 5000 (colour pass) K0.96980.8991+0.0707 (+8 %)betterfailpass = |open - vendor| <= 0.02open no follow-up yet
A2 matched exposure
p2_a frame luma at the same exposureIT 1215 / AGain 32 / IspDG 093.771.9+21.8 (+30 %)failpass = within +-3 %vendor difference vendor gain step is non-linear, so matched exposure gives a different brightness
p2_a NV12 temporal noise Y (Y 32..224)IT 1215 / AGain 32 / IspDG 01.4171.232+0.185 (+15 %)worsefailpass = open <= vendor x (1 + 2 x A/A spread 5 %)open no follow-up yet
p2_a NV12 temporal noise UIT 1215 / AGain 32 / IspDG 00.6070.742-0.135 (-18 %)betterpasspass = open <= vendor x (1 + 2 x A/A spread 5 %)
p2_a NV12 temporal noise VIT 1215 / AGain 32 / IspDG 00.4390.383+0.056 (+15 %)worsefailpass = open <= vendor x (1 + 2 x A/A spread 5 %)open no follow-up yet
p2_b frame luma at the same exposureIT 607 / AGain 64 / IspDG 092.455.4+37.0 (+67 %)failpass = within +-3 %vendor difference vendor gain step is non-linear, so matched exposure gives a different brightness
p2_b NV12 temporal noise Y (Y 32..224)IT 607 / AGain 64 / IspDG 02.0371.702+0.335 (+20 %)worsefailpass = open <= vendor x (1 + 2 x A/A spread 5 %)open no follow-up yet
p2_b NV12 temporal noise UIT 607 / AGain 64 / IspDG 00.8461.052-0.206 (-20 %)betterpasspass = open <= vendor x (1 + 2 x A/A spread 5 %)
p2_b NV12 temporal noise VIT 607 / AGain 64 / IspDG 00.5880.557+0.031 (+6 %)worsepasspass = open <= vendor x (1 + 2 x A/A spread 5 %)
p2_c frame luma at the same exposureIT 304 / AGain 96 / IspDG 091.682.3+9.3 (+11 %)failpass = within +-3 %vendor difference vendor gain step is non-linear, so matched exposure gives a different brightness
p2_c NV12 temporal noise Y (Y 32..224)IT 304 / AGain 96 / IspDG 01.4061.152+0.254 (+22 %)worsefailpass = open <= vendor x (1 + 2 x A/A spread 5 %)open no follow-up yet
p2_c NV12 temporal noise UIT 304 / AGain 96 / IspDG 00.7961.041-0.245 (-24 %)betterpasspass = open <= vendor x (1 + 2 x A/A spread 5 %)
p2_c NV12 temporal noise VIT 304 / AGain 96 / IspDG 00.5440.457+0.087 (+19 %)worsefailpass = open <= vendor x (1 + 2 x A/A spread 5 %)open no follow-up yet
p2_night frame luma at the same exposureIT 397 / AGain 32 / IspDG 069.755.5+14.2 (+26 %)failpass = within +-3 %accepted night tone curve differs, low priority
p2_night NV12 temporal noise Y (Y 32..224)IT 397 / AGain 32 / IspDG 01.7721.811-0.039 (-2 %)equalpasspass = open <= vendor x (1 + 2 x A/A spread 5 %)
A/A repeatability (p2_a vs p2_a2, same point twice)IT/gain of p2_aYtemp 0% U 0% V 1%inforelative |a - a2|; > 15 % = the method is noisier than the difference sought
A3 colour
p1_day dE00 mean, unclipped patcheschart_de.py, lamps 3000 (fair pass, supplement) + 5000 (colour pass) K11.0613.27-2.21 (-17 %)betterpasspass = open <= vendor + 1.0
p1_day dE00 mean, grey-normalisedchart_de.py, lamps 3000 (fair pass, supplement) + 5000 (colour pass) K6.958.33-1.38 (-17 %)betterpasspass = open <= vendor + 1.0
p2_a dE00 mean, unclipped patcheschart_de.py, lamps 3000 (fair pass, supplement) + 5000 (colour pass) K9.729.35+0.37 (+4 %)worsepasspass = open <= vendor + 1.0
p2_a dE00 mean, grey-normalisedchart_de.py, lamps 3000 (fair pass, supplement) + 5000 (colour pass) K6.357.64-1.29 (-17 %)betterpasspass = open <= vendor + 1.0
grey row tone slopeP1 day0.8630.776+0.087 (+11 %)betterfailpass = |open - vendor| <= 0.05open no follow-up yet
A4 sharpness
MTF50 median of 8 chart edges (cycles/pixel)P1 day, 8 frames averaged0.2960.276+0.020 (+7 %)betterpasspass = open >= 0.9 x vendor
10-90 % edge rise median (px)P1 day1.985.25-3.27 (-62 %)betterpasspass = open <= vendor x 1.1
MTF50 median / 10-90 rise mediandefaults, 8 snapshots averaged0.274 c/p / 2.33 px (8 edges) 0.300 c/p / 4.82 px (8 edges) infolb_analyse.py mtf; lb_analyse.py mtf
B3 CPU/RAM
system busy % (idle streamer, 60 s)0 RTSP clients10.2010.60-0.40 (-4 %)betterpasspass = open <= vendor + 0.5 points
streamer % of all CPU0 RTSP clients9.089.88-0.80 (-8 %)betterpasspass = open <= vendor + 0.5 points
ISP/codec kernel threads %0 RTSP clients0.032.50-2.47 (-99 %)betterpasspass = open <= vendor + 0.5 points
C2 control API
OSD text item appearsosd0.3 text item LBTEST at 40,403.1 2.2 mean |diff| OSD corner / elsewhere3.1 2.2 mean |diff| OSD corner / elsewherefailpass = the top-left corner changes clearly more than the rest; pass = the top-left corner changes clearly more than the restinvalid (test setup) test method, the OSD change was too small to measure
comp 40 / 200 frame Yae_compensation 40 vs 20075.8 / 198.7 Y54.5 / 220.2 Ypasspass = 200 brighter by > 10; pass = 200 brighter by > 10
hflip: picture mirroredimage.hflip 1corr mirrored 0.977 / same 0.530 corr mirrored 0.006 / same 0.046 failpass = the new picture matches the mirrored old one; pass = the new picture matches the mirrored old onevendor difference vendor hflip does not mirror the picture
max_again 0: applied AGain (x1024) <= capmax_again 0 (1x) at comp 25531378 <= 1024 1024 <= 1024 failISP mode=Day it=2022 ag=158 dg=0 idg=0 tg=7844 mag=0; ISP mode=Day it=2022 ag=0 dg=0 idg=80 tg=1448 mag=0fixed in open-tx-isp 36e7da60 (Lu-Fi/openimp#238, closed): applied AGain now respects the cap
C1 D1/D4
D1 dark start: ISP nightstreamer daynight trace, dark start, lamps on 180 s, off 180 smode=Night - pass60 s after start in the dark
D4 lamps off: ISP night after 180 sstreamer daynight trace, dark start, lamps on 180 s, off 180 smode=Night - pass
D4 lamps on: ISP day after 180 sstreamer daynight trace, dark start, lamps on 180 s, off 180 smode=Day - pass
B4 reload
cycles with module bound + valid picture10 cycles0/10 - failpicture: 1 snapshot, Y std > 2invalid (test setup) T20 binds the sensor on stream open, not on module load; check fixed
cycles with oops/BUG lines in dmesg10 cycles0 - pass
i2c sensor client released after rmmod10 cycles10/10 - passsysfs 0-00xx driver link gone after rmmod
B1 SSIM/PSNR
SSIM/PSNRdefaults, 8 snapshots averaged- - faila capture failed (see $S/audit/issue230/t20/run-1108-0211-lb/open/ssim/*.err); a capture failed (see $S/audit/issue230/t20/run-1108-0211-lb/vendor/ssim/*.err)invalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
C3 stability
RTSP client 1 frames in 60 s / errors3 RTSP clients (ch0, ch0, ch1) for 60 s + 10 snapshots during the load0 / 4 0 / 4 failpass = > 100 frames, no ffmpeg errors; pass = > 100 frames, no ffmpeg errorsinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
RTSP client 2 frames in 60 s / errors3 RTSP clients (ch0, ch0, ch1) for 60 s + 10 snapshots during the load0 / 4 0 / 4 failpass = > 100 frames, no ffmpeg errors; pass = > 100 frames, no ffmpeg errorsinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
RTSP client 3 frames in 60 s / errors3 RTSP clients (ch0, ch0, ch1) for 60 s + 10 snapshots during the load0 / 4 0 / 4 failpass = > 100 frames, no ffmpeg errors; pass = > 100 frames, no ffmpeg errorsinvalid (test setup) no RTSP credentials in the old run; fixed in the runner, the new run has credentials
config persistence across restartPOST image.ae_compensation 140, restart with the same /tmp conf, GETae_compensation 140 ae_compensation 140 pass/tmp conf copy only (flash untouched); /tmp conf copy only (flash untouched)
snapshot after streamer restartstreamer restart (kill + start, same conf)105.3 51.1 1 Y std n114.5 50.7 1 Y std npass
snapshots under load valid3 RTSP clients (ch0, ch0, ch1) for 60 s + 10 snapshots during the load10/10 10/10 passtimes in stab/snap_times.txt; times in stab/snap_times.txt
Planned, not run in these runs
A1b: AE comp sweep 40..200 + path test---not runnot part of the runs in this report
A2b: AWB 3000/5000 K + WB presets---not runnot part of the runs in this report
A1c: AE step response (lamps on/off)---not runnot part of the runs in this report
A2c: noise vs analog gain---not runnot part of the runs in this report
A4b: substream MTF / colour / NV12 layout---not runnot part of the runs in this report
A5: encoder H.264/H.265: FixQP bytes, CBR quality---not runnot part of the runs in this report
A6: banding / flicker---not runnot part of the runs in this report
A7: night IR picture---not runnot part of the runs in this report
B2: RC modes CBR/VBR/FixQP + bitrate jump---not runnot part of the runs in this report
B5: startup time---not runnot part of the runs in this report
C4: motion detection (PTZ cams)---not runnot part of the runs in this report

Protocol (camera, stacks, lamps)

itemvalue
camerawyze-t20x-jxf23 (T20, sensor jxf23), position: light box, chart centred, camera at the card centre (fixed, no PTZ)
run dirsrun-1108-0211, run-1108-0211-lb
open stack time (run-1108-0211)2026-11-08 02:11:16 .. 02:28:18
open stack time (run-1108-0211-lb)2026-11-08 03:01:44 .. 04:55:29
vendor stack time (run-1108-0211)2026-11-08 02:28:40 .. 02:58:21
vendor stack time (run-1108-0211-lb)2026-11-08 04:55:47 .. 06:02:34
lampsCT 3000 (fair pass, supplement) + 5000 (colour pass) K (2 x DiCUNO E14 5 W CRI 98 per CT, DC LED)
lamp marker02:24:24 NEED_LAMPS_OFF_1 (run-1108-0211)
lamp marker02:24:45 LAMPS_OFF_1 (run-1108-0211)
lamp marker02:28:40 NEED_LAMPS_ON (run-1108-0211)
lamp marker02:28:52 LAMPS_ON (run-1108-0211)
lamp marker02:53:19 NEED_LAMPS_OFF_2 (run-1108-0211)
lamp marker02:53:40 LAMPS_OFF_2 (run-1108-0211)
lamp marker02:58:21 NEED_LAMPS_ON_S (run-1108-0211)
lamp marker02:58:40 LAMPS_ON_S (run-1108-0211)
lamp marker04:41:46 NEED_LAMPS_OFF_1 (run-1108-0211-lb)
lamp marker04:42:03 LAMPS_OFF_1 (run-1108-0211-lb)
lamp marker04:45:04 NEED_LAMPS_ON_2 (run-1108-0211-lb)
lamp marker04:45:18 LAMPS_ON_2 (run-1108-0211-lb)
lamp marker04:48:20 NEED_LAMPS_OFF_3 (run-1108-0211-lb)
lamp marker04:48:34 LAMPS_OFF_3 (run-1108-0211-lb)
lamp marker04:52:02 NEED_LAMPS_ON_4 (run-1108-0211-lb)
lamp marker04:52:26 LAMPS_ON_4 (run-1108-0211-lb)
box temperature21.8 C (STALE: thermometer not logged during the run)
flashed image / buildwyze_cam2_t20x_jxf23_rtl8189ftv build="claude/aperto-port-1107+725a14d, 2026-11-07 19:53:50 UTC"
open: ko file in /lib/modules (flashed; the loaded ko is under stack pieces) / libimp mappedtx_isp_t20 md5=9c3d9681 libimp=0c0132c8
open: streamerstreamer bin_md5=b8faed54 version=v1.12.0
open: streamer version (/control)v1.12.0
vendor: ko file in /lib/modules (flashed; the loaded ko is under stack pieces) / libimp mappedtx_isp_t20 md5=9c3d9681 libimp=da38e940
vendor: streamerstreamer bin_md5=904a2785 version=v1.12.0-vendorlib
vendor: streamer version (/control)v1.12.0-vendorlib
open stack pieces (md5)tx-isp-t20.ko 9c3d9681 (run-1108-0211), sensor_jxf23_t20.ko 5f0c6499 (run-1108-0211), libimp.so 0c0132c8 (run-1108-0211), streamer b8faed54 (run-1108-0211), jxf23.bin db5536f9 (run-1108-0211)
vendor stack pieces (md5)libalog.so 90a3c90d (run-1108-0211), libimp.so da38e940 (run-1108-0211), libsysutils.so 3e9d3e8b (run-1108-0211), tx-isp-t20.ko 13169fc2 (run-1108-0211), sensor_jxf23_t20.ko 9bc0c394 (run-1108-0211), streamer 904a2785 (run-1108-0211), fair_preload.so 8d8cfe9c (run-1108-0211), jxf23.bin db5536f9 (run-1108-0211), tx-isp-t20.ko 9c3d9681 (run-1108-0211)
open stackopen-tx-isp tx_isp_t20 (flashed, aperto-port 725a14d RC3) + OpenIMP libimp (flashed) + installed streamer v1.12.0 under LD_PRELOAD fair_preload_t20.so
vendor stackingenic-sdk tx-isp-t20.ko (vendor ISP blob libt20-firmware-3.12.0) + sensor_jxf23_t20.ko (vendor-compatible rebuild) + vendor libimp 3.12.0 (da38e940) + streamer v1.12.0 USE_OPENIMP=0

A1 P1 defaults (default AE, comp 128)

stackphasemodeIT (lines)AGainIspDGEVjpg Y (0..255)R/GB/Gclippedtimerun
openp1_dayDay1011570879105.81.04090.96980.002:17:45run-1108-0211
vendorp1_dayDay10116421069113.51.04680.89910.002:46:31run-1108-0211
openp1_nightNight33756086180.7---02:27:22run-1108-0211
vendorp1_nightNight33752384278.4---02:56:18run-1108-0211

A2 Matched exposure + NV12 noise (P2)

Same integration time (lines) and gains (x1024) forced on both stacks through the streamer, read back from the ISP (verify). NV12: 8 frames of channel 0 (1920x1080), centre half, temporal std per pixel.

stackphaseverifymodeIT (lines)AGainIspDGEVjpg Y (0..255)NV12 Y (0..255)Ytemp (std)U (std)V (std)drifttimerun
openp2_aokDay121532051293.7129.951.4170.6070.4390.0202:19:14run-1108-0211
vendorp2_aokDay121532051271.9108.771.2320.7420.3830.0102:48:01run-1108-0211
openp2_a2okDay121532051293.6-----02:22:45run-1108-0211
vendorp2_a2okDay121532051271.8108.731.2320.7420.3800.0102:51:38run-1108-0211
openp2_bokDay607640102492.4128.552.0370.8460.5880.0302:20:27run-1108-0211
vendorp2_bokDay607640102455.484.861.7021.0520.5570.0702:49:12run-1108-0211
openp2_cokDay304960204891.6128.081.4060.7960.5440.0502:21:40run-1108-0211
vendorp2_cokDay304960204882.3117.881.1521.0410.4570.0302:50:25run-1108-0211
openp2_nightokNight39732051269.7126.181.772--0.7102:28:17run-1108-0211
vendorp2_nightokNight39732051255.5108.451.811--1.0002:57:11run-1108-0211

A3 Colour (dE00) and grey row

chart_de.py (audit/issue230/colour) per phase, cells = open / vendor. Lower dE00 is better.

phasedE00 meandE00 mediandE00 maxdE00 mean, unclipped patchesdE00 mean, grey-normalisedchroma ratio (1 = reference)dE00 skin patchesgrey a* castgrey b* castgamma fit
p1_day11.85 / 13.2711.50 / 11.7325.26 / 31.6611.06 / 13.276.95 / 8.330.83 / 0.6213.71 / 14.57-0.15 / -0.523.99 / 2.760.86 / 0.76
p2_a9.72 / 9.359.34 / 7.9218.30 / 16.499.72 / 9.356.35 / 7.640.88 / 0.9412.51 / 14.49-0.36 / -0.605.60 / 7.480.94 / 1.12

Suite colour-cct, P1 day

audit/chart/spyder.py: sRGB -> Lab D50, CIEDE2000, reference = Datacolor default values, D50 assumed, not batch specific.

metricopenvendorΔ open-vendoropen vs vendor
dE00 mean (raw)11.4511.84-0.39 (-3 %)better
dE00 mean (grey-normalised)9.2210.31-1.09 (-11 %)better
dE00 colour patches12.3512.37-0.02 (-0 %)equal
dE00 grey patches8.7610.26-1.50 (-15 %)better
dE00 max29.4433.58-4.14 (-12 %)better
chroma ratio (1 = reference)0.620.70-0.08 (-11 %)worse
mean hue error deg8.9615.54-6.58 (-42 %)better
grey a* cast0.420.96-0.54 (-56 %)better
grey b* cast4.345.02-0.68 (-14 %)better

dE00 per patch, P1 day

patchopenvendorpatchopenvendor
A125.329.1C119.221.1
A215.619.4C28.98.3
A35.98.5C311.712.9
A43.53.4C46.66.6
A53.83.9C512.915.5
A64.84.8C620.824.1
B17.07.7D116.417.3
B210.412.7D214.614.4
B324.731.7D311.310.7
B48.311.5D411.711.7
B56.87.8D515.017.3
B66.86.4D612.411.8
dE00 per patch, P1 day (lower = better) 0 10 20 30 A1 open: 25.3 A1 vendor: 29.1 A1 A2 open: 15.6 A2 vendor: 19.4 A2 A3 open: 5.9 A3 vendor: 8.5 A3 A4 open: 3.5 A4 vendor: 3.4 A4 A5 open: 3.8 A5 vendor: 3.9 A5 A6 open: 4.8 A6 vendor: 4.8 A6 B1 open: 7 B1 vendor: 7.7 B1 B2 open: 10.4 B2 vendor: 12.7 B2 B3 open: 24.7 B3 vendor: 31.7 B3 B4 open: 8.3 B4 vendor: 11.5 B4 B5 open: 6.8 B5 vendor: 7.8 B5 B6 open: 6.8 B6 vendor: 6.4 B6 C1 open: 19.2 C1 vendor: 21.1 C1 C2 open: 8.9 C2 vendor: 8.3 C2 C3 open: 11.7 C3 vendor: 12.9 C3 C4 open: 6.6 C4 vendor: 6.6 C4 C5 open: 12.9 C5 vendor: 15.5 C5 C6 open: 20.8 C6 vendor: 24.1 C6 D1 open: 16.4 D1 vendor: 17.3 D1 D2 open: 14.6 D2 vendor: 14.4 D2 D3 open: 11.3 D3 vendor: 10.7 D3 D4 open: 11.7 D4 vendor: 11.7 D4 D5 open: 15 D5 vendor: 17.3 D5 D6 open: 12.4 D6 vendor: 11.8 D6 dE00 open vendor

Grey row A1..A6

metricopenvendorΔ open-vendoropen vs vendor
tone slope log-log (1 = reference gamma)0.8630.776+0.087 (+11 %)better
mean dL-8.508-8.428-0.080 (+1 %)
max |dL|31.52433.646-2.122 (-6 %)better
white A1 code246.358241.426+4.932 (+2 %)
black A6 code57.70264.956-7.254 (-11 %)
clipped greys0.0000.000+0.000equal
range ratio22.06416.713+5.351 (+32 %)
code A1246.358241.426+4.932 (+2 %)
code A2245.000239.856+5.144 (+2 %)
code A3242.555240.000+2.555 (+1 %)
code A4198.275209.076-10.801 (-5 %)
code A5128.076138.585-10.509 (-8 %)
code A657.70264.956-7.254 (-11 %)

A4 Sharpness (slanted edge at the chart edges)

Outer edge of the two middle patches on every chart side (patch vs black chart frame), 8 frames averaged, edge ESF with sub-pixel registration from the small chart tilt (lbmetrics.edge_sharpness): 10-90 % rise in pixels (lower = sharper) and MTF50 in cycles/pixel (higher = sharper).

edgerise open (px)rise vendor (px)MTF50 open (c/p)MTF50 vendor (c/p)contrast ocontrast vtilt (deg)
top-201.782.160.2670.21577760.7
top-302.0610.080.2540.2791131014.2
bottom-231.221.540.3670.32880884.6
bottom-331.902.250.2660.24457572.5
left-0111.2811.500.4680.4154545-11.8
left-024.042.360.5360.439150143-7.3
right-512.268.150.3000.27370783.6
right-521.5810.490.2920.2061141080.3

Pictures

33

Downscaled to 800 px, JPEG q75. Chart and grey card only. Click a picture to see it large (Esc or click closes).

A1 p1_day

open p1_day
open p1_day
vendor p1_day
vendor p1_day

A1 p1_night

open p1_night
open p1_night
vendor p1_night
vendor p1_night

A2 p2_a

open p2_a
open p2_a
vendor p2_a
vendor p2_a

A2 p2_night

open p2_night
open p2_night
vendor p2_night
vendor p2_night

A3 dE00 overlay p1_day (chart_de.py)

open p1_day
open p1_day
vendor p1_day
vendor p1_day

A3 dE00 overlay p2_a (chart_de.py)

open p2_a
open p2_a
vendor p2_a
vendor p2_a

A4 MTF crops

top-20 open: rise 1.78 px
top-20 open: rise 1.78 px
top-20 vendor: rise 2.16 px
top-20 vendor: rise 2.16 px
bottom-23 open: rise 1.22 px
bottom-23 open: rise 1.22 px
bottom-23 vendor: rise 1.54 px
bottom-23 vendor: rise 1.54 px
left-01 open: rise 11.28 px
left-01 open: rise 11.28 px
left-01 vendor: rise 11.50 px
left-01 vendor: rise 11.50 px
right-51 open: rise 2.26 px
right-51 open: rise 2.26 px
right-51 vendor: rise 8.15 px
right-51 vendor: rise 8.15 px

C2 control API OSD text item appears

open s1.jpg
open s1.jpg

C2 control API OSD text item appears

vendor s1.jpg
vendor s1.jpg

C2 control API comp 40 / 200 frame Y

open s1.jpg
open s1.jpg

C2 control API comp 40 / 200 frame Y

open s1.jpg
open s1.jpg

C2 control API comp 40 / 200 frame Y

vendor s1.jpg
vendor s1.jpg

C2 control API comp 40 / 200 frame Y

vendor s1.jpg
vendor s1.jpg

C2 control API hflip: picture mirrored

open s1.jpg
open s1.jpg

C2 control API hflip: picture mirrored

vendor s1.jpg
vendor s1.jpg

C2 control API max_again 0: applied AGain (x1024) <= cap

open s1.jpg
open s1.jpg

C2 control API max_again 0: applied AGain (x1024) <= cap

vendor s1.jpg
vendor s1.jpg

B4 reload cycles with oops/BUG lines in dmesg

open s1.jpg
open s1.jpg

C3 stability snapshots under load valid

open load_s5.jpg
open load_s5.jpg

C3 stability snapshots under load valid

vendor load_s5.jpg
vendor load_s5.jpg

Method