rrva
11/29/2023, 9:56 AM@OptIn(ExperimentalForeignApi::class)
fun createImageFastPath(
targetWidth: Int,
sourceImageBytes: ByteArray,
format: String,
desiredQuality: Int?
): ByteArray {
return memScoped {
val imageBuffer = sourceImageBytes.refTo(0)
val length = sourceImageBytes.size.toULong()
val thumbnail = allocPointerTo<VipsImage>()
val objectsToUnref = mutableListOf<CPointerVar<VipsImage>>()
vips_thumbnail_buffer(imageBuffer, length, thumbnail.ptr, targetWidth, "linear", true, null)
objectsToUnref.add(thumbnail)
val bufferOut = allocPointerTo<ByteVar>()
val sizeOut = alloc<size_tVar>()
val quality = desiredQuality ?: 70
val (size, buffer) = saveToFile(thumbnail, bufferOut, sizeOut, format, quality)
val imageBytes = ByteArray(size)
memcpy(imageBytes.refTo(0), buffer, size.toULong())
objectsToUnref.forEach {
g_object_unref(it.value)
}
imageBytes
}
}
also, is running valgrind relevant on a kotlin/native binary? I guess at least the memory management in the C library will be correctly tracked by valgrind