AwtFramePainter
Fills a packed integer raster with one frame's pixels, one ARGB value per pixel, no row padding.
The seam exists for the boundary reason its Android and Web twins exist for: :kiteplayer-output must not depend on KiteFFmpeg, so a renderer here cannot read a frame's pixels itself and is handed the conversion instead. The implementation lives where KiteFFmpeg is already a dependency.
An IntArray rather than a ByteArray because that is what a BufferedImage of type TYPE_INT_RGB stores, so the converted pixels land directly in the image's own backing buffer with no second copy on the way to the screen.