51 const std::optional<int32_t> location = properties.get(properties::Location);
53 return QCameraDevice::UnspecifiedPosition;
56 case properties::CameraLocationFront:
57 return QCameraDevice::FrontFace;
58 case properties::CameraLocationBack:
59 return QCameraDevice::BackFace;
61 return QCameraDevice::UnspecifiedPosition;
66 QVideoFrameFormat::PixelFormat pixelFormat,
const QSize &size,
67 float minFrameRate,
float maxFrameRate)
69 auto *f =
new QCameraFormatPrivate{
70 QSharedData(), pixelFormat, size, minFrameRate, maxFrameRate,
72 formats << f->create();
78 QList<QCameraDevice> devices;
80 CameraManager *manager = m_instance->manager();
84 for (
const std::shared_ptr<Camera> &camera : manager->cameras()) {
85 auto *info =
new QCameraDevicePrivate;
86 info->id = QByteArray::fromStdString(camera->id());
88 const ControlList &properties = camera->properties();
89 if (
const std::optional<std::string_view> model = properties.get(properties::Model))
90 info->description = QString::fromUtf8(model->data(), qsizetype(model->size()));
92 info->description = QString::fromStdString(camera->id());
94 info->isDefault = devices.isEmpty();
95 info->position = positionFromLibcamera(properties);
96 if (
const std::optional<int32_t> rotation = properties.get(properties::Rotation))
97 info->orientation = *rotation;
99 const auto [minFrameRate, maxFrameRate] = frameRateRangeFromControls(camera->controls());
101 std::unique_ptr<CameraConfiguration> config =
102 camera->generateConfiguration({ StreamRole::VideoRecording });
103 if (config && !config->empty()) {
104 const StreamConfiguration &streamConfig = config->at(0);
105 for (
const PixelFormat &pixelFormat : streamConfig.formats().pixelformats()) {
106 const std::optional<QVideoFrameFormat::PixelFormat> qtFormat =
107 pixelFormatFromLibcamera(pixelFormat);
111 const std::vector sizes = sizesForPixelFormat(streamConfig.formats(), pixelFormat);
112 for (
const QSize &size : sizes)
113 appendFormatsForSize(info->videoFormats, *qtFormat, size, minFrameRate,
118 devices << info->create();