summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/qplatformcamera_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/platform/qplatformcamera_p.h')
-rw-r--r--src/multimedia/platform/qplatformcamera_p.h165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/multimedia/platform/qplatformcamera_p.h b/src/multimedia/platform/qplatformcamera_p.h
new file mode 100644
index 000000000..341bf9121
--- /dev/null
+++ b/src/multimedia/platform/qplatformcamera_p.h
@@ -0,0 +1,165 @@
+// Copyright (C) 2021 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 QPLATFORMCAMERA_H
+#define QPLATFORMCAMERA_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qplatformvideosource_p.h"
+#include "private/qerrorinfo_p.h"
+#include <QtMultimedia/qcamera.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_MULTIMEDIA_EXPORT QPlatformCamera : public QPlatformVideoSource
+{
+ Q_OBJECT
+
+public:
+ virtual void setCamera(const QCameraDevice &camera) = 0;
+ virtual bool setCameraFormat(const QCameraFormat &/*format*/) { return false; }
+ QCameraFormat cameraFormat() const { return m_cameraFormat; }
+
+ virtual bool isFocusModeSupported(QCamera::FocusMode mode) const { return mode == QCamera::FocusModeAuto; }
+ virtual void setFocusMode(QCamera::FocusMode /*mode*/) {}
+
+ virtual void setCustomFocusPoint(const QPointF &/*point*/) {}
+
+ virtual void setFocusDistance(float) {}
+
+ // smaller 0: zoom instantly, rate in power-of-two/sec
+ virtual void zoomTo(float /*newZoomFactor*/, float /*rate*/ = -1.) {}
+
+ virtual void setFlashMode(QCamera::FlashMode /*mode*/) {}
+ virtual bool isFlashModeSupported(QCamera::FlashMode mode) const { return mode == QCamera::FlashOff; }
+ virtual bool isFlashReady() const { return false; }
+
+ virtual void setTorchMode(QCamera::TorchMode /*mode*/) {}
+ virtual bool isTorchModeSupported(QCamera::TorchMode mode) const { return mode == QCamera::TorchOff; }
+
+ virtual void setExposureMode(QCamera::ExposureMode) {}
+ virtual bool isExposureModeSupported(QCamera::ExposureMode mode) const { return mode == QCamera::ExposureAuto; }
+ virtual void setExposureCompensation(float) {}
+ virtual int isoSensitivity() const { return 100; }
+ virtual void setManualIsoSensitivity(int) {}
+ virtual void setManualExposureTime(float) {}
+ virtual float exposureTime() const { return -1.; }
+
+ virtual bool isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const { return mode == QCamera::WhiteBalanceAuto; }
+ virtual void setWhiteBalanceMode(QCamera::WhiteBalanceMode /*mode*/) {}
+ virtual void setColorTemperature(int /*temperature*/) {}
+
+ QVideoFrameFormat frameFormat() const override;
+
+ QCamera::Features supportedFeatures() const { return m_supportedFeatures; }
+
+ QCamera::FocusMode focusMode() const { return m_focusMode; }
+ QPointF focusPoint() const { return m_customFocusPoint; }
+
+ float minZoomFactor() const { return m_minZoom; }
+ float maxZoomFactor() const { return m_maxZoom; }
+ float zoomFactor() const { return m_zoomFactor; }
+ QPointF customFocusPoint() const { return m_customFocusPoint; }
+ float focusDistance() const { return m_focusDistance; }
+
+ QCamera::FlashMode flashMode() const { return m_flashMode; }
+ QCamera::TorchMode torchMode() const { return m_torchMode; }
+
+ QCamera::ExposureMode exposureMode() const { return m_exposureMode; }
+ float exposureCompensation() const { return m_exposureCompensation; }
+ int manualIsoSensitivity() const { return m_iso; }
+ int minIso() const { return m_minIso; }
+ int maxIso() const { return m_maxIso; }
+ float manualExposureTime() const { return m_exposureTime; }
+ float minExposureTime() const { return m_minExposureTime; }
+ float maxExposureTime() const { return m_maxExposureTime; }
+ QCamera::WhiteBalanceMode whiteBalanceMode() const { return m_whiteBalance; }
+ int colorTemperature() const { return m_colorTemperature; }
+
+ void supportedFeaturesChanged(QCamera::Features);
+ void minimumZoomFactorChanged(float factor);
+ void maximumZoomFactorChanged(float);
+ void focusModeChanged(QCamera::FocusMode mode);
+ void customFocusPointChanged(const QPointF &point);
+ void focusDistanceChanged(float d);
+ void zoomFactorChanged(float zoom);
+ void flashReadyChanged(bool);
+ void flashModeChanged(QCamera::FlashMode mode);
+ void torchModeChanged(QCamera::TorchMode mode);
+ void exposureModeChanged(QCamera::ExposureMode mode);
+ void exposureCompensationChanged(float compensation);
+ void exposureCompensationRangeChanged(float min, float max);
+ void isoSensitivityChanged(int iso);
+ void minIsoChanged(int iso) { m_minIso = iso; }
+ void maxIsoChanged(int iso) { m_maxIso = iso; }
+ void exposureTimeChanged(float speed);
+ void minExposureTimeChanged(float secs) { m_minExposureTime = secs; }
+ void maxExposureTimeChanged(float secs) { m_maxExposureTime = secs; }
+ void whiteBalanceModeChanged(QCamera::WhiteBalanceMode mode);
+ void colorTemperatureChanged(int temperature);
+
+ static int colorTemperatureForWhiteBalance(QCamera::WhiteBalanceMode mode);
+
+ QCamera::Error error() const { return m_error.code(); }
+ QString errorString() const final { return m_error.description(); }
+
+ void updateError(QCamera::Error error, const QString &errorString);
+
+Q_SIGNALS:
+ void errorOccurred(QCamera::Error error, const QString &errorString);
+
+protected:
+ explicit QPlatformCamera(QCamera *parent);
+
+ virtual int cameraPixelFormatScore(QVideoFrameFormat::PixelFormat /*format*/,
+ QVideoFrameFormat::ColorRange /*colorRange*/) const
+ {
+ return 0;
+ }
+
+ QCameraFormat findBestCameraFormat(const QCameraDevice &camera) const;
+ QCameraFormat m_cameraFormat;
+ QVideoFrameFormat::PixelFormat m_framePixelFormat = QVideoFrameFormat::Format_Invalid;
+
+private:
+ QCamera *m_camera = nullptr;
+ QCamera::Features m_supportedFeatures = {};
+ QCamera::FocusMode m_focusMode = QCamera::FocusModeAuto;
+ float m_minZoom = 1.;
+ float m_maxZoom = 1.;
+ float m_zoomFactor = 1.;
+ float m_focusDistance = 1.;
+ QPointF m_customFocusPoint{-1, -1};
+ bool m_flashReady = false;
+ QCamera::FlashMode m_flashMode = QCamera::FlashOff;
+ QCamera::TorchMode m_torchMode = QCamera::TorchOff;
+ QCamera::ExposureMode m_exposureMode = QCamera::ExposureAuto;
+ float m_exposureCompensation = 0.;
+ float m_minExposureCompensation = 0.;
+ float m_maxExposureCompensation = 0.;
+ int m_iso = -1;
+ int m_minIso = -1;
+ int m_maxIso = -1;
+ float m_exposureTime = -1.;
+ float m_minExposureTime = -1.;
+ float m_maxExposureTime = -1.;
+ QCamera::WhiteBalanceMode m_whiteBalance = QCamera::WhiteBalanceAuto;
+ int m_colorTemperature = 0;
+ QErrorInfo<QCamera::Error> m_error;
+};
+
+QT_END_NAMESPACE
+
+
+#endif // QPLATFORMCAMERA_H
+