package tech.kinc import android.graphics.SurfaceTexture import android.graphics.SurfaceTexture.OnFrameAvailableListener import android.opengl.GLES20 class KincMovieTexture: OnFrameAvailableListener { private val GL_TEXTURE_EXTERNAL_OES: Int = 0x8D65 var textureId: Int = 0 init { val textures = IntArray(1) GLES20.glGenTextures(1, textures, 0) textureId = textures[0] GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId) GLES20.glTexParameteri( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST ) GLES20.glTexParameteri( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR ) GLES20.glTexParameteri( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE ) GLES20.glTexParameteri( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE ) } var surfaceTexture = SurfaceTexture(textureId) init { surfaceTexture.setOnFrameAvailableListener(this) } private var updateTexture = false fun update(): Boolean { val ret = updateTexture if (updateTexture) { surfaceTexture.updateTexImage() updateTexture = false } return ret } override fun onFrameAvailable(surface: SurfaceTexture) { if (surfaceTexture == surface) { updateTexture = true } } }