1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-08-08 09:25:19 +00:00

Code optimizations for RGB conversion

This commit is contained in:
David Schmenk
2025-01-02 09:39:35 -08:00
parent 5883fc8fae
commit de57f5e19b
2 changed files with 24 additions and 16 deletions

Binary file not shown.

View File

@@ -145,20 +145,17 @@ def cos(deg)#1
return sin(deg + 90) return sin(deg + 90)
end end
def dist(x1, y1, z1, x2, y2, z2)#2 def dist(dx, dy, dz)#2
res[t_i32] xx, yy res[t_i32] xx, yy
x2 = x2 - x1 loadi16(dx)
y2 = y2 - y1 muli16(dx)
z2 = z2 - z1
loadi16(x2)
muli16(x2)
store32(@xx) store32(@xx)
loadi16(y2) loadi16(dy)
muli16(y2) muli16(dy)
store32(@yy) store32(@yy)
loadi16(z2) loadi16(dz)
muli16(z2) muli16(dz)
add32(@yy) add32(@yy)
add32(@xx) add32(@xx)
store32(@xx) store32(@xx)
@@ -257,8 +254,8 @@ def rgbMatchCycle(r, g, b, errptr, cx)#1
cg = pg + ntscChroma[i+GRN] cg = pg + ntscChroma[i+GRN]
cb = pb + ntscChroma[i+BLU] cb = pb + ntscChroma[i+BLU]
// Match next chroma subcycle // Match next chroma subcycle
pd:[0], pd:[1] = dist(r, g, b, pr, pg, pb) pd:[0], pd:[1] = dist(r - pr, g - pg, b - pb)
dist(r, g, b, cr, cg, cb) dist(r - cr, g - cg, b - cb)
if islt32(@pd) if islt32(@pd)
// RGB better matched with next chroma color // RGB better matched with next chroma color
er = r - cr er = r - cr
@@ -320,7 +317,7 @@ def rgbMatchNext(r, g, b, errptr, cx)#1
// Match next full chroma cycle (pixel) // Match next full chroma cycle (pixel)
cd:[0], cd:[1] = $FFFF, $7FFF cd:[0], cd:[1] = $FFFF, $7FFF
for i = 0 to 15 for i = 0 to 15
nd:[0], nd:[1] = dist(r, g, b, pixRed[i], pixGrn[i], pixBlu[i]) nd:[0], nd:[1] = dist(r - pixRed[i], g - pixGrn[i], b - pixBlu[i])
if islt32(@cd) if islt32(@cd)
cd:[0], cd:[1] = nd:[0], nd:[1] cd:[0], cd:[1] = nd:[0], nd:[1]
match = i match = i
@@ -352,6 +349,7 @@ end
def rgbMatchPrev(r, g, b, errptr, cx)#1 def rgbMatchPrev(r, g, b, errptr, cx)#1
var cr, cg, cb var cr, cg, cb
var er, eg, eb
byte i, byte i,
res[t_i32] pd res[t_i32] pd
@@ -365,8 +363,8 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1
cg = prevGrn + ntscChroma[i+GRN] cg = prevGrn + ntscChroma[i+GRN]
cb = prevBlu + ntscChroma[i+BLU] cb = prevBlu + ntscChroma[i+BLU]
// Match next chroma subcycle // Match next chroma subcycle
pd:[0], pd:[1] = dist(r, g, b, prevRed, prevGrn, prevBlu) pd:[0], pd:[1] = dist(r - prevRed, g - prevGrn, b - prevBlu)
dist(r, g, b, cr, cg, cb) dist(r - cr, g - cg, b - cb)
if islt32(@pd) if islt32(@pd)
// RGB better matched with next chroma color // RGB better matched with next chroma color
prevRed = cr prevRed = cr
@@ -376,7 +374,17 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1
else else
i = 0 i = 0
fin fin
errProp(r - prevRed, g - prevGrn, b - prevBlu, errptr) // Propogate error down and forward
er = r - prevRed
errptr=>[RED] = er
eg = g - prevGrn
errptr=>[GRN] = eg
eb = b - prevBlu
errptr=>[BLU] = eb
errptr = errptr + 6
errptr=>[RED] = er + errptr=>[RED]
errptr=>[GRN] = eg + errptr=>[GRN]
errptr=>[BLU] = eb + errptr=>[BLU]
return i return i
end end