Corrected video recording resolution for front camera
[harmattan/cameraplus] / qml / MainPage.qml
index 5598c0b..811ba31 100644 (file)
@@ -25,8 +25,7 @@ import QtCamera 1.0
 import CameraPlus 1.0
 
 // TODO: flash not ready (battery low or flash not ready message)
-// TODO: rotate post capture image
-// TODO: front camera
+// TODO: front camera night mode
 
 CameraPage {
     id: root
@@ -72,8 +71,7 @@ CameraPage {
 
     Component.onCompleted: {
         platformSettings.init()        
-        // TODO: hardcoding device id
-        root.resetCamera(0, settings.mode)
+        root.resetCamera(settings.device, settings.mode)
     }
 
     PlatformSettings {
@@ -82,6 +80,14 @@ CameraPage {
 
     Settings {
         id: settings
+        onDeviceChanged: {
+            // Reset pipeline manager error
+            pipelineManager.error = false
+
+            if (root.resetCamera(settings.device, settings.mode)) {
+                pipelineManager.startCamera()
+            }
+        }
     }
 
     PipelineManager {
@@ -93,7 +99,10 @@ CameraPage {
     function resetCamera(deviceId, mode) {
         if (!viewfinder.camera.reset(deviceId, mode)) {
             showError(qsTr("Failed to set camera device and mode. Please restart the application."))
+            return false
         }
+
+        return true
     }
 
     function showError(msg) {
@@ -188,7 +197,10 @@ CameraPage {
         camera: viewfinder.camera
 
         function setImageResolution() {
-            if (!imageSettings.setResolution(settings.imageAspectRatio, settings.imageResolution)) {
+            var aspectRatio = settings.device == 1 ? settings.secondaryImageAspectRatio : settings.primaryImageAspectRatio
+            var resolution = settings.device == 1 ? settings.secondaryImageResolution : settings.primaryImageResolution
+
+            if (!imageSettings.setResolution(aspectRatio, resolution)) {
                 showError(qsTr("Failed to set required resolution"))
             }
         }
@@ -205,7 +217,10 @@ CameraPage {
         camera: viewfinder.camera
 
         function setVideoResolution() {
-            if (!videoSettings.setResolution(settings.videoAspectRatio, settings.videoResolution)) {
+            var aspectRatio = settings.device == 1 ? settings.secondaryVideoAspectRatio : settings.primaryVideoAspectRatio
+            var resolution = settings.device == 1 ? settings.secondaryVideoResolution : settings.primaryVideoResolution
+
+            if (!videoSettings.setResolution(aspectRatio, resolution)) {
                 showError(qsTr("Failed to set required resolution"))
             }
         }
@@ -220,17 +235,15 @@ CameraPage {
     Connections {
         target: settings
 
-        onImageAspectRatioChanged: {
-            imageSettings.setImageResolution()
-        }
+        onPrimaryImageResolutionChanged: imageSettings.setImageResolution()
+        onPrimaryImageAspectRatioChanged: imageSettings.setImageResolution()
+        onSecondaryImageResolutionChanged: imageSettings.setImageResolution()
+        onSecondaryImageAspectRatioChanged: imageSettings.setImageResolution()
 
-        onImageResolutionChanged: {
-            imageSettings.setImageResolution()
-        }
-
-        onVideoResolutionChanged: {
-            videoSettings.setVideoResolution()
-        }
+        onPrimaryVideoResolutionChanged: videoSettings.setVideoResolution()
+        onPrimaryVideoAspectRatioChanged: videoSettings.setVideoResolution()
+        onSecondaryVideoResolutionChanged: videoSettings.setVideoResolution()
+        onSecondaryVideoAspectRatioChanged: videoSettings.setVideoResolution()
     }
 
     ModeController {