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:
Binary file not shown.
@@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user