1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the plugins of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QDECLARATIVECAMERA_H
41#define QDECLARATIVECAMERA_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is not part of the Qt API. It exists for the convenience
48// of other Qt classes. This header file may change from version to
49// version without notice, or even be removed.
50//
51// We mean it.
52//
53
54#include "qdeclarativecameracapture_p.h"
55#include "qdeclarativecamerarecorder_p.h"
56
57#include <qcamera.h>
58#include <qcamerainfo.h>
59#include <qcameraimageprocessing.h>
60#include <qcameraimagecapture.h>
61
62#include <QtCore/qbasictimer.h>
63#include <QtCore/qdatetime.h>
64#include <QtQml/qqmlparserstatus.h>
65#include <QtQml/qqml.h>
66#include <QtQml/qjsvalue.h>
67
68QT_BEGIN_NAMESPACE
69
70class QDeclarativeCameraExposure;
71class QDeclarativeCameraFocus;
72class QDeclarativeCameraFlash;
73class QDeclarativeCameraImageProcessing;
74class QDeclarativeMediaMetaData;
75class QDeclarativeCameraViewfinder;
76
77class QDeclarativeCamera : public QObject, public QQmlParserStatus
78{
79 Q_OBJECT
80 Q_INTERFACES(QQmlParserStatus)
81
82 Q_PROPERTY(QString deviceId READ deviceId WRITE setDeviceId NOTIFY deviceIdChanged REVISION 1)
83 Q_PROPERTY(Position position READ position WRITE setPosition NOTIFY positionChanged REVISION 1)
84 Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged REVISION 1)
85 Q_PROPERTY(int orientation READ orientation NOTIFY orientationChanged REVISION 1)
86
87 Q_PROPERTY(CaptureMode captureMode READ captureMode WRITE setCaptureMode NOTIFY captureModeChanged)
88 Q_PROPERTY(State cameraState READ cameraState WRITE setCameraState NOTIFY cameraStateChanged)
89 Q_PROPERTY(Status cameraStatus READ cameraStatus NOTIFY cameraStatusChanged)
90 Q_PROPERTY(LockStatus lockStatus READ lockStatus NOTIFY lockStatusChanged)
91 Q_PROPERTY(Error errorCode READ errorCode NOTIFY errorChanged)
92 Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
93
94 Q_PROPERTY(Availability availability READ availability NOTIFY availabilityChanged)
95
96 Q_PROPERTY(qreal opticalZoom READ opticalZoom WRITE setOpticalZoom NOTIFY opticalZoomChanged)
97 Q_PROPERTY(qreal maximumOpticalZoom READ maximumOpticalZoom NOTIFY maximumOpticalZoomChanged)
98 Q_PROPERTY(qreal digitalZoom READ digitalZoom WRITE setDigitalZoom NOTIFY digitalZoomChanged)
99 Q_PROPERTY(qreal maximumDigitalZoom READ maximumDigitalZoom NOTIFY maximumDigitalZoomChanged)
100
101 Q_PROPERTY(QObject *mediaObject READ mediaObject NOTIFY mediaObjectChanged SCRIPTABLE false DESIGNABLE false)
102 Q_PROPERTY(QDeclarativeCameraCapture* imageCapture READ imageCapture CONSTANT)
103 Q_PROPERTY(QDeclarativeCameraRecorder* videoRecorder READ videoRecorder CONSTANT)
104 Q_PROPERTY(QDeclarativeCameraExposure* exposure READ exposure CONSTANT)
105 Q_PROPERTY(QDeclarativeCameraFlash* flash READ flash CONSTANT)
106 Q_PROPERTY(QDeclarativeCameraFocus* focus READ focus CONSTANT)
107 Q_PROPERTY(QDeclarativeCameraImageProcessing* imageProcessing READ imageProcessing CONSTANT)
108 Q_PROPERTY(QDeclarativeMediaMetaData *metaData READ metaData CONSTANT REVISION 1)
109 Q_PROPERTY(QDeclarativeCameraViewfinder *viewfinder READ viewfinder CONSTANT REVISION 1)
110
111 Q_ENUMS(Position)
112 Q_ENUMS(CaptureMode)
113 Q_ENUMS(State)
114 Q_ENUMS(Status)
115 Q_ENUMS(LockStatus)
116 Q_ENUMS(Error)
117
118 Q_ENUMS(FlashMode)
119 Q_ENUMS(ExposureMode)
120 Q_ENUMS(MeteringMode)
121
122 Q_ENUMS(FocusMode)
123 Q_ENUMS(FocusPointMode)
124 Q_ENUMS(FocusAreaStatus)
125 Q_ENUMS(Availability)
126
127public:
128 enum Position {
129 UnspecifiedPosition = QCamera::UnspecifiedPosition,
130 BackFace = QCamera::BackFace,
131 FrontFace = QCamera::FrontFace
132 };
133
134 enum CaptureMode {
135 CaptureViewfinder = QCamera::CaptureViewfinder,
136 CaptureStillImage = QCamera::CaptureStillImage,
137 CaptureVideo = QCamera::CaptureVideo
138 };
139
140 enum State
141 {
142 ActiveState = QCamera::ActiveState,
143 LoadedState = QCamera::LoadedState,
144 UnloadedState = QCamera::UnloadedState
145 };
146
147 enum Status
148 {
149 UnavailableStatus = QCamera::UnavailableStatus,
150 UnloadedStatus = QCamera::UnloadedStatus,
151 LoadingStatus = QCamera::LoadingStatus,
152 UnloadingStatus = QCamera::UnloadingStatus,
153 LoadedStatus = QCamera::LoadedStatus,
154 StandbyStatus = QCamera::StandbyStatus,
155 StartingStatus = QCamera::StartingStatus,
156 StoppingStatus = QCamera::StoppingStatus,
157 ActiveStatus = QCamera::ActiveStatus
158 };
159
160 enum LockStatus
161 {
162 Unlocked = QCamera::Unlocked,
163 Searching = QCamera::Searching,
164 Locked = QCamera::Locked
165 };
166
167 enum Error
168 {
169 NoError = QCamera::NoError,
170 CameraError = QCamera::CameraError,
171 InvalidRequestError = QCamera::InvalidRequestError,
172 ServiceMissingError = QCamera::ServiceMissingError,
173 NotSupportedFeatureError = QCamera::NotSupportedFeatureError
174 };
175
176 enum FlashMode {
177 FlashAuto = QCameraExposure::FlashAuto,
178 FlashOff = QCameraExposure::FlashOff,
179 FlashOn = QCameraExposure::FlashOn,
180 FlashRedEyeReduction = QCameraExposure::FlashRedEyeReduction,
181 FlashFill = QCameraExposure::FlashFill,
182 FlashTorch = QCameraExposure::FlashTorch,
183 FlashVideoLight = QCameraExposure::FlashVideoLight,
184 FlashSlowSyncFrontCurtain = QCameraExposure::FlashSlowSyncFrontCurtain,
185 FlashSlowSyncRearCurtain = QCameraExposure::FlashSlowSyncRearCurtain,
186 FlashManual = QCameraExposure::FlashManual
187 };
188
189 enum ExposureMode {
190 ExposureAuto = QCameraExposure::ExposureAuto,
191 ExposureManual = QCameraExposure::ExposureManual,
192 ExposurePortrait = QCameraExposure::ExposurePortrait,
193 ExposureNight = QCameraExposure::ExposureNight,
194 ExposureBacklight = QCameraExposure::ExposureBacklight,
195 ExposureSpotlight = QCameraExposure::ExposureSpotlight,
196 ExposureSports = QCameraExposure::ExposureSports,
197 ExposureSnow = QCameraExposure::ExposureSnow,
198 ExposureBeach = QCameraExposure::ExposureBeach,
199 ExposureLargeAperture = QCameraExposure::ExposureLargeAperture,
200 ExposureSmallAperture = QCameraExposure::ExposureSmallAperture,
201 ExposureAction = QCameraExposure::ExposureAction,
202 ExposureLandscape = QCameraExposure::ExposureLandscape,
203 ExposureNightPortrait = QCameraExposure::ExposureNightPortrait,
204 ExposureTheatre = QCameraExposure::ExposureTheatre,
205 ExposureSunset = QCameraExposure::ExposureSunset,
206 ExposureSteadyPhoto = QCameraExposure::ExposureSteadyPhoto,
207 ExposureFireworks = QCameraExposure::ExposureFireworks,
208 ExposureParty = QCameraExposure::ExposureParty,
209 ExposureCandlelight = QCameraExposure::ExposureCandlelight,
210 ExposureBarcode = QCameraExposure::ExposureBarcode,
211 ExposureModeVendor = QCameraExposure::ExposureModeVendor
212 };
213
214 enum MeteringMode {
215 MeteringMatrix = QCameraExposure::MeteringMatrix,
216 MeteringAverage = QCameraExposure::MeteringAverage,
217 MeteringSpot = QCameraExposure::MeteringSpot
218 };
219
220 enum FocusMode {
221 FocusManual = QCameraFocus::ManualFocus,
222 FocusHyperfocal = QCameraFocus::HyperfocalFocus,
223 FocusInfinity = QCameraFocus::InfinityFocus,
224 FocusAuto = QCameraFocus::AutoFocus,
225 FocusContinuous = QCameraFocus::ContinuousFocus,
226 FocusMacro = QCameraFocus::MacroFocus
227 };
228
229 enum FocusPointMode {
230 FocusPointAuto = QCameraFocus::FocusPointAuto,
231 FocusPointCenter = QCameraFocus::FocusPointCenter,
232 FocusPointFaceDetection = QCameraFocus::FocusPointFaceDetection,
233 FocusPointCustom = QCameraFocus::FocusPointCustom
234 };
235
236 enum FocusAreaStatus {
237 FocusAreaUnused = QCameraFocusZone::Unused,
238 FocusAreaSelected = QCameraFocusZone::Selected,
239 FocusAreaFocused = QCameraFocusZone::Focused
240 };
241
242 enum Availability {
243 Available = QMultimedia::Available,
244 Busy = QMultimedia::Busy,
245 Unavailable = QMultimedia::ServiceMissing,
246 ResourceMissing = QMultimedia::ResourceError
247 };
248
249 QDeclarativeCamera(QObject *parent = 0);
250 ~QDeclarativeCamera();
251
252 QObject *mediaObject() { return m_camera; }
253
254 QDeclarativeCameraCapture *imageCapture() { return m_imageCapture; }
255 QDeclarativeCameraRecorder *videoRecorder() { return m_videoRecorder; }
256 QDeclarativeCameraExposure *exposure() { return m_exposure; }
257 QDeclarativeCameraFlash *flash() { return m_flash; }
258 QDeclarativeCameraFocus *focus() { return m_focus; }
259 QDeclarativeCameraImageProcessing *imageProcessing() { return m_imageProcessing; }
260 QDeclarativeCameraViewfinder *viewfinder();
261
262 QDeclarativeMediaMetaData *metaData();
263
264 QString deviceId() const;
265 void setDeviceId(const QString &name);
266
267 Position position() const;
268 void setPosition(Position position);
269
270 QString displayName() const;
271 int orientation() const;
272
273 CaptureMode captureMode() const;
274 State cameraState() const;
275 Status cameraStatus() const;
276
277 Error errorCode() const;
278 QString errorString() const;
279
280 LockStatus lockStatus() const;
281
282 qreal maximumOpticalZoom() const;
283 qreal maximumDigitalZoom() const;
284
285 qreal opticalZoom() const;
286 qreal digitalZoom() const;
287
288 Availability availability() const;
289
290public Q_SLOTS:
291 void setCaptureMode(CaptureMode mode);
292
293 void start();
294 void stop();
295
296 void setCameraState(State state);
297
298 void searchAndLock();
299 void unlock();
300
301 void setOpticalZoom(qreal);
302 void setDigitalZoom(qreal);
303
304 Q_REVISION(2) QJSValue supportedViewfinderResolutions(qreal minimumFrameRate = 0.0,
305 qreal maximumFrameRate = 0.0);
306
307 Q_REVISION(2) QJSValue supportedViewfinderFrameRateRanges(const QJSValue &resolution = QJSValue());
308
309Q_SIGNALS:
310 void errorChanged();
311#if QT_DEPRECATED_SINCE(5,15)
312 void error(QDeclarativeCamera::Error errorCode, const QString &errorString);
313#endif
314 Q_REVISION(15) void errorOccurred(QDeclarativeCamera::Error errorCode, const QString &errorString);
315
316 Q_REVISION(1) void deviceIdChanged();
317 Q_REVISION(1) void positionChanged();
318 Q_REVISION(1) void displayNameChanged();
319 Q_REVISION(1) void orientationChanged();
320
321 void captureModeChanged();
322 void cameraStateChanged(QDeclarativeCamera::State);
323 void cameraStatusChanged();
324
325 void lockStatusChanged();
326
327 void opticalZoomChanged(qreal);
328 void digitalZoomChanged(qreal);
329 void maximumOpticalZoomChanged(qreal);
330 void maximumDigitalZoomChanged(qreal);
331
332 void mediaObjectChanged();
333
334 void availabilityChanged(Availability availability);
335
336private Q_SLOTS:
337 void _q_updateState(QCamera::State);
338 void _q_errorOccurred(QCamera::Error);
339 void _q_availabilityChanged(QMultimedia::AvailabilityStatus);
340
341protected:
342 void classBegin() override;
343 void componentComplete() override;
344
345private:
346 Q_DISABLE_COPY(QDeclarativeCamera)
347 void setupDevice(const QString &deviceName);
348
349 QCamera *m_camera;
350 QCameraInfo m_currentCameraInfo;
351
352 QDeclarativeCameraCapture *m_imageCapture;
353 QDeclarativeCameraRecorder *m_videoRecorder;
354 QDeclarativeCameraExposure *m_exposure;
355 QDeclarativeCameraFlash *m_flash;
356 QDeclarativeCameraFocus *m_focus;
357 QDeclarativeCameraImageProcessing *m_imageProcessing;
358 QDeclarativeMediaMetaData *m_metaData;
359 QDeclarativeCameraViewfinder *m_viewfinder;
360
361 State m_pendingState;
362 bool m_componentComplete;
363};
364
365QT_END_NAMESPACE
366
367QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeCamera))
368
369#endif
370

source code of qtmultimedia/src/imports/multimedia/qdeclarativecamera_p.h