import QtMobility.systeminfo 1.2
import QtMobility.location 1.2
-// TODO: resolutions and aspect ratios
// TODO: postcapture
-// TODO: battery low state
-// TODO: disk space
// TODO: flash not ready
// TODO: focus, caf, ...
// TODO: portrait/landscape
-// TODO: record video in a hidden directory and then copy the video to avoid tracker indexing it.
// TODO: stop viewfinder in settings pages ?
-// TODO: prevent going to mass storage while recording and capturing
-// TODO: sounds
// TODO: grid lines, face tracking, ambr
// TODO: complete settings pages
-// TODO: stop camera properly when we get closed.
// TODO: select primary/secondary camera.
// TODO: disable debug builds.
// TODO: a way to get buffers to the application
// TODO: fcam like functionality (precise control over capture parameters).
+// TODO: mute video sound
PageStackWindow {
id: root
Component.onCompleted: {
theme.inverted = true;
- if (settings.mode == 0) {
- openFile("ImagePage.qml");
- }
- else {
- openFile("VideoPage.qml");
- }
+ // TODO: hardcoding device id
+ root.resetCamera(0, settings.mode);
}
function showError(msg) {
error.show();
}
+ function resetCamera(deviceId, mode) {
+ if (!cam.reset(deviceId, mode)) {
+ showError(qsTr("Failed to set camera device and mode. Please restart the application."));
+ }
+ }
+
PositionSource {
+ // NOTE: The source will not reset the position when we lose the signal.
+ // This shouldn't be a big problem as we are course enough.
+ // If we ever need street level updates then this will be an issue.
id: positionSource
active: settings.useGps
// TODO: we cannot bind to cam.running because camera will stop
CameraResources {
id: resourcePolicy
- onAcquiredChanged: {
- if (resourcePolicy.acquired) {
- // TODO:
- }
- else {
- // TODO: We need a way to force a stop.
- }
- }
}
DeviceInfo {
videoSuffix: cam.videoSuffix
}
+ MountProtector {
+ id: mountProtector
+ path: fileNaming.path
+ }
+
function replacePage(file) {
pageStack.replace(Qt.resolvedUrl(file), {cam: cam}, true);
}
camera: cam
function setImageResolution() {
if (!imageSettings.setResolution(settings.imageAspectRatio, settings.imageResolution)) {
- showError(qsTr("Failed to set required resolution"));
+ showError(qsTr("Failed to set required resolution"));
}
}
}
}
+ VideoSettings {
+ id: videoSettings
+ camera: cam
+
+ function setVideoResolution() {
+ if (!videoSettings.setResolution(settings.videoAspectRatio, settings.videoResolution)) {
+ showError(qsTr("Failed to set required resolution"));
+ }
+ }
+
+ onReadyChanged: {
+ if (ready) {
+ videoSettings.setVideoResolution();
+ }
+ }
+ }
+
Connections {
target: settings
+
onImageAspectRatioChanged: {
imageSettings.setImageResolution();
}
onImageResolutionChanged: {
imageSettings.setImageResolution();
}
+
+ onVideoResolutionChanged: {
+ videoSettings.setVideoResolution();
+ }
}
Camera {
console.log("Camera error (" + code + "): " + message + " " + debug);
showError(qsTr("Camera error. Please restart the application."));
cam.stop();
+ resourcePolicy.acquire(CameraResources.None);
+ mountProtector.unlock();
}
- // TODO: hardcoding device id
- Component.onCompleted: { cam.deviceId = 0; mode = settings.mode; }
+ onRunningChanged: {
+ if (!cam.running) {
+ mountProtector.unlock();
+ }
+ }
+
+ Component.onDestruction: cam.stop();
// TODO: Hack
z: -1
opacity: 0
color: "black"
}
+
+ notifications: Sounds {
+ id: sounds
+ mute: !settings.soundEnabled
+ }
+
}
- Scene {
- id: sceneController
- camera: cam
- value: ready ? camera.mode == Camera.VideoMode ? settings.videoSceneMode : settings.imageSceneMode : 0
+ Binding {
+ target: cam.flash
+ property: "value"
+ when: cam.mode == Camera.ImageMode
+ value: settings.imageFlashMode
}
- ColorTone {
- id: colorToneController
- camera: cam
- value: ready ? camera.mode == Camera.VideoMode ? settings.videoColorFilter : settings.imageColorFilter : 0
+ Binding {
+ target: settings
+ property: "imageFlashMode"
+ when: cam.mode == Camera.ImageMode
+ value: cam.flash.value
}
- WhiteBalance {
- id: whiteBalanceController
- camera: cam
- value: ready ? camera.mode == Camera.VideoMode ? settings.videoWhiteBalance : settings.imageWhiteBalance : 0
+ Binding {
+ target: cam.scene
+ property: "value"
+ when: cam.mode == Camera.VideoMode
+ value: settings.videoSceneMode
+ }
+
+ Binding {
+ target: cam.scene
+ property: "value"
+ when: cam.mode == Camera.ImageMode
+ value: settings.imageSceneMode
+ }
+
+ Binding {
+ target: cam.evComp
+ property: "value"
+ when: cam.mode == Camera.ImageMode
+ value: settings.imageEvComp
+ }
+
+ Binding {
+ target: cam.evComp
+ property: "value"
+ when: cam.mode == Camera.VideoMode
+ value: settings.videoEvComp
+ }
+
+ Binding {
+ target: settings
+ property: "imageEvComp"
+ when: cam.mode == Camera.ImageMode
+ value: cam.evComp.value
+ }
+
+ Binding {
+ target: settings
+ property: "videoEvComp"
+ when: cam.mode == Camera.VideoMode
+ value: cam.evComp.value
+ }
+
+ Binding {
+ target: cam.whiteBalance
+ property: "value"
+ when: cam.mode == Camera.ImageMode
+ value: settings.imageWhiteBalance
+ }
+
+ Binding {
+ target: cam.whiteBalance
+ property: "value"
+ when: cam.mode == Camera.VideoMode
+ value: settings.videoWhiteBalance
+ }
+
+ Binding {
+ target: cam.colorTone
+ property: "value"
+ when: cam.mode == Camera.ImageMode
+ value: settings.imageColorFilter
+ }
+
+ Binding {
+ target: cam.colorTone
+ property: "value"
+ when: cam.mode == Camera.VideoMode
+ value: settings.videoColorFilter
+ }
+
+ Binding {
+ target: cam.iso
+ property: "value"
+ when: cam.mode == Camera.ImageMode
+ value: settings.imageIso
+ }
+
+ Binding {
+ target: settings
+ property: "imageIso"
+ when: cam.mode == Camera.ImageMode
+ value: cam.iso.value
}
ModeController {
dimmer: root.dimmer
}
- Iso {
- id: iso
- camera: cam
- value: ready ? settings.imageIso : 0
- }
-
Connections {
target: cam
onModeChanged: {