mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-09 22:54:03 +09:00
fully working deinterlacer
This commit is contained in:
@@ -1618,15 +1618,11 @@ class GraphicsJSR223Delegate(private val vm: VM) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// cover up top two and bottom two lines with current border colour
|
// cover up top two and bottom two lines with current border colour
|
||||||
val lines = arrayOf(0, 1, height - 2, height - 1)
|
val destT = 0
|
||||||
for (x in 0 until width) {
|
val destB = (height - 2) * width * 3
|
||||||
for (y in lines) {
|
val col = (vm.peek(-1299457)!!.toUint() shl 16) or (vm.peek(-1299458)!!.toUint() shl 8) or vm.peek(-1299459)!!.toUint()
|
||||||
val dest = (y * width + x) * 3
|
vm.memsetI24(outputRGBAddr.toInt() + destT, col, width * 6)
|
||||||
vm.poke(outputRGBAddr + dest + 0, vm.peek(-1299457)!!)
|
vm.memsetI24(outputRGBAddr.toInt() + destB, col, width * 6)
|
||||||
vm.poke(outputRGBAddr + dest + 1, vm.peek(-1299458)!!)
|
|
||||||
vm.poke(outputRGBAddr + dest + 2, vm.peek(-1299459)!!)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun tevYcocgToRGB(yBlock: IntArray, coBlock: IntArray, cgBlock: IntArray): IntArray {
|
fun tevYcocgToRGB(yBlock: IntArray, coBlock: IntArray, cgBlock: IntArray): IntArray {
|
||||||
|
|||||||
@@ -549,6 +549,19 @@ class VM(
|
|||||||
return dest
|
return dest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun memsetI24(dest: Int, ch: Int, countInBytes: Int): Int {
|
||||||
|
val r = ch.ushr(16).and(255).toByte()
|
||||||
|
val g = ch.ushr(8).and(255).toByte()
|
||||||
|
val b = ch.ushr(0).and(255).toByte()
|
||||||
|
val incVec = if (dest >= 0) 1L else -1L
|
||||||
|
for (i in 0 until countInBytes step 3) {
|
||||||
|
poke(dest + (i + 0)*incVec, r)
|
||||||
|
poke(dest + (i + 1)*incVec, g)
|
||||||
|
poke(dest + (i + 2)*incVec, b)
|
||||||
|
}
|
||||||
|
return dest
|
||||||
|
}
|
||||||
|
|
||||||
fun bulkPeekShort(from: Int, to: ShortArray, sizeInBytes: Int) {
|
fun bulkPeekShort(from: Int, to: ShortArray, sizeInBytes: Int) {
|
||||||
if (from !in 0..8*1024*1024) throw IllegalArgumentException()
|
if (from !in 0..8*1024*1024) throw IllegalArgumentException()
|
||||||
UnsafeHelper.memcpyRaw(null, usermem.ptr + from, to, UnsafeHelper.getArrayOffset(to), sizeInBytes.toLong())
|
UnsafeHelper.memcpyRaw(null, usermem.ptr + from, to, UnsafeHelper.getArrayOffset(to), sizeInBytes.toLong())
|
||||||
|
|||||||
Reference in New Issue
Block a user