blob: 55236986212e30dd7347266f8a8cae508be67c05 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtMultimedia
Rectangle {
id : cameraUI
width: 800
height: 480
color: "black"
state: "PhotoCapture"
property string platformScreen: ""
property int buttonsPanelLandscapeWidth: 328
property int buttonsPanelPortraitHeight: 180
onWidthChanged: {
setState()
}
function setState() {
if (Qt.platform.os === "android" || Qt.platform.os === "ios") {
if (Screen.desktopAvailableWidth < Screen.desktopAvailableHeight) {
stillControls.state = "MobilePortrait";
} else {
stillControls.state = "MobileLandscape";
}
} else {
stillControls.state = "Other";
}
console.log("State: " + stillControls.state);
stillControls.buttonsWidth = (stillControls.state === "MobilePortrait")
? Screen.desktopAvailableWidth/3.4 : 144
}
states: [
State {
name: "PhotoCapture"
StateChangeScript {
script: {
camera.start()
}
}
},
State {
name: "PhotoPreview"
},
State {
name: "VideoCapture"
StateChangeScript {
script: {
camera.start()
}
}
},
State {
name: "VideoPreview"
StateChangeScript {
script: {
camera.stop()
}
}
}
]
CaptureSession {
id: captureSession
camera: Camera {
id: camera
}
imageCapture: ImageCapture {
id: imageCapture
}
recorder: MediaRecorder {
id: recorder
// resolution: "640x480"
// frameRate: 30
}
videoOutput: viewfinder
}
PhotoPreview {
id : photoPreview
anchors.fill : parent
onClosed: cameraUI.state = "PhotoCapture"
visible: (cameraUI.state === "PhotoPreview")
focus: visible
source: imageCapture.preview
}
VideoPreview {
id : videoPreview
anchors.fill : parent
onClosed: cameraUI.state = "VideoCapture"
visible: (cameraUI.state === "VideoPreview")
focus: visible
//don't load recorded video if preview is invisible
source: visible ? recorder.actualLocation : ""
}
VideoOutput {
id: viewfinder
visible: ((cameraUI.state === "PhotoCapture") || (cameraUI.state === "VideoCapture"))
x: 0
y: 0
width: ((stillControls.state === "MobilePortrait") ? parent.width : (parent.width-buttonsPanelLandscapeWidth))
height: ((stillControls.state === "MobilePortrait") ? parent.height - buttonsPanelPortraitHeight : parent.height)
// autoOrientation: true
}
PhotoCaptureControls {
id: stillControls
state: setState()
anchors.fill: parent
buttonsPanelPortraitHeight: cameraUI.buttonsPanelPortraitHeight
buttonsPanelWidth: cameraUI.buttonsPanelLandscapeWidth
captureSession: captureSession
visible: (cameraUI.state === "PhotoCapture")
onPreviewSelected: cameraUI.state = "PhotoPreview"
onVideoModeSelected: cameraUI.state = "VideoCapture"
previewAvailable: imageCapture.preview.length !== 0
}
VideoCaptureControls {
id: videoControls
state: stillControls.state
anchors.fill: parent
buttonsWidth: stillControls.buttonsWidth
buttonsPanelPortraitHeight: cameraUI.buttonsPanelPortraitHeight
buttonsPanelWidth: cameraUI.buttonsPanelLandscapeWidth
captureSession: captureSession
visible: (cameraUI.state === "VideoCapture")
onPreviewSelected: cameraUI.state = "VideoPreview"
onPhotoModeSelected: cameraUI.state = "PhotoCapture"
}
}
|