From f1007a0dbc519c21a126f232e405eec51aed8dbe Mon Sep 17 00:00:00 2001 From: prosolis <5590409+prosolis@users.noreply.github.com> Date: Tue, 25 Aug 2026 07:31:05 -0700 Subject: [PATCH] Put the frame in a container with no decoder, and find the palette is not free ROADMAP K2. DLXP1: a 49,664 B record that is 97 sectors exactly, no index and no length word, because a packed record's length is geometry rather than content. 582.0 KB/s, which is what FINDINGS 61.9 predicted to the tenth, and it encodes in 3.3 s because there is no k-means in it. px68k's own x68k/gvram.c renders the container's bytes index-exact with the harness computing no interleave -- the only test that can catch an encoder whose byte order is wrong, since a container round-trips against its own inverse either way. Both negative controls fail as they must. The picture is re-derived against this project's builder rather than PIL's (34.05 dB against 61.9's 34.08) and the GGGGGRRRRRBBBBBI word is charged for the first time in this tree: 0.53 dB, on every row, so it moves no comparison. What the control found is the finding. A packed container on a SCENE palette lands exactly on the codec's ceiling, so the whole +2.31 dB is the per-frame palette and nothing else -- and 231 of 256 entries change every frame, which makes a mismatched paint 12.8 dB worse than the correct pairing, on screen for roughly half of every frame slot if buffer mode does not blank. So B2 now decides which packed CONTAINER ships, not only which player. The fallback is already a flag: --scene-palette --no-palette is 30.79 dB, zero churn, 576.0 KB/s and still +2.07 dB on the shipping codec. 62.5 is priced and is a wash: palette first 20.32 dB, palette last 20.33. Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6 --- .gitignore | 1 + README.md | 56 +++++ docs/FINDINGS.md | 158 +++++++++++++++ docs/ROADMAP.md | 58 +++++- docs/STATUS.md | 112 ++++++++++ docs/img/palette-mismatch.png | Bin 0 -> 229786 bytes tools/analysis/30_packed_container.py | 282 ++++++++++++++++++++++++++ tools/bench/check.sh | 41 ++++ tools/bench/dlxload.py | 15 +- tools/bench/gvpack/gvpack | Bin 25944 -> 25944 bytes tools/bench/gvpack/harness.c | 30 ++- tools/bench/gvpack/verify_dlxp.py | 87 ++++++++ tools/encoder/dlxp.py | 218 ++++++++++++++++++++ tools/encoder/pack.py | 112 ++++++++++ tools/encoder/vq.py | 35 ++++ 15 files changed, 1189 insertions(+), 16 deletions(-) create mode 100644 docs/img/palette-mismatch.png create mode 100644 tools/analysis/30_packed_container.py create mode 100644 tools/bench/gvpack/verify_dlxp.py create mode 100644 tools/encoder/dlxp.py create mode 100644 tools/encoder/pack.py diff --git a/.gitignore b/.gitignore index 715196c..5c2be8d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ roms/ __pycache__/ *.pyc *.dlx +*.dlxp a.out tmp/ tools/bench/c68k/c68k_bench diff --git a/README.md b/README.md index 7b2c1fd..083f8f2 100644 --- a/README.md +++ b/README.md @@ -256,6 +256,42 @@ run bounds the model and not the hardware, and "does a real palette register take a byte write" joins the hardware list as B4. A negative answer costs 0.28% of a frame and nothing else (FINDINGS 62). +**The packed container exists, and the palette that makes it better than the +codec is not free after all.** `tools/encoder/dlxp.py` is DLXP1 and `pack.py` +writes it: a **49,664 byte record that is 97 sectors exactly**, no record index +and no length word — a packed record's length is geometry, so record *i* is at +`off + i*rec` and a seek is arithmetic — at **582.0 KB/s**, which is what +FINDINGS 61.9 predicted to the tenth, encoded in **3.3 seconds** because there is +no k-means in it. **px68k's own `gvram.c` renders the container's bytes +index-exact with the harness computing no interleave**, which is the only test +that can catch an encoder whose byte order is wrong: a container round-trips +against its own inverse either way. And the picture is re-derived against this +project's own quantiser rather than PIL's — **34.05 dB against 61.9's 34.08** — +with the X68000's `GGGGGRRRRRBBBBBI` word charged for the first time in this +tree, 0.53 dB, on every row, so it moves no comparison. + +**What the control found is the finding.** A packed container built on a *scene* +palette lands **exactly on the codec's ceiling, 30.79 dB**, so the whole +2.31 dB +the packed branch has over that ceiling is **the per-frame palette and nothing +else**. And a per-frame palette is not a small delta: **231 of 256 entries change +every frame**, and a picture under the neighbouring frame's palette is **12.8 dB +worse** than the correct pairing — a wipe on screen for roughly half of every +frame slot, forever, *if* buffer mode does not blank the layer. Correct render, +the same frame under the next frame's palette, and the 24-bit source; the frame +is the one whose mismatch is closest to the mean, so it is not an outlier picked +to make the point: + +![The palette mismatch: correct, mismatched, source](docs/img/palette-mismatch.png) + +It is chroma speckle and a shifted ground rather than a scramble — two +median-cut palettes of adjacent frames occupy a similar gamut — which is milder +than 12.8 dB sounds and worse than a still can show, because a still does not +show it arriving and leaving twelve times a second. So B2 stopped +being a question about headroom and became one about **which packed container +ships**. The fallback is already a flag: `--scene-palette --no-palette` is +30.79 dB, zero churn, **576.0 KB/s**, and still +2.07 dB on the shipping codec as +the display renders both (FINDINGS 63). + **The scene graph is in, and the worst gap between two decision points is zero.** `tools/import/scenegraph.py` imports the arcade scene graph — 40 scenes, 516 sequences, 906 input windows — and 5.4% of the game's 612 branch transitions @@ -469,6 +505,15 @@ tools/bench/c68k/ headless px68k C68K harness, a SECOND emulator for every which MAME cannot report. The Makefile's -no-pie and the harness's MAP_32BIT arena are load-bearing: C68K truncates host pointers to 32 bits. +tools/bench/gvpack/ the same second-emulator argument for the DISPLAY: it links + px68k's real x68k/gvram.c, so the address decode, the R20 + bit-11 write path, the page-byte selection, the scroll wrap and + the index-0 transparency test are px68k's own code. + verify_gvpack.py checks the LAYOUT (the harness computes the + interleave); verify_dlxp.py checks the CONTAINER, writing a + DLXP1 record's bytes into GVRAM verbatim with no interleave + computed anywhere, which is the only way to catch an encoder + whose byte order is wrong. 25 imports nothing itself: it reads the DLXSCENE1 scene table and reports the worst gap between two decision points, what the input layer has to survive, and what both cost in @@ -479,6 +524,11 @@ tools/import/ the ONLY code in this tree coupled to somebody else's source. project's own DLXSCENE1 schema, with the sources' licences and attribution inside it. Nothing is vendored and the output is gitignored derived data. + 30 is the PACKED container's gate: the format's invariants + (round-trip, sectors, the transparency key, the palette word), + and the quality re-derivation 61.9 asked for, in both the RGB888 + domain every encoder PSNR here is quoted in and the GRB555 one a + player actually displays. tools/media/ builds docs/img/ from a paced recording run tools/vasm/ vasm m68k assembler, binary plus source tarball tools/encoder/ hybrid VQ encoder and DLX3 container writer. @@ -492,6 +542,12 @@ tools/encoder/ hybrid VQ encoder and DLX3 container writer. record as whole sectors straight into the ring with no window and no bounce copy; dlx.record_lengths() is the one place that rule is applied. + dlxp.py and pack.py are the OTHER container -- DLXP1, the + decoder-free packed one (FINDINGS 63). Nothing is shared with + the codec's writer on purpose: a packed record is a palette and + a picture, both geometry, and dlxp.py is the one place the + interleave and the 97-sector record are stated. There is no + rate control in pack.py because there is no rate lever. dlx.py is the reference DECODER, ground truth for the 68000. 24 models the ring with the 68000 owning it: the request queue, the poll-only-when-not-decoding rule and 54.4's frame diff --git a/docs/FINDINGS.md b/docs/FINDINGS.md index 7646529..d231499 100644 --- a/docs/FINDINGS.md +++ b/docs/FINDINGS.md @@ -6432,3 +6432,161 @@ encoder K2 has not been written yet, and the whole question is **moot if buffer mode blanks the layer** (47.4/B2) because nothing is displayed during the paint at all. **Filed, not answered.** It is named here so that the choice in the final player is a decision rather than an accident of which run happened first. + +## 63. The packed container, and the palette that buys 2.31 dB has a price nobody had counted (session 31) + +**Emulated, and one stage of it is not emulated at all.** The quality numbers +are host arithmetic over the Blu-ray's own frames. The rendering check is +**px68k's real `x68k/gvram.c`**, linked headless the way `tools/bench/c68k` +links its CPU core. No MAME run was needed for any of this and no real hardware +ran. 47.4 — does buffer mode blank the layer — is still the board question, and +this session made it **bigger**. + +ROADMAP **K2 is done**. `tools/encoder/dlxp.py` is the format, +`tools/encoder/pack.py` is the encoder, `tools/analysis/30_packed_container.py` +is the gate and the re-derivation, `tools/bench/gvpack/verify_dlxp.py` renders +the container's own bytes on the second emulator, and `check.sh` runs all four. + +### 63.1 DLXP1: the container whose correctness is that nothing parses it + +`dlx.py` exists because a 68000 has to **parse** the codec's container and can +get it wrong. `dlxp.py` exists for the opposite reason: a DMA channel must not +have to parse anything, and the format is what makes that true. + +| | | +|---|---| +| record | **49,664 B = 97 sectors EXACTLY** — 512 B of palette, 49,152 B of picture | +| picture | 192 rows x 128 words, word `i` = `(pix[y][i+128] << 8) \| pix[y][i]` — the layout 47.2 rendered pixel-exactly on both emulators | +| index | **none, and none is possible to need**: a record's length is geometry, so record `i` is at `off_frm + i * rec_bytes` and a seek is arithmetic | +| wire | **582.0 KB/s, fixed** — 61.9 predicted 582.0 and the container is 582.0 | +| encode | **3.3 s for 120 frames**, against ~55 s for the codec, 95% of which is k-means | + +DLX4's record index was invented (49.3) because a codec record's length is +content-dependent and a producer streaming off a disc cannot learn it by walking +bytes it has not fetched. **A packed record has no such problem to solve**, and +that is the same reason the packed player has no ring: there is nothing +variable-length to keep contiguous. + +**Sector alignment, which cost session 28 a whole re-encode (60.1), is free +here.** 49,664 is 97 sectors because a 256x192 picture and a 256-entry palette +happen to be. It is still *checked* rather than assumed, because the thing being +protected is not tidiness: the channel copies bytes and has no opinion about +them, so a container whose geometry is a byte wrong does not fail, it paints. + +### 63.2 The container's OWN BYTES, through px68k's GVRAM code, with no interleave computed + +`verify_gvpack.py` (47.2) checks the **layout**: it hands the harness a picture +and the harness computes the interleave. That cannot catch an encoder whose byte +order is wrong, because a container round-trips against its own inverse either +way. `verify_dlxp.py` writes a **DLXP1 record's bytes into GVRAM verbatim** and +asks px68k what they display as. + +**256x192 index-exact, letterbox on the reserved black, index 0 never on +screen** — frames 0, 60 and 119. Two negative controls, both mechanisms this +container depends on rather than decoration: **R20 bit 11 clear loses 24,576 px** +(exactly the 128 columns page 1 carries) and **page 1 unscrolled loses 48,958**. + +### 63.3 The picture, RE-DERIVED against this project's own builder, and charged the hardware word + +This is what the session 30 handoff asked for. 61.9's 34.08 dB was PIL's free +256-colour MEDIANCUT and was filed as "a direction, not the player's number". It +had **two** debts, not one, and the second had gone unnamed: every PSNR this +project has ever quoted — 29.19, 31.33, 34.08 — is measured in the **RGB888 +palette domain**, upstream of the X68000's `GGGGGRRRRRBBBBBI` word (23.3). A +packed record carries that word and nothing else, so a player's number has to +come from the other side of it. + +PSNR vs the 24-bit source, mean over the same 120-frame window, on the gate +container's own bytes: + +| | RGB888 | **GRB555** | +|---|---:|---:| +| CODEC, the gate container (440.4 KB/s) | 29.07 | **28.72** | +| 256c scene palette — the codec's CEILING | 31.32 | **30.79** | +| PACKED, 254c SCENE palette *(the control)* | 31.32 | **30.79** | +| **PACKED CONTAINER, 254c PER-FRAME** | **34.05** | **33.10** | + +**61.9's direction survives the real builder: 34.05 against its 34.08.** The two +entries the packed layout reserves — index 0 for the transparency key, 255 for +black — cost **+0.0003 dB**, which is to say nothing at all, and marginally the +right way. 60.3 measured one reserved entry at 0.04 dB; two is not twice that, +it is noise. + +**The GRB555 word costs 0.53 dB** and it costs every row of the table, so no +comparison in this project moves because of it. It is stated because a player's +number should be a player's number. + +**And the CONTROL is the finding under the headline.** A packed container with +one scene palette lands **exactly on the codec's ceiling, 30.79 dB** — as it +must, because at that point the only difference left between them is VQ. So the +whole of the packed branch's picture advantage over the codec's *ceiling*, +2.31 +dB, is **the per-frame palette and nothing else**. Not the packing, not the +literal frames, not 254 colours. One mechanism, and 61.9 named it correctly. + +### 63.4 62.5 is priced, and the answer is that the ORDER does not matter and the MISMATCH does + +62.5 filed palette-first-or-193rd as a free choice whose severity "depends on how +much the palette moves between consecutive frames, which is a property of the +encoder K2 has not been written yet". It is written now. + +| | | +|---|---:| +| palette entries that CHANGE frame to frame | **231.1 of 256 (90%)** | +| palette FIRST — old rows under the new palette | **20.32 dB** (−12.79) | +| palette LAST — new rows under the old palette | **20.33 dB** (−12.78) | + +**The two orders are indistinguishable — 0.01 dB apart — so 62.5's choice is a +wash and can be made on other grounds.** The container makes it a flag +(`--palette-last`, flags bit 1) rather than an assumption, so K3 can run both. + +**What the same measurement found is not a wash.** A per-frame palette is not a +small delta: 90% of the entries move every frame, and a picture under the +neighbouring frame's palette is **12.8 dB worse than the correct pairing**. The +mismatch is a wipe rather than a flash — rows arrive top to bottom, so part of +the screen is always right, and the transfer is 55.2% of a frame slot (61) — +but at 12 fps that is a colour-scrambled region present for roughly half of +every frame slot, forever. + +**And it was LOOKED AT, not only scored.** +`30_packed_container.py --mismatch-png` writes the frame whose mismatch is +closest to the mean — chosen that way so the picture is not an outlier picked to +flatter the number — as correct render | same frame under the next frame's +palette | 24-bit source: + +![The palette mismatch: correct, mismatched, source](img/palette-mismatch.png) + +**It is chroma speckle and a shifted ground, not a scramble.** Two median-cut +palettes of adjacent frames occupy a similar gamut, so nothing goes +psychedelic — the lava turns red where it should be ochre, the dragon's scales +break into noise, and the torch survives. That is milder than 12.8 dB sounds and +worse than it looks in a still, because the still does not show it arriving and +leaving twelve times a second. + +**So B2 stopped being a headroom question and became a picture question, again +and worse.** 61.6 said whether buffer mode blanks decides *which player exists*. +63.4 says that if it does **not** blank, it also decides **which packed +container** exists, because the per-frame palette is what the artefact is made +of. The codec never had this exposure: its palette is scene-constant, so its +tear is old picture against new picture and never old colours against new ones. + +**And the fallback is already in the encoder, which is the useful half.** +`pack.py --scene-palette` emits the control row: **30.79 dB, zero palette churn, +no mismatch to have**, still **+2.07 dB on the shipping codec as the display +renders both**, and with `--no-palette` alongside it — a scene palette is loaded +once at scene setup, which is what the codec has always done — the record loses +its 512 B and the wire is **576.0 KB/s against 582.0**, cheaper on the one +resource the packed branch is short of. The per-frame palette is worth +2.31 dB and it is now a **priced** ++2.31 dB rather than a free one. + +### 63.5 What this does not settle + +- **Nothing about clocks.** 29_packed_player.py owns those, off the measured + blit, and nothing here moves them: 55.2% of a frame at the 9 clk/B + dual-address floor, unchanged. +- **Nothing about the medium.** 582.0 KB/s is geometry. Whether anything + sustains it is **B1**, and this container cannot negotiate — a codec's + bitrate is a lever and a literal frame's is arithmetic. +- **Nothing on a machine.** No packed frame has been put on screen from a + container by a 68000 or by a channel. That is **K3**, and 63.2 is the strongest + statement available without it: the bytes are right, on a second emulator's + own GVRAM model, with the harness computing nothing. diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 21c7b77..d423e46 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -42,6 +42,19 @@ the run bounds the model and not the board, and what a real palette register does with a byte write is UNMEASURED. B4 is the cheapest hardware item in the project and a negative costs 0.28% of a frame. **K2, the packed container, is next.** +Amended end of session 31: **K2 IS DONE, AND IT COST THE BRANCH SOMETHING +(FINDINGS 63).** DLXP1 is a 49,664 B record = 97 sectors exactly, no index, no +decoder, 582.0 KB/s — exactly 61.9's prediction — and px68k's own `gvram.c` +renders the container's bytes index-exact with the harness computing no +interleave. 61.9's picture claim survives the real builder: **34.05 dB against +its 34.08**, and the hardware GRB555 word is charged on top for the first time +in this project (0.53 dB, on every row, so it moves nothing). **But the control +row landed exactly on the codec's ceiling**, so the whole +2.31 dB is the +PER-FRAME PALETTE and nothing else — and 90% of that palette changes every +frame, which makes a mismatched paint **12.8 dB worse** than the correct +pairing. **B2 now decides which packed CONTAINER exists, not only which player** +(63.4). The fallback is a flag: `--scene-palette --no-palette` is 30.79 dB, zero +churn, 576.0 KB/s and still +2.07 dB on the shipping codec. **K3 is next.** **THE COMPLETION TARGET IS M3, THE VERTICAL SLICE** (USER DECISION): one scene tree — a decision point, two outcomes, a death clip — with audio, streaming from @@ -128,6 +141,17 @@ the priority register `0xE82500` at `0x0000` (47.3). > is dark for **30..113%**. Under MAME's reading the cheap architecture is the > dark one. **B2 and B1 are now the same decision from two sides, and B2 is the > five-minute half.** +> +> **Session 31 raised it again, from the other direction (FINDINGS 63.4).** If +> buffer mode does NOT blank, the packed player's per-frame palette is not +> merely visible during the paint — **231 of 256 entries change every frame**, +> and a picture under the neighbouring frame's palette is **12.8 dB worse** than +> the correct pairing, on screen for roughly half of every frame slot at 12 fps. +> So a non-blanking board does not just cost the packed player a blank interval, +> it may cost it the per-frame palette — which is **the whole +2.31 dB** the +> branch has over the codec's ceiling. The fallback is already an encoder flag +> (`pack.py --scene-palette --no-palette`: 30.79 dB, no churn, 576.0 KB/s), so +> what B2 decides is now **which packed container ships**, not whether one can. **B4. Does a real palette register take a BYTE write?** (62.4, new session 30.) `$E82000` is 256 16-bit registers. The decoder-free packed player's per-frame @@ -243,14 +267,25 @@ frame is not tied to a scene palette the codec's codewords index into. It costs over `memory_array`, whose `write16` is a plain `COMBINE_DATA`, so it has no handler to be wrong about and cannot discriminate. And it filed one open design choice, 62.5: palette FIRST or 193rd is visible on screen and is not - decided. -- **K2. A packed container.** Quantise to **254** colours (index 0 is the - transparency key, black at 255 — 47.2), interleave column *i* with *i+128*, - emit a per-frame palette, sector-align the record. Simpler than a coded one: - no VQ, no rate control, no mode map, no `lam`. `encode.py` already aligns - (DLX5) and `prep_frame.py --pack-transparent` already emits the layout. - **Re-derive 61.9's 34.08 dB against `vq.scene_palette` here** — the measured - figure is PIL's MEDIANCUT and is a direction, not the player's number. + decided. **Session 31 PRICED it and it is a wash — 20.32 dB against 20.33 + (63.4) — so it is a container flag (`--palette-last`) and K3 runs both.** +~~**K2. A packed container.**~~ + **DONE, session 31 — FINDINGS 63.** `tools/encoder/dlxp.py` is DLXP1 and + `pack.py` writes it: 254 colours with index 0 held free and black at 255, + column *i* interleaved with *i+128*, a per-frame palette, and a **49,664 B + record that is 97 sectors EXACTLY** — the alignment that cost session 28 a + re-encode is free here because a packed record's length is geometry. **No + index and no length word**, for the same reason: nothing has to be walked. + **582.0 KB/s, which is 61.9's prediction to the tenth.** Encodes in 3.3 s + because there is no k-means in it. + **The re-derivation is done and 61.9 survives it: 34.05 dB against 34.08**, + and the GRB555 word is charged for the first time (63.3) — 0.53 dB, on every + row of the table, so it moves no comparison. **The two reserved entries cost + 0.0003 dB.** + **What it also found** (63.4): the SCENE-palette control lands exactly on the + codec's ceiling, so the whole +2.31 dB is the per-frame palette; 90% of that + palette changes every frame; and a mismatched paint is 12.8 dB worse, for + roughly half of every frame slot, if buffer mode does not blank. - **K3. End to end, off the disc.** Palette, page-1 X-scroll 384, priority `vc1 = 0x0002`, R20 bit 11; one chained DMA a frame. Gated pixel-exact over the same 120-frame window the decoder is gated on. @@ -261,8 +296,10 @@ DMAC-direct packed player has **no ring** — `ring.i`, `xfer.i` and most of simplification that large usually hides something, and 61.7.2 names the specific untested thing: a chained transfer has never run back to back at 12 fps. -**K1 and K2 survive a bad answer to B2. K3 does not.** ~~Do K1 first.~~ **K1 is -done (session 30, FINDINGS 62); K2 is next.** +**K1 and K2 survive a bad answer to B2. K3 does not.** ~~Do K1 first.~~ ~~K1 is +done (session 30, FINDINGS 62); K2 is next.~~ **Both are done. K3 is next — and +63.4 added a second thing for it to run: BOTH palette orders, which is a flag +(`--palette-last`) and not a re-encode.** --- @@ -683,6 +720,7 @@ P2 re-encode bundle DONE (60): DLX5, records ARE sectors ─────── │ K1 palette-register DMA? ─> K2 packed container ─> K3 end to end ──┤ (61.9; K1/K2 survive a bad B2, K3 does not) │ + K1 DONE s30 (62), K2 DONE s31 (63) ── K3 is the open one │ P4a WIRING (the channel behind ring.i's mailbox) <- THE LAST ITEM ─┤ P1 P2 P3 P4b P5 P7, P6 bus cost (52), G1 scene graph (56) ────────┼─> M2 ─> B1 seek+rate (sets HEADROOM, not fit) ─────────────────────────────┘ M3 ─> M4 diff --git a/docs/STATUS.md b/docs/STATUS.md index fc43562..f2179b3 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -1,3 +1,115 @@ +# Status & next-session handoff — end of session 31 (2026-08-25) + +## Session 31: the packed container, and the palette that buys 2.31 dB has a price + +**Green light first and last: `./tools/bench/check.sh` was ALL GREEN before any +of this (`tmp/check_s31_start.log`) and ALL GREEN after** — the same stages, plus +one new one. + +**FINDINGS 63.** Mostly **host arithmetic** over the Blu-ray's own frames; the +one rendering check is **px68k's real `x68k/gvram.c`**, linked headless the way +`tools/bench/c68k` links its CPU core. No MAME run was needed and no real +hardware ran. 47.4 — does buffer mode blank the layer — is still the board +question, and this session made it **bigger**. + +**THE HEADLINE. ROADMAP K2 is done.** `tools/encoder/dlxp.py` is the format, +`pack.py` the encoder, `tools/analysis/30_packed_container.py` the gate and the +re-derivation, `tools/bench/gvpack/verify_dlxp.py` the second-emulator render. + +| | | +|---|---| +| record | **49,664 B = 97 sectors EXACTLY**, 512 B palette + 49,152 B picture | +| index | **none, and none can be needed** — a packed record's length is geometry | +| wire | **582.0 KB/s**, exactly what 61.9 predicted | +| encode | **3.3 s** for 120 frames, against ~55 s for the codec | +| render | **index-exact on px68k, with the harness computing no interleave** | + +**1. THE RE-DERIVATION SESSION 30 ASKED FOR, and it had TWO debts not one** +(63.3). 61.9's 34.08 dB was PIL's free 256-colour MEDIANCUT; the unnamed second +debt was that **every PSNR this project has quoted — 29.19, 31.33, 34.08 — is +RGB888, upstream of the `GGGGGRRRRRBBBBBI` word (23.3)**, and a packed record +carries that word and nothing else. + +| | RGB888 | **GRB555** | +|---|---:|---:| +| CODEC, the gate container (440.4 KB/s) | 29.07 | **28.72** | +| 256c scene palette — the codec's CEILING | 31.32 | **30.79** | +| PACKED, 254c SCENE palette *(control)* | 31.32 | **30.79** | +| **PACKED CONTAINER, 254c PER-FRAME** | **34.05** | **33.10** | + +61.9 survives the real builder: **34.05 against 34.08**. The layout's two +reserved entries cost **+0.0003 dB**. The GRB555 word costs 0.53 dB and costs +every row, so it moves no comparison. + +**2. THE CONTROL IS THE FINDING UNDER THE HEADLINE.** A packed container with a +SCENE palette lands **exactly on the codec's ceiling**, as it must. So the whole ++2.31 dB the packed branch has over that ceiling is **the per-frame palette and +nothing else** — not the packing, not literal frames, not 254 colours. + +**3. 62.5 IS PRICED, AND THE ORDER IS A WASH** (63.4). Palette first 20.32 dB, +palette last 20.33 — 0.01 apart, so the choice can be made on other grounds, and +`dlxp.py` makes it a container flag rather than an assumption. + +**4. AND THE MISMATCH IS NOT A WASH.** **231 of 256 palette entries change every +frame (90%)**, and a picture under the neighbouring frame's palette is **12.8 dB +worse**. It is a wipe, not a flash, and the transfer is 55.2% of a frame slot — +so at 12 fps a colour-scrambled region is on screen for roughly half of every +slot, forever. **B2 stopped being a headroom question and became a picture +question again**: if buffer mode does not blank, it decides not just which +player exists (61.6) but **which packed container** does. The codec never had +this exposure — its palette is scene-constant, so its tear is old picture +against new picture, never old colours against new ones. + +**5. THE FALLBACK IS ALREADY IN THE ENCODER.** `pack.py --scene-palette +--no-palette`: **30.79 dB, zero churn, nothing to mismatch, +2.07 dB on the +shipping codec as the display renders both, and 576.0 KB/s instead of 582.0.** +The per-frame palette is now a **priced** +2.31 dB rather than a free one. + +## HANDOFF — start here + +**THE TREE IS ALL GREEN.** Session 31's work is a commit of its own. + +### The work, in the order it should be done + +**1. K3 — END TO END, OFF THE DISC.** Scene setup — palette, page-1 X-scroll +384, priority `vc1 = 0x0002`, R20 bit 11, the 384 zeroed words a row and the +letterbox rows — then **one chained DMA a frame** out of a DLXP1 record, with +the palette as the 193rd or 1st array entry (63.4 says either). Gate it +pixel-exact over the same 120-frame window the decoder is gated on. The +container is `tmp/packed_singe.dlxp` and `check.sh` rebuilds it every run. + +**2. RUN BOTH PALETTE ORDERS while K3 is being built.** It is a flag +(`--palette-last`), the containers already exist, and 63.4 bounds the cost but +cannot decide it — dB over a whole frame is not what an eye sees in a wipe. + +### What is PARKED, so it is not re-derived + +**E7, E4 and C1** (61.8), and **P4a's wiring** for the video path. Do not delete +any of it — B2 is unanswered and 48.1's prior leans against packing. + +### Risks that are OURS, not hardware + +1. **A chained transfer has never run back to back at 12 fps.** Unchanged since + session 30: run 9 was seven entries, once. A frame is 193 and a second is + twelve frames. +2. ~~34.08 dB is PIL's MEDIANCUT~~ **CLOSED, 63.3: 34.05 dB against this + project's own builder, and the hardware word is charged on top.** +3. **The packed player deletes `ring.i`, `xfer.i` and most of `stream.s` from + the video path.** A simplification that large usually hides something. +4. **B2 sits over all of it, and 63.4 raised what it decides.** B4 still sits + over the palette entry specifically, with a small blast radius. + +### Reproducing this session + + ./tools/bench/check.sh # ALL GREEN + python3 tools/encoder/pack.py tmp/fr_singe tmp/packed_singe.dlxp --nframes 120 + python3 tools/analysis/30_packed_container.py tmp/packed_singe.dlxp + python3 tools/bench/gvpack/verify_dlxp.py tmp/packed_singe.dlxp 0 --controls + +**WHAT IS NEXT.** K3: end to end, off the disc. + +--- + # Status & next-session handoff — end of session 30 (2026-08-25) ## Session 30: one channel start paints a whole frame, and the palette has no handler to be wrong about diff --git a/docs/img/palette-mismatch.png b/docs/img/palette-mismatch.png new file mode 100644 index 0000000000000000000000000000000000000000..2ccb780ebf114f45a002f54eb19080fff89499de GIT binary patch literal 229786 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�mplD+OK%TMf^&s#sMx(1y37ZccLHsGkOc^ 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

nte((Y*8PU+OJU?B6@w70m>eNpP_dkg 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%0A4wCUE5rTij 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 literal 0 HcmV?d00001 diff --git a/tools/analysis/30_packed_container.py b/tools/analysis/30_packed_container.py new file mode 100644 index 0000000..58a7aaa --- /dev/null +++ b/tools/analysis/30_packed_container.py @@ -0,0 +1,282 @@ +#!/usr/bin/env python3 +"""The PACKED container: does it hold, and what is the picture actually worth? + + python3 tools/analysis/30_packed_container.py [packed.dlxp] + [--frames tmp/fr_singe] [--codec tmp/rc_fr_singe_scsi_span.dlx] + +ROADMAP K2. Two jobs, and they are different kinds of claim. + +1. THE FORMAT HOLDS. A packed record is written into the palette registers and + GVRAM by a DMA channel with no bounds test anywhere -- the channel has no + opinion about what it is copying (FINDINGS 62) -- so "the geometry is right" + is not a tidiness check, it is the whole of the container's correctness. + Round-trip, sector geometry, and the two reserved indices are gated here. + +2. THE PICTURE IS RE-DERIVED, and this is the number session 30 asked for. + FINDINGS 61.9 measured the packed player at 34.08 dB against the codec's + 29.19 and filed TWO caveats: the quantiser was PIL's free 256-colour + MEDIANCUT rather than this project's builder, and the figure was quoted in + the RGB888 palette domain. Both are paid here: + + * `vq.frame_palette` is what ships it -- 254 colours, because the packed + layout spends index 0 on the transparency key and 255 on black (47.2). + * the GRB555+I WORD is charged. A palette entry in a packed record is + already a hardware word; the display renders 5 bits a channel with one + shared LSB (23.3). Every PSNR in this project's encoder is measured + upstream of that, so the codec is charged it here too and the comparison + stays like for like. + + And the scene-palette CONTROL is built and scored, because "per-frame + palettes became legal" is the mechanism 61.9 credits and an unrun control is + an assumption. The codec cannot take this row: every codeword it emits is an + index INTO `vq.scene_palette`, so 31.33 dB is its ceiling at any bitrate. + +WHAT THIS DOES NOT DO. It does not put a packed frame on a machine -- that is +K3, and the layout itself was already rendered pixel-exactly on both emulators +in 47.2. It does not price clocks: 29_packed_player.py owns that, off the +MEASURED blit, and nothing here moves it. And it settles nothing about the +medium: 582.0 KB/s is geometry, and whether anything sustains it is B1. +""" +import argparse, glob, os, sys +sys.path.insert(0, "tools/encoder") +sys.path.insert(0, "tools/bench") +import numpy as np +from PIL import Image +import vq as VQ +import dlxp as P +from dlx import DLX +from dlxload import pack_palette + +ap = argparse.ArgumentParser() +ap.add_argument("packed", nargs="?", default="tmp/packed_singe.dlxp") +ap.add_argument("--frames", default="tmp/fr_singe") +ap.add_argument("--mismatch-png", default=None, + help="write the 62.5 mismatch as a picture: correct render | the " + "same frame under the NEXT frame's palette | the 24-bit " + "source. A dB is not a look, and this claim is about a look.") +ap.add_argument("--codec", default="tmp/rc_fr_singe_scsi_span.dlx", + help="the shipping container this replaces. Its PSNR is COMPUTED " + "from its own bytes, not transcribed from docs (60.8).") +a = ap.parse_args() + +fail = [] +d = P.DLXP(a.packed) # every format invariant is checked in here +print(f"{a.packed}: DLXP{d.version} {d.W}x{d.H} {d.fps}fps {d.nframes} frames") +print() + +# --- 1. the format ----------------------------------------------------------- +print("THE FORMAT, and why each line is a gate and not a courtesy check:") +print(f" record {d.rec_bytes:,} B = {d.rec_bytes // P.SECTOR} sectors exactly, " + f"palette {d.pal_bytes} B " + f"{'LAST' if d.palette_last else 'first'}, picture {d.pic_bytes:,} B") +print(f" 1.0 B/pixel: {d.pic_bytes} bytes carry {d.W * d.H} pixels " + f"(the unpacked path needs {2 * d.W * d.H:,})") + +zero = black = 0 +for f in range(d.nframes): + idx = d.indices(f) + # The channel copies bytes; a container whose interleave is a byte out does + # not fail, it paints. So the round trip is the assertion that the bytes in + # the record ARE the picture, in the order GVRAM wants them. + if P.pack_picture(idx).tobytes() != d._split(f)[1]: + fail.append(f"frame {f}: the record does not round-trip through the " + f"interleave -- the container is not what it says it is") + break + zero += int((idx == 0).sum()) + black += int((idx == 255).sum()) +if zero: + fail.append(f"index 0 appears in the picture {zero:,} times -- it is the " + f"TRANSPARENCY KEY of the top page and must stay unused (47.2)") +print(f" round-trip: {d.nframes} records unpack and re-pack byte-identical") +print(f" index 0 (transparency key) used {zero} times; " + f"index 255 (black) {black:,} times in the picture") + +kbps = d.kbps() +geom = d.rec_bytes * d.fps / 1024 +if abs(kbps - geom) > 1e-6: + fail.append(f"wire {kbps} != geometry {geom}") +print(f" wire {kbps:.1f} KB/s = {d.rec_bytes:,} B x {d.fps} fps. FIXED. A codec's " + f"bitrate is a lever and a literal frame's is geometry (61.6)") +print() + +# --- 2. the picture ---------------------------------------------------------- +files = sorted(glob.glob(f"{a.frames}/f*.png"))[:d.nframes] +if len(files) < d.nframes: + sys.exit(f"{a.frames}: {len(files)} frames, container has {d.nframes}") +src = [np.asarray(Image.open(f).convert("RGB")) for f in files] + + +def rendered(pal): + """RGB888 as the DISPLAY produces it, from the same maths the loader uses.""" + return pack_palette(np.asarray(pal, np.uint8))[2] + + +def score(name, pal_rgb, idx_frames, note=""): + """Two columns: the palette domain every encoder PSNR in this tree is + quoted in, and the hardware word the display actually renders.""" + ren = rendered(pal_rgb) + p_pal = np.mean([VQ.psnr(s, np.asarray(pal_rgb)[i]) + for s, i in zip(src, idx_frames)]) + p_hw = np.mean([VQ.psnr(s, ren[i]) for s, i in zip(src, idx_frames)]) + print(f" {name:<44s} {p_pal:6.2f} {p_hw:6.2f} {note}") + return p_pal, p_hw + + +print("PSNR vs the 24-bit source, mean over frames:") +print(f" {'':<44s} {'RGB888':>6} {'GRB555':>6}") + +codec_pal = codec_hw = None +if os.path.exists(a.codec): + c = DLX(a.codec) + if c.nframes < d.nframes: + print(f" (the codec container has {c.nframes} frames and this has " + f"{d.nframes} -- its row is skipped rather than compared over a " + f"different window)") + else: + # Its rate is printed with it because this is the GATE container -- the + # heaviest stream the encoder emits, `--kbps 280 --span-kbps 488 + # --spans all` (check.sh) -- and NOT the 496.7 KB/s / 29.19 dB "current + # encode" of the README. Two containers, two numbers; a row that named + # neither would invite the difference to be read as a drift. + ckbps = sum(c.record_lengths()) * c.fps / c.nframes / 1024 + codec_pal, codec_hw = score("CODEC, the GATE container", c.pal, + c.decode_all()[:d.nframes], + f"{ckbps:.1f} KB/s, " + f"{os.path.basename(a.codec)}") +else: + print(f" (no codec container at {a.codec} -- its row is skipped)") + +# The codec's CEILING: 256 colours, one palette for the scene, no VQ loss at +# all. Not a rival, a bound -- no bitrate takes the codec past this row. +ref, spal = VQ.scene_palette(src, reserve_black=True) +sidx = VQ.palettise(src, ref) +ceil_pal, ceil_hw = score("256c SCENE palette -- the CODEC'S CEILING", + spal, sidx, "no bitrate crosses this") + +# The control for the mechanism 61.9 credits: same LAYOUT and the same 254 +# picture colours, one palette for the scene instead of one per frame. It is +# built to 255 with black reserved and then black is MOVED from 0 to 255, which +# is the packed layout's convention (47.2) rather than the codec's -- so the +# only variable between this row and the container's is per-frame vs scene-wide. +cref, c255 = VQ.scene_palette(src, colors=255, reserve_black=True) +cpal = np.vstack([np.zeros((1, 3), np.uint8), c255[1:], + np.zeros((1, 3), np.uint8)]) +cidx = [np.where(i == 0, np.uint8(255), i) + for i in VQ.palettise(src, cref)] +ctl_pal, ctl_hw = score("PACKED, 254c SCENE palette [the CONTROL]", cpal, cidx) + +# And the container itself. The right-hand column is read out of the CONTAINER'S +# OWN BYTES -- `DLXP.render` unpacks the GRB555 words the record carries -- and +# the left-hand one is recomputed from the encoder, because a packed record has +# no RGB888 palette in it to score. The two are tied together by a gate rather +# than by trust: the palettes the encoder builds here must reproduce the +# container's indices exactly, or the left column is describing a different file. +pk_idx, pk_pal_rgb, mismatch, palbad = [], [], 0, 0 +for n, s in enumerate(src): + pal, idx = VQ.frame_palette(s) + if not np.array_equal(idx, d.indices(n)): + mismatch += 1 + # And the WORD. The encoder packed GRB555+I with `dlxload.pack_palette` and + # `DLXP.palette_rgb` unpacks it: two separate pieces of maths over the same + # 23.3 rule, and a container is the only place they meet. Required to agree, + # not assumed to -- a wrong shared LSB is a 1.96 dB bug that still renders. + if not np.array_equal(rendered(pal), d.palette_rgb(n)): + palbad += 1 + pk_idx.append(idx) + pk_pal_rgb.append(pal) +if palbad: + fail.append(f"{palbad} of {d.nframes} records carry palette words that do " + f"not unpack to the RGB the encoder packed -- pack_palette and " + f"DLXP.palette_rgb disagree about GRB555+I") +if mismatch: + fail.append(f"{mismatch} of {d.nframes} frames re-quantise to different " + f"indices than the container holds -- the RGB888 column would " + f"be scoring a file that is not this one") +pk_pal = np.mean([VQ.psnr(s, p[i]) for s, p, i in zip(src, pk_pal_rgb, pk_idx)]) +pk_hw = np.mean([VQ.psnr(s, d.render(f)) for f, s in enumerate(src)]) +print(f" {'PACKED CONTAINER, 254c PER-FRAME':<44s} {pk_pal:6.2f} {pk_hw:6.2f} " + f"GRB555 read out of {os.path.basename(a.packed)}") +print() +print(" The right-hand column is the PLAYER'S number. Every PSNR this project") +print(" has quoted -- 29.19, 31.33, 34.08 -- lives in the left one, upstream of") +print(" the 5-bit hardware word (23.3), and 61.9's 34.08 is directly comparable") +print(" to the packed row's left-hand entry and to nothing else.") +print() + +# --- 3. what it means -------------------------------------------------------- +if codec_hw is not None: + print(f" packed vs the codec gate container, as the DISPLAY renders both: " + f"{pk_hw - codec_hw:+.2f} dB") +print(f" packed vs the codec's CEILING: " + f"{pk_hw - ceil_hw:+.2f} dB") +print(f" what the PER-FRAME palette is worth (vs the control): " + f"{pk_hw - ctl_hw:+.2f} dB") +print(f" what the GRB555 word costs the ceiling row: " + f"{ceil_hw - ceil_pal:+.2f} dB") +# 60.3 measured ONE reserved entry at 0.04 dB; the packed layout spends two. +# Scored here at scene scale, where the control makes it a clean subtraction. +print(f" what the packed layout's TWO reserved entries cost: " + f"{ctl_pal - ceil_pal:+.4f} dB (256c -> 254c, scene palette, RGB888)") +print() + +# The three claims 61.9 makes, restated as gates. A tree where any of these +# flipped has a different answer to ROADMAP K and should say so out loud. +if codec_hw is not None and pk_hw <= codec_hw: + fail.append(f"the packed container is {pk_hw:.2f} dB and the codec it " + f"replaces is {codec_hw:.2f} -- 61.9's headline is inverted") +if pk_hw <= ceil_hw: + fail.append(f"the packed container is {pk_hw:.2f} dB and the codec's own " + f"CEILING is {ceil_hw:.2f} -- the per-frame palette bought " + f"nothing, and 61.9's reason for building this branch is gone") +if pk_hw <= ctl_hw: + fail.append(f"per-frame {pk_hw:.2f} dB is not better than the SCENE-palette " + f"control {ctl_hw:.2f} -- the mechanism 61.9 credits is absent") + +# --- 4. FINDINGS 62.5, which needed this encoder to exist --------------------- +# 62.5 filed the chain's order -- palette first or 193rd -- as a free choice with +# a visible consequence, and said the severity "depends on how much the palette +# moves between consecutive frames, which is a property of the encoder K2 has +# not been written yet". It is written now, so the number exists. +# +# The mismatch is a WIPE, not a flash: rows arrive top to bottom, so at any +# instant part of the screen is right. What is bounded here is the WORST +# instant of each order -- the whole screen wrong -- which is the start of the +# transfer for palette-first and the end of it for palette-last. The mean over +# the transfer is about half of each, because the wipe is linear in rows. +print("FINDINGS 62.5 PRICED -- palette FIRST vs LAST, at the worst instant of each:") +churn = np.mean([int((d.palette_words(n) != d.palette_words(n - 1)).sum()) + for n in range(1, d.nframes)]) +first = np.mean([VQ.psnr(src[n - 1], d.palette_rgb(n)[d.indices(n - 1)]) + for n in range(1, d.nframes)]) +last = np.mean([VQ.psnr(src[n], d.palette_rgb(n - 1)[d.indices(n)]) + for n in range(1, d.nframes)]) +correct = np.mean([VQ.psnr(src[n], d.render(n)) for n in range(1, d.nframes)]) +print(f" palette entries that CHANGE frame to frame: {churn:.1f} of 256 " + f"({100 * churn / 256:.0f}%) -- a per-frame palette is not a small delta") +print(f" palette FIRST, old rows under the new palette: {first:6.2f} dB " + f"({first - correct:+.2f} against the correct pairing)") +print(f" palette LAST, new rows under the old palette: {last:6.2f} dB " + f"({last - correct:+.2f})") +print(f" the container is currently palette " + f"{'LAST' if d.palette_last else 'FIRST'} (dlxp.py, --palette-last)") +if a.mismatch_png: + # The frame whose mismatch is CLOSEST TO THE MEAN, so the picture is not an + # outlier picked to make the point look worse than the number. + mis = np.array([VQ.psnr(src[n - 1], d.palette_rgb(n)[d.indices(n - 1)]) + for n in range(1, d.nframes)]) + n = int(np.argmin(np.abs(mis - mis.mean()))) + 1 + z = lambda x: np.repeat(np.repeat(x, 2, 0), 2, 1) + gap = np.full((d.H * 2, 6, 3), 30, np.uint8) + Image.fromarray(np.concatenate( + [z(d.render(n - 1)), gap, z(d.palette_rgb(n)[d.indices(n - 1)]), gap, + z(src[n - 1])], axis=1)).save(a.mismatch_png) + print(f" wrote {a.mismatch_png}: frame {n-1} correct | frame {n-1} under " + f"frame {n}'s palette ({mis[n-1]:.2f} dB) | the 24-bit source") +print(" Both are one paint, and both are MOOT if buffer mode blanks the layer") +print(" (47.4/B2). This bounds the cost of being wrong; it does not decide it,") +print(" because dB over a whole frame is not what an eye sees in a wipe.") +print() + +for x in fail: + print("FAIL " + x) +sys.exit(1 if fail else 0) diff --git a/tools/bench/check.sh b/tools/bench/check.sh index da525c7..9d86c3a 100755 --- a/tools/bench/check.sh +++ b/tools/bench/check.sh @@ -662,4 +662,45 @@ python3 tools/analysis/29_packed_player.py "$DLX" > tmp/packed_player.log 2>&1 \ grep -aE "SKIP block PAIRS|free / DMAC->GVRAM / PACKED|^ CODEC, gate" \ tmp/packed_player.log +echo "--- session 31: the PACKED container, and the picture re-derived (FINDINGS 63) ---" +# ROADMAP K2. The container is REBUILT every run rather than reused when +# present, the way the codec's gate container is: a packed encode is 3 seconds +# because there is no k-means in it, so there is no reason to let a stale file +# stand between the encoder and the gate. +python3 tools/encoder/pack.py tmp/fr_singe tmp/packed_singe.dlxp \ + --nframes "$NF" > tmp/pack_encode.log 2>&1 \ + || { cat tmp/pack_encode.log; exit 1; } +grep -aE "^ (record|wire)" tmp/pack_encode.log +# WHAT IS GATED. Four format invariants that a DMA channel cannot check for +# itself -- it copies bytes and has no opinion about them (FINDINGS 62) -- and +# the three quality claims FINDINGS 61.9 rests the whole packed branch on: +# round-trip, sector geometry, index 0 unused, palette words agree +# packed > the shipping codec / > the codec's CEILING / > a SCENE-palette control +# A tree where any of the last three flipped has a different answer to ROADMAP K +# and should say so out loud rather than let the branch keep building. +python3 tools/analysis/30_packed_container.py tmp/packed_singe.dlxp \ + --codec "$DLX" > tmp/packed_container.log 2>&1 \ + || { cat tmp/packed_container.log; exit 1; } +sed -n '/^PSNR/,$p' tmp/packed_container.log | grep -aE "RGB888|CODEC|CEILING|CONTROL|PER-FRAME|packed vs|worth|costs" +# And the container's OWN BYTES through px68k's real gvram.c, with the harness +# computing no interleave -- the only test that can catch an encoder whose byte +# order is wrong, because the container round-trips against its own inverse +# either way. Same skip-not-fail rule as the C68K stage: px68k is not in here. +if [ -f "$PX68K/x68k/gvram.c" ]; then + make -s -C tools/bench/gvpack PX68K="$PX68K" + # Frame 0 carries the two negative controls; the other two are there because + # one frame rendering does not say the container's 120th record is placed + # right, and record placement is arithmetic this format has no index to check. + python3 tools/bench/gvpack/verify_dlxp.py tmp/packed_singe.dlxp 0 --controls || exit 1 + for f in $((NF / 2)) $((NF - 1)); do + # NOT piped into head: `set -e` reads a pipeline's status from its LAST + # command, so a piped verifier that failed would be reported by head's zero. + python3 tools/bench/gvpack/verify_dlxp.py tmp/packed_singe.dlxp "$f" \ + > "tmp/dlxp_f$f.log" 2>&1 || { cat "tmp/dlxp_f$f.log"; exit 1; } + head -1 "tmp/dlxp_f$f.log" + done +else + echo " SKIPPED: no px68k at $PX68K -- the container's bytes were not rendered" +fi + echo "ALL GREEN" diff --git a/tools/bench/dlxload.py b/tools/bench/dlxload.py index 182af83..5f16c09 100644 --- a/tools/bench/dlxload.py +++ b/tools/bench/dlxload.py @@ -36,11 +36,18 @@ def pack_palette(d): which is the point: the verifier and the loader must agree or a colour bug reads as a decoder bug. - Returns (palette bytes 256x2 big-endian, index of the darkest entry). The - encoder does not yet reserve a black entry (docs/STATUS.md, encoder gaps), - so the letterbox gets the closest thing to black the palette has. + Returns (palette bytes 256x2 big-endian, index of the darkest entry, and the + RGB888 the hardware actually RENDERS from those words). The encoder does not + reserve a black entry in the CODEC container (docs/STATUS.md, encoder gaps), + so the letterbox gets the closest thing to black the palette has; the PACKED + container does reserve one (tools/encoder/dlxp.py, index 255). + + `d` is a DLX container OR a bare (256,3) uint8 palette. The packed path has + no codebooks and so no DLX object to carry a palette on, and this had to stay + the ONE copy of the GRB555+I maths -- the verifier, the loader and now the + packed encoder all have to agree or a colour bug reads as a decoder bug. """ - pal = d.pal.astype(int) + pal = (d if isinstance(d, np.ndarray) else d.pal).astype(int) p6 = lambda v: ((v << 2) | (v >> 4)) & 0xFF f = pal >> 3 render = lambda I: p6((f << 1) | I[:, None]) diff --git a/tools/bench/gvpack/gvpack b/tools/bench/gvpack/gvpack index 7427e1294f4954b6775bc531a35ed8793833ad28..7245595a66c4bc870f12a0e7c2a09e5fc9c1cfae 100755 GIT binary patch delta 4532 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 delta 4363 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 yoff + ih) + w = (WORD)((BLACK << 8) | BLACK); + else { + const BYTE *row = pix + (y - yoff) * iw; + w = (WORD)((row[i * 2] << 8) | row[i * 2 + 1]); + } + } else { + w = (WORD)((PIX(y, i + 128) << 8) | PIX(y, i)); + } + wr16(base + i * 2, w); + } } if (!keepbuf) set_r20(R20_DISPLAY); /* back to display */ } else { diff --git a/tools/bench/gvpack/verify_dlxp.py b/tools/bench/gvpack/verify_dlxp.py new file mode 100644 index 0000000..4fbca9d --- /dev/null +++ b/tools/bench/gvpack/verify_dlxp.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +"""The PACKED CONTAINER's own bytes, through px68k's real GVRAM code. + + python3 tools/bench/gvpack/verify_dlxp.py [packed.dlxp] [frame] [--controls] + +`verify_gvpack.py` checks the LAYOUT: it hands the harness a picture and lets +the harness compute the interleave, so what it proves is that FINDINGS 47.2's +scheme renders. This checks the CONTAINER: it writes a DLXP1 record's bytes +into GVRAM VERBATIM -- no interleave computed anywhere in the harness -- and +asks px68k what they display as. That is the only way to test a format whose +whole design is that nothing parses it (dlxp.py): if the encoder's byte order +were wrong, every check upstream of the display would still pass, because the +container round-trips against its own inverse. + +It is the same second-emulator argument tools/bench/c68k makes for cycles: the +address decode, the R20 bit-11 write path, the page-byte selection, the scroll +wrap and the index-0 transparency test are px68k's own `x68k/gvram.c`. + +Two negative controls, because a test that cannot fail proves nothing, and both +are mechanisms this container depends on rather than decoration: + --nobuffer R20 bit 11 CLEAR -- the high byte of every word is masked away, + so page 1 (columns 128..255) never gets written + --noscroll page 1 unscrolled -- its storage sits under the wrong columns +""" +import os, struct, subprocess, sys +sys.path.insert(0, "tools/encoder") +import numpy as np +from dlxp import DLXP + +args = [x for x in sys.argv[1:] if not x.startswith("--")] +path = args[0] if args else "tmp/packed_singe.dlxp" +frame = int(args[1]) if len(args) > 1 else 0 +controls = "--controls" in sys.argv + +d = DLXP(path) +_, pic = d._split(frame) +blob = b"DLXQ" + struct.pack(">HH", d.W, d.H) + b"\0" * 768 + pic +open("tmp/dlxp_gvpack.bin", "wb").write(blob) + +BIN = "tools/bench/gvpack/gvpack" +if not os.path.exists(BIN): + sys.exit(f"{BIN} not built -- make -C tools/bench/gvpack PX68K=...") + + +def run(extra=None): + cmd = [BIN, "tmp/dlxp_gvpack.bin", "tmp/dlxp_gvpack.raw", "--packed", "0x02"] + if extra: + cmd.append(extra) + subprocess.run(cmd, check=True, stderr=subprocess.DEVNULL) + g = np.frombuffer(open("tmp/dlxp_gvpack.raw", "rb").read(), np.uint8) + return g.reshape(256, 256) + + +want = d.indices(frame) +yoff = (256 - d.H) // 2 +g = run() +act = g[yoff:yoff + d.H] + +fail = [] +if not np.array_equal(act, want): + bad = act != want + fail.append(f"{bad.sum()} px differ (left half {bad[:, :128].sum()}, " + f"right half {bad[:, 128:].sum()})") +bars = np.concatenate([g[:yoff], g[yoff + d.H:]]) +if bars.size and (bars != 255).any(): + fail.append(f"letterbox is not index 255: {(bars != 255).sum()} px") +if (act == 0).any(): + fail.append(f"index 0 reached the screen: {(act == 0).sum()} px") + +if controls and not fail: + for flag, why in (("--nobuffer", "R20 bit 11 clear"), + ("--noscroll", "page 1 unscrolled")): + c = run(flag)[yoff:yoff + d.H] + n = int((c != want).sum()) + print(f" control {flag:<11s} ({why}): {n:,} px differ" + + ("" if n else " <-- IT DID NOT FAIL")) + if not n: + fail.append(f"control {flag} passed -- the test cannot fail on it") + +for x in fail: + print("FAIL " + x) +if fail: + sys.exit(1) +print(f"OK {os.path.basename(path)} frame {frame}: px68k's own gvram.c renders " + f"the container's {d.pic_bytes:,} bytes index-exact over {d.W}x{d.H},") +print(f" letterbox on the reserved black, and the transparency key never " + f"reaches the screen. The harness computed no interleave.") diff --git a/tools/encoder/dlxp.py b/tools/encoder/dlxp.py new file mode 100644 index 0000000..6ef2bc6 --- /dev/null +++ b/tools/encoder/dlxp.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +"""DLXP1 -- the PACKED container, and the one place its layout rule is written. + + from dlxp import DLXP, pack_picture, unpack_picture, write + +THIS CONTAINER HAS NO DECODER. That is the point of it (FINDINGS 61): a record +is the bytes a DMA channel puts straight into the palette registers and GVRAM, +so the "reference decoder" here is not a decoder at all -- it is an assertion +about where each byte lands. `dlx.py` exists because a 68000 has to PARSE the +codec's container and can get it wrong; this file exists because a DMA channel +must NOT have to parse anything, and the format is what makes that true. + +The layout, all of it fixed, all of it verified as a picture in FINDINGS 47.2: + + * 256-colour GVRAM normally throws away the high byte of every word a CPU + writes, so a picture byte costs two disc bytes. CRTC R20 bit 11 turns the + masking off (46.5/47.1), and with the two 256-colour pages scrolled apart by + 384 one word carries TWO pixels: word `i` of a row is + (pix[y][i+128] << 8) | pix[y][i] + -- page 1 (X-scrolled 384, transparent top) shows columns 128..255, page 0 + (unscrolled, opaque bottom) shows columns 0..127. + * so a row is 128 words = 256 BYTES for 256 pixels, and big-endian storage + makes the byte order `pix[128], pix[0], pix[129], pix[1], ...`. That byte + order is not a serialisation choice: it is what the 68000's bus puts on the + high half of the word, and the channel copies bytes. + * 192 rows -> 49,152 B of picture, 1.0 B/pixel against the unpacked 2.0. + * index 0 is the TRANSPARENCY KEY and never appears; black is 255, which is + what the letterbox rows display (`vq.frame_palette`). + * words 128..511 of each row, and the letterbox rows themselves, are STATIC + SETUP -- written once at scene setup, never per frame -- so they are not in + the container. FINDINGS 47.2 lists them; keeping them out is what makes the + per-frame payload exactly the picture. + * the GVRAM line stride is 1,024 B and a row is 256 B, so the container's rows + are CONTIGUOUS and the 1,024 B step is the channel's, walked by array + chaining from one start (FINDINGS 62). A container that carried the stride + would be 4x the size and would say nothing extra. + + header, 32 bytes, big-endian, then zero pad to the first sector: + 0 'DLXP' + 4 u16 version (1) + 6 u16 flags bit 0: a per-frame palette is present + bit 1: the palette is at the END of the record + 8 u16 width, u16 height + 12 u16 fps, u16 nframes + 16 u32 record bytes fixed, and a whole number of 512 B sectors + 20 u32 palette bytes 512 (256 GRB555+I words), or 0 + 24 u32 picture bytes 49,152 + 28 u32 frames offset 512 B, i.e. sector 1 + + then nframes FIXED-SIZE records, each 49,664 B = 97 sectors EXACTLY. + +THERE IS NO RECORD INDEX AND NO LENGTH WORD, and that is the difference DLX4's +index was invented for (49.3): a codec record's length is content-dependent, so +a producer cannot know where record i+1 starts without being told. A packed +record's length is GEOMETRY -- 192 rows of 256 B plus a palette -- so record `i` +is at `off_frm + i * rec_bytes` and a seek is arithmetic. Nothing in this +format has to be walked, which is also why the packed player has no ring +(ROADMAP K3): there is no variable-length thing to keep contiguous. + +THE PALETTE ORDER IS A DECISION, NOT AN ACCIDENT (FINDINGS 62.5). Palette first +or 193rd is visible on screen for one paint -- old rows under the new palette, or +new rows under the old one -- and it is moot if buffer mode blanks the layer +(47.4/B2). It is a CONTAINER property here, chosen at encode time by +`--palette-last` and recorded in flags bit 1, so K3 can measure both without a +re-encode being an argument about which one the format assumed. +""" +import struct +import numpy as np + +MAGIC = b"DLXP" +VERSION = 1 +SECTOR = 512 # same rule and the same reason as dlx.SECTOR +PAL_BYTES = 512 # 256 entries, one GRB555+I word each +HDR_BYTES = 32 +FLAG_PALETTE = 1 << 0 +FLAG_PALETTE_LAST = 1 << 1 + + +def pack_picture(idx): + """(H,W) palette indices -> the bytes GVRAM wants, in GVRAM order. + + The ONE place the interleave rule is applied, for the same reason + `dlx.record_lengths` is the one place the alignment rule is: every caller + that carries its own copy of a layout rule is a place the layout can drift. + """ + H, W = idx.shape + if W % 2: + raise ValueError(f"packed layout needs an even width, got {W}") + half = W // 2 + left, right = idx[:, :half], idx[:, half:] + out = np.empty((H, half, 2), np.uint8) + out[:, :, 0] = right # high byte of the word -> page 1 -> col i+128 + out[:, :, 1] = left # low byte -> page 0 -> col i + return out.reshape(H, half * 2) + + +def unpack_picture(buf, W, H): + """The inverse, and the assertion that `pack_picture` is reversible.""" + b = np.frombuffer(buf, np.uint8, W * H).reshape(H, W // 2, 2) + idx = np.empty((H, W), np.uint8) + idx[:, W // 2:] = b[:, :, 0] + idx[:, :W // 2] = b[:, :, 1] + return idx + + +def record_bytes(W, H, palette=True): + n = W * H + (PAL_BYTES if palette else 0) + if n % SECTOR: + raise ValueError(f"a {W}x{H} packed record is {n} B, which is not a " + f"whole number of {SECTOR} B sectors") + return n + + +def write(path, W, H, fps, frames, palette_last=False): + """`frames` is a sequence of (palette_words_bytes | None, picture_bytes).""" + frames = list(frames) + pal_b = PAL_BYTES if frames and frames[0][0] is not None else 0 + pic_b = W * H + rec_b = record_bytes(W, H, palette=bool(pal_b)) + flags = ((FLAG_PALETTE if pal_b else 0) + | (FLAG_PALETTE_LAST if palette_last and pal_b else 0)) + hdr = (MAGIC + struct.pack(">HHHHHH", VERSION, flags, W, H, fps, len(frames)) + + struct.pack(">III", rec_b, pal_b, pic_b) + + struct.pack(">I", SECTOR)) + assert len(hdr) == HDR_BYTES, len(hdr) + with open(path, "wb") as fh: + fh.write(hdr + b"\0" * (SECTOR - HDR_BYTES)) + for i, (pw, pic) in enumerate(frames): + if len(pic) != pic_b or (pal_b and len(pw) != pal_b): + raise ValueError(f"frame {i}: record parts are the wrong size") + rec = pic if not pal_b else (pic + pw if palette_last else pw + pic) + fh.write(rec) + return rec_b + + +class DLXP: + """Reader, and every invariant the format claims, CHECKED rather than read. + + The checks are not defensive coding. A packed record is written into GVRAM + and the palette registers with no bounds test anywhere -- the channel has no + opinion about what it is copying -- so a container whose geometry is a byte + wrong does not fail, it paints. + """ + + def __init__(self, path): + b = self.raw = open(path, "rb").read() + if b[:4] != MAGIC: + raise ValueError(f"{path}: not a DLXP container") + (self.version, self.flags, self.W, self.H, self.fps, + self.nframes) = struct.unpack(">HHHHHH", b[4:16]) + (self.rec_bytes, self.pal_bytes, + self.pic_bytes, self.off_frm) = struct.unpack(">IIII", b[16:32]) + if self.version != VERSION: + raise ValueError(f"{path}: DLXP version {self.version}") + self.has_palette = bool(self.flags & FLAG_PALETTE) + self.palette_last = bool(self.flags & FLAG_PALETTE_LAST) + if self.pic_bytes != self.W * self.H: + raise ValueError(f"{path}: picture is {self.pic_bytes} B for " + f"{self.W}x{self.H} -- the packed layout is 1.0 B/px") + if self.pal_bytes != (PAL_BYTES if self.has_palette else 0): + raise ValueError(f"{path}: palette section is {self.pal_bytes} B") + if self.rec_bytes != self.pal_bytes + self.pic_bytes: + raise ValueError(f"{path}: record is {self.rec_bytes} B, parts are " + f"{self.pal_bytes} + {self.pic_bytes}") + # The whole reason for DLX5 (58.3/59.4), and here it is free rather than + # a re-encode: the record is a fixed multiple of a sector by geometry. + if self.off_frm % SECTOR or self.rec_bytes % SECTOR: + raise ValueError(f"{path}: not sector-aligned -- stream at " + f"{self.off_frm}, record {self.rec_bytes}") + want = self.off_frm + self.nframes * self.rec_bytes + if len(b) != want: + raise ValueError(f"{path}: {len(b)} bytes, geometry says {want}") + + def record(self, i): + o = self.off_frm + i * self.rec_bytes + return self.raw[o:o + self.rec_bytes] + + def _split(self, i): + r = self.record(i) + if not self.has_palette: + return None, r + if self.palette_last: + return r[self.pic_bytes:], r[:self.pic_bytes] + return r[:self.pal_bytes], r[self.pal_bytes:] + + def palette_words(self, i): + pw, _ = self._split(i) + if pw is None: + raise ValueError("this container carries no palette -- it was made " + "with --no-palette, and the palette a player would " + "display is not in the file to be read back") + return np.frombuffer(pw, ">u2").astype(np.uint16) + + def indices(self, i): + _, pic = self._split(i) + return unpack_picture(pic, self.W, self.H) + + def palette_rgb(self, i): + """(256,3) uint8 -- what the DISPLAY produces, not what the encoder meant. + + The palette in a record is already a GRB555+I word, so this is where the + 5-bit hardware quantisation gets charged. Everything upstream of the + container is in RGB888 and 61.9's +4.89 dB was quoted there; a player's + number has to come from here. Same maths as `dlxload.pack_palette` and + `tools/bench/verify_frame256.py` -- the shared LSB `I` is a bit in the + word, so unpacking it needs no choice made. + """ + w = self.palette_words(i).astype(int) + f = np.stack([(w >> 6) & 31, (w >> 11) & 31, (w >> 1) & 31], 1) # R,G,B + p6 = lambda v: ((v << 2) | (v >> 4)) & 0xFF + return p6((f << 1) | (w & 1)[:, None]).astype(np.uint8) + + def render(self, i): + """(H,W,3) uint8 -- the frame as the display produces it.""" + return self.palette_rgb(i)[self.indices(i)] + + def kbps(self): + return self.nframes * self.rec_bytes / (self.nframes / self.fps) / 1024 diff --git a/tools/encoder/pack.py b/tools/encoder/pack.py new file mode 100644 index 0000000..59d6010 --- /dev/null +++ b/tools/encoder/pack.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +"""Encode one scene to the PACKED container -- ROADMAP K2. + + python3 tools/encoder/pack.py [--fps 12] + [--nframes N] [--palette-last] [--no-palette] + [--scene-palette] + +WHAT IS NOT HERE IS THE POINT. No VQ, no codebooks, no mode map, no rate +control, no `lam`, no leaky bucket, no span geometry -- `encode.py` is 452 lines +and 95% of its wall clock is k-means. A packed frame is a palette and a +picture, and both are geometry. FINDINGS 61: at the 9 clk/B dual-address floor +the codec is 110.4% of a 12 fps frame and this is 55.2%, so the thing that +replaces the codec is also the thing that is simpler than it. + +THERE IS NO RATE CONTROL BECAUSE THERE IS NO RATE LEVER. A codec's bitrate is +adjustable; a literal frame's is geometry. The wire cost of this container is +fixed by W, H and fps and nothing an encoder does can move it, which is exactly +why FINDINGS 61.6 says the medium question decides which player exists. A +`--kbps` argument here would be a lie of the shape FINDINGS 50 removed from the +rest of the tree. + +THE QUANTISER IS THIS PROJECT'S, NOT PIL'S DEFAULT PATH. 61.9's +4.89 dB was +measured with `18_text_plane_16col.py`'s free 256-colour MEDIANCUT and was filed +as "a direction, not the player's number" (risk 2 in the session 30 handoff). +`vq.frame_palette` is what actually ships it: 254 colours, index 0 held free for +the transparency key, black at 255. `tools/analysis/30_packed_container.py` +re-derives the figure against this and charges the GRB555 word on top. +""" +import argparse, glob, os, sys +import numpy as np +from PIL import Image + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), + "..", "bench")) +import vq as VQ +import dlxp as P +from dlxload import pack_palette + +ap = argparse.ArgumentParser() +ap.add_argument("frames_dir") +ap.add_argument("out") +ap.add_argument("--fps", type=int, default=12) +ap.add_argument("--nframes", type=int, default=None, + help="encode only the first N frames (the gate window is 120)") +ap.add_argument("--palette-last", action="store_true", + help="put the palette after the picture in every record. " + "FINDINGS 62.5 -- a design choice, not a default to inherit") +ap.add_argument("--no-palette", action="store_true", + help="picture only, 49,152 B a record. NOT a shipping option: " + "it re-imposes the scene palette the codec is capped by") +ap.add_argument("--scene-palette", action="store_true", + help="one palette for the whole scene, repeated in every record " + "-- the CONTROL for 61.9's per-frame claim") +a = ap.parse_args() + +files = sorted(glob.glob(f"{a.frames_dir}/f*.png")) +if a.nframes: + files = files[:a.nframes] +if not files: + sys.exit(f"no f*.png in {a.frames_dir}") +rgb = [np.asarray(Image.open(f).convert("RGB")) for f in files] +H, W = rgb[0].shape[:2] +if any(r.shape[:2] != (H, W) for r in rgb): + sys.exit("frames are not all the same size") + +# The scene-palette control shares ONE palette across every record, which is the +# constraint the codec cannot escape (61.9) and this format merely chooses not +# to inherit. It is built by the same routine the codec uses, with black at 0 +# moved to 255 and index 0 vacated, so the only variable between the two runs is +# per-frame versus scene-wide. +scene = None +if a.scene_palette: + # 255, not 256: reserve_black spends one entry on black and the packed + # layout needs the OTHER end free too, so the picture gets 254 either way. + ref, spal = VQ.scene_palette(rgb, colors=255, reserve_black=True) + sidx = VQ.palettise(rgb, ref) + # 0 -> 255: the packed layout needs index 0 free and black displayed at 255. + spal = np.vstack([np.zeros((1, 3), np.uint8), spal[1:], + np.zeros((1, 3), np.uint8)]) + scene = (spal, [np.where(i == 0, np.uint8(255), i) for i in sidx]) + +recs, psnr_pal = [], [] +for n, src in enumerate(rgb): + if scene is not None: + pal, idx = scene[0], scene[1][n] + else: + pal, idx = VQ.frame_palette(src) + if (idx == 0).any(): + sys.exit(f"frame {n}: index 0 is the transparency key and got used") + palw = None + if not a.no_palette: + palb, _dark, rendered = pack_palette(pal) + palw = palb.tobytes() + psnr_pal.append(VQ.psnr(src, pal[idx])) + recs.append((palw, P.pack_picture(idx).tobytes())) + +rec_b = P.write(a.out, W, H, a.fps, recs, palette_last=a.palette_last) +d = P.DLXP(a.out) # re-read: every invariant is checked +if d.nframes != len(recs): + sys.exit("writer and reader disagree about the frame count") + +kind = ("scene palette" if a.scene_palette else "per-frame palette") +if a.no_palette: + kind += ", NONE in the record" +print(f"{a.out}: DLXP1 {W}x{H} {a.fps}fps {d.nframes} frames, {kind}" + f"{', palette LAST' if a.palette_last else ''}") +print(f" record {rec_b:,} B = {rec_b // P.SECTOR} sectors exactly, " + f"file {os.path.getsize(a.out):,} B") +print(f" wire {d.kbps():.1f} KB/s -- FIXED by geometry, there is no lever") +print(f" palette-domain PSNR vs the 24-bit source: " + f"{np.mean(psnr_pal):.2f} dB (min {np.min(psnr_pal):.2f})") diff --git a/tools/encoder/vq.py b/tools/encoder/vq.py index 2bea3a3..06887b6 100644 --- a/tools/encoder/vq.py +++ b/tools/encoder/vq.py @@ -65,6 +65,41 @@ def scene_palette(rgb, colors=256, stride=3, reserve_black=True): return ref, pal +def frame_palette(rgb1, colors=254): + """`scene_palette`'s sibling, for the PACKED layout: ONE FRAME, 254 colours. + + The codec cannot have this. Every codeword it emits is an index INTO + `scene_palette`, so its palette is shared scene-wide and 31.33 dB is a + ceiling no bitrate crosses (FINDINGS 61.9). A literal frame has no + codebooks, so nothing forces a shared palette on it. + + The layout spends TWO entries where `--reserve-black` spends one (47.2): + index 0 is the TRANSPARENCY KEY of the top graphics page and must never + appear in the picture, and black therefore lives at 255 for the letterbox. + So the picture gets 254. + + The +1 shift is the whole mechanism, and it is why this does NOT go through + a P-mode reference image the way `scene_palette` does. `palettise` maps + against the FINAL 256-entry table, and that table has (0,0,0) at both 0 and + 255 -- a nearest-colour mapper is free to pick either, and there is no way to + forbid the one that must stay unused. Quantising to 254 and shifting keeps + index 0 free BY CONSTRUCTION rather than by hoping the mapper agrees, and it + is still exact: `pal[idx]` reproduces the quantiser's own rendering. + + Returns (pal (256,3) uint8, idx (H,W) uint8 in 1..254). + """ + q = Image.fromarray(rgb1).quantize(colors=colors, method=Image.MEDIANCUT, + dither=Image.NONE) + raw = q.getpalette() + if len(raw) < colors * 3: + raise ValueError(f"quantiser returned {len(raw)//3} entries, wanted {colors}") + pal = np.array(raw[:colors * 3], dtype=np.uint8).reshape(-1, 3) + pal = np.vstack([np.zeros((1, 3), np.uint8), pal, np.zeros((1, 3), np.uint8)]) + idx = np.asarray(q, dtype=np.uint8) + np.uint8(1) + if idx.min() < 1 or idx.max() > colors: + raise ValueError("index 0 (transparency key) or 255 (black) got used") + return pal, idx + def palettise(rgb, ref): return [np.asarray(Image.fromarray(r).quantize(palette=ref, dither=Image.NONE), dtype=np.uint8) for r in rgb]