11#include <private/qmediastoragelocation_p.h>
13#include <camera/camera_api.h>
14#include <camera/camera_3a.h>
24 camera_focusmode_t
qnx;
36template <
typename Mapping,
typename From,
typename To,
size_t N>
38 From Mapping::* from, To Mapping::* to, From
value, To defaultValue)
41 const auto fromValue =
m.*from;
42 const auto toValue =
m.*to;
44 if (
value == fromValue)
81 return m_qnxCamera && m_qnxCamera->isActive();
100 m_qnxCamera->start();
112 m_videoSink =
nullptr;
119 if (m_cameraDevice ==
camera)
122 const auto cameraUnit =
static_cast<camera_unit_t
>(
camera.id().toUInt());
124 m_qnxCamera = std::make_unique<QQnxCamera>(cameraUnit);
127 [
this](camera_focusmode_t
mode) { Q_EMIT focusModeChanged(qtFocusMode(mode)); });
135 updateCameraFeatures();
143 qWarning(
"QQnxPlatformCamera: invalid resolution requested");
147 return m_qnxCamera->setCameraFormat(resolution.
width(),
153 if (m_session == session)
180 m_qnxCamera->setCustomFocusPoint(point);
188 const int maxDistance = m_qnxCamera->maxFocusStep();
193 const int qnxDistance = maxDistance * std::min(
distance, 1.0f);
195 m_qnxCamera->setManualFocusStep(qnxDistance);
203 const uint32_t minZoom = m_qnxCamera->minimumZoomLevel();
204 const uint32_t maxZoom = m_qnxCamera->maximumZoomLevel();
206 if (maxZoom <= minZoom)
216 factor =
qBound(min, factor, max) - min;
218 const uint32_t zoom = minZoom
219 +
static_cast<uint32_t
>(
qRound(factor*(maxZoom - minZoom)/(max - min)));
221 if (m_qnxCamera->setZoomFactor(zoom))
230 m_qnxCamera->setEvOffset(ev);
238 return m_qnxCamera->manualIsoSensitivity();
246 const uint32_t isoValue = std::max(0,
value);
248 m_qnxCamera->setManualIsoSensitivity(isoValue);
256 m_qnxCamera->setManualExposureTime(seconds);
264 return static_cast<float>(m_qnxCamera->manualExposureTime());
269 if (m_maxColorTemperature != 0)
281 m_qnxCamera->setWhiteBalanceMode(CAMERA_WHITEBALANCEMODE_AUTO);
283 m_qnxCamera->setWhiteBalanceMode(CAMERA_WHITEBALANCEMODE_MANUAL);
293 const auto normalizedTemp = std::clamp<uint32_t>(std::max(0, temperature),
294 m_minColorTemperature, m_maxColorTemperature);
296 if (m_qnxCamera->hasContinuousWhiteBalanceValues()) {
297 m_qnxCamera->setManualWhiteBalance(normalizedTemp);
299 uint32_t delta = std::numeric_limits<uint32_t>::max();
300 uint32_t closestTemp = 0;
302 for (uint32_t
value : m_qnxCamera->supportedWhiteBalanceValues()) {
303 const auto &[min, max] = std::minmax(
value, normalizedTemp);
304 const uint32_t currentDelta = max - min;
306 if (currentDelta < delta) {
308 delta = currentDelta;
312 m_qnxCamera->setManualWhiteBalance(closestTemp);
319 qWarning(
"QQnxPlatformCamera: cannot start video recording - no no camera assigned");
323 if (!isVideoEncodingSupported()) {
324 qWarning(
"QQnxPlatformCamera: cannot start video recording - not supported");
328 if (!m_qnxCamera->isActive()) {
329 qWarning(
"QQnxPlatformCamera: cannot start video recording - camera not started");
339 static void *libScreen =
nullptr;
342 libScreen = dlopen(
"/usr/lib/libscreen.so.1", RTLD_GLOBAL);
347 return m_qnxCamera->startVideoRecording(
location);
352 m_videoFrameRequests.emplace_back(std::move(
cb));
355bool QQnxPlatformCamera::isVideoEncodingSupported()
const
357 return m_qnxCamera && m_qnxCamera->hasFeature(CAMERA_FEATURE_VIDEO);
370void QQnxPlatformCamera::updateCameraFeatures()
375 QCamera::Features features = {};
377 if (m_qnxCamera->hasFeature(CAMERA_FEATURE_REGIONFOCUS))
385 const QList<uint32_t> wbValues = m_qnxCamera->supportedWhiteBalanceValues();
388 m_minColorTemperature = m_maxColorTemperature = 0;
390 const auto &[minTemp, maxTemp] = std::minmax_element(wbValues.
begin(), wbValues.
end());
392 m_minColorTemperature = *minTemp;
393 m_maxColorTemperature = *maxTemp;
397void QQnxPlatformCamera::onFrameAvailable()
402 std::unique_ptr<QQnxCameraFrameBuffer> currentFrame = m_qnxCamera->takeCurrentFrame();
410 currentFrame.release();
415 if (!m_videoFrameRequests.empty()) {
417 m_videoFrameRequests.pop_front();
424#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.
bool isEmpty() const noexcept
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]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent