Skip to content
Open
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 @@ -140,4 +140,50 @@ interface CameraSystem {
CLEAR_UI
}
}

companion object {
/**
* Applies an individual camera app setting with the given [settingExtractor] and
* [settingApplicator] if the new setting differs from the old setting.
*/
private suspend inline fun <R> CameraAppSettings.applyDiff(
new: CameraAppSettings,
settingExtractor: CameraAppSettings.() -> R,
crossinline settingApplicator: suspend (R) -> Unit
) {
val oldSetting = settingExtractor.invoke(this)
val newSetting = settingExtractor.invoke(new)
if (oldSetting != newSetting) {
settingApplicator(newSetting)
}
}

/**
* Checks whether each actionable individual setting has changed and applies them to
* [CameraSystem].
*/
suspend fun CameraAppSettings.applyDiffs(
new: CameraAppSettings,
cameraSystem: CameraSystem
) {
applyDiff(new, CameraAppSettings::cameraLensFacing, cameraSystem::setLensFacing)
applyDiff(new, CameraAppSettings::flashMode, cameraSystem::setFlashMode)
applyDiff(new, CameraAppSettings::streamConfig, cameraSystem::setStreamConfig)
applyDiff(new, CameraAppSettings::aspectRatio, cameraSystem::setAspectRatio)
applyDiff(new, CameraAppSettings::stabilizationMode, cameraSystem::setStabilizationMode)
applyDiff(new, CameraAppSettings::targetFrameRate, cameraSystem::setTargetFrameRate)
applyDiff(
new,
CameraAppSettings::maxVideoDurationMillis,
cameraSystem::setMaxVideoDuration
)
applyDiff(new, CameraAppSettings::videoQuality, cameraSystem::setVideoQuality)
applyDiff(new, CameraAppSettings::audioEnabled, cameraSystem::setAudioEnabled)
applyDiff(
new,
CameraAppSettings::lowLightBoostPriority,
cameraSystem::setLowLightBoostPriority
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,14 @@ enum class ExternalCaptureMode {
/**
* Under this mode, the app is launched by an external intent to capture multiple images.
*/
MultipleImageCapture
MultipleImageCapture;

companion object {
fun ExternalCaptureMode.toCaptureMode() = when (this) {
ImageCapture -> CaptureMode.IMAGE_ONLY
MultipleImageCapture -> CaptureMode.IMAGE_ONLY
VideoCapture -> CaptureMode.VIDEO_ONLY
Standard -> null
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import com.google.jetpackcamera.model.DarkMode
import com.google.jetpackcamera.model.DebugSettings
import com.google.jetpackcamera.model.DeviceRotation
import com.google.jetpackcamera.model.DynamicRange
import com.google.jetpackcamera.model.ExternalCaptureMode
import com.google.jetpackcamera.model.ExternalCaptureMode.Companion.toCaptureMode
import com.google.jetpackcamera.model.FlashMode
import com.google.jetpackcamera.model.ImageOutputFormat
import com.google.jetpackcamera.model.LensFacing
Expand Down Expand Up @@ -61,4 +63,20 @@ fun CameraSystemConstraints.forCurrentLens(
cameraAppSettings: CameraAppSettings
): CameraConstraints? = perLensConstraints[cameraAppSettings.cameraLensFacing]

/**
* updates the capture mode based on the preview mode
*/
fun CameraAppSettings.applyExternalCaptureMode(
externalCaptureMode: ExternalCaptureMode
): CameraAppSettings {
val requiredCaptureModeOverride = externalCaptureMode.toCaptureMode()
return if (requiredCaptureModeOverride == null ||
requiredCaptureModeOverride == this.captureMode
) {
this
} else {
this.copy(captureMode = requiredCaptureModeOverride)
}
}

val DEFAULT_CAMERA_APP_SETTINGS = CameraAppSettings()
Loading
Loading