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
qqnxcamera_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 Research In Motion
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 QQNXCAMERA_H
5#define QQNXCAMERA_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 "qqnxcamerahandle_p.h"
19
20#include <QtCore/qlist.h>
21#include <QtCore/qmutex.h>
22#include <QtCore/qobject.h>
23#include <QtCore/qurl.h>
24
25#include <camera/camera_api.h>
26#include <camera/camera_3a.h>
27
28#include <memory>
29#include <optional>
30
32
35class QQnxVideoSink;
36
37class QQnxCamera : public QObject
38{
40public:
41 explicit QQnxCamera(camera_unit_t unit, QObject *parent = nullptr);
43
44 camera_unit_t unit() const;
45
46 QString name() const;
47
48 bool isValid() const;
49
50 bool isActive() const;
51 void start();
52 void stop();
53
54 bool startVideoRecording(const QString &filename);
55 void stopVideoRecording();
56
57 bool setCameraFormat(uint32_t width, uint32_t height, double frameRate);
58
59 bool isFocusModeSupported(camera_focusmode_t mode) const;
60 bool setFocusMode(camera_focusmode_t mode);
61 camera_focusmode_t focusMode() const;
62
63 void setCustomFocusPoint(const QPointF &point);
64
65 void setManualFocusStep(int step);
66 int manualFocusStep() const;
67 int maxFocusStep() const;
68
69 QSize viewFinderSize() const;
70
71 uint32_t minimumZoomLevel() const;
72 uint32_t maximumZoomLevel() const;
73 bool isSmoothZoom() const;
74 double zoomRatio(uint32_t zoomLevel) const;
75 bool setZoomFactor(uint32_t factor);
76
77 void setEvOffset(float ev);
78
79 uint32_t manualIsoSensitivity() const;
80 void setManualIsoSensitivity(uint32_t value);
81 void setManualExposureTime(double seconds);
82 double manualExposureTime() const;
83
84 void setWhiteBalanceMode(camera_whitebalancemode_t mode);
85 camera_whitebalancemode_t whiteBalanceMode() const;
86
87 void setManualWhiteBalance(uint32_t value);
88 uint32_t manualWhiteBalance() const;
89
90 bool hasFeature(camera_feature_t feature) const;
91
92 camera_handle_t handle() const;
93
94 QList<camera_vfmode_t> supportedVfModes() const;
95 QList<camera_res_t> supportedVfResolutions() const;
96 QList<camera_frametype_t> supportedVfFrameTypes() const;
97 QList<camera_focusmode_t> supportedFocusModes() const;
98 QList<double> specifiedVfFrameRates(camera_frametype_t frameType,
99 camera_res_t resolution) const;
100
101 QList<camera_frametype_t> supportedRecordingFrameTypes() const;
102
103 QList<uint32_t> supportedWhiteBalanceValues() const;
104
106
107 static QList<camera_unit_t> supportedUnits();
108
109 std::unique_ptr<QQnxCameraFrameBuffer> takeCurrentFrame();
110
112 void focusModeChanged(camera_focusmode_t mode);
114 void minimumZoomFactorChanged(double factor);
115
116 double maximumZoomFactorChanged(double factor);
117
119
120private:
121 struct FocusStep
122 {
123 int step; // current step
124 int maxStep; // max supported step
125 };
126
127 FocusStep focusStep() const;
128
129 struct VideoFormat
130 {
131 uint32_t width;
132 uint32_t height;
133 uint32_t rotation;
134 double frameRate;
135 camera_frametype_t frameType;
136 };
137
138 friend QDebug &operator<<(QDebug&, const VideoFormat&);
139
140 VideoFormat vfFormat() const;
141 void setVfFormat(const VideoFormat &format);
142
143 VideoFormat recordingFormat() const;
144 void setRecordingFormat(const VideoFormat &format);
145
146 void updateZoomLimits();
147 void updateSupportedWhiteBalanceValues();
148 void setColorTemperatureInternal(unsigned temp);
149
150 bool isVideoEncodingSupported() const;
151
152 void handleVfBuffer(camera_buffer_t *buffer);
153
154 // viewfinder callback
155 void handleVfStatus(camera_devstatus_t status, uint16_t extraData);
156
157 // our handler running on main thread
158 Q_INVOKABLE void handleStatusChange(camera_devstatus_t status, uint16_t extraData);
159
160 template <typename T, typename U>
161 using QueryFuncPtr = camera_error_t (*)(camera_handle_t, U, U *, T *);
162
163 template <typename T, typename U>
164 QList<T> queryValues(QueryFuncPtr<T, U> func) const;
165
166 static void viewfinderCallback(camera_handle_t handle,
167 camera_buffer_t *buffer, void *arg);
168
169 static void statusCallback(camera_handle_t handle, camera_devstatus_t status,
170 uint16_t extraData, void *arg);
171
172 QQnxMediaCaptureSession *m_session = nullptr;
173
174 camera_unit_t m_cameraUnit = CAMERA_UNIT_NONE;
175
176 QQnxCameraHandle m_handle;
177
178 uint32_t m_minZoom = 0;
179 uint32_t m_maxZoom = 0;
180
181 QMutex m_currentFrameMutex;
182
183 QList<uint32_t> m_supportedWhiteBalanceValues;
184
185 std::unique_ptr<QQnxCameraFrameBuffer> m_currentFrame;
186
187 std::optional<VideoFormat> m_originalVfFormat;
188
189 bool m_viewfinderActive = false;
190 bool m_recordingVideo = false;
191 bool m_valid = false;
192 bool m_smoothZoom = false;
193 bool m_continuousWhiteBalanceValues = false;
194};
195
197
198Q_DECLARE_METATYPE(camera_devstatus_t)
199Q_DECLARE_METATYPE(uint16_t)
200
201#endif
\inmodule QtCore
\inmodule QtCore
Definition qmutex.h:281
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
\inmodule QtCore\reentrant
Definition qpoint.h:217
QList< camera_vfmode_t > supportedVfModes() const
void setManualIsoSensitivity(uint32_t value)
void setCustomFocusPoint(const QPointF &point)
bool setCameraFormat(uint32_t width, uint32_t height, double frameRate)
camera_whitebalancemode_t whiteBalanceMode() const
void setEvOffset(float ev)
int maxFocusStep() const
void minimumZoomFactorChanged(double factor)
std::unique_ptr< QQnxCameraFrameBuffer > takeCurrentFrame()
camera_handle_t handle() const
QQnxCamera(camera_unit_t unit, QObject *parent=nullptr)
QList< camera_frametype_t > supportedRecordingFrameTypes() const
void focusModeChanged(camera_focusmode_t mode)
QList< uint32_t > supportedWhiteBalanceValues() const
double zoomRatio(uint32_t zoomLevel) const
bool setZoomFactor(uint32_t factor)
bool isFocusModeSupported(camera_focusmode_t mode) const
void stopVideoRecording()
uint32_t manualIsoSensitivity() const
double manualExposureTime() const
QList< camera_focusmode_t > supportedFocusModes() const
void frameAvailable()
uint32_t maximumZoomLevel() const
QList< double > specifiedVfFrameRates(camera_frametype_t frameType, camera_res_t resolution) const
bool startVideoRecording(const QString &filename)
bool isValid() const
bool hasFeature(camera_feature_t feature) const
QList< camera_frametype_t > supportedVfFrameTypes() const
friend QDebug & operator<<(QDebug &, const VideoFormat &)
void setManualFocusStep(int step)
QSize viewFinderSize() const
bool isActive() const
bool isSmoothZoom() const
void setWhiteBalanceMode(camera_whitebalancemode_t mode)
QList< camera_res_t > supportedVfResolutions() const
void customFocusPointChanged(const QPointF &point)
uint32_t minimumZoomLevel() const
bool hasContinuousWhiteBalanceValues() const
camera_focusmode_t focusMode() const
void setManualWhiteBalance(uint32_t value)
uint32_t manualWhiteBalance() const
void setManualExposureTime(double seconds)
bool setFocusMode(camera_focusmode_t mode)
int manualFocusStep() const
camera_unit_t unit() const
double maximumZoomFactorChanged(double factor)
QString name() const
static QList< camera_unit_t > supportedUnits()
\inmodule QtCore
Definition qsize.h:25
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define Q_DECLARE_METATYPE(TYPE)
Definition qmetatype.h:1525
GLuint64 GLenum void * handle
GLenum mode
GLint GLsizei GLsizei height
GLenum GLuint buffer
GLint GLsizei width
GLint GLsizei GLsizei GLenum format
GLenum func
Definition qopenglext.h:663
SSL_CTX int void * arg
#define Q_OBJECT
#define Q_INVOKABLE
#define Q_SIGNALS