mirror of
https://github.com/dschmenk/PLASMA.git
synced 2026-04-27 03:18:02 +00:00
Speed up DHGRRGB conversion a bit
This commit is contained in:
1 parent
f74c11947e
commit
9117737e27
3 files changed
+41
-37
No files matched your search
Binary file not shown.
@@ -53,6 +53,10 @@ const RAW_INFILE = $04 // Raw 560x192 24BPP RGB values
|
||||
const MATCH_PREV = $00 // Match previous RGB
|
||||
const MATCH_NEXT = $08 // Match next pixel
|
||||
const MATCH_CYCLE = $10 // Match current cycle
|
||||
const MATCH_ONE = 8
|
||||
const MATCH_ZERO = 0
|
||||
byte clrRot = $00,$02,$04,$06,$08,$0A,$0C,$0E
|
||||
byte = $01,$03,$05,$07,$09,$0B,$0D,$0F
|
||||
var sin90[] // first 90 degrees of sin in fixed s.15 format
|
||||
var = 0, 571, 1143, 1714, 2285, 2855, 3425, 3993
|
||||
var = 4560, 5126, 5690, 6252, 6812, 7371, 7927, 8480
|
||||
@@ -257,7 +261,7 @@ def rgbMatchCycle(r, g, b, errptr, cx)#1
|
||||
ntscCycle[i+RED] = ntscChroma[i+RED]
|
||||
ntscCycle[i+GRN] = ntscChroma[i+GRN]
|
||||
ntscCycle[i+BLU] = ntscChroma[i+BLU]
|
||||
i = 1
|
||||
i = MATCH_ONE
|
||||
else
|
||||
// RGB closer to previous chroma color
|
||||
er = r - pr
|
||||
@@ -266,7 +270,7 @@ def rgbMatchCycle(r, g, b, errptr, cx)#1
|
||||
ntscCycle[i+RED] = 0
|
||||
ntscCycle[i+GRN] = 0
|
||||
ntscCycle[i+BLU] = 0
|
||||
i = 0
|
||||
i = MATCH_ZERO
|
||||
fin
|
||||
errProp(er, eg, eb, errptr)
|
||||
return i
|
||||
@@ -325,7 +329,7 @@ def rgbMatchNext(r, g, b, errptr, cx)#1
|
||||
ntscCycle[i+RED] = ntscChroma[i+RED]
|
||||
ntscCycle[i+GRN] = ntscChroma[i+GRN]
|
||||
ntscCycle[i+BLU] = ntscChroma[i+BLU]
|
||||
i = 1
|
||||
i = MATCH_ONE
|
||||
else
|
||||
// RGB closer to previous chroma color
|
||||
er = r - pr
|
||||
@@ -334,7 +338,7 @@ def rgbMatchNext(r, g, b, errptr, cx)#1
|
||||
ntscCycle[i+RED] = 0
|
||||
ntscCycle[i+GRN] = 0
|
||||
ntscCycle[i+BLU] = 0
|
||||
i = 0
|
||||
i = MATCH_ZERO
|
||||
fin
|
||||
errProp(er, eg, eb, errptr)
|
||||
return i
|
||||
@@ -363,9 +367,9 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1
|
||||
prevRed = cr
|
||||
prevGrn = cg
|
||||
prevBlu = cb
|
||||
i = 1
|
||||
i = MATCH_ONE
|
||||
else
|
||||
i = 0
|
||||
i = MATCH_ZERO
|
||||
fin
|
||||
// Propogate error down and forward
|
||||
er = r - prevRed
|
||||
@@ -374,10 +378,9 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1
|
||||
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]
|
||||
errptr=>[RED+3] = er + errptr=>[RED+3]
|
||||
errptr=>[GRN+3] = eg + errptr=>[GRN+3]
|
||||
errptr=>[BLU+3] = eb + errptr=>[BLU+3]
|
||||
return i
|
||||
end
|
||||
|
||||
@@ -597,7 +600,7 @@ end
|
||||
|
||||
def rgbImportExport(rgbfile, dhgrfile)#0
|
||||
byte refnum, chromaBits
|
||||
var i, j, r, g, b
|
||||
var i, j, c, r, g, b
|
||||
var rgbScanline, rgbptr, errptr
|
||||
|
||||
refnum = fileio:open(rgbfile)
|
||||
@@ -621,34 +624,31 @@ def rgbImportExport(rgbfile, dhgrfile)#0
|
||||
prevRed, prevGrn, prevBLu = 96, 96, 96 // Reset prev RGB
|
||||
rgbptr = rgbScanline
|
||||
errptr = rgbErr
|
||||
for i = 0 to 559
|
||||
// Calc best match
|
||||
chromaBits = chromaBits >> 1
|
||||
r = gammaRed[rgbptr->[RED]]
|
||||
g = gammaGrn[rgbptr->[GRN]]
|
||||
b = gammaBlu[rgbptr->[BLU]]
|
||||
if errDiv
|
||||
r = r + errptr=>[RED] / errDiv
|
||||
g = g + errptr=>[GRN] / errDiv
|
||||
b = b + errptr=>[BLU] / errDiv
|
||||
fin
|
||||
if rgbMatch(r, g, b, errptr, i & 3)
|
||||
dhgrSet(i, j)
|
||||
chromaBits = chromaBits | $08
|
||||
fin
|
||||
// Map GREY1 -> GREY2
|
||||
if (i & 3) == 3
|
||||
if chromaBits == $0A // Bits are in reverse order from DCGR color value
|
||||
dhgrOp(OP_SRC)
|
||||
dcgrColor(CLR_GREY2)
|
||||
dcgrPixel(i >> 2, j)
|
||||
memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle
|
||||
elsif chromaBits == $05
|
||||
memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle
|
||||
for i = 0 to 139
|
||||
chromaBits = 0
|
||||
for c = 0 to 3
|
||||
// Calc best match
|
||||
r = gammaRed[rgbptr->[RED]]
|
||||
g = gammaGrn[rgbptr->[GRN]]
|
||||
b = gammaBlu[rgbptr->[BLU]]
|
||||
if errDiv
|
||||
r = r + errptr=>[RED] / errDiv
|
||||
g = g + errptr=>[GRN] / errDiv
|
||||
b = b + errptr=>[BLU] / errDiv
|
||||
fin
|
||||
chromaBits = (chromaBits >> 1) | rgbMatch(r, g, b, errptr, c)
|
||||
rgbptr = rgbptr + 3
|
||||
errptr = errptr + 3 * 2
|
||||
next
|
||||
// Map GREY1 -> GREY2
|
||||
if chromaBits == $0A // Bits are in reverse order from DCGR color value
|
||||
chromaBits = $05
|
||||
memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle
|
||||
elsif chromaBits == $05
|
||||
memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle
|
||||
fin
|
||||
rgbptr = rgbptr + 3
|
||||
errptr = errptr + 3 * 2
|
||||
dcgrColor(clrRot[chromaBits])
|
||||
dcgrPixel(i, j)
|
||||
next
|
||||
if flags & MEM_MODE; putc('.'); fin
|
||||
if ^$C000 == $83
|
||||
|
||||
@@ -51,4 +51,8 @@ if MACHID & MACHID_MODEL == MACHID_IIE
|
||||
elsif MACHID & MACHID_MODEL <> MACHID_IIC
|
||||
memcpy(@waitVBL, @_vblnop, @_vblend-@_vblnop)
|
||||
fin
|
||||
//
|
||||
// Keep module in memory
|
||||
//
|
||||
return modkeep
|
||||
done
|
||||
Reference in new issue
Block a user