slight format changes on ipf1

This commit is contained in:
minjaesong
2022-05-03 09:53:56 +09:00
parent dfd58b00b2
commit 89bb944869
2 changed files with 23 additions and 25 deletions

View File

@@ -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]

View File

@@ -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])