mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-07 11:51:49 +09:00
slight format changes on ipf1
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user