Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qcamera.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
5#include "qcamera_p.h"
6
7#include <qcameradevice.h>
8#include <private/qplatformcamera_p.h>
9#include <private/qplatformimagecapture_p.h>
10#include <private/qplatformmediaintegration_p.h>
11#include <private/qplatformmediacapture_p.h>
12#include <qmediadevices.h>
14
15#include <QDebug>
16
18
156{
157 Q_Q(QCamera);
158
159 auto maybeControl = QPlatformMediaIntegration::instance()->createCamera(q);
160 if (!maybeControl) {
161 qWarning() << "Failed to initialize QCamera" << maybeControl.error();
162 return;
163 }
164 control = maybeControl.value();
166 if (cameraDevice.isNull())
172}
173
181 : QCamera(QMediaDevices::defaultVideoInput(), parent)
182{
183}
184
191QCamera::QCamera(const QCameraDevice &cameraDevice, QObject *parent)
192 : QObject(*new QCameraPrivate, parent)
193{
194 Q_D(QCamera);
195 d->init(cameraDevice);
196}
197
211 : QObject(*new QCameraPrivate, parent)
212{
213 Q_D(QCamera);
214
216 auto cameras = QMediaDevices::videoInputs();
217 for (const auto &c : cameras) {
218 if (c.position() == position) {
219 device = c;
220 break;
221 }
222 }
223 d->init(device);
224}
225
231{
232 Q_D(QCamera);
233 if (d->captureSession)
234 d->captureSession->setCamera(nullptr);
235}
236
241{
242 Q_D(const QCamera);
243 return d->control && !d->cameraDevice.isNull();
244}
245
260{
261 Q_D(const QCamera);
262 return d->control && d->control->isActive();
263}
264
268void QCamera::setActive(bool active)
269{
270 Q_D(const QCamera);
271 if (d->control)
272 d->control->setActive(active);
273}
274
290{
291 Q_D(const QCamera);
292
293 return d->control ? d->control->error() : QCamera::CameraError;
294}
295
308{
309 Q_D(const QCamera);
310
311 return d->control ? d->control->errorString()
312 : QStringLiteral("Camera is not supported on the platform");
313}
314
348QCamera::Features QCamera::supportedFeatures() const
349{
350 Q_D(const QCamera);
351 return d->control ? d->control->supportedFeatures() : QCamera::Features{};
352}
353
392{
393 Q_D(const QCamera);
394 return d->captureSession;
395}
396
400void QCamera::setCaptureSession(QMediaCaptureSession *session)
401{
402 Q_D(QCamera);
403 d->captureSession = session;
404}
405
409QPlatformCamera *QCamera::platformCamera()
410{
411 Q_D(const QCamera);
412 return d->control;
413}
414
426{
427 Q_D(const QCamera);
428 return d->cameraDevice;
429}
430
437{
438 Q_D(QCamera);
439 auto dev = cameraDevice;
440 if (dev.isNull())
442 if (d->cameraDevice == dev)
443 return;
444 d->cameraDevice = dev;
445 if (d->control)
446 d->control->setCamera(d->cameraDevice);
448 setCameraFormat({});
449}
450
476{
477 Q_D(const QCamera);
478 return d->cameraFormat;
479}
480
491{
492 Q_D(QCamera);
493 if (!d->control || !d->control->setCameraFormat(format))
494 return;
495
496 d->cameraFormat = format;
498}
499
558{
559 Q_D(const QCamera);
560 return d->control ? d->control->focusMode() : QCamera::FocusModeAuto;
561}
562
569{
570 Q_D(QCamera);
571 if (!d->control || d->control->focusMode() == mode)
572 return;
573 d->control->setFocusMode(mode);
575}
576
587{
588 Q_D(const QCamera);
589 return d->control ? d->control->isFocusModeSupported(mode) : false;
590}
591
603{
604 Q_D(const QCamera);
605 return d->control ? d->control->focusPoint() : QPointF(-1., -1.);
606
607}
608
634{
635 Q_D(const QCamera);
636 return d->control ? d->control->customFocusPoint() : QPointF{-1., -1.};
637}
638
640{
641 Q_D(QCamera);
642 if (d->control)
643 d->control->setCustomFocusPoint(point);
644}
645
668{
669 if (!d_func()->control || focusMode() != FocusModeManual)
670 return;
671 d_func()->control->setFocusDistance(d);
672}
673
675{
676 if (d_func()->control && focusMode() == FocusModeManual)
677 return d_func()->control->focusDistance();
678 return 0.;
679}
680
699{
700 Q_D(const QCamera);
701 return d->control ? d->control->maxZoomFactor() : 1.f;
702}
703
721{
722 Q_D(const QCamera);
723 return d->control ? d->control->minZoomFactor() : 1.f;
724}
725
741{
742 Q_D(const QCamera);
743 return d->control ? d->control->zoomFactor() : 1.f;
744}
748void QCamera::setZoomFactor(float factor)
749{
750 zoomTo(factor, 0.f);
751}
752
774void QCamera::zoomTo(float factor, float rate)
775{
776 Q_ASSERT(rate >= 0.f);
777 if (rate < 0.f)
778 rate = 0.f;
779
780 Q_D(QCamera);
781 if (!d->control)
782 return;
783 factor = qBound(d->control->minZoomFactor(), factor, d->control->maxZoomFactor());
784 d->control->zoomTo(factor, rate);
785}
786
821{
822 Q_D(const QCamera);
823 return d->control ? d->control->flashMode() : QCamera::FlashOff;
824}
825
827{
828 Q_D(QCamera);
829 if (d->control)
830 d->control->setFlashMode(mode);
831}
832
843{
844 Q_D(const QCamera);
845 return d->control ? d->control->isFlashModeSupported(mode) : (mode == FlashOff);
846}
847
858{
859 Q_D(const QCamera);
860 return d->control ? d->control->isFlashReady() : false;
861}
862
886{
887 Q_D(const QCamera);
888 return d->control ? d->control->torchMode() : TorchOff;
889}
890
892{
893 Q_D(QCamera);
894 if (d->control)
895 d->control->setTorchMode(mode);
896}
897
908{
909 Q_D(const QCamera);
910 return d->control ? d->control->isTorchModeSupported(mode) : (mode == TorchOff);
911}
912
927{
928 Q_D(const QCamera);
929 return d->control ? d->control->exposureMode() : QCamera::ExposureAuto;
930}
931
933{
934 Q_D(QCamera);
935 if (d->control)
936 d->control->setExposureMode(mode);
937}
938
949{
950 Q_D(const QCamera);
951 return d->control && d->control->isExposureModeSupported(mode);
952}
953
971{
972 Q_D(const QCamera);
973 return d->control ? d->control->exposureCompensation() : 0.f;
974}
975
977{
978 Q_D(QCamera);
979 if (d->control)
980 d->control->setExposureCompensation(ev);
981}
982
999{
1000 Q_D(const QCamera);
1001 return d->control ? d->control->isoSensitivity() : -1;
1002}
1003
1021{
1022 Q_D(QCamera);
1023 if (iso <= 0)
1024 iso = -1;
1025 if (d->control)
1026 d->control->setManualIsoSensitivity(iso);
1027}
1028
1030{
1031 Q_D(const QCamera);
1032 return d->control ? d->control->manualIsoSensitivity() : 100;
1033}
1034
1041{
1042 Q_D(QCamera);
1043 if (d->control)
1044 d->control->setManualIsoSensitivity(-1);
1045}
1046
1051{
1052 Q_D(const QCamera);
1053 return d->control ? d->control->minIso() : -1;
1054}
1055
1060{
1061 Q_D(const QCamera);
1062 return d->control ? d->control->maxIso() : -1;
1063}
1064
1069{
1070 Q_D(const QCamera);
1071 return d->control ? d->control->minExposureTime() : -1.f;
1072}
1073
1078{
1079 Q_D(const QCamera);
1080 return d->control ? d->control->maxExposureTime() : -1.f;
1081}
1082
1108{
1109 Q_D(const QCamera);
1110 return d->control ? d->control->exposureTime() : -1;
1111}
1112
1129{
1130 Q_D(QCamera);
1131 if (d->control)
1132 d->control->setManualExposureTime(seconds);
1133}
1134
1140{
1141 Q_D(const QCamera);
1142 return d->control ? d->control->manualExposureTime() : -1;
1143}
1144
1149{
1150 Q_D(QCamera);
1151 if (d->control)
1152 d->control->setManualExposureTime(-1);
1153}
1154
1155
1238{
1239 Q_D(const QCamera);
1240 return d->control ? d->control->whiteBalanceMode() : QCamera::WhiteBalanceAuto;
1241}
1242
1247{
1248 Q_D(QCamera);
1249 if (!d->control)
1250 return;
1251 if (!d->control->isWhiteBalanceModeSupported(mode))
1252 return;
1253 d->control->setWhiteBalanceMode(mode);
1255 d->control->setColorTemperature(5600);
1256}
1257
1268{
1269 Q_D(const QCamera);
1270 return d->control && d->control->isWhiteBalanceModeSupported(mode);
1271}
1272
1292{
1293 Q_D(const QCamera);
1294 return d->control ? d->control->colorTemperature() : 0;
1295}
1296
1307void QCamera::setColorTemperature(int colorTemperature)
1308{
1309 Q_D(QCamera);
1310 if (!d->control)
1311 return;
1312 if (colorTemperature < 0)
1313 colorTemperature = 0;
1314 if (colorTemperature == 0) {
1315 d->control->setWhiteBalanceMode(WhiteBalanceAuto);
1317 return;
1318 } else {
1319 d->control->setWhiteBalanceMode(WhiteBalanceManual);
1320 }
1321 d->control->setColorTemperature(colorTemperature);
1322}
1323
1356
1357#include "moc_qcamera.cpp"
IOBluetoothDevice * device
The QCameraDevice class provides general information about camera devices.
bool isNull() const
Returns true if this QCameraDevice is null or invalid.
Position
This enum specifies the physical position of the camera on the system hardware.
The QCameraFormat class describes a video format supported by a camera device. \inmodule QtMultimedia...
QCameraDevice cameraDevice
Definition qcamera_p.h:36
QPlatformCamera * control
Definition qcamera_p.h:34
void init(const QCameraDevice &device)
\qmltype Camera \instantiates QCamera \inqmlmodule QtMultimedia
Definition qcamera.cpp:155
The QCamera class provides interface for system camera devices.
Definition qcamera.h:28
WhiteBalanceMode
\value WhiteBalanceAuto Auto white balance mode.
Definition qcamera.h:112
@ WhiteBalanceManual
Definition qcamera.h:114
@ WhiteBalanceAuto
Definition qcamera.h:113
bool active
\qmlproperty bool QtMultimedia::Camera::active
Definition qcamera.h:30
float minimumExposureTime() const
The minimal exposure time in seconds.
Definition qcamera.cpp:1068
QString errorString
\qmlproperty string QtMultimedia::Camera::errorString
Definition qcamera.h:34
void setExposureCompensation(float ev)
Definition qcamera.cpp:976
TorchMode
\value TorchOff Torch is Off.
Definition qcamera.h:84
@ TorchOff
Definition qcamera.h:85
Q_INVOKABLE bool isTorchModeSupported(TorchMode mode) const
\qmlmethod bool QtMultimedia::Camera::isTorchModeSupported(TorchMode mode)
Definition qcamera.cpp:907
~QCamera()
Destroys the camera object.
Definition qcamera.cpp:230
float minimumZoomFactor
\qmlproperty real QtMultimedia::Camera::minimumZoomFactor
Definition qcamera.h:42
void setFlashMode(FlashMode mode)
Definition qcamera.cpp:826
void setCameraDevice(const QCameraDevice &cameraDevice)
Connects the camera object to the physical camera device described by cameraDevice.
Definition qcamera.cpp:436
void setAutoExposureTime()
Use automatically calculated exposure time.
Definition qcamera.cpp:1148
void errorOccurred(QCamera::Error error, const QString &errorString)
\qmlsignal void Camera::errorOccurred(Camera::Error error, string errorString)
FocusMode
\value FocusModeAuto Continuous auto focus mode.
Definition qcamera.h:67
@ FocusModeAuto
Definition qcamera.h:68
@ FocusModeManual
Definition qcamera.h:73
QCamera(QObject *parent=nullptr)
Construct a QCamera with a parent.
Definition qcamera.cpp:180
QCameraDevice cameraDevice
\qmlproperty cameraDevice QtMultimedia::Camera::cameraDevice
Definition qcamera.h:32
int colorTemperature
\qmlmethod QtMultimedia::Camera::colorTemperature
Definition qcamera.h:56
QMediaCaptureSession * captureSession() const
Returns the capture session this camera is connected to, or a nullptr if the camera is not connected ...
Definition qcamera.cpp:391
float exposureCompensation
\qmlproperty real QtMultimedia::Camera::exposureCompensation
Definition qcamera.h:49
void setColorTemperature(int colorTemperature)
Sets manual white balance to colorTemperature.
Definition qcamera.cpp:1307
void cameraFormatChanged()
int minimumIsoSensitivity() const
Returns the minimum ISO sensitivity supported by the camera.
Definition qcamera.cpp:1050
void setManualIsoSensitivity(int iso)
Definition qcamera.cpp:1020
Q_INVOKABLE bool isFlashModeSupported(FlashMode mode) const
\qmlmethod bool QtMultimedia::Camera::isFlashModeSupported(FlashMode mode)
Definition qcamera.cpp:842
Q_INVOKABLE bool isExposureModeSupported(ExposureMode mode) const
\qmlmethod bool QtMultimedia::Camera::isExposureModeSupported(ExposureMode mode)
Definition qcamera.cpp:948
int isoSensitivity
\qmlproperty int QtMultimedia::Camera::isoSensitivity
Definition qcamera.h:47
Error error
\qmlproperty enumeration QtMultimedia::Camera::error
Definition qcamera.h:33
float zoomFactor
\qmlproperty real QtMultimedia::Camera::zoomFactor
Definition qcamera.h:44
void setTorchMode(TorchMode mode)
Definition qcamera.cpp:891
Features supportedFeatures
\qmlproperty Features QtMultimedia::Camera::supportedFeatures Returns the features supported by this ...
Definition qcamera.h:57
float maximumZoomFactor
\qmlproperty real QtMultimedia::Camera::maximumZoomFactor
Definition qcamera.h:43
QCameraFormat cameraFormat
\qmlproperty cameraFormat QtMultimedia::Camera::cameraFormat
Definition qcamera.h:35
float exposureTime
\qmlproperty float QtMultimedia::Camera::exposureTime Returns the Camera's exposure time in seconds.
Definition qcamera.h:45
QCamera::TorchMode torchMode
\qmlproperty Camera::TorchMode Camera::torchMode
Definition qcamera.h:53
QPointF customFocusPoint
\qmlproperty point QtMultimedia::Camera::customFocusPoint
Definition qcamera.h:39
QCamera::FlashMode flashMode
\qmlproperty enumeration QtMultimedia::Camera::flashMode
Definition qcamera.h:52
void errorChanged()
void setFocusMode(FocusMode mode)
Definition qcamera.cpp:568
int maximumIsoSensitivity() const
Returns the maximum ISO sensitivity supported by the camera.
Definition qcamera.cpp:1059
FocusMode focusMode
\qmlproperty enumeration Camera::focusMode
Definition qcamera.h:37
void setAutoIsoSensitivity()
Turn on auto sensitivity.
Definition qcamera.cpp:1040
Q_INVOKABLE bool isFocusModeSupported(FocusMode mode) const
\qmlmethod bool Camera::isFocusModeSupported(FocusMode mode)
Definition qcamera.cpp:586
void focusModeChanged()
Signals when the focusMode changes.
Q_INVOKABLE bool isWhiteBalanceModeSupported(WhiteBalanceMode mode) const
\qmlmethod bool QtMultimedia::Camera::isWhiteBalanceModeSupported(WhiteBalanceMode mode)
Definition qcamera.cpp:1267
void zoomTo(float zoom, float rate)
\qmlmethod void QtMultimedia::Camera::zoomTo(factor, rate)
Definition qcamera.cpp:774
void cameraDeviceChanged()
void setManualExposureTime(float seconds)
Definition qcamera.cpp:1128
void activeChanged(bool)
FlashMode
\value FlashOff Flash is Off.
Definition qcamera.h:77
@ FlashOff
Definition qcamera.h:78
ExposureMode
\value ExposureAuto Automatic mode.
Definition qcamera.h:91
@ ExposureAuto
Definition qcamera.h:92
QPointF focusPoint
\qmlproperty point QtMultimedia::Camera::focusPoint Returns the point currently used by the auto focu...
Definition qcamera.h:38
void setActive(bool active)
Turns the camera on if active is {true}, or off if it's {false}.
Definition qcamera.cpp:268
void setCameraFormat(const QCameraFormat &format)
Tells the camera to use the format described by format.
Definition qcamera.cpp:490
void setWhiteBalanceMode(WhiteBalanceMode mode)
Sets the white balance to mode.
Definition qcamera.cpp:1246
void setZoomFactor(float factor)
Zooms to a zoom factor factor at a rate of 1 factor per second.
Definition qcamera.cpp:748
bool isAvailable() const
Returns true if the camera can be used.
Definition qcamera.cpp:240
int manualExposureTime
\qmlproperty real QtMultimedia::Camera::manualExposureTime
Definition qcamera.h:46
bool isActive() const
Returns true if the camera is currently active.
Definition qcamera.cpp:259
float maximumExposureTime() const
The maximal exposure time in seconds.
Definition qcamera.cpp:1077
Error
This enum holds the last error code.
Definition qcamera.h:61
@ CameraError
Definition qcamera.h:63
QCamera::ExposureMode exposureMode
\qmlproperty ExposureMode QtMultimedia::Camera::exposureMode
Definition qcamera.h:50
WhiteBalanceMode whiteBalanceMode
\qmlproperty WhiteBalanceMode QtMultimedia::Camera::whiteBalanceMode
Definition qcamera.h:55
int manualIsoSensitivity
\qmlproperty int QtMultimedia::Camera::manualIsoSensitivity
Definition qcamera.h:48
void setCustomFocusPoint(const QPointF &point)
Definition qcamera.cpp:639
float focusDistance
\qmlproperty float QtMultimedia::Camera::focusDistance
Definition qcamera.h:40
Q_INVOKABLE bool isFlashReady() const
\qmlmethod bool QtMultimedia::Camera::isFlashReady()
Definition qcamera.cpp:857
void setFocusDistance(float d)
Definition qcamera.cpp:667
void setExposureMode(ExposureMode mode)
Definition qcamera.cpp:932
The QMediaCaptureSession class allows capturing of audio and video content.
The QMediaDevices class provides information about available multimedia input and output devices.
QList< QCameraDevice > videoInputs
\qmlproperty list<cameraDevice> QtMultimedia::MediaDevices::videoInputs Contains a list of cameras on...
QCameraDevice defaultVideoInput
\qmlproperty cameraDevice QtMultimedia::MediaDevices::defaultVideoInput Returns the default camera on...
\inmodule QtCore
Definition qobject.h:103
void updateError(QCamera::Error error, const QString &errorString)
virtual void setCamera(const QCameraDevice &camera)=0
void errorOccurred(QCamera::Error error, const QString &errorString)
static QPlatformMediaIntegration * instance()
void activeChanged(bool)
\inmodule QtCore\reentrant
Definition qpoint.h:217
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
Combined button and popup list for selecting options.
#define qWarning
Definition qlogging.h:166
constexpr const T & qBound(const T &min, const T &val, const T &max)
Definition qminmax.h:44
GLenum mode
GLint GLsizei GLsizei GLenum format
const GLubyte * c
GLuint GLenum * rate
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define QStringLiteral(str)
#define emit