4#undef QT_NO_CONTEXTLESS_CONNECT
14#include <private/qmediastoragelocation_p.h>
16#include <camera/camera_api.h>
17#include <camera/camera_3a.h>
27 camera_focusmode_t
qnx;
39template <
typename Mapping,
typename From,
typename To,
size_t N>
41 From Mapping::* from, To Mapping::* to, From
value, To defaultValue)
44 const auto fromValue =
m.*from;
45 const auto toValue =
m.*to;
47 if (
value == fromValue)
84 return m_qnxCamera && m_qnxCamera->isActive();
103 m_qnxCamera->start();
115 m_videoSink =
nullptr;
122 if (m_cameraDevice ==
camera)
125 const auto cameraUnit =
static_cast<camera_unit_t
>(
camera.id().toUInt());
127 m_qnxCamera = std::make_unique<QQnxCamera>(cameraUnit);
130 [
this](camera_focusmode_t
mode) { Q_EMIT focusModeChanged(qtFocusMode(mode)); });
138 updateCameraFeatures();
146 qWarning(
"QQnxPlatformCamera: invalid resolution requested");
150 return m_qnxCamera->setCameraFormat(resolution.
width(),
156 if (m_session == session)
183 m_qnxCamera->setCustomFocusPoint(point);
191 const int maxDistance = m_qnxCamera->maxFocusStep();
196 const int qnxDistance = maxDistance * std::min(
distance, 1.0f);
198 m_qnxCamera->setManualFocusStep(qnxDistance);
206 const uint32_t minZoom = m_qnxCamera->minimumZoomLevel();
207 const uint32_t maxZoom = m_qnxCamera->maximumZoomLevel();
209 if (maxZoom <= minZoom)
219 factor =
qBound(min, factor, max) - min;
221 const uint32_t zoom = minZoom
222 +
static_cast<uint32_t
>(
qRound(factor*(maxZoom - minZoom)/(max - min)));
224 if (m_qnxCamera->setZoomFactor(zoom))
233 m_qnxCamera->setEvOffset(ev);
241 return m_qnxCamera->manualIsoSensitivity();
249 const uint32_t isoValue = std::max(0,
value);
251 m_qnxCamera->setManualIsoSensitivity(isoValue);
259 m_qnxCamera->setManualExposureTime(seconds);
267 return static_cast<float>(m_qnxCamera->manualExposureTime());
272 if (m_maxColorTemperature != 0)
284 m_qnxCamera->setWhiteBalanceMode(CAMERA_WHITEBALANCEMODE_AUTO);
286 m_qnxCamera->setWhiteBalanceMode(CAMERA_WHITEBALANCEMODE_MANUAL);
296 const auto normalizedTemp = std::clamp<uint32_t>(std::max(0, temperature),
297 m_minColorTemperature, m_maxColorTemperature);
299 if (m_qnxCamera->hasContinuousWhiteBalanceValues()) {
300 m_qnxCamera->setManualWhiteBalance(normalizedTemp);
302 uint32_t delta = std::numeric_limits<uint32_t>::max();
303 uint32_t closestTemp = 0;
305 for (uint32_t
value : m_qnxCamera->supportedWhiteBalanceValues()) {
306 const auto &[min, max] = std::minmax(
value, normalizedTemp);
307 const uint32_t currentDelta = max - min;
309 if (currentDelta < delta) {
311 delta = currentDelta;
315 m_qnxCamera->setManualWhiteBalance(closestTemp);
322 qWarning(
"QQnxPlatformCamera: cannot start video recording - no no camera assigned");
326 if (!isVideoEncodingSupported()) {
327 qWarning(
"QQnxPlatformCamera: cannot start video recording - not supported");
331 if (!m_qnxCamera->isActive()) {
332 qWarning(
"QQnxPlatformCamera: cannot start video recording - camera not started");
342 static void *libScreen =
nullptr;
345 libScreen = dlopen(
"/usr/lib/libscreen.so.1", RTLD_GLOBAL);
350 return m_qnxCamera->startVideoRecording(
location);
355 m_videoFrameRequests.emplace_back(std::move(
cb));
358bool QQnxPlatformCamera::isVideoEncodingSupported()
const
360 return m_qnxCamera && m_qnxCamera->hasFeature(CAMERA_FEATURE_VIDEO);
373void QQnxPlatformCamera::updateCameraFeatures()
378 QCamera::Features features = {};
380 if (m_qnxCamera->hasFeature(CAMERA_FEATURE_REGIONFOCUS))
388 const QList<uint32_t> wbValues = m_qnxCamera->supportedWhiteBalanceValues();
390 if (wbValues.isEmpty()) {
391 m_minColorTemperature = m_maxColorTemperature = 0;
393 const auto &[minTemp, maxTemp] = std::minmax_element(wbValues.begin(), wbValues.end());
395 m_minColorTemperature = *minTemp;
396 m_maxColorTemperature = *maxTemp;
400void QQnxPlatformCamera::onFrameAvailable()
405 std::unique_ptr<QQnxCameraFrameBuffer> currentFrame = m_qnxCamera->takeCurrentFrame();
413 currentFrame.release();
418 if (!m_videoFrameRequests.empty()) {
420 m_videoFrameRequests.pop_front();
427#include "moc_qqnxplatformcamera_p.cpp"
The QCameraDevice class provides general information about camera devices.
The QCamera class provides interface for system camera devices.
WhiteBalanceMode
\value WhiteBalanceAuto Auto white balance mode.
FocusMode
\value FocusModeAuto Continuous auto focus mode.
QString preferredSuffix
the preferred suffix for the MIME type
QObject * parent() const
Returns a pointer to the parent object.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
\inmodule QtCore\reentrant
void focusModeChanged(camera_focusmode_t mode)
void customFocusPointChanged(const QPointF &point)
constexpr int height() const noexcept
Returns the height.
constexpr int width() const noexcept
Returns the width.
constexpr bool isEmpty() const noexcept
Returns true if either of the width and height is less than or equal to 0; otherwise returns false.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString toLocalFile() const
Returns the path of this URL formatted as a local file path.
The QVideoFrame class represents a frame of video data.
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
int qRound(qfloat16 d) noexcept
constexpr const T & qBound(const T &min, const T &val, const T &max)
GLsizei GLsizei GLfloat distance
GLint GLsizei GLsizei GLenum format
GLenum GLenum GLenum GLenum mapping
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
QSettings settings("MySoft", "Star Runner")
[0]
QUrl url("example.com")
[constructor-url-reference]