From 89bb944869c7a9d53b6d6a4dcc9cf370a4ef94e6 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 3 May 2022 09:53:56 +0900 Subject: [PATCH] slight format changes on ipf1 --- assets/disk0/decodeipf.js | 20 +++++++++----------- assets/disk0/encodeipf.js | 28 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/assets/disk0/decodeipf.js b/assets/disk0/decodeipf.js index 64dceae..ba5fb42 100644 --- a/assets/disk0/decodeipf.js +++ b/assets/disk0/decodeipf.js @@ -147,14 +147,14 @@ function clampRGB(f) { return (f > 1.0) ? 1.0 : (f < 0.0) ? 0.0 : f } -function ycocgToRGB(cocg, ys, as) { // ys: 4 Y-values +function ycocgToRGB(co, cg, ys, as) { // ys: 4 Y-values // return [R1|G1, B1|A1, R2|G2, B2|A2, R3|G3, B3|A3, R4|G4, B4|A4] // cocg = 0x7777 // ys = 0x7777 - let co = ((cocg & 15) - 7) / 8 - let cg = (((cocg >>> 4) & 15) - 7) / 8 + co = (co - 7) / 8 + cg = (cg - 7) / 8 let y1 = (ys & 15) / 15.0 let a1 = as & 15 @@ -203,13 +203,11 @@ for (let blockX = 0; blockX < Math.ceil(imgw / 4.0); blockX++) { let rg = new Uint8Array(16) // [R1G1, R2G2, R3G3, R4G4, ...] let ba = new Uint8Array(16) - let cocg1 = readByte() + let co = readShort() + let cg = readShort() let y1 = readShort() - let cocg2 = readByte() let y2 = readShort() - let cocg3 = readByte() let y3 = readShort() - let cocg4 = readByte() let y4 = readShort() let a1 = 65535; let a2 = 65535; let a3 = 65535; let a4 = 65535 @@ -221,25 +219,25 @@ for (let blockX = 0; blockX < Math.ceil(imgw / 4.0); blockX++) { a4 = readShort() } - let corner = ycocgToRGB(cocg1, y1, a1) + let corner = ycocgToRGB(co & 15, cg & 15, y1, a1) rg[0] = corner[0];ba[0] = corner[1] rg[1] = corner[2];ba[1] = corner[3] rg[4] = corner[4];ba[4] = corner[5] rg[5] = corner[6];ba[5] = corner[7] - corner = ycocgToRGB(cocg2, y2, a2) + corner = ycocgToRGB((co >> 4) & 15, (cg >> 4) & 15, y2, a2) rg[2] = corner[0];ba[2] = corner[1] rg[3] = corner[2];ba[3] = corner[3] rg[6] = corner[4];ba[6] = corner[5] rg[7] = corner[6];ba[7] = corner[7] - corner = ycocgToRGB(cocg3, y3, a3) + corner = ycocgToRGB((co >> 8) & 15, (cg >> 8) & 15, y3, a3) rg[8] = corner[0];ba[8] = corner[1] rg[9] = corner[2];ba[9] = corner[3] rg[12] = corner[4];ba[12] = corner[5] rg[13] = corner[6];ba[13] = corner[7] - corner = ycocgToRGB(cocg4, y4, a4) + corner = ycocgToRGB((co >> 12) & 15, (cg >> 12) & 15, y4, a4) rg[10] = corner[0];ba[10] = corner[1] rg[11] = corner[2];ba[11] = corner[3] rg[14] = corner[4];ba[14] = corner[5] diff --git a/assets/disk0/encodeipf.js b/assets/disk0/encodeipf.js index 117b03f..53f6631 100644 --- a/assets/disk0/encodeipf.js +++ b/assets/disk0/encodeipf.js @@ -35,13 +35,13 @@ Image is divided into 4x4 blocks and each block is serialised, then the entire f Bits are packed like so: uint32 SUBSAMPLING MASK (unimplemented; dont write this) - uint8 [Cg-Top Left | Co-Top Left] + uint8 [Co-Top Right | Co-Top Left] + uint8 [Co-Bottom Right | Co-Bottom Left] + uint8 [Cg-Top Right | Cg-Top Left] + uint8 [Cg-Bottom Right | Cg-Bottom Left] uint16 [Y1 | Y0 | Y5 | Y4] - uint8 [Cg-Top Right | Co-Top Right] uint16 [Y3 | Y2 | Y7 | Y6] - uint8 [Cg-Bottom Left | Co-Bottom Left] uint16 [Y9 | Y8 | YD | YC] - uint8 [Cg-Bottom Right | Co-Bottom Right] uint16 [YB | YA | YF | YE] (total: 12 bytes) @@ -197,16 +197,16 @@ for (let blockX = 0; blockX < Math.ceil(imgw / 4.0); blockX++) { // append encoded blocks to the file let outBlock = writeBuf + writeCount - sys.poke(outBlock+ 0, (cgs1 << 4) | cos1) - sys.poke(outBlock+ 1, (ys[1] << 4) | ys[0]) - sys.poke(outBlock+ 2, (ys[5] << 4) | ys[4]) - sys.poke(outBlock+ 3, (cgs2 << 4) | cos2) - sys.poke(outBlock+ 4, (ys[3] << 4) | ys[2]) - sys.poke(outBlock+ 5, (ys[7] << 4) | ys[6]) - sys.poke(outBlock+ 6, (cgs3 << 4) | cos3) - sys.poke(outBlock+ 7, (ys[9] << 4) | ys[8]) - sys.poke(outBlock+ 8, (ys[13] << 4) | ys[12]) - sys.poke(outBlock+ 9, (cgs4 << 4) | cos4) + sys.poke(outBlock+ 0, (cos2 << 4) | cos1) + sys.poke(outBlock+ 1, (cos4 << 4) | cos3) + sys.poke(outBlock+ 2, (cgs2 << 4) | cgs1) + sys.poke(outBlock+ 3, (cgs4 << 4) | cgs3) + sys.poke(outBlock+ 4, (ys[1] << 4) | ys[0]) + sys.poke(outBlock+ 5, (ys[5] << 4) | ys[4]) + sys.poke(outBlock+ 6, (ys[3] << 4) | ys[2]) + sys.poke(outBlock+ 7, (ys[7] << 4) | ys[6]) + sys.poke(outBlock+ 8, (ys[9] << 4) | ys[8]) + sys.poke(outBlock+ 9, (ys[13] << 4) | ys[12]) sys.poke(outBlock+10, (ys[11] << 4) | ys[10]) sys.poke(outBlock+11, (ys[15] << 4) | ys[14])