in test-app/src/main/java/com/google/android/renderscript_test/IntrinsicColorMatrix.kt [32:108]
fun intrinsicColorMatrix(
context: RenderScript,
conversion: Tester.ColorMatrixConversionType,
inputArray: ByteArray,
inputVectorSize: Int,
sizeX: Int,
sizeY: Int,
outputVectorSize: Int,
matrix: FloatArray,
addVector: FloatArray,
restriction: Range2d?
): ByteArray {
val scriptColorMatrix = ScriptIntrinsicColorMatrix.create(context)
val inputBuilder = Type.Builder(
context, renderScriptVectorElementForU8(
context,
inputVectorSize
)
)
inputBuilder.setX(sizeX)
inputBuilder.setY(sizeY)
val inputArrayType = inputBuilder.create()
val inputAllocation = Allocation.createTyped(context, inputArrayType)
val outputBuilder = Type.Builder(
context, renderScriptVectorElementForU8(
context,
outputVectorSize
)
)
outputBuilder.setX(sizeX)
outputBuilder.setY(sizeY)
val outputArrayType = outputBuilder.create()
val outAllocation = Allocation.createTyped(context, outputArrayType)
inputAllocation.copyFrom(inputArray)
val intrinsicOutArray = ByteArray(sizeX * sizeY * paddedSize(outputVectorSize))
when (conversion) {
Tester.ColorMatrixConversionType.RGB_TO_YUV -> scriptColorMatrix.setRGBtoYUV()
Tester.ColorMatrixConversionType.YUV_TO_RGB -> scriptColorMatrix.setYUVtoRGB()
Tester.ColorMatrixConversionType.GREYSCALE -> scriptColorMatrix.setGreyscale()
Tester.ColorMatrixConversionType.RANDOM -> {
val m = Matrix4f()
var index = 0
// RS is column major
for (x in 0..3) {
for (y in 0..3) {
m.set(x, y, matrix[index++])
}
}
scriptColorMatrix.setColorMatrix(m)
}
}
val vector = Float4(
addVector[0],
addVector[1],
addVector[2],
addVector[3]
)
scriptColorMatrix.setAdd(vector)
if (restriction != null) {
outAllocation.copyFrom(intrinsicOutArray) // To initialize to zero
val options = Script.LaunchOptions()
options.setX(restriction.startX, restriction.endX)
options.setY(restriction.startY, restriction.endY)
scriptColorMatrix.forEach(inputAllocation, outAllocation, options)
} else {
scriptColorMatrix.forEach(inputAllocation, outAllocation)
}
outAllocation.copyTo(intrinsicOutArray)
inputAllocation.destroy()
outAllocation.destroy()
inputArrayType.destroy()
outputArrayType.destroy()
scriptColorMatrix.destroy()
return intrinsicOutArray
}