Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import com.google.jetpackcamera.core.camera.postprocess.PostProcessModule.Compan
import com.google.jetpackcamera.core.camera.utils.APP_REQUIRED_PERMISSIONS
import com.google.jetpackcamera.core.camera.utils.provideUpdatingSurface
import com.google.jetpackcamera.core.common.FakeFilePathGenerator
import com.google.jetpackcamera.model.CaptureMode
import com.google.jetpackcamera.model.FlashMode
import com.google.jetpackcamera.model.Illuminant
import com.google.jetpackcamera.model.LensFacing
Expand Down Expand Up @@ -240,35 +241,55 @@ class CameraXCameraSystemTest {
runSetStabilizationModeTest(StabilizationMode.HIGH_QUALITY)
}

@Test
fun setStabilizationMode_off_imageOnly_updatesCameraState(): Unit = runBlocking {
runSetStabilizationModeTest(StabilizationMode.OFF, CaptureMode.IMAGE_ONLY)
}

private suspend fun CoroutineScope.runSetStabilizationModeTest(
stabilizationMode: StabilizationMode
stabilizationMode: StabilizationMode,
captureMode: CaptureMode? = null
) {
// Arrange.
val constraintsRepository = SettableConstraintsRepositoryImpl()
val appSettings = CameraAppSettings(stabilizationMode = StabilizationMode.OFF)
val cameraSystem = createAndInitCameraXCameraSystem(
appSettings = appSettings,
appSettings = CameraAppSettings(stabilizationMode = StabilizationMode.OFF),
constraintsRepository = constraintsRepository
)
val cameraConstraints =
constraintsRepository.systemConstraints.value?.forCurrentLens(appSettings)
constraintsRepository.systemConstraints.value?.forCurrentLens(
DEFAULT_CAMERA_APP_SETTINGS
)
assume().withMessage("Stabilisation $stabilizationMode not supported, skip the test.")
.that(
cameraConstraints != null && cameraConstraints.supportedStabilizationModes.contains(
stabilizationMode
)
cameraConstraints != null &&
cameraConstraints.supportedStabilizationModes.contains(
stabilizationMode
)
).isTrue()
var initialStabilizationMode: StabilizationMode? = StabilizationMode.OFF
if (stabilizationMode == StabilizationMode.OFF) {
initialStabilizationMode = cameraConstraints?.supportedStabilizationModes
?.firstOrNull { it != StabilizationMode.OFF }
assume().withMessage("No stabilisation other than OFF is supported, skip the test.")
.that(initialStabilizationMode != null).isTrue()
initialStabilizationMode?.let {
cameraSystem.setStabilizationMode(initialStabilizationMode)
}
}

cameraSystem.startCameraAndWaitUntilRunning()
val stabilizationCheck: ReceiveChannel<StabilizationMode> =
cameraSystem.getCurrentCameraState()
.map { it.stabilizationMode }
.produceIn(this)
cameraSystem.startCameraAndWaitUntilRunning()

// Ensure we start in a state with stabilization mode OFF
stabilizationCheck.awaitValue(StabilizationMode.OFF)
// Ensure we start in a state with the initial stabilization mode
stabilizationCheck.awaitValue(initialStabilizationMode)

// Act.
cameraSystem.setStabilizationMode(stabilizationMode)
captureMode?.let { cameraSystem.setCaptureMode(it) }

// Assert.
stabilizationCheck.awaitValue(stabilizationMode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,12 @@ private fun createPreviewUseCase(
when (stabilizationMode) {
StabilizationMode.ON -> setPreviewStabilizationEnabled(true)
StabilizationMode.OPTICAL -> setOpticalStabilizationModeEnabled(true)
StabilizationMode.OFF -> setOpticalStabilizationModeEnabled(false)
StabilizationMode.OFF -> {
setOpticalStabilizationModeEnabled(false)
// Setting this to false in Preview use case will disable video stabilization, even in
// IMAGE_ONLY mode where there isn't a video capture use case attached
setPreviewStabilizationEnabled(false)
}
StabilizationMode.HIGH_QUALITY -> {} // No-op. Handled by VideoCapture use case.
else -> throw UnsupportedOperationException(
"Unexpected stabilization mode: $stabilizationMode. Stabilization mode should always " +
Expand Down
Loading