From d77fc9828067c3684162abf3d8a4b3d5337d718d Mon Sep 17 00:00:00 2001 From: Raymond Yang Date: Thu, 9 Mar 2023 09:06:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AA=BF=E6=95=B4releaseSurface=E7=9A=84?= =?UTF-8?q?=E5=91=BC=E5=8F=AB=E6=99=82=E6=A9=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gstreamer_demo_app/ui/mainScreen/MainActivity.kt | 1 + .../ui/mainScreen/SplitViewFragment.kt | 6 +++--- .../gstreamer_demo_app/ui/mainScreen/VideoView.kt | 11 +++++++++-- .../src/com/hisharp/gstreamer_player/GstLibrary.kt | 10 ++++------ 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/MainActivity.kt b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/MainActivity.kt index 662bbab..282023a 100644 --- a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/MainActivity.kt +++ b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/MainActivity.kt @@ -114,6 +114,7 @@ class MainActivity : AppCompatActivity() { binding.viewPager.setCurrentItem(0, false) for (i in 0 until splitVideoViewAdapter.itemCount) { splitVideoViewAdapter.pause(i) + splitVideoViewAdapter.destroy(i) } //delay(oldSplitMode * Constants.CONF_DELAY_BASE_MILLIS) delay((oldSplitMode * 100) + Constants.CONF_DELAY_BASE_MILLIS) diff --git a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt index e61fffb..03ea162 100644 --- a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt +++ b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt @@ -83,10 +83,10 @@ class SplitViewFragment : Fragment() { } override fun onDestroy() { - super.onDestroy() //destroyAll() stopAll() Log.d("${TAG}_$mPageNum", "onDestroy()") + super.onDestroy() } private fun initView() { @@ -214,8 +214,8 @@ class SplitViewFragment : Fragment() { fun destroyAll() /*= MainScope().launch(Dispatchers.Main)*/ { if (videoViews.isEmpty()) return for (index in data.indices) { - videoViews[index].destroy() - //delay(100) + //videoViews[index].destroy() + videoViews[index].destroySurface() } }//.start() diff --git a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt index d44d08f..25b5ede 100644 --- a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt +++ b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt @@ -105,8 +105,9 @@ class VideoView : ConstraintLayout, GstCallback { fun play() { if (data == null) return - videoView.postInvalidate() - gstLibrary.play() + if (this::gstLibrary.isInitialized) { + gstLibrary.play() + } } fun pause() { @@ -117,6 +118,12 @@ class VideoView : ConstraintLayout, GstCallback { } } + fun destroySurface() { + if (this::gstLibrary.isInitialized) { + gstLibrary.releaseSurface() + } + } + fun destroy() { if (this::gstLibrary.isInitialized) { gstLibrary.close() diff --git a/gstreamer_player/src/com/hisharp/gstreamer_player/GstLibrary.kt b/gstreamer_player/src/com/hisharp/gstreamer_player/GstLibrary.kt index b538a83..a67e252 100644 --- a/gstreamer_player/src/com/hisharp/gstreamer_player/GstLibrary.kt +++ b/gstreamer_player/src/com/hisharp/gstreamer_player/GstLibrary.kt @@ -32,7 +32,7 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback { } fun pause() { - if (!isInit) return + //if (!isInit) return nativePause() } @@ -80,7 +80,7 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback { // Called from native code. Native code calls this once it has created its pipeline and // the main loop is running, so it is ready to accept commands. private fun onGStreamerInitialized() { - Log.i("$TAG+$tag", "GStreamer initialized:") + Log.i("$TAG+$tag", "GStreamer Initialization complete") if (gstCallback != null) { gstCallback!!.onStatus(GstStatus.READY) } @@ -127,8 +127,6 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback { override fun surfaceCreated(holder: SurfaceHolder) { Log.d("$TAG+$tag", "Surface created: " + holder.surface) - Log.i("$TAG+$tag", "GStreamer surfaceCreated") - isInit = true nativeSurfaceInit(holder.surface) } @@ -139,9 +137,9 @@ class GstLibrary(context: Context) : Closeable, SurfaceHolder.Callback { override fun surfaceDestroyed(holder: SurfaceHolder) { Log.d("$TAG+$tag", "Surface destroyed") - pause() - releaseSurface() isInit = false + //pause() + //releaseSurface() } companion object {