From 72e0268e764af3120dc0d028049a6f88bea93dc6 Mon Sep 17 00:00:00 2001 From: ThibaultBee <37510686+ThibaultBee@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:07:22 +0100 Subject: [PATCH] fix(core): screen source: do not throw error when `stopStream` is called explicitly --- .../internal/sources/screen/ScreenSource.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/io/github/thibaultbee/streampack/internal/sources/screen/ScreenSource.kt b/core/src/main/java/io/github/thibaultbee/streampack/internal/sources/screen/ScreenSource.kt index bfb48b69f..de3be0eb6 100644 --- a/core/src/main/java/io/github/thibaultbee/streampack/internal/sources/screen/ScreenSource.kt +++ b/core/src/main/java/io/github/thibaultbee/streampack/internal/sources/screen/ScreenSource.kt @@ -55,6 +55,11 @@ class ScreenSource( var activityResult: ActivityResult? = null var onErrorListener: OnErrorListener? = null + /** + * Avoid to trigger `onError` when screen source `stopStream` has been called. + */ + private var isExplicitelyStopped = false + private val mediaProjectionManager = context.getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager private var virtualDisplay: VirtualDisplay? = null @@ -70,7 +75,10 @@ class ScreenSource( override fun onStopped() { super.onStopped() Logger.i(this@ScreenSource.TAG, "onStopped") - onErrorListener?.onError(StreamPackError("Screen source has been stopped")) + + if (!isExplicitelyStopped) { + onErrorListener?.onError(StreamPackError("Screen source virtual display has been stopped")) + } } } @@ -78,7 +86,10 @@ class ScreenSource( override fun onStop() { super.onStop() Logger.i(this@ScreenSource.TAG, "onStop") - onErrorListener?.onError(StreamPackError("Screen source has been stopped")) + + if (!isExplicitelyStopped) { + onErrorListener?.onError(StreamPackError("Screen source media projection has been stopped")) + } } } @@ -97,6 +108,8 @@ class ScreenSource( val resultCode = activityResult!!.resultCode val resultData = activityResult!!.data!! + isExplicitelyStopped = false + val orientedSize = orientationProvider.getOrientedSize(videoConfig!!.resolution) mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, resultData).apply { virtualDisplay = createVirtualDisplay( @@ -115,6 +128,8 @@ class ScreenSource( override fun stopStream() { + isExplicitelyStopped = true + virtualDisplay?.release() virtualDisplay = null mediaProjection?.stop()