From 13e40d522f6992d7fff38581e4b0005129669bde Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 13 Aug 2015 16:52:57 +0200 Subject: Fix QCamera viewfinder capabilities functions.. - Filtering the results for a specific pixel aspect ratio would return wrong values. - Correctly sort the frame rate ranges returned by supportedViewfinderFrameRateRanges(). Added missing auto-tests for all viewfinder capabilities functions. Change-Id: Idfb40d4139cc48a5996ce2ddd98131a2f5be76bb Reviewed-by: Christian Stromme --- src/multimedia/camera/qcamera.cpp | 5 ++++- src/multimedia/camera/qcameraviewfindersettings.cpp | 3 +-- src/plugins/directshow/camera/dscamerasession.cpp | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp index a5fee2767..ea1b6beb6 100644 --- a/src/multimedia/camera/qcamera.cpp +++ b/src/multimedia/camera/qcamera.cpp @@ -72,6 +72,9 @@ static bool qt_sizeLessThan(const QSize &s1, const QSize &s2) static bool qt_frameRateRangeLessThan(const QCamera::FrameRateRange &s1, const QCamera::FrameRateRange &s2) { + if (s1.maximumFrameRate == s2.maximumFrameRate) + return s1.minimumFrameRate < s2.minimumFrameRate; + return s1.maximumFrameRate < s2.maximumFrameRate; } @@ -658,7 +661,7 @@ QList QCamera::supportedViewfinderSettings(const QCam && (qFuzzyIsNull(settings.minimumFrameRate()) || qFuzzyCompare((float)settings.minimumFrameRate(), (float)s.minimumFrameRate())) && (qFuzzyIsNull(settings.maximumFrameRate()) || qFuzzyCompare((float)settings.maximumFrameRate(), (float)s.maximumFrameRate())) && (settings.pixelFormat() == QVideoFrame::Format_Invalid || settings.pixelFormat() == s.pixelFormat()) - && (settings.pixelAspectRatio() == QSize(1, 1) || settings.pixelAspectRatio() == s.pixelAspectRatio())) { + && (settings.pixelAspectRatio().isEmpty() || settings.pixelAspectRatio() == s.pixelAspectRatio())) { results.append(s); } } diff --git a/src/multimedia/camera/qcameraviewfindersettings.cpp b/src/multimedia/camera/qcameraviewfindersettings.cpp index df4fa7022..af0d614ca 100644 --- a/src/multimedia/camera/qcameraviewfindersettings.cpp +++ b/src/multimedia/camera/qcameraviewfindersettings.cpp @@ -50,8 +50,7 @@ public: isNull(true), minimumFrameRate(0.0), maximumFrameRate(0.0), - pixelFormat(QVideoFrame::Format_Invalid), - pixelAspectRatio(1, 1) + pixelFormat(QVideoFrame::Format_Invalid) { } diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index a2586aa9d..2d3aa1bce 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -646,7 +646,8 @@ bool DSCameraSession::configurePreviewFormat() if ((m_viewfinderSettings.resolution().isEmpty() || m_viewfinderSettings.resolution() == s.resolution()) && (qFuzzyIsNull(m_viewfinderSettings.minimumFrameRate()) || qFuzzyCompare((float)m_viewfinderSettings.minimumFrameRate(), (float)s.minimumFrameRate())) && (qFuzzyIsNull(m_viewfinderSettings.maximumFrameRate()) || qFuzzyCompare((float)m_viewfinderSettings.maximumFrameRate(), (float)s.maximumFrameRate())) - && (m_viewfinderSettings.pixelFormat() == QVideoFrame::Format_Invalid || m_viewfinderSettings.pixelFormat() == s.pixelFormat())) { + && (m_viewfinderSettings.pixelFormat() == QVideoFrame::Format_Invalid || m_viewfinderSettings.pixelFormat() == s.pixelFormat()) + && (m_viewfinderSettings.pixelAspectRatio().isEmpty() || m_viewfinderSettings.pixelAspectRatio() == s.pixelAspectRatio())) { resolvedViewfinderSettings = s; break; } @@ -899,6 +900,7 @@ void DSCameraSession::updateSourceCapabilities() settings.setMinimumFrameRate(frameRateRange.minimumFrameRate); settings.setMaximumFrameRate(frameRateRange.maximumFrameRate); settings.setPixelFormat(pixelFormat); + settings.setPixelAspectRatio(1, 1); m_supportedViewfinderSettings.append(settings); AM_MEDIA_TYPE format; -- cgit v1.2.3