16QCameraFormat QPlatformCamera::findBestCameraFormat(
const QCameraDevice &camera)
const
22 auto makeCriteria = [
this](
const QCameraFormat &fmt) {
23 constexpr float MinSufficientFrameRate = 29.f;
25 const auto isValid = fmt.pixelFormat() != QVideoFrameFormat::Format_Invalid;
26 const auto resolution = fmt.resolution();
27 const auto sufficientFrameRate = std::min(fmt.maxFrameRate(), MinSufficientFrameRate);
28 const auto pixelFormatScore =
29 cameraPixelFormatScore(fmt.pixelFormat(), QCameraFormatPrivate::getColorRange(fmt));
31 return std::make_tuple(
34 resolution.width() * resolution.height(),
39 const auto formats = camera.videoFormats();
41 std::max_element(formats.begin(), formats.end(),
42 [makeCriteria](
const QCameraFormat &fmtA,
const QCameraFormat &fmtB) {
43 return makeCriteria(fmtA) < makeCriteria(fmtB);
46 return found == formats.end() ? QCameraFormat{} : *found;
49QVideoFrameFormat QPlatformCamera::frameFormat()
const
51 QVideoFrameFormat result(m_cameraFormat.resolution(),
52 m_framePixelFormat == QVideoFrameFormat::Format_Invalid
53 ? m_cameraFormat.pixelFormat()
54 : m_framePixelFormat);
55 result.setStreamFrameRate(m_cameraFormat.maxFrameRate());