summaryrefslogtreecommitdiffstats
path: root/src/multimedia/camera/qcamerafocus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/camera/qcamerafocus.cpp')
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp85
1 files changed, 35 insertions, 50 deletions
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp
index 7fa30a859..7c07669f6 100644
--- a/src/multimedia/camera/qcamerafocus.cpp
+++ b/src/multimedia/camera/qcamerafocus.cpp
@@ -50,33 +50,6 @@
QT_BEGIN_NAMESPACE
-class QCameraFocusFakeFocusControl : public QCameraFocusControl
-{
-public:
- QCameraFocusFakeFocusControl(QObject *parent) :
- QCameraFocusControl(parent) {}
-
- [[nodiscard]] QCameraFocus::FocusModes focusMode() const override { return QCameraFocus::AutoFocus; }
- void setFocusMode(QCameraFocus::FocusModes) override { qWarning("Focus mode selection is not supported"); }
- [[nodiscard]] bool isFocusModeSupported(QCameraFocus::FocusModes) const override { return false; }
-
- [[nodiscard]] QCameraFocus::FocusPointMode focusPointMode() const override { return QCameraFocus::FocusPointAuto; }
- void setFocusPointMode(QCameraFocus::FocusPointMode) override { qWarning("Focus points mode selection is not supported"); }
- [[nodiscard]] bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const override { return false; }
- [[nodiscard]] QPointF customFocusPoint() const override { return QPointF(0.5,0.5); }
- void setCustomFocusPoint(const QPointF &) override { qWarning("Focus points selection is not supported"); }
-
- [[nodiscard]] QCameraFocusZoneList focusZones() const override { return QCameraFocusZoneList(); }
-
- ZoomRange zoomFactorRange() const override { return {1., 1.}; };
- void zoomTo(float, float) override
- {
- qWarning("The camera doesn't support zooming.");
- }
-};
-
-
-
class QCameraFocusZoneData : public QSharedData
{
public:
@@ -279,7 +252,7 @@ class QCameraFocusPrivate : public QMediaSourcePrivate
{
Q_DECLARE_NON_CONST_PUBLIC(QCameraFocus)
public:
- void initControls();
+ void init(QCameraControl *cameraControl);
QCamera *camera;
@@ -289,21 +262,15 @@ public:
};
-void QCameraFocusPrivate::initControls()
+void QCameraFocusPrivate::init(QCameraControl *cameraControl)
{
Q_Q(QCameraFocus);
- focusControl = nullptr;
-
- QMediaService *service = camera->service();
- if (service) {
- focusControl = qobject_cast<QCameraFocusControl *>(service->requestControl(QCameraFocusControl_iid));
- }
-
+ focusControl = cameraControl->focusControl();
available = focusControl != nullptr;
if (!focusControl)
- focusControl = new QCameraFocusFakeFocusControl(q);
+ return;
q->connect(focusControl, SIGNAL(focusZonesChanged()), q, SIGNAL(focusZonesChanged()));
@@ -322,12 +289,12 @@ void QCameraFocusPrivate::initControls()
Construct a QCameraFocus for \a camera.
*/
-QCameraFocus::QCameraFocus(QCamera *camera)
+QCameraFocus::QCameraFocus(QCamera *camera, QCameraControl *cameraControl)
: QObject(*new QCameraFocusPrivate, camera)
{
Q_D(QCameraFocus);
d->camera = camera;
- d->initControls();
+ d->init(cameraControl);
}
@@ -361,12 +328,15 @@ bool QCameraFocus::isAvailable() const
QCameraFocus::FocusModes QCameraFocus::focusMode() const
{
- return d_func()->focusControl->focusMode();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->focusMode() : QCameraFocus::AutoFocus;
}
void QCameraFocus::setFocusMode(QCameraFocus::FocusModes mode)
{
- d_func()->focusControl->setFocusMode(mode);
+ Q_D(QCameraFocus);
+ if (d->focusControl)
+ d->focusControl->setFocusMode(mode);
}
/*!
@@ -375,7 +345,8 @@ void QCameraFocus::setFocusMode(QCameraFocus::FocusModes mode)
bool QCameraFocus::isFocusModeSupported(FocusModes mode) const
{
- return d_func()->focusControl->isFocusModeSupported(mode);
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->isFocusModeSupported(mode) : false;
}
/*!
@@ -391,12 +362,15 @@ bool QCameraFocus::isFocusModeSupported(FocusModes mode) const
QCameraFocus::FocusPointMode QCameraFocus::focusPointMode() const
{
- return d_func()->focusControl->focusPointMode();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->focusPointMode() : QCameraFocus::FocusPointAuto;
}
void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode)
{
- d_func()->focusControl->setFocusPointMode(mode);
+ Q_D(QCameraFocus);
+ if (d->focusControl)
+ d->focusControl->setFocusPointMode(mode);
}
/*!
@@ -404,7 +378,8 @@ void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode)
*/
bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const
{
- return d_func()->focusControl->isFocusPointModeSupported(mode);
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->isFocusPointModeSupported(mode) : false;
}
/*!
@@ -418,12 +393,15 @@ bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode)
QPointF QCameraFocus::customFocusPoint() const
{
- return d_func()->focusControl->customFocusPoint();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->customFocusPoint() : QPointF(0.5,0.5);
}
void QCameraFocus::setCustomFocusPoint(const QPointF &point)
{
- d_func()->focusControl->setCustomFocusPoint(point);
+ Q_D(QCameraFocus);
+ if (d->focusControl)
+ d->focusControl->setCustomFocusPoint(point);
}
/*!
@@ -439,7 +417,8 @@ void QCameraFocus::setCustomFocusPoint(const QPointF &point)
*/
QCameraFocusZoneList QCameraFocus::focusZones() const
{
- return d_func()->focusControl->focusZones();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->focusZones() : QCameraFocusZoneList();
}
/*!
@@ -450,7 +429,8 @@ QCameraFocusZoneList QCameraFocus::focusZones() const
float QCameraFocus::maximumZoomFactor() const
{
- return d_func()->focusControl->zoomFactorRange().max;
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->zoomFactorRange().max : 1.;
}
/*!
@@ -461,7 +441,8 @@ float QCameraFocus::maximumZoomFactor() const
float QCameraFocus::minimumZoomFactor() const
{
- return d_func()->focusControl->zoomFactorRange().min;
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->zoomFactorRange().min : 1.;
}
/*!
@@ -476,6 +457,7 @@ float QCameraFocus::zoomFactor() const
void QCameraFocus::setZoomFactor(float factor)
{
Q_D(QCameraFocus);
+ factor = qBound(minimumZoomFactor(), factor, maximumZoomFactor());
d->zoomFactor = factor;
d->focusControl->zoomTo(factor, -1);
}
@@ -488,7 +470,10 @@ void QCameraFocus::setZoomFactor(float factor)
*/
void QCameraFocus::zoomTo(float factor, float rate)
{
+ Q_ASSERT(rate > 0);
+
Q_D(QCameraFocus);
+ factor = qBound(minimumZoomFactor(), factor, maximumZoomFactor());
d->zoomFactor = factor;
d->focusControl->zoomTo(factor, rate);
}