Skip to content
This repository has been archived by the owner on Mar 8, 2024. It is now read-only.

Commit

Permalink
Merge pull request #22 from brightec/fix/SurfaceAbandoned
Browse files Browse the repository at this point in the history
fix/SurfaceAbandoned:
  • Loading branch information
NickHolcombe committed Oct 21, 2019
2 parents dc131b4 + 07590cc commit 80cbf70
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ internal class Camera2Source(
override fun onOpened(camera: CameraDevice) {
cameraOpening = false
cameraDevice = camera

if (surfaces.any { !it.isValid }) {
release()
val exception = CameraException()
Timber.e(exception, "Surfaces no longer valid")
listener?.onCameraFailure(exception)
return
}

listener?.onCameraReady()
createCaptureSession(
surfaces = surfaces,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,32 @@ internal class Camera2SourceTest {
)
}

@Test
fun cameraId_cameraOpened_sufacesInvalid__start__setsNotOpening_setCameraDevice_error() {
doNothing().whenever(cameraSource).createCaptureSession(any(), any())

// GIVEN
val cameraId = "some id"
doReturn(cameraId).whenever(cameraSource).selectCamera()
whenever(cameraManager.openCamera(any(), any(), anyOrNull<Handler>())).then {
val stateCallback = it.getArgument<CameraDevice.StateCallback>(1)
stateCallback.onOpened(cameraDevice)
}

// THEN
val surface = mock<Surface> {
on { isValid } doReturn false
}
val surfaces = listOf(surface)
val listener = mock<OnCameraReadyListener>()
cameraSource.start(surfaces, listener)

// THEN
assertFalse(cameraSource.cameraOpening)
verify(cameraSource).cameraDevice = cameraDevice
verify(listener).onCameraFailure(any())
}

@Test
fun cameraId_cameraOpened__start__setsNotOpening_setCameraDevice_callListener_createSession() {
doNothing().whenever(cameraSource).createCaptureSession(any(), any())
Expand All @@ -182,7 +208,10 @@ internal class Camera2SourceTest {
}

// THEN
val surfaces = mock<List<Surface>>()
val surface = mock<Surface> {
on { isValid } doReturn true
}
val surfaces = listOf(surface)
val listener = mock<OnCameraReadyListener>()
cameraSource.start(surfaces, listener)

Expand Down

0 comments on commit 80cbf70

Please sign in to comment.