Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qgstreamercamera_p.h
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#ifndef QGSTREAMERCAMERACONTROL_H
5#define QGSTREAMERCAMERACONTROL_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <private/qplatformcamera_p.h>
19#include <private/qmultimediautils_p.h>
20
22#include <common/qgst_p.h>
24
26
28{
30public:
31 static QMaybe<QPlatformCamera *> create(QCamera *camera);
32
33 virtual ~QGstreamerCamera();
34
35 bool isActive() const override;
36 void setActive(bool active) override;
37
38 void setCamera(const QCameraDevice &camera) override;
39 bool setCameraFormat(const QCameraFormat &format) override;
40
41 QGstElement gstElement() const { return gstCameraBin; }
42#if QT_CONFIG(gstreamer_photography)
43 GstPhotography *photography() const;
44#endif
45
47 bool isFocusModeSupported(QCamera::FocusMode mode) const override;
48
50 bool isFlashModeSupported(QCamera::FlashMode mode) const override;
51 bool isFlashReady() const override;
52
55 void setExposureCompensation(float) override;
56 void setManualIsoSensitivity(int) override;
57 int isoSensitivity() const override;
58 void setManualExposureTime(float) override;
59 float exposureTime() const override;
60
63 void setColorTemperature(int temperature) override;
64
65private:
66 QGstreamerCamera(QGstElement videotestsrc, QGstElement capsFilter, QGstElement videoconvert,
67 QGstElement videoscale, QCamera *camera);
68
69 void updateCameraProperties();
70
71#if QT_CONFIG(linux_v4l)
72 bool isV4L2Camera() const;
73 void initV4L2Controls();
74 int setV4L2ColorTemperature(int temperature);
75 bool setV4L2Parameter(quint32 id, qint32 value);
76 int getV4L2Parameter(quint32 id) const;
77
78 bool v4l2AutoWhiteBalanceSupported = false;
79 bool v4l2ColorTemperatureSupported = false;
80 bool v4l2AutoExposureSupported = false;
81 bool v4l2ManualExposureSupported = false;
82 qint32 v4l2MinColorTemp = 5600; // Daylight...
83 qint32 v4l2MaxColorTemp = 5600;
84 qint32 v4l2MinExposure = 0;
85 qint32 v4l2MaxExposure = 0;
86 qint32 v4l2MinExposureAdjustment = 0;
87 qint32 v4l2MaxExposureAdjustment = 0;
88
89 template <typename Functor>
90 auto withV4L2DeviceFileDescriptor(Functor &&f) const
91 {
92 using ReturnType = std::invoke_result_t<Functor, int>;
93 Q_ASSERT(isV4L2Camera());
94
95 if (int gstreamerDeviceFd = gstCamera.getInt("device-fd"); gstreamerDeviceFd != -1)
96 return f(gstreamerDeviceFd);
97
98 auto v4l2FileDescriptor = QFileDescriptorHandle{
99 qt_safe_open(m_v4l2DevicePath.toLocal8Bit().constData(), O_RDONLY),
100 };
101 if (!v4l2FileDescriptor) {
102 qWarning() << "Unable to open the camera" << m_v4l2DevicePath
103 << "for read to query the parameter info:" << qt_error_string(errno);
104 if constexpr (std::is_void_v<ReturnType>)
105 return;
106 else
107 return ReturnType{};
108 }
109 return f(v4l2FileDescriptor.get());
110 }
111#endif
112
113 QCameraDevice m_cameraDevice;
114
115 QGstBin gstCameraBin;
116 QGstElement gstCamera;
117 QGstElement gstCapsFilter;
118 QGstElement gstDecode;
119 QGstElement gstVideoConvert;
120 QGstElement gstVideoScale;
121 QGstPipeline gstPipeline;
122
123 bool m_active = false;
124 QString m_v4l2DevicePath;
125};
126
128
129#endif // QGSTREAMERCAMERACONTROL_H
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
Definition qbytearray.h:124
The QCameraDevice class provides general information about camera devices.
The QCameraFormat class describes a video format supported by a camera device. \inmodule QtMultimedia...
The QCamera class provides interface for system camera devices.
Definition qcamera.h:28
WhiteBalanceMode
\value WhiteBalanceAuto Auto white balance mode.
Definition qcamera.h:112
FocusMode
\value FocusModeAuto Continuous auto focus mode.
Definition qcamera.h:67
FlashMode
\value FlashOff Flash is Off.
Definition qcamera.h:77
ExposureMode
\value ExposureAuto Automatic mode.
Definition qcamera.h:91
int getInt(const char *property) const
Definition qgst.cpp:611
void setWhiteBalanceMode(QCamera::WhiteBalanceMode mode) override
bool isFocusModeSupported(QCamera::FocusMode mode) const override
bool isActive() const override
bool isFlashModeSupported(QCamera::FlashMode mode) const override
bool isExposureModeSupported(QCamera::ExposureMode mode) const override
bool setCameraFormat(const QCameraFormat &format) override
void setColorTemperature(int temperature) override
void setExposureMode(QCamera::ExposureMode) override
bool isFlashReady() const override
int isoSensitivity() const override
float exposureTime() const override
bool isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const override
void setFlashMode(QCamera::FlashMode mode) override
void setFocusMode(QCamera::FocusMode mode) override
void setActive(bool active) override
void setManualIsoSensitivity(int) override
void setCamera(const QCameraDevice &camera) override
void setManualExposureTime(float) override
QGstElement gstElement() const
void setExposureCompensation(float) override
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QByteArray toLocal8Bit() const &
Definition qstring.h:638
QCamera * camera
Definition camera.cpp:19
Combined button and popup list for selecting options.
static int qt_safe_open(const char *pathname, int flags, mode_t mode=0777)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
QUniqueHandle< QGstImpl::QFileDescriptorHandleTraits > QFileDescriptorHandle
Q_DECL_COLD_FUNCTION Q_CORE_EXPORT QString qt_error_string(int errorCode=-1)
#define qWarning
Definition qlogging.h:166
GLenum mode
GLfloat GLfloat f
GLint GLsizei GLsizei GLenum format
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_OBJECT
unsigned int quint32
Definition qtypes.h:50
int qint32
Definition qtypes.h:49
view create()