From 7e64b859b6a663f42ee3067930ef132d9e7d2901 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 13 Feb 2020 10:46:59 +0100 Subject: Fix false pulse audio dependency of libQt5MultimediaWidgets The assignment 'QT += multimedia-private' exports multimedia-private's pulse audio dependencies. Fix this by using 'multimedia' as public dependency and 'multimedia-private' as private dependency. Fixes: QTBUG-62626 Change-Id: I156b705706567d9cde1dd0f44c75acb36938384d Reviewed-by: Alexandru Croitor Reviewed-by: Dmitry Shachnev --- src/multimediawidgets/multimediawidgets.pro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/multimediawidgets/multimediawidgets.pro b/src/multimediawidgets/multimediawidgets.pro index 57d4194ec..1919e8107 100644 --- a/src/multimediawidgets/multimediawidgets.pro +++ b/src/multimediawidgets/multimediawidgets.pro @@ -1,6 +1,7 @@ # distinct from Qt Multimedia TARGET = QtMultimediaWidgets -QT = core gui multimedia-private widgets-private +QT = core gui multimedia widgets-private +QT_PRIVATE += multimedia-private qtHaveModule(opengl): \ QT_PRIVATE += opengl -- cgit v1.2.3 From aec140743b1a4110c327c46bdfbf15fcddb2dd17 Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Mon, 17 Feb 2020 15:32:25 +0100 Subject: AVF: Fix applying viewfinder settings for iOS 1. If a resolution of the viewfinder is requested to be changed, it is not needed to check available formats for highResolutionStillImageDimensions (since it is viewfinder resolution and not still images). format.highResolutionStillImageDimensions returns the highest resolution still image that can be produced by the format. Using this format will cause wrong resolution in the viewfinder. 2. Seems iOS requires to call beginConfiguration/commitConfiguration to apply any changes. commitConfiguration is currently called when the camera gets active. In case if settings are changed after starting the camera, they will not be applied. To fix that, added beginConfiguration/commitConfiguration. Fixes: QTBUG-79935 Change-Id: I60b6e08887a82e4337a2a302b8e5513c65b26e61 Reviewed-by: Timur Pocheptsov --- src/plugins/avfoundation/camera/avfcamerautility.h | 2 +- src/plugins/avfoundation/camera/avfcamerautility.mm | 7 ++++--- .../avfoundation/camera/avfcameraviewfindersettingscontrol.mm | 11 ++++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/plugins/avfoundation/camera/avfcamerautility.h b/src/plugins/avfoundation/camera/avfcamerautility.h index 370302b1c..33956fc8a 100644 --- a/src/plugins/avfoundation/camera/avfcamerautility.h +++ b/src/plugins/avfoundation/camera/avfcamerautility.h @@ -161,7 +161,7 @@ QSize qt_device_format_high_resolution(AVCaptureDeviceFormat *format); QSize qt_device_format_pixel_aspect_ratio(AVCaptureDeviceFormat *format); QVector qt_device_format_framerates(AVCaptureDeviceFormat *format); AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDevice, const QSize &res, - FourCharCode preferredFormat); + FourCharCode preferredFormat, bool stillImage = true); AVCaptureDeviceFormat *qt_find_best_framerate_match(AVCaptureDevice *captureDevice, FourCharCode preferredFormat, Float64 fps); diff --git a/src/plugins/avfoundation/camera/avfcamerautility.mm b/src/plugins/avfoundation/camera/avfcamerautility.mm index 8c743dcbc..25ccc4b01 100644 --- a/src/plugins/avfoundation/camera/avfcamerautility.mm +++ b/src/plugins/avfoundation/camera/avfcamerautility.mm @@ -239,7 +239,8 @@ QSize qt_device_format_pixel_aspect_ratio(AVCaptureDeviceFormat *format) AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDevice, const QSize &request, - FourCharCode filter) + FourCharCode filter, + bool stillImage) { Q_ASSERT(captureDevice); Q_ASSERT(!request.isNull() && request.isValid()); @@ -254,7 +255,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev if (qt_device_format_resolution(format) == request) return format; // iOS only (still images). - if (qt_device_format_high_resolution(format) == request) + if (stillImage && qt_device_format_high_resolution(format) == request) return format; } @@ -272,7 +273,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev if (!res.isNull() && res.isValid() && qt_area_sane(res)) pairs << FormatPair(res, format); const QSize highRes(qt_device_format_high_resolution(format)); - if (!highRes.isNull() && highRes.isValid() && qt_area_sane(highRes)) + if (stillImage && !highRes.isNull() && highRes.isValid() && qt_area_sane(highRes)) pairs << FormatPair(highRes, format); } diff --git a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm index a77d7de03..0f7a0560b 100644 --- a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm +++ b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm @@ -185,7 +185,16 @@ void AVFCameraViewfinderSettingsControl2::setViewfinderSettings(const QCameraVie return; m_settings = settings; +#if defined(Q_OS_IOS) + bool active = m_service->session()->state() == QCamera::ActiveState; + if (active) + [m_service->session()->captureSession() beginConfiguration]; applySettings(m_settings); + if (active) + [m_service->session()->captureSession() commitConfiguration]; +#else + applySettings(m_settings); +#endif } QVideoFrame::PixelFormat AVFCameraViewfinderSettingsControl2::QtPixelFormatFromCVFormat(unsigned avPixelFormat) @@ -264,7 +273,7 @@ AVCaptureDeviceFormat *AVFCameraViewfinderSettingsControl2::findBestFormatMatch( // Either the exact match (including high resolution for images on iOS) // or a format with a resolution close to the requested one. return qt_find_best_resolution_match(captureDevice, resolution, - m_service->session()->defaultCodec()); + m_service->session()->defaultCodec(), false); } // No resolution requested, what about framerates? -- cgit v1.2.3 From ad3d2afae99506a779ad758f4e7385c9f0b163ba Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Tue, 18 Feb 2020 18:23:31 +0100 Subject: AVF: Don't override AVPlayerLayer's bounds if already set AVPlayerLayer's bounds can be changed while resizing, and should not be overridden by default/native size. Fixes: QTBUG-65536 Change-Id: I771b13e58606663ded80df3665454007d28836b7 Reviewed-by: Timur Pocheptsov --- src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index 1f13fc9bb..ba902a53c 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -875,9 +875,11 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState) // Get the native size of the video, and reset the bounds of the player layer AVPlayerLayer *playerLayer = [static_cast(m_observer) playerLayer]; if (videoTrack && playerLayer) { - playerLayer.bounds = CGRectMake(0.0f, 0.0f, - videoTrack.naturalSize.width, - videoTrack.naturalSize.height); + if (!playerLayer.bounds.size.width || !playerLayer.bounds.size.height) { + playerLayer.bounds = CGRectMake(0.0f, 0.0f, + videoTrack.naturalSize.width, + videoTrack.naturalSize.height); + } if (m_videoOutput && newState != QMediaPlayer::StoppedState) { m_videoOutput->setLayer(playerLayer); -- cgit v1.2.3 From 19b111fa2f872e8c356ca130ce5a03ae52375934 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 20 Feb 2020 12:18:21 +0100 Subject: Android: Fix invalid use of incomplete type 'QDir' Change-Id: Id0a2d380eae9adce441c9eb82367435894e7a7d8 Fixes: QTBUG-82370 Reviewed-by: Jani Heikkinen --- src/multimedia/playback/qmediaplayer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp index cd27d3b1d..44e91912b 100644 --- a/src/multimedia/playback/qmediaplayer.cpp +++ b/src/multimedia/playback/qmediaplayer.cpp @@ -58,6 +58,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE -- cgit v1.2.3 From 12460a14bde44d1ff7bedd75bc87c7f22d096588 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Wed, 5 Feb 2020 16:52:56 +0100 Subject: WMF: Fix memory leak in MFPlayerSession::getStreamType Receives a pointer to the IMFMediaTypeHandler interface. The caller must release the interface. Fixes: QTBUG-80037 Change-Id: Id0222c9f8ee0f88db8cd53c9492dce053d0bfb35 Reviewed-by: Andy Shaw --- src/plugins/wmf/player/mfplayersession.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp index 10ba25998..24bfda833 100644 --- a/src/plugins/wmf/player/mfplayersession.cpp +++ b/src/plugins/wmf/player/mfplayersession.cpp @@ -288,6 +288,9 @@ MFPlayerSession::MediaType MFPlayerSession::getStreamType(IMFStreamDescriptor *s } } + if (typeHandler) + typeHandler->Release(); + return Unknown; } -- cgit v1.2.3