fully working deinterlacer

This commit is contained in:
minjaesong
2025-09-02 22:40:06 +09:00
parent 8abdb8b9a6
commit e73aa3da28
2 changed files with 18 additions and 9 deletions

View File

@@ -1618,15 +1618,11 @@ class GraphicsJSR223Delegate(private val vm: VM) {
}
// cover up top two and bottom two lines with current border colour
val lines = arrayOf(0, 1, height - 2, height - 1)
for (x in 0 until width) {
for (y in lines) {
val dest = (y * width + x) * 3
vm.poke(outputRGBAddr + dest + 0, vm.peek(-1299457)!!)
vm.poke(outputRGBAddr + dest + 1, vm.peek(-1299458)!!)
vm.poke(outputRGBAddr + dest + 2, vm.peek(-1299459)!!)
}
}
val destT = 0
val destB = (height - 2) * width * 3
val col = (vm.peek(-1299457)!!.toUint() shl 16) or (vm.peek(-1299458)!!.toUint() shl 8) or vm.peek(-1299459)!!.toUint()
vm.memsetI24(outputRGBAddr.toInt() + destT, col, width * 6)
vm.memsetI24(outputRGBAddr.toInt() + destB, col, width * 6)
}
fun tevYcocgToRGB(yBlock: IntArray, coBlock: IntArray, cgBlock: IntArray): IntArray {

View File

@@ -549,6 +549,19 @@ class VM(
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) {
if (from !in 0..8*1024*1024) throw IllegalArgumentException()
UnsafeHelper.memcpyRaw(null, usermem.ptr + from, to, UnsafeHelper.getArrayOffset(to), sizeInBytes.toLong())