diff options
Diffstat (limited to 'src/multimedia/camera/qcamera.h')
-rw-r--r-- | src/multimedia/camera/qcamera.h | 426 |
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 |