加入TextureView支援
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
package com.hisharp.gstreamer_player
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.SurfaceTexture
|
||||
import android.util.Log
|
||||
import android.view.Surface
|
||||
import android.view.SurfaceHolder
|
||||
import android.view.TextureView
|
||||
import org.freedesktop.gstreamer.GStreamer
|
||||
import java.io.Closeable
|
||||
import java.io.IOException
|
||||
|
||||
class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback {
|
||||
class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback, TextureView.SurfaceTextureListener {
|
||||
|
||||
private val mAppContext: Context
|
||||
private var gstCallback: GstCallback? = null
|
||||
@@ -15,6 +18,8 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback {
|
||||
private var tag = ""
|
||||
private var isInit = false
|
||||
|
||||
private var surface: Surface? = null
|
||||
|
||||
private external fun nativeInit() // Initialize native code, build pipeline, etc
|
||||
private external fun nativeFinalize() // Destroy pipeline and shutdown native code
|
||||
private external fun nativeSetUri(uri: String) // Set the URI of the media to play
|
||||
@@ -59,6 +64,10 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback {
|
||||
holder.addCallback(this)
|
||||
}
|
||||
|
||||
fun setTextureView(textureView: TextureView) {
|
||||
textureView.surfaceTextureListener = this
|
||||
}
|
||||
|
||||
// Called from native code. This sets the content of the TextView from the UI thread.
|
||||
private fun setMessage(message: String) {
|
||||
if (gstCallback == null) return
|
||||
@@ -128,7 +137,8 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback {
|
||||
|
||||
override fun surfaceCreated(holder: SurfaceHolder) {
|
||||
Log.d("$TAG+$tag", "Surface created: " + holder.surface)
|
||||
nativeSurfaceInit(holder.surface)
|
||||
this.surface = holder.surface
|
||||
this.surface?.let { nativeSurfaceInit(it) }
|
||||
}
|
||||
|
||||
override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
|
||||
@@ -138,11 +148,33 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback {
|
||||
|
||||
override fun surfaceDestroyed(holder: SurfaceHolder) {
|
||||
Log.d("$TAG+$tag", "Surface destroyed")
|
||||
isInit = false
|
||||
this.isInit = false
|
||||
this.surface = null
|
||||
//pause()
|
||||
//releaseSurface()
|
||||
}
|
||||
|
||||
override fun onSurfaceTextureAvailable(surface: SurfaceTexture, width: Int, height: Int) {
|
||||
this.surface = Surface(surface)
|
||||
this.surface?.let { nativeSurfaceInit(it) }
|
||||
Log.d("$TAG+$tag", "Surface onSurfaceTextureAvailable: $surface")
|
||||
}
|
||||
|
||||
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture, width: Int, height: Int) {
|
||||
Log.d("$TAG+$tag", "Surface onSurfaceTextureSizeChanged: $surface")
|
||||
}
|
||||
|
||||
override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean {
|
||||
Log.d("$TAG+$tag", "Surface onSurfaceTextureDestroyed: $surface")
|
||||
this.isInit = false
|
||||
this.surface = null
|
||||
return isInit
|
||||
}
|
||||
|
||||
override fun onSurfaceTextureUpdated(surface: SurfaceTexture) {
|
||||
Log.d("$TAG+$tag", "Surface onSurfaceTextureUpdated: $surface")
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = GstLibrary::class.java.simpleName
|
||||
|
||||
|
||||
Reference in New Issue
Block a user