Qt 6.x
The Qt SDK
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
156void QCameraPrivate::_q_error(int error, const QString &errorString)
157{
158 Q_Q(QCamera);
159
160 this->error = QCamera::Error(error);
161 this->errorString = errorString;
162
163 emit q->errorChanged();
164 emit q->errorOccurred(this->error, errorString);
165}
166
168{
169 Q_Q(QCamera);
170
171 auto maybeControl = QPlatformMediaIntegration::instance()->createCamera(q);
172 if (!maybeControl) {
173 qWarning() << "Failed to initialize QCamera" << maybeControl.error();
175 errorString = maybeControl.error();
176 return;
177 }
178 control = maybeControl.value();
180 if (cameraDevice.isNull())
181 _q_error(QCamera::CameraError, QString::fromUtf8("No camera detected"));
183 q->connect(control, SIGNAL(activeChanged(bool)), q, SIGNAL(activeChanged(bool)));
184 q->connect(control, SIGNAL(error(int,QString)), q, SLOT(_q_error(int,QString)));
185}
186
194 : QCamera(QMediaDevices::defaultVideoInput(), parent)
195{
196}
197
206{
207 Q_D(QCamera);
208 d->init(cameraDevice);
209}
210
225{
226 Q_D(QCamera);
227
229 auto cameras = QMediaDevices::videoInputs();
230 for (const auto &c : cameras) {
231 if (c.position() == position) {
232 device = c;
233 break;
234 }
235 }
236 d->init(device);
237}
238
244{
245 Q_D(QCamera);
246 if (d->captureSession)
247 d->captureSession->setCamera(nullptr);
248}
249
254{
255 Q_D(const QCamera);
256 return d->control && !d->cameraDevice.isNull();
257}
258
273{
274 Q_D(const QCamera);
275 return d->control && d->control->isActive();
276}
277
281void QCamera::setActive(bool active)
282{
283 Q_D(const QCamera);
284 if (d->control)
285 d->control->setActive(active);
286}
287
303{
304 return d_func()->error;
305}
306
319{
320 return d_func()->errorString;
321}
322
356QCamera::Features QCamera::supportedFeatures() const
357{
358 Q_D(const QCamera);
359 return d->control ? d->control->supportedFeatures() : QCamera::Features{};
360}
361
400{
401 Q_D(const QCamera);
402 return d->captureSession;
403}
404
408void QCamera::setCaptureSession(QMediaCaptureSession *session)
409{
410 Q_D(QCamera);
411 d->captureSession = session;
412}
413
417QPlatformCamera *QCamera::platformCamera()
418{
419 Q_D(const QCamera);
420 return d->control;
421}
422
434{
435 Q_D(const QCamera);
436 return d->cameraDevice;
437}
438
445{
446 Q_D(QCamera);
447 auto dev = cameraDevice;
448 if (dev.isNull())
450 if (d->cameraDevice == dev)
451 return;
452 d->cameraDevice = dev;
453 if (d->control)
454 d->control->setCamera(d->cameraDevice);
456 setCameraFormat({});
457}
458
484{
485 Q_D(const QCamera);
486 return d->cameraFormat;
487}
488
499{
500 Q_D(QCamera);
501 if (!d->control || !d->control->setCameraFormat(format))
502 return;
503
504 d->cameraFormat = format;
506}
507
566{
567 Q_D(const QCamera);
568 return d->control ? d->control->focusMode() : QCamera::FocusModeAuto;
569}
570
577{
578 Q_D(QCamera);
579 if (!d->control || d->control->focusMode() == mode)
580 return;
581 d->control->setFocusMode(mode);
583}
584
595{
596 Q_D(const QCamera);
597 return d->control ? d->control->isFocusModeSupported(mode) : false;
598}
599
611{
612 Q_D(const QCamera);
613 return d->control ? d->control->focusPoint() : QPointF(-1., -1.);
614
615}
616
642{
643 Q_D(const QCamera);
644 return d->control ? d->control->customFocusPoint() : QPointF{-1., -1.};
645}
646
648{
649 Q_D(QCamera);
650 if (d->control)
651 d->control->setCustomFocusPoint(point);
652}
653
676{
677 if (!d_func()->control || focusMode() != FocusModeManual)
678 return;
679 d_func()->control->setFocusDistance(d);
680}
681
683{
684 if (d_func()->control && focusMode() == FocusModeManual)
685 return d_func()->control->focusDistance();
686 return 0.;
687}
688
707{
708 Q_D(const QCamera);
709 return d->control ? d->control->maxZoomFactor() : 1.f;
710}
711
729{
730 Q_D(const QCamera);
731 return d->control ? d->control->minZoomFactor() : 1.f;
732}
733
749{
750 Q_D(const QCamera);
751 return d->control ? d->control->zoomFactor() : 1.f;
752}
756void QCamera::setZoomFactor(float factor)
757{
758 zoomTo(factor, 0.f);
759}
760
782void QCamera::zoomTo(float factor, float rate)
783{
784 Q_ASSERT(rate >= 0.f);
785 if (rate < 0.f)
786 rate = 0.f;
787
788 Q_D(QCamera);
789 if (!d->control)
790 return;
791 factor = qBound(d->control->minZoomFactor(), factor, d->control->maxZoomFactor());
792 d->control->zoomTo(factor, rate);
793}
794
829{
830 Q_D(const QCamera);
831 return d->control ? d->control->flashMode() : QCamera::FlashOff;
832}
833
835{
836 Q_D(QCamera);
837 if (d->control)
838 d->control->setFlashMode(mode);
839}
840
851{
852 Q_D(const QCamera);
853 return d->control ? d->control->isFlashModeSupported(mode) : (mode == FlashOff);
854}
855
866{
867 Q_D(const QCamera);
868 return d->control ? d->control->isFlashReady() : false;
869}
870
894{
895 Q_D(const QCamera);
896 return d->control ? d->control->torchMode() : TorchOff;
897}
898
900{
901 Q_D(QCamera);
902 if (d->control)
903 d->control->setTorchMode(mode);
904}
905
916{
917 Q_D(const QCamera);
918 return d->control ? d->control->isTorchModeSupported(mode) : (mode == TorchOff);
919}
920
935{
936 Q_D(const QCamera);
937 return d->control ? d->control->exposureMode() : QCamera::ExposureAuto;
938}
939
941{
942 Q_D(QCamera);
943 if (d->control)
944 d->control->setExposureMode(mode);
945}
946
957{
958 Q_D(const QCamera);
959 return d->control && d->control->isExposureModeSupported(mode);
960}
961
979{
980 Q_D(const QCamera);
981 return d->control ? d->control->exposureCompensation() : 0.f;
982}
983
985{
986 Q_D(QCamera);
987 if (d->control)
988 d->control->setExposureCompensation(ev);
989}
990
1007{
1008 Q_D(const QCamera);
1009 return d->control ? d->control->isoSensitivity() : -1;
1010}
1011
1029{
1030 Q_D(QCamera);
1031 if (iso <= 0)
1032 iso = -1;
1033 if (d->control)
1034 d->control->setManualIsoSensitivity(iso);
1035}
1036
1038{
1039 Q_D(const QCamera);
1040 return d->control ? d->control->manualIsoSensitivity() : 100;
1041}
1042
1049{
1050 Q_D(QCamera);
1051 if (d->control)
1052 d->control->setManualIsoSensitivity(-1);
1053}
1054
1059{
1060 Q_D(const QCamera);
1061 return d->control ? d->control->minIso() : -1;
1062}
1063
1068{
1069 Q_D(const QCamera);
1070 return d->control ? d->control->maxIso() : -1;
1071}
1072
1077{
1078 Q_D(const QCamera);
1079 return d->control ? d->control->minExposureTime() : -1.f;
1080}
1081
1086{
1087 Q_D(const QCamera);
1088 return d->control ? d->control->maxExposureTime() : -1.f;
1089}
1090
1116{
1117 Q_D(const QCamera);
1118 return d->control ? d->control->exposureTime() : -1;
1119}
1120
1137{
1138 Q_D(QCamera);
1139 if (d->control)
1140 d->control->setManualExposureTime(seconds);
1141}
1142
1148{
1149 Q_D(const QCamera);
1150 return d->control ? d->control->manualExposureTime() : -1;
1151}
1152
1157{
1158 Q_D(QCamera);
1159 if (d->control)
1160 d->control->setManualExposureTime(-1);
1161}
1162
1163
1246{
1247 Q_D(const QCamera);
1248 return d->control ? d->control->whiteBalanceMode() : QCamera::WhiteBalanceAuto;
1249}
1250
1255{
1256 Q_D(QCamera);
1257 if (!d->control)
1258 return;
1259 if (!d->control->isWhiteBalanceModeSupported(mode))
1260 return;
1261 d->control->setWhiteBalanceMode(mode);
1263 d->control->setColorTemperature(5600);
1264}
1265
1276{
1277 Q_D(const QCamera);
1278 return d->control && d->control->isWhiteBalanceModeSupported(mode);
1279}
1280
1300{
1301 Q_D(const QCamera);
1302 return d->control ? d->control->colorTemperature() : 0;
1303}
1304
1315void QCamera::setColorTemperature(int colorTemperature)
1316{
1317 Q_D(QCamera);
1318 if (!d->control)
1319 return;
1320 if (colorTemperature < 0)
1321 colorTemperature = 0;
1322 if (colorTemperature == 0) {
1323 d->control->setWhiteBalanceMode(WhiteBalanceAuto);
1325 return;
1326 } else {
1327 d->control->setWhiteBalanceMode(WhiteBalanceManual);
1328 }
1329 d->control->setColorTemperature(colorTemperature);
1330}
1331
1364
1365#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...
QString errorString
Definition qcamera_p.h:43
QCameraDevice cameraDevice
Definition qcamera_p.h:45
QPlatformCamera * control
Definition qcamera_p.h:40
QCamera::Error error
Definition qcamera_p.h:42
void init(const QCameraDevice &device)
Definition qcamera.cpp:167
void _q_error(int error, const QString &errorString)
\qmltype Camera \instantiates QCamera \inqmlmodule QtMultimedia
Definition qcamera.cpp:156
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:1076
QString errorString
\qmlproperty string QtMultimedia::Camera::errorString
Definition qcamera.h:34
void setExposureCompensation(float ev)
Definition qcamera.cpp:984
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:915
~QCamera()
Destroys the camera object.
Definition qcamera.cpp:243
float minimumZoomFactor
\qmlproperty real QtMultimedia::Camera::minimumZoomFactor
Definition qcamera.h:42
void setFlashMode(FlashMode mode)
Definition qcamera.cpp:834
void setCameraDevice(const QCameraDevice &cameraDevice)
Connects the camera object to the physical camera device described by cameraDevice.
Definition qcamera.cpp:444
void setAutoExposureTime()
Use automatically calculated exposure time.
Definition qcamera.cpp:1156
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:193
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:399
float exposureCompensation
\qmlproperty real QtMultimedia::Camera::exposureCompensation
Definition qcamera.h:49
void setColorTemperature(int colorTemperature)
Sets manual white balance to colorTemperature.
Definition qcamera.cpp:1315
void cameraFormatChanged()
int minimumIsoSensitivity() const
Returns the minimum ISO sensitivity supported by the camera.
Definition qcamera.cpp:1058
void setManualIsoSensitivity(int iso)
Definition qcamera.cpp:1028
Q_INVOKABLE bool isFlashModeSupported(FlashMode mode) const
\qmlmethod bool QtMultimedia::Camera::isFlashModeSupported(FlashMode mode)
Definition qcamera.cpp:850
Q_INVOKABLE bool isExposureModeSupported(ExposureMode mode) const
\qmlmethod bool QtMultimedia::Camera::isExposureModeSupported(ExposureMode mode)
Definition qcamera.cpp:956
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:899
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 setFocusMode(FocusMode mode)
Definition qcamera.cpp:576
int maximumIsoSensitivity() const
Returns the maximum ISO sensitivity supported by the camera.
Definition qcamera.cpp:1067
FocusMode focusMode
\qmlproperty enumeration Camera::focusMode
Definition qcamera.h:37
void setAutoIsoSensitivity()
Turn on auto sensitivity.
Definition qcamera.cpp:1048
Q_INVOKABLE bool isFocusModeSupported(FocusMode mode) const
\qmlmethod bool Camera::isFocusModeSupported(FocusMode mode)
Definition qcamera.cpp:594
void focusModeChanged()
Signals when the focusMode changes.
Q_INVOKABLE bool isWhiteBalanceModeSupported(WhiteBalanceMode mode) const
\qmlmethod bool QtMultimedia::Camera::isWhiteBalanceModeSupported(WhiteBalanceMode mode)
Definition qcamera.cpp:1275
void zoomTo(float zoom, float rate)
\qmlmethod void QtMultimedia::Camera::zoomTo(factor, rate)
Definition qcamera.cpp:782
void cameraDeviceChanged()
void setManualExposureTime(float seconds)
Definition qcamera.cpp:1136
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:281
void setCameraFormat(const QCameraFormat &format)
Tells the camera to use the format described by format.
Definition qcamera.cpp:498
void setWhiteBalanceMode(WhiteBalanceMode mode)
Sets the white balance to mode.
Definition qcamera.cpp:1254
void setZoomFactor(float factor)
Zooms to a zoom factor factor at a rate of 1 factor per second.
Definition qcamera.cpp:756
bool isAvailable() const
Returns true if the camera can be used.
Definition qcamera.cpp:253
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:272
float maximumExposureTime() const
The maximal exposure time in seconds.
Definition qcamera.cpp:1085
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:647
float focusDistance
\qmlproperty float QtMultimedia::Camera::focusDistance
Definition qcamera.h:40
Q_INVOKABLE bool isFlashReady() const
\qmlmethod bool QtMultimedia::Camera::isFlashReady()
Definition qcamera.cpp:865
void setFocusDistance(float d)
Definition qcamera.cpp:675
void setExposureMode(ExposureMode mode)
Definition qcamera.cpp:940
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:90
virtual void setCamera(const QCameraDevice &camera)=0
virtual QMaybe< QPlatformCamera * > createCamera(QCamera *)
static QPlatformMediaIntegration * instance()
\inmodule QtCore\reentrant
Definition qpoint.h:214
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5857
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
#define qWarning
Definition qlogging.h:162
constexpr const T & qBound(const T &min, const T &val, const T &max)
Definition qminmax.h:44
#define SLOT(a)
Definition qobjectdefs.h:51
#define SIGNAL(a)
Definition qobjectdefs.h:52
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 emit
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent