import CameraPlus 1.0
// TODO: flash not ready (battery low or flash not ready message)
-// TODO: front camera night mode
CameraPage {
id: root
+ property bool deviceChangeInProgress: false
+ property bool inCaptureMode: mainView.currentIndex == 1
+
CameraTheme {
id: cameraTheme
}
Settings {
id: settings
+ onDeviceAboutToChange: {
+ root.deviceChangeInProgress = true
+ }
+
onDeviceChanged: {
+ viewfinder.cameraDeviceChanged()
+
// Reset pipeline manager error
pipelineManager.error = false
if (root.resetCamera(settings.device, settings.mode)) {
+ root.deviceChangeInProgress = false
pipelineManager.startCamera()
}
}
+
+ onImageAspectRatioChanged: {
+ if (!root.deviceChangeInProgress) {
+ imageSettings.setImageResolution()
+ }
+ }
+
+ onImageResolutionChanged: {
+ if (!root.deviceChangeInProgress) {
+ imageSettings.setImageResolution()
+ }
+ }
+
+ onVideoResolutionChanged: {
+ if (!root.deviceChangeInProgress) {
+ videoSettings.setVideoResolution()
+ }
+ }
+
+ onVideoAspectRatioChanged: {
+ if (!root.deviceChangeInProgress) {
+ videoSettings.setVideoResolution()
+ }
+ }
}
PipelineManager {
return false
}
+ if (mode == Camera.ImageMode) {
+ imageSettings.setImageResolution()
+ }
+ else if (mode == Camera.VideoMode) {
+ videoSettings.setVideoResolution()
+ }
+
return true
}
}
property alias dimmer: camDimmer
+
+ PlatformQuirks {
+ id: platformQuirks
+ }
+
+ DisplayState {
+ id: displayState
+ inhibitDim: mainView.currentItem != null ? mainView.currentItem.inhibitDim : false
+ }
+
CameraPositionSource {
id: positionSource
- active: settings.useGps
- // TODO: we cannot bind to cam.running because camera will stop
- // when the connection dialog pops up and we end up with an infinite loop
- // active: cam.running && settings.useGps
+ active: (viewfinder.camera.running || platformQuirks.forceOn) && settings.useGps && displayState.isOn
onPositionChanged: geocode.search(position.coordinate.longitude, position.coordinate.latitude)
}
ReverseGeocode {
id: geocode
- active: viewfinder.camera.running && settings.useGps && settings.useGeotags
+ active: (viewfinder.camera.running || platformQuirks.forceOn) && settings.useGps && settings.useGeotags && displayState.isOn
}
DeviceInfo {
id: fileNaming
imageSuffix: viewfinder.camera.imageSuffix
videoSuffix: viewfinder.camera.videoSuffix
+ imagePath: platformSettings.imagePath
+ videoPath: platformSettings.videoPath
+ temporaryVideoPath: platformSettings.temporaryVideoPath
+ settings: settings
}
MountProtector {
id: mountProtector
- path: fileNaming.path
}
TrackerStore {
model: deviceInfo.model
}
- function checkDiskSpace() {
- return fileSystem.hasFreeSpace(fileNaming.path)
- }
-
ImageSettings {
id: imageSettings
camera: viewfinder.camera
function setImageResolution() {
- var aspectRatio = settings.device == 1 ? settings.secondaryImageAspectRatio : settings.primaryImageAspectRatio
- var resolution = settings.device == 1 ? settings.secondaryImageResolution : settings.primaryImageResolution
-
- if (!imageSettings.setResolution(aspectRatio, resolution)) {
+ if (!imageSettings.setResolution(settings.imageAspectRatio, settings.imageResolution)) {
showError(qsTr("Failed to set required resolution"))
}
}
-
- onReadyChanged: {
- if (ready) {
- imageSettings.setImageResolution()
- }
- }
}
VideoSettings {
camera: viewfinder.camera
function setVideoResolution() {
- var aspectRatio = settings.device == 1 ? settings.secondaryVideoAspectRatio : settings.primaryVideoAspectRatio
- var resolution = settings.device == 1 ? settings.secondaryVideoResolution : settings.primaryVideoResolution
-
- if (!videoSettings.setResolution(aspectRatio, resolution)) {
+ if (!videoSettings.setResolution(settings.videoAspectRatio, settings.videoResolution)) {
showError(qsTr("Failed to set required resolution"))
}
}
-
- onReadyChanged: {
- if (ready) {
- videoSettings.setVideoResolution()
- }
- }
- }
-
- Connections {
- target: settings
-
- onPrimaryImageResolutionChanged: imageSettings.setImageResolution()
- onPrimaryImageAspectRatioChanged: imageSettings.setImageResolution()
- onSecondaryImageResolutionChanged: imageSettings.setImageResolution()
- onSecondaryImageAspectRatioChanged: imageSettings.setImageResolution()
-
- onPrimaryVideoResolutionChanged: videoSettings.setVideoResolution()
- onPrimaryVideoAspectRatioChanged: videoSettings.setVideoResolution()
- onSecondaryVideoResolutionChanged: videoSettings.setVideoResolution()
- onSecondaryVideoAspectRatioChanged: videoSettings.setVideoResolution()
}
ModeController {
DeviceKeys {
id: keys
- active: Qt.application.active && pipelineManager.scaleAcquired
+ active: Qt.application.active && pipelineManager.scaleAcquired && root.inCaptureMode && !mainView.moving
repeat: !settings.zoomAsShutter
}
+ Timer {
+ id: proximityTimer
+ running: proximitySensor.close
+ repeat: false
+ interval: 500
+ onTriggered: {
+ if (proximitySensor.close) {
+ proximitySensor.sensorClosed = true
+ }
+ }
+ }
+
+ CameraProximitySensor {
+ id: proximitySensor
+ property bool sensorClosed: false
+
+ active: Qt.application.active && viewfinder.camera.running && settings.proximityAsShutter && root.inCaptureMode && !mainView.moving
+ onCloseChanged: {
+ if (!close) {
+ sensorClosed = false
+ }
+ }
+ }
+
Standby {
policyLost: pipelineManager.state == "policyLost"
show: !Qt.application.active || pipelineManager.showStandBy ||
- (mainView.currentIndex == 1 && !viewfinder.camera.running)
+ (inCaptureMode && !viewfinder.camera.running)
}
}