Skip to content

Commit 3a39c00

Browse files
committed
fix(core): camera: fix dead lock when calling startPreview(surface)
1 parent 53fc65c commit 3a39c00

File tree

1 file changed

+10
-2
lines changed
  • core/src/main/java/io/github/thibaultbee/streampack/core/elements/sources/video/camera

1 file changed

+10
-2
lines changed

core/src/main/java/io/github/thibaultbee/streampack/core/elements/sources/video/camera/CameraSource.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.content.Context
2121
import android.content.pm.PackageManager
2222
import android.hardware.camera2.CameraManager
2323
import android.hardware.camera2.CaptureRequest
24+
import android.util.Log
2425
import android.util.Size
2526
import android.view.Surface
2627
import androidx.annotation.RequiresPermission
@@ -131,10 +132,12 @@ internal class CameraSource(
131132

132133
@RequiresPermission(Manifest.permission.CAMERA)
133134
override suspend fun setPreview(surface: Surface) {
135+
Log.e("startPreviewStopPreviewTest", ">>>>>>>>>>> set preview in")
134136
if (isPreviewingFlow.value) {
135137
Logger.w(TAG, "Trying to set preview while previewing")
136138
}
137139
controller.addOutput(CameraSurface(PREVIEW_NAME, surface))
140+
Log.e("startPreviewStopPreviewTest", ">>>>>>>>>>> set preview out")
138141
}
139142

140143
@SuppressLint("MissingPermission")
@@ -196,7 +199,7 @@ internal class CameraSource(
196199
}
197200

198201
@RequiresPermission(Manifest.permission.CAMERA)
199-
override suspend fun startPreview(): Unit = previewMutex.withLock {
202+
private suspend fun startPreviewUnsafe() {
200203
if (isPreviewingFlow.value) {
201204
Logger.w(TAG, "Camera is already previewing")
202205
return
@@ -205,6 +208,11 @@ internal class CameraSource(
205208
_isPreviewingFlow.emit(true)
206209
}
207210

211+
@RequiresPermission(Manifest.permission.CAMERA)
212+
override suspend fun startPreview(): Unit = previewMutex.withLock {
213+
startPreviewUnsafe()
214+
}
215+
208216
/**
209217
* Starts video preview on [previewSurface].
210218
*/
@@ -215,7 +223,7 @@ internal class CameraSource(
215223
return
216224
}
217225
setPreview(previewSurface)
218-
startPreview()
226+
startPreviewUnsafe()
219227
}
220228

221229
@SuppressLint("MissingPermission")

0 commit comments

Comments
 (0)