22QCameraFormat QPlatformCamera::findBestCameraFormat(
const QCameraDevice &camera)
const
28 auto makeCriteria = [
this](
const QCameraFormat &fmt) {
29 constexpr float MinSufficientFrameRate = 29.f;
31 const auto isValid = fmt.pixelFormat() != QVideoFrameFormat::Format_Invalid;
32 const auto resolution = fmt.resolution();
33 const auto sufficientFrameRate = std::min(fmt.maxFrameRate(), MinSufficientFrameRate);
34 const auto pixelFormatScore =
35 cameraPixelFormatScore(fmt.pixelFormat(), QCameraFormatPrivate::getColorRange(fmt));
37 return std::make_tuple(
40 resolution.width() * resolution.height(),
45 const auto formats = camera.videoFormats();
47 return QCameraFormat{};
50 ranges::max(formats, [&](
const QCameraFormat &fmtA,
const QCameraFormat &fmtB) {
51 return makeCriteria(fmtA) < makeCriteria(fmtB);
57QVideoFrameFormat QPlatformCamera::frameFormat()
const
59 QVideoFrameFormat result(m_cameraFormat.resolution(),
60 m_framePixelFormat == QVideoFrameFormat::Format_Invalid
61 ? m_cameraFormat.pixelFormat()
62 : m_framePixelFormat);
63 result.setStreamFrameRate(m_cameraFormat.maxFrameRate());