summaryrefslogtreecommitdiffstats
path: root/src/multimedia/camera/qcamera.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/camera/qcamera.h')
-rw-r--r--src/multimedia/camera/qcamera.h426
1 files changed, 203 insertions, 223 deletions
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index d088e9beb..82d89f5a9 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QCAMERA_H
#define QCAMERA_H
@@ -46,248 +10,264 @@
#include <QtCore/qpoint.h>
#include <QtCore/qrect.h>
-#include <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
+#include <QtCore/qobject.h>
-#include <QtMultimedia/qcameraexposure.h>
-#include <QtMultimedia/qcamerafocus.h>
-#include <QtMultimedia/qcameraimageprocessing.h>
-#include <QtMultimedia/qcameraviewfindersettings.h>
+#include <QtMultimedia/qcameradevice.h>
#include <QtMultimedia/qmediaenumdebug.h>
QT_BEGIN_NAMESPACE
-class QAbstractVideoSurface;
-class QVideoWidget;
-class QGraphicsVideoItem;
-class QCameraInfo;
+class QCameraDevice;
+class QPlatformMediaCaptureSession;
+class QMediaCaptureSession;
class QCameraPrivate;
-class Q_MULTIMEDIA_EXPORT QCamera : public QMediaObject
+class Q_MULTIMEDIA_EXPORT QCamera : public QObject
{
Q_OBJECT
- Q_PROPERTY(QCamera::State state READ state NOTIFY stateChanged)
- Q_PROPERTY(QCamera::Status status READ status NOTIFY statusChanged)
- Q_PROPERTY(QCamera::CaptureModes captureMode READ captureMode WRITE setCaptureMode NOTIFY captureModeChanged)
- Q_PROPERTY(QCamera::LockStatus lockStatus READ lockStatus NOTIFY lockStatusChanged)
-
- Q_ENUMS(Status)
- Q_ENUMS(State)
- Q_ENUMS(CaptureMode)
- Q_ENUMS(Error)
- Q_ENUMS(LockStatus)
- Q_ENUMS(LockChangeReason)
- Q_ENUMS(LockType)
- Q_ENUMS(Position)
-public:
- struct FrameRateRange
- {
- Q_DECL_CONSTEXPR FrameRateRange() Q_DECL_NOTHROW
- : minimumFrameRate(0)
- , maximumFrameRate(0)
- { }
-
- Q_DECL_CONSTEXPR FrameRateRange(qreal minimum, qreal maximum) Q_DECL_NOTHROW
- : minimumFrameRate(minimum)
- , maximumFrameRate(maximum)
- { }
-
- qreal minimumFrameRate;
- qreal maximumFrameRate;
- };
-
- enum Status {
- UnavailableStatus,
- UnloadedStatus,
- LoadingStatus,
- UnloadingStatus,
- LoadedStatus,
- StandbyStatus,
- StartingStatus,
- StoppingStatus,
- ActiveStatus
- };
-
- enum State {
- UnloadedState,
- LoadedState,
- ActiveState
- };
-
- enum CaptureMode
- {
- CaptureViewfinder = 0,
- CaptureStillImage = 0x01,
- CaptureVideo = 0x02
- };
- Q_DECLARE_FLAGS(CaptureModes, CaptureMode)
+ Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
+ // Qt 7: rename to device
+ Q_PROPERTY(QCameraDevice cameraDevice READ cameraDevice WRITE setCameraDevice NOTIFY cameraDeviceChanged)
+ Q_PROPERTY(Error error READ error NOTIFY errorChanged)
+ Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
+ Q_PROPERTY(QCameraFormat cameraFormat READ cameraFormat WRITE setCameraFormat NOTIFY cameraFormatChanged)
+
+ Q_PROPERTY(FocusMode focusMode READ focusMode WRITE setFocusMode NOTIFY focusModeChanged)
+ Q_PROPERTY(QPointF focusPoint READ focusPoint NOTIFY focusPointChanged)
+ Q_PROPERTY(QPointF customFocusPoint READ customFocusPoint WRITE setCustomFocusPoint NOTIFY customFocusPointChanged)
+ Q_PROPERTY(float focusDistance READ focusDistance WRITE setFocusDistance NOTIFY focusDistanceChanged)
+
+ Q_PROPERTY(float minimumZoomFactor READ minimumZoomFactor NOTIFY minimumZoomFactorChanged)
+ Q_PROPERTY(float maximumZoomFactor READ maximumZoomFactor NOTIFY maximumZoomFactorChanged)
+ Q_PROPERTY(float zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged)
+ Q_PROPERTY(float exposureTime READ exposureTime NOTIFY exposureTimeChanged)
+ Q_PROPERTY(int manualExposureTime READ manualExposureTime WRITE setManualExposureTime NOTIFY manualExposureTimeChanged)
+ Q_PROPERTY(int isoSensitivity READ isoSensitivity NOTIFY isoSensitivityChanged)
+ Q_PROPERTY(int manualIsoSensitivity READ manualIsoSensitivity WRITE setManualIsoSensitivity NOTIFY manualIsoSensitivityChanged)
+ Q_PROPERTY(float exposureCompensation READ exposureCompensation WRITE setExposureCompensation NOTIFY exposureCompensationChanged)
+ Q_PROPERTY(QCamera::ExposureMode exposureMode READ exposureMode WRITE setExposureMode NOTIFY exposureModeChanged)
+ Q_PROPERTY(bool flashReady READ isFlashReady NOTIFY flashReady)
+ Q_PROPERTY(QCamera::FlashMode flashMode READ flashMode WRITE setFlashMode NOTIFY flashModeChanged)
+ Q_PROPERTY(QCamera::TorchMode torchMode READ torchMode WRITE setTorchMode NOTIFY torchModeChanged)
+
+ Q_PROPERTY(WhiteBalanceMode whiteBalanceMode READ whiteBalanceMode WRITE setWhiteBalanceMode NOTIFY whiteBalanceModeChanged)
+ Q_PROPERTY(int colorTemperature READ colorTemperature WRITE setColorTemperature NOTIFY colorTemperatureChanged)
+ Q_PROPERTY(Features supportedFeatures READ supportedFeatures NOTIFY supportedFeaturesChanged)
+public:
enum Error
{
NoError,
- CameraError,
- InvalidRequestError,
- ServiceMissingError,
- NotSupportedFeatureError
+ CameraError
};
-
- enum LockStatus
- {
- Unlocked,
- Searching,
- Locked
+ Q_ENUM(Error)
+
+ enum FocusMode {
+ FocusModeAuto,
+ FocusModeAutoNear,
+ FocusModeAutoFar,
+ FocusModeHyperfocal,
+ FocusModeInfinity,
+ FocusModeManual
};
+ Q_ENUM(FocusMode)
- enum LockChangeReason {
- UserRequest,
- LockAcquired,
- LockFailed,
- LockLost,
- LockTemporaryLost
+ enum FlashMode {
+ FlashOff,
+ FlashOn,
+ FlashAuto
};
+ Q_ENUM(FlashMode)
- enum LockType
- {
- NoLock = 0,
- LockExposure = 0x01,
- LockWhiteBalance = 0x02,
- LockFocus = 0x04
+ enum TorchMode {
+ TorchOff,
+ TorchOn,
+ TorchAuto
};
- Q_DECLARE_FLAGS(LockTypes, LockType)
-
- enum Position
- {
- UnspecifiedPosition,
- BackFace,
- FrontFace
+ Q_ENUM(TorchMode)
+
+ enum ExposureMode {
+ ExposureAuto,
+ ExposureManual,
+ ExposurePortrait,
+ ExposureNight,
+ ExposureSports,
+ ExposureSnow,
+ ExposureBeach,
+ ExposureAction,
+ ExposureLandscape,
+ ExposureNightPortrait,
+ ExposureTheatre,
+ ExposureSunset,
+ ExposureSteadyPhoto,
+ ExposureFireworks,
+ ExposureParty,
+ ExposureCandlelight,
+ ExposureBarcode
+ };
+ Q_ENUM(ExposureMode)
+
+ enum WhiteBalanceMode {
+ WhiteBalanceAuto = 0,
+ WhiteBalanceManual = 1,
+ WhiteBalanceSunlight = 2,
+ WhiteBalanceCloudy = 3,
+ WhiteBalanceShade = 4,
+ WhiteBalanceTungsten = 5,
+ WhiteBalanceFluorescent = 6,
+ WhiteBalanceFlash = 7,
+ WhiteBalanceSunset = 8
};
+ Q_ENUM(WhiteBalanceMode)
+
+ enum class Feature {
+ ColorTemperature = 0x1,
+ ExposureCompensation = 0x2,
+ IsoSensitivity = 0x4,
+ ManualExposureTime = 0x8,
+ CustomFocusPoint = 0x10,
+ FocusDistance = 0x20
+ };
+ Q_DECLARE_FLAGS(Features, Feature)
explicit QCamera(QObject *parent = nullptr);
- explicit QCamera(const QByteArray& deviceName, QObject *parent = nullptr);
- explicit QCamera(const QCameraInfo& cameraInfo, QObject *parent = nullptr);
- explicit QCamera(QCamera::Position position, QObject *parent = nullptr);
+ explicit QCamera(const QCameraDevice& cameraDevice, QObject *parent = nullptr);
+ explicit QCamera(QCameraDevice::Position position, QObject *parent = nullptr);
~QCamera();
- QMultimedia::AvailabilityStatus availability() const override;
+ bool isAvailable() const;
+ bool isActive() const;
- State state() const;
- Status status() const;
+ QMediaCaptureSession *captureSession() const;
- CaptureModes captureMode() const;
- bool isCaptureModeSupported(CaptureModes mode) const;
+ QCameraDevice cameraDevice() const;
+ void setCameraDevice(const QCameraDevice &cameraDevice);
- QCameraExposure *exposure() const;
- QCameraFocus *focus() const;
- QCameraImageProcessing *imageProcessing() const;
+ QCameraFormat cameraFormat() const;
+ void setCameraFormat(const QCameraFormat &format);
- void setViewfinder(QVideoWidget *viewfinder);
- void setViewfinder(QGraphicsVideoItem *viewfinder);
- void setViewfinder(QAbstractVideoSurface *surface);
+ Error error() const;
+ QString errorString() const;
- QCameraViewfinderSettings viewfinderSettings() const;
- void setViewfinderSettings(const QCameraViewfinderSettings &settings);
+ Features supportedFeatures() const;
- QList<QCameraViewfinderSettings> supportedViewfinderSettings(
- const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
+ FocusMode focusMode() const;
+ void setFocusMode(FocusMode mode);
+ Q_INVOKABLE bool isFocusModeSupported(FocusMode mode) const;
- QList<QSize> supportedViewfinderResolutions(
- const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
+ QPointF focusPoint() const;
- QList<FrameRateRange> supportedViewfinderFrameRateRanges(
- const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
+ QPointF customFocusPoint() const;
+ void setCustomFocusPoint(const QPointF &point);
- QList<QVideoFrame::PixelFormat> supportedViewfinderPixelFormats(
- const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
+ void setFocusDistance(float d);
+ float focusDistance() const;
- Error error() const;
- QString errorString() const;
+ float minimumZoomFactor() const;
+ float maximumZoomFactor() const;
+ float zoomFactor() const;
+ void setZoomFactor(float factor);
- QCamera::LockTypes supportedLocks() const;
- QCamera::LockTypes requestedLocks() const;
+ FlashMode flashMode() const;
+ Q_INVOKABLE bool isFlashModeSupported(FlashMode mode) const;
+ Q_INVOKABLE bool isFlashReady() const;
- QCamera::LockStatus lockStatus() const;
- QCamera::LockStatus lockStatus(QCamera::LockType lock) const;
+ TorchMode torchMode() const;
+ Q_INVOKABLE bool isTorchModeSupported(TorchMode mode) const;
-public Q_SLOTS:
- void setCaptureMode(QCamera::CaptureModes mode);
+ ExposureMode exposureMode() const;
+ Q_INVOKABLE bool isExposureModeSupported(ExposureMode mode) const;
- void load();
- void unload();
+ float exposureCompensation() const;
- void start();
- void stop();
+ int isoSensitivity() const;
+ int manualIsoSensitivity() const;
- void searchAndLock();
- void unlock();
+ float exposureTime() const;
+ float manualExposureTime() const;
- void searchAndLock(QCamera::LockTypes locks);
- void unlock(QCamera::LockTypes locks);
+ int minimumIsoSensitivity() const;
+ int maximumIsoSensitivity() const;
-Q_SIGNALS:
- void stateChanged(QCamera::State state);
- void captureModeChanged(QCamera::CaptureModes);
- void statusChanged(QCamera::Status status);
+ float minimumExposureTime() const;
+ float maximumExposureTime() const;
- void locked();
- void lockFailed();
+ WhiteBalanceMode whiteBalanceMode() const;
+ Q_INVOKABLE bool isWhiteBalanceModeSupported(WhiteBalanceMode mode) const;
- void lockStatusChanged(QCamera::LockStatus status, QCamera::LockChangeReason reason);
- void lockStatusChanged(QCamera::LockType lock, QCamera::LockStatus status, QCamera::LockChangeReason reason);
+ int colorTemperature() const;
- void errorOccurred(QCamera::Error);
+public Q_SLOTS:
+ void setActive(bool active);
+ void start() { setActive(true); }
+ void stop() { setActive(false); }
-private:
- Q_DISABLE_COPY(QCamera)
- Q_DECLARE_PRIVATE(QCamera)
- Q_PRIVATE_SLOT(d_func(), void _q_preparePropertyChange(int))
- Q_PRIVATE_SLOT(d_func(), void _q_restartCamera())
- Q_PRIVATE_SLOT(d_func(), void _q_error(int, const QString &))
- Q_PRIVATE_SLOT(d_func(), void _q_updateLockStatus(QCamera::LockType, QCamera::LockStatus, QCamera::LockChangeReason))
- Q_PRIVATE_SLOT(d_func(), void _q_updateState(QCamera::State))
- friend class QCameraInfo;
-};
+ void zoomTo(float zoom, float rate);
-Q_DECLARE_OPERATORS_FOR_FLAGS(QCamera::LockTypes)
+ void setFlashMode(FlashMode mode);
+ void setTorchMode(TorchMode mode);
+ void setExposureMode(ExposureMode mode);
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_CLANG("-Wfloat-equal")
-QT_WARNING_DISABLE_GCC("-Wfloat-equal")
+ void setExposureCompensation(float ev);
-Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator==(const QCamera::FrameRateRange &r1, const QCamera::FrameRateRange &r2) Q_DECL_NOTHROW
-{
- return qFuzzyCompare(r1.minimumFrameRate, r2.minimumFrameRate)
- && qFuzzyCompare(r1.maximumFrameRate, r2.maximumFrameRate);
-}
+ void setManualIsoSensitivity(int iso);
+ void setAutoIsoSensitivity();
+
+ void setManualExposureTime(float seconds);
+ void setAutoExposureTime();
-QT_WARNING_POP
+ void setWhiteBalanceMode(WhiteBalanceMode mode);
+ void setColorTemperature(int colorTemperature);
+
+Q_SIGNALS:
+ void activeChanged(bool);
+ void errorChanged();
+ void errorOccurred(QCamera::Error error, const QString &errorString);
+ void cameraDeviceChanged();
+ void cameraFormatChanged();
+ void supportedFeaturesChanged();
+
+ void focusModeChanged();
+ void zoomFactorChanged(float);
+ void minimumZoomFactorChanged(float);
+ void maximumZoomFactorChanged(float);
+ void focusDistanceChanged(float);
+ void focusPointChanged();
+ void customFocusPointChanged();
+
+ void flashReady(bool);
+ void flashModeChanged();
+ void torchModeChanged();
+
+ void exposureTimeChanged(float speed);
+ void manualExposureTimeChanged(float speed);
+ void isoSensitivityChanged(int);
+ void manualIsoSensitivityChanged(int);
+ void exposureCompensationChanged(float);
+ void exposureModeChanged();
+
+ void whiteBalanceModeChanged() QT6_ONLY(const);
+ void colorTemperatureChanged() QT6_ONLY(const);
+ void brightnessChanged();
+ void contrastChanged();
+ void saturationChanged();
+ void hueChanged();
-Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator!=(const QCamera::FrameRateRange &r1, const QCamera::FrameRateRange &r2) Q_DECL_NOTHROW
-{ return !(r1 == r2); }
+private:
+ class QPlatformCamera *platformCamera();
+ void setCaptureSession(QMediaCaptureSession *session);
+ friend class QMediaCaptureSession;
+ Q_DISABLE_COPY(QCamera)
+ Q_DECLARE_PRIVATE(QCamera)
+ friend class QCameraDevice;
+};
-Q_DECLARE_TYPEINFO(QCamera::FrameRateRange, Q_PRIMITIVE_TYPE);
+Q_DECLARE_OPERATORS_FOR_FLAGS(QCamera::Features)
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QCamera::State)
-Q_DECLARE_METATYPE(QCamera::Status)
-Q_DECLARE_METATYPE(QCamera::Error)
-Q_DECLARE_METATYPE(QCamera::CaptureMode)
-Q_DECLARE_METATYPE(QCamera::CaptureModes)
-Q_DECLARE_METATYPE(QCamera::LockType)
-Q_DECLARE_METATYPE(QCamera::LockStatus)
-Q_DECLARE_METATYPE(QCamera::LockChangeReason)
-Q_DECLARE_METATYPE(QCamera::Position)
-
-Q_MEDIA_ENUM_DEBUG(QCamera, State)
-Q_MEDIA_ENUM_DEBUG(QCamera, Status)
Q_MEDIA_ENUM_DEBUG(QCamera, Error)
-Q_MEDIA_ENUM_DEBUG(QCamera, CaptureMode)
-Q_MEDIA_ENUM_DEBUG(QCamera, LockType)
-Q_MEDIA_ENUM_DEBUG(QCamera, LockStatus)
-Q_MEDIA_ENUM_DEBUG(QCamera, LockChangeReason)
-Q_MEDIA_ENUM_DEBUG(QCamera, Position)
#endif // QCAMERA_H