|
@@ -5,21 +5,19 @@ import androidx.compose.ui.graphics.asComposeImageBitmap
|
|
|
import org.jetbrains.skia.Bitmap
|
|
import org.jetbrains.skia.Bitmap
|
|
|
import org.jetbrains.skia.ColorAlphaType
|
|
import org.jetbrains.skia.ColorAlphaType
|
|
|
import org.jetbrains.skia.ImageInfo
|
|
import org.jetbrains.skia.ImageInfo
|
|
|
-import org.mjdev.desktop.log.Log
|
|
|
|
|
import uk.co.caprica.vlcj.player.base.MediaPlayer
|
|
import uk.co.caprica.vlcj.player.base.MediaPlayer
|
|
|
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.BufferFormat
|
|
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.BufferFormat
|
|
|
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.RenderCallback
|
|
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.RenderCallback
|
|
|
import java.nio.ByteBuffer
|
|
import java.nio.ByteBuffer
|
|
|
|
|
|
|
|
class RenderCallback(
|
|
class RenderCallback(
|
|
|
- val onImageRender: (imageBitmap: ImageBitmap?) -> Unit
|
|
|
|
|
|
|
+ private val onImageRender: (imageBitmap: ImageBitmap?) -> Unit
|
|
|
) : RenderCallback {
|
|
) : RenderCallback {
|
|
|
- var pos: Float = -1f
|
|
|
|
|
- var imageBitmap: ImageBitmap? = null
|
|
|
|
|
- var byteArray: ByteArray? = null
|
|
|
|
|
|
|
+ private var pos: Float = -1f
|
|
|
|
|
+ private var imageBitmap: ImageBitmap? = null
|
|
|
|
|
+ private var byteArray: ByteArray? = null
|
|
|
|
|
|
|
|
override fun lock(mediaPlayer: MediaPlayer?) {
|
|
override fun lock(mediaPlayer: MediaPlayer?) {
|
|
|
- Log.d("Locked media player: ${mediaPlayer?.status()?.isPlaying}")
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun display(
|
|
override fun display(
|
|
@@ -29,19 +27,13 @@ class RenderCallback(
|
|
|
displayWidth: Int,
|
|
displayWidth: Int,
|
|
|
displayHeight: Int
|
|
displayHeight: Int
|
|
|
) {
|
|
) {
|
|
|
- Log.d("Display called with width: $displayWidth, height: $displayHeight")
|
|
|
|
|
val isPlaying = mediaPlayer?.status()?.isPlaying == true
|
|
val isPlaying = mediaPlayer?.status()?.isPlaying == true
|
|
|
- val newPos = mediaPlayer?.status()?.position() ?: -1f
|
|
|
|
|
- Log.d("Display position: $newPos, isPlaying: $isPlaying")
|
|
|
|
|
- if (isPlaying && pos != newPos) {
|
|
|
|
|
- Log.d("Creating image frame at position: $newPos")
|
|
|
|
|
|
|
+ if (isPlaying) {
|
|
|
pos = mediaPlayer?.status()?.position() ?: 0f
|
|
pos = mediaPlayer?.status()?.position() ?: 0f
|
|
|
- Log.d("Getting data from native buffers")
|
|
|
|
|
nativeBuffers?.get(0)?.apply {
|
|
nativeBuffers?.get(0)?.apply {
|
|
|
get(byteArray)
|
|
get(byteArray)
|
|
|
rewind()
|
|
rewind()
|
|
|
}
|
|
}
|
|
|
- Log.d("Creating image bitmap with size: ${byteArray?.size ?: 0}")
|
|
|
|
|
imageBitmap = Bitmap().apply {
|
|
imageBitmap = Bitmap().apply {
|
|
|
allocPixels(
|
|
allocPixels(
|
|
|
ImageInfo.makeN32(
|
|
ImageInfo.makeN32(
|
|
@@ -52,14 +44,12 @@ class RenderCallback(
|
|
|
)
|
|
)
|
|
|
installPixels(byteArray)
|
|
installPixels(byteArray)
|
|
|
}.asComposeImageBitmap().apply {
|
|
}.asComposeImageBitmap().apply {
|
|
|
- Log.d("Image bitmap created with width: $width, height: $height, $this")
|
|
|
|
|
onImageRender(this)
|
|
onImageRender(this)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun unlock(mediaPlayer: MediaPlayer?) {
|
|
override fun unlock(mediaPlayer: MediaPlayer?) {
|
|
|
- Log.d("Unlocked media player: ${mediaPlayer?.status()?.isPlaying}")
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun allocateBuffers(byteArray: ByteArray) {
|
|
fun allocateBuffers(byteArray: ByteArray) {
|