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
qqnxvideodevices.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 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
5#include "qqnxcamera_p.h"
6#include "private/qcameradevice_p.h"
7#include "qcameradevice.h"
8
9#include <qdir.h>
10#include <qdebug.h>
11
12#include <optional>
13
15
17{
18 switch (type) {
19 default:
20 case CAMERA_FRAMETYPE_UNSPECIFIED:
22 case CAMERA_FRAMETYPE_NV12:
24 case CAMERA_FRAMETYPE_RGB8888:
26 case CAMERA_FRAMETYPE_JPEG:
28 case CAMERA_FRAMETYPE_GRAY8:
30 case CAMERA_FRAMETYPE_CBYCRY:
32 case CAMERA_FRAMETYPE_YCBCR420P:
34 case CAMERA_FRAMETYPE_YCBYCR:
36 }
37}
38
39static std::optional<QCameraDevice> createCameraDevice(camera_unit_t unit, bool isDefault)
40{
41 const QQnxCamera camera(unit);
42
43 if (!camera.isValid()) {
44 qWarning() << "Invalid camera unit:" << unit;
45 return {};
46 }
47
48 auto *p = new QCameraDevicePrivate;
49
50 p->id = QByteArray::number(camera.unit());
51 p->description = camera.name();
52 p->isDefault = isDefault;
53
54 const QList<camera_frametype_t> frameTypes = camera.supportedVfFrameTypes();
55
56 for (camera_res_t res : camera.supportedVfResolutions()) {
57 const QSize resolution(res.width, res.height);
58
59 p->photoResolutions.append(resolution);
60
61 for (camera_frametype_t frameType : camera.supportedVfFrameTypes()) {
62 const QVideoFrameFormat::PixelFormat pixelFormat = fromCameraFrametype(frameType);
63
64 if (pixelFormat == QVideoFrameFormat::Format_Invalid)
65 continue;
66
67 auto *f = new QCameraFormatPrivate;
68 p->videoFormats.append(f->create());
69
70 f->resolution = resolution;
71 f->pixelFormat = pixelFormat;
72 f->minFrameRate = 1.e10;
73
74 for (double fr : camera.specifiedVfFrameRates(frameType, res)) {
75 if (fr < f->minFrameRate)
76 f->minFrameRate = fr;
77 if (fr > f->maxFrameRate)
78 f->maxFrameRate = fr;
79 }
80 }
81 }
82
83 return p->create();
84}
85
90
91QList<QCameraDevice> QQnxVideoDevices::videoDevices() const
92{
93 QList<QCameraDevice> cameras;
94
95 bool isDefault = true;
96
97 for (const camera_unit_t cameraUnit : QQnxCamera::supportedUnits()) {
98 const std::optional<QCameraDevice> cameraDevice = createCameraDevice(cameraUnit, isDefault);
99
100 if (!cameraDevice)
101 continue;
102
103 cameras.append(*cameraDevice);
104
105 isDefault = false;
106 }
107
108 return cameras;
109}
110
static QByteArray number(int, int base=10)
Returns a byte-array representing the whole number n as text.
static QList< camera_unit_t > supportedUnits()
QQnxVideoDevices(QPlatformMediaIntegration *integration)
QList< QCameraDevice > videoDevices() const override
\inmodule QtCore
Definition qsize.h:25
PixelFormat
Enumerates video data types.
QCamera * camera
Definition camera.cpp:19
Combined button and popup list for selecting options.
#define qWarning
Definition qlogging.h:166
GLfloat GLfloat f
GLenum type
GLuint res
GLfloat GLfloat p
[1]
static QT_BEGIN_NAMESPACE QVideoFrameFormat::PixelFormat fromCameraFrametype(camera_frametype_t type)
static std::optional< QCameraDevice > createCameraDevice(camera_unit_t unit, bool isDefault)