diff options
-rw-r--r-- | config.tests/wshellitem/main.cpp | 2 | ||||
-rw-r--r-- | dist/changes-5.14.2 | 45 | ||||
-rw-r--r-- | src/gsttools/qgstreamerplayercontrol.cpp | 6 | ||||
-rw-r--r-- | src/gsttools/qgstvideorenderersink.cpp | 13 | ||||
-rw-r--r-- | src/plugins/directshow/camera/dscamerasession.cpp | 9 | ||||
-rw-r--r-- | src/plugins/directshow/common/directshowmediatype.cpp | 8 | ||||
-rw-r--r-- | src/plugins/directshow/player/directshowmetadatacontrol.cpp | 2 | ||||
-rw-r--r-- | src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp | 5 | ||||
-rw-r--r-- | src/plugins/windowsaudio/qwindowsaudiooutput.cpp | 2 | ||||
-rw-r--r-- | src/plugins/winrt/qwinrtcameracontrol.cpp | 2 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfplayersession.cpp | 14 | ||||
-rw-r--r-- | src/plugins/wmf/player/mftvideo.cpp | 2 | ||||
-rw-r--r-- | src/plugins/wmf/sourceresolver.cpp | 2 | ||||
-rw-r--r-- | tests/auto/unit/qmediaobject/tst_qmediaobject.cpp | 4 | ||||
-rw-r--r-- | tests/auto/unit/qmultimedia_common/mockcameraflashcontrol.h | 6 |
15 files changed, 93 insertions, 29 deletions
diff --git a/config.tests/wshellitem/main.cpp b/config.tests/wshellitem/main.cpp index 799ee5556..459992b77 100644 --- a/config.tests/wshellitem/main.cpp +++ b/config.tests/wshellitem/main.cpp @@ -26,7 +26,7 @@ ** ****************************************************************************/ -#include <ShlObj.h> +#include <shlobj.h> int main(int, char**) { diff --git a/dist/changes-5.14.2 b/dist/changes-5.14.2 new file mode 100644 index 000000000..ad36891cf --- /dev/null +++ b/dist/changes-5.14.2 @@ -0,0 +1,45 @@ +Qt 5.14.2 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.14.0 through 5.14.1. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + +https://doc.qt.io/qt-5/index.html + +The Qt version 5.14 series is binary compatible with the 5.13.x series. +Applications compiled for 5.13 will continue to run with 5.14. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + +- Android: + * [QTBUG-81006] Fixed issue when multimedia plugins were not loaded. + * [QTBUG-59517] Fixed to prevent multiple copies of one tmp file + when playing video from qrc. + +- GStreamer: + * [QTBUG-81075] Fixed creating incorrect encoding profile + to avoid errors when the media container is not supported + in the video recorder. + * Fixed to have separate resolution settings for capturing and + camera's viewfinder. + +- AVFoundation: + * [QTBUG-81048] Fixed applying viewfinder settings when starting the camera. + * [QTBUG-79935] Fixed applying viewfinder settings for iOS. + * [QTBUG-81804] Removed usage of deperecated AVPlayerItem::seekToTime::CMTime. + * [QTBUG-81912] Fixed to resume playback after a stalled buffer + only if it was already in playing state. + * [QTBUG-65536] Fixed to have proper size bounds when resizing the window + while playing video. + * [QTBUG-82542] Fixed content flickering on resize for video player. + * [QTBUG-82264] Fixed to use only video surface's supported pixel formats in Camera. diff --git a/src/gsttools/qgstreamerplayercontrol.cpp b/src/gsttools/qgstreamerplayercontrol.cpp index 165978288..d65102e2f 100644 --- a/src/gsttools/qgstreamerplayercontrol.cpp +++ b/src/gsttools/qgstreamerplayercontrol.cpp @@ -439,8 +439,10 @@ void QGstreamerPlayerControl::updateSessionState(QMediaPlayer::State state) } m_pendingSeekPosition = -1; - if (m_currentState == QMediaPlayer::PlayingState) - m_session->play(); + if (m_currentState == QMediaPlayer::PlayingState) { + if (m_mediaStatus == QMediaPlayer::BufferedMedia) + m_session->play(); + } } updateMediaStatus(); diff --git a/src/gsttools/qgstvideorenderersink.cpp b/src/gsttools/qgstvideorenderersink.cpp index 3b458a978..13edcb820 100644 --- a/src/gsttools/qgstvideorenderersink.cpp +++ b/src/gsttools/qgstvideorenderersink.cpp @@ -141,6 +141,19 @@ bool QGstDefaultVideoRenderer::present(QAbstractVideoSurface *surface, GstBuffer if (!videoBuffer) videoBuffer = new QGstVideoBuffer(buffer, m_videoInfo); + auto meta = gst_buffer_get_video_crop_meta (buffer); + if (meta) { + QRect vp(meta->x, meta->y, meta->width, meta->height); + if (m_format.viewport() != vp) { +#ifdef DEBUG_VIDEO_SURFACE_SINK + qDebug() << Q_FUNC_INFO << " Update viewport on Metadata: [" << meta->height << "x" << meta->width << " | " << meta->x << "x" << meta->y << "]"; +#endif + //Update viewport if data is not the same + m_format.setViewport(vp); + surface->start(m_format); + } + } + QVideoFrame frame( videoBuffer, m_format.frameSize(), diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index a0c120816..042052421 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -1147,9 +1147,14 @@ void DSCameraSession::updateSourceCapabilities() m_supportedViewfinderSettings.append(settings); m_supportedFormats.append(DirectShowMediaType(*pmt)); } - - + } else { + OLECHAR *guidString = nullptr; + StringFromCLSID(pmt->subtype, &guidString); + if (guidString) + qWarning() << "Unsupported media type:" << QString::fromWCharArray(guidString); + ::CoTaskMemFree(guidString); } + DirectShowMediaType::deleteType(pmt); } } diff --git a/src/plugins/directshow/common/directshowmediatype.cpp b/src/plugins/directshow/common/directshowmediatype.cpp index 37106586a..3429f4848 100644 --- a/src/plugins/directshow/common/directshowmediatype.cpp +++ b/src/plugins/directshow/common/directshowmediatype.cpp @@ -40,6 +40,11 @@ #include "directshowmediatype.h" #include "directshowglobal.h" +#include <initguid.h> + +DEFINE_GUID(MEDIASUBTYPE_Y800, 0x30303859, 0x0000, 0x0010, 0x80, 0x00, + 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); + namespace { struct TypeLookup @@ -66,7 +71,8 @@ namespace { QVideoFrame::Format_NV12, MEDIASUBTYPE_NV12 }, { QVideoFrame::Format_YUV420P, MEDIASUBTYPE_IYUV }, { QVideoFrame::Format_YUV420P, MEDIASUBTYPE_I420 }, - { QVideoFrame::Format_Jpeg, MEDIASUBTYPE_MJPG } + { QVideoFrame::Format_Jpeg, MEDIASUBTYPE_MJPG }, + { QVideoFrame::Format_Y8, MEDIASUBTYPE_Y800 }, }; } diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp index 46674143e..d9864870a 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp +++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp @@ -64,7 +64,7 @@ #endif #if QT_CONFIG(wshellitem) -#include <ShlObj.h> +#include <shlobj.h> #include <propkeydef.h> #include <private/qsystemlibrary_p.h> diff --git a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp index 52ec75f44..b164bc31a 100644 --- a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp @@ -366,12 +366,9 @@ bool CameraBinImageCapture::processBusMessage(const QGstreamerMessage &message) #ifdef DEBUG_CAPTURE qDebug() << Q_FUNC_INFO << "Dropped saving file" << fileName; #endif - //camerabin creates an empty file when captured buffer is dropped, - //let's remove it QFileInfo info(QString::fromUtf8(fileName)); - if (info.exists() && info.isFile() && info.size() == 0) { + if (info.exists() && info.isFile()) QFile(info.absoluteFilePath()).remove(); - } } } } diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp index 1182647fc..6ccffc8b2 100644 --- a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp +++ b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp @@ -630,7 +630,7 @@ qreal QWindowsAudioOutput::volume() const void QWindowsAudioOutput::reset() { - close(); + stop(); } OutputPrivate::OutputPrivate(QWindowsAudioOutput* audio) diff --git a/src/plugins/winrt/qwinrtcameracontrol.cpp b/src/plugins/winrt/qwinrtcameracontrol.cpp index ede3f6b04..98dd7c2f7 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.cpp +++ b/src/plugins/winrt/qwinrtcameracontrol.cpp @@ -54,7 +54,7 @@ #include <functional> #include <mfapi.h> -#include <Mferror.h> +#include <mferror.h> #include <mfidl.h> #include <wrl.h> #include <windows.devices.enumeration.h> diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp index 24bfda833..1d145edc4 100644 --- a/src/plugins/wmf/player/mfplayersession.cpp +++ b/src/plugins/wmf/player/mfplayersession.cpp @@ -56,7 +56,7 @@ #include "mfplayersession.h" #include "mfplayerservice.h" #include "mfmetadatacontrol.h" -#include <Mferror.h> +#include <mferror.h> #include <nserror.h> #include "sourceresolver.h" #include "samplegrabber.h" @@ -277,10 +277,13 @@ MFPlayerSession::MediaType MFPlayerSession::getStreamType(IMFStreamDescriptor *s if (!stream) return Unknown; - IMFMediaTypeHandler *typeHandler = NULL; - if (SUCCEEDED(stream->GetMediaTypeHandler(&typeHandler))) { + struct SafeRelease { + IMFMediaTypeHandler *ptr = nullptr; + ~SafeRelease() { if (ptr) ptr->Release(); } + } typeHandler; + if (SUCCEEDED(stream->GetMediaTypeHandler(&typeHandler.ptr))) { GUID guidMajorType; - if (SUCCEEDED(typeHandler->GetMajorType(&guidMajorType))) { + if (SUCCEEDED(typeHandler.ptr->GetMajorType(&guidMajorType))) { if (guidMajorType == MFMediaType_Audio) return Audio; else if (guidMajorType == MFMediaType_Video) @@ -288,9 +291,6 @@ MFPlayerSession::MediaType MFPlayerSession::getStreamType(IMFStreamDescriptor *s } } - if (typeHandler) - typeHandler->Release(); - return Unknown; } diff --git a/src/plugins/wmf/player/mftvideo.cpp b/src/plugins/wmf/player/mftvideo.cpp index 879911d55..9dce654f2 100644 --- a/src/plugins/wmf/player/mftvideo.cpp +++ b/src/plugins/wmf/player/mftvideo.cpp @@ -40,7 +40,7 @@ #include "mftvideo.h" #include "mfvideoprobecontrol.h" #include <private/qmemoryvideobuffer_p.h> -#include <Mferror.h> +#include <mferror.h> #include <strmif.h> #include <uuids.h> #include <InitGuid.h> diff --git a/src/plugins/wmf/sourceresolver.cpp b/src/plugins/wmf/sourceresolver.cpp index c6f4e8566..15ef6f0ab 100644 --- a/src/plugins/wmf/sourceresolver.cpp +++ b/src/plugins/wmf/sourceresolver.cpp @@ -39,7 +39,7 @@ #include "mfstream.h" #include "sourceresolver.h" -#include <Mferror.h> +#include <mferror.h> #include <nserror.h> #include <QtCore/qfile.h> #include <QtCore/qdebug.h> diff --git a/tests/auto/unit/qmediaobject/tst_qmediaobject.cpp b/tests/auto/unit/qmediaobject/tst_qmediaobject.cpp index bf8704162..f1d5cc327 100644 --- a/tests/auto/unit/qmediaobject/tst_qmediaobject.cpp +++ b/tests/auto/unit/qmediaobject/tst_qmediaobject.cpp @@ -297,10 +297,6 @@ void tst_QMediaObject::notifySignals() timer.start(); QTRY_COMPARE(spy.count(), count); - - qint64 elapsed = timer.elapsed(); - int expectedElapsed = count * interval * 3; // give it some margin of error - QVERIFY2(elapsed < expectedElapsed, QString("elapsed: %1, expected: %2").arg(elapsed).arg(expectedElapsed).toLocal8Bit().constData()); } void tst_QMediaObject::notifyInterval_data() diff --git a/tests/auto/unit/qmultimedia_common/mockcameraflashcontrol.h b/tests/auto/unit/qmultimedia_common/mockcameraflashcontrol.h index daa9f28b6..96e2ebc52 100644 --- a/tests/auto/unit/qmultimedia_common/mockcameraflashcontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockcameraflashcontrol.h @@ -59,9 +59,9 @@ public: bool isFlashModeSupported(QCameraExposure::FlashModes mode) const { - return (mode || (QCameraExposure::FlashAuto | QCameraExposure::FlashOff | QCameraExposure::FlashOn | - QCameraExposure::FlashFill |QCameraExposure::FlashTorch |QCameraExposure::FlashSlowSyncFrontCurtain | - QCameraExposure::FlashRedEyeReduction)); + return (mode & (QCameraExposure::FlashAuto | QCameraExposure::FlashOff | QCameraExposure::FlashOn | + QCameraExposure::FlashFill |QCameraExposure::FlashTorch |QCameraExposure::FlashSlowSyncFrontCurtain | + QCameraExposure::FlashRedEyeReduction)); } bool isFlashReady() const |