Merge remote-tracking branch 'origin/5.4' into dev
Change-Id: I5575a4ba13212c9bfe73a3de3ef17c6528beafc3
This commit is contained in:
49
dist/changes-5.4.1
vendored
Normal file
49
dist/changes-5.4.1
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
Qt 5.4.1 is a bug-fix release. It maintains both forward and backward
|
||||
compatibility (source and binary) with Qt 5.4.0.
|
||||
|
||||
For more details, refer to the online documentation included in this
|
||||
distribution. The documentation is also available online:
|
||||
|
||||
http://qt-project.org/doc/qt-5.4
|
||||
|
||||
The Qt version 5.4 series is binary compatible with the 5.3.x series.
|
||||
Applications compiled for 5.3 will continue to run with 5.4.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
http://bugreports.qt-project.org/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* Library *
|
||||
****************************************************************************
|
||||
|
||||
QtMultimedia
|
||||
------------
|
||||
|
||||
- VideoOutput's autoOrientation property now correctly works after
|
||||
switching cameras.
|
||||
|
||||
****************************************************************************
|
||||
* Platform Specific Changes *
|
||||
****************************************************************************
|
||||
|
||||
Android
|
||||
-------
|
||||
|
||||
- [QTBUG-42159] QAudioInput::setVolume() is now functioning.
|
||||
|
||||
Linux
|
||||
-----
|
||||
|
||||
- [QTBUG-43514] Fixed static linking.
|
||||
|
||||
WinRT
|
||||
-----
|
||||
|
||||
- [QTBUG-41066] Fix VideoOutput autoOrientation when used with a Camera.
|
||||
- [QTBUG-41065] Show Camera viewfinder frames in a resolution adapted to
|
||||
the current capture mode.
|
||||
@@ -925,7 +925,7 @@ void QDeclarativeCamera::setDigitalZoom(qreal value)
|
||||
\qmlproperty variant QtMultimedia::Camera::metaData.gpsLongitude
|
||||
\qmlproperty variant QtMultimedia::Camera::metaData.gpsAltitude
|
||||
|
||||
These properties hold the the geographic position in decimal degrees of the
|
||||
These properties hold the geographic position in decimal degrees of the
|
||||
camera at time of capture.
|
||||
|
||||
\sa {QMediaMetaData}
|
||||
|
||||
@@ -123,9 +123,8 @@ QDeclarativeCameraCapture::~QDeclarativeCameraCapture()
|
||||
This property holds a bool value indicating whether the camera
|
||||
is ready to capture photos or not.
|
||||
|
||||
If camera is not ready to capture image immediately,
|
||||
the capture request is queued with all the related camera settings,
|
||||
and the request will be executed as soon as possible.
|
||||
Calling capture() while \e ready is \c false is not permitted and
|
||||
results in an error.
|
||||
*/
|
||||
|
||||
/*!
|
||||
@@ -134,11 +133,8 @@ QDeclarativeCameraCapture::~QDeclarativeCameraCapture()
|
||||
This property holds a bool value indicating whether the camera
|
||||
is ready to capture photos or not.
|
||||
|
||||
It's permissible to call capture() while the camera is active
|
||||
regardless of the \e ready property value.
|
||||
If camera is not ready to capture image immediately,
|
||||
the capture request is queued with all the related camera settings,
|
||||
and the request will be executed as soon as possible.
|
||||
Calling capture() while \e ready is \c false is not permitted and
|
||||
results in an error.
|
||||
*/
|
||||
bool QDeclarativeCameraCapture::isReadyForCapture() const
|
||||
{
|
||||
@@ -157,11 +153,13 @@ bool QDeclarativeCameraCapture::isReadyForCapture() const
|
||||
for video.
|
||||
|
||||
Camera saves all the capture parameters like exposure settings or
|
||||
image processing parameters, so changes to camera paramaters after
|
||||
image processing parameters, so changes to camera parameters after
|
||||
capture() is called do not affect previous capture requests.
|
||||
|
||||
CameraCapture::capture returns the capture requestId parameter, used with
|
||||
capture() returns the capture requestId parameter, used with
|
||||
imageExposed(), imageCaptured(), imageMetadataAvailable() and imageSaved() signals.
|
||||
|
||||
\sa ready
|
||||
*/
|
||||
int QDeclarativeCameraCapture::capture()
|
||||
{
|
||||
|
||||
@@ -488,11 +488,8 @@ void QCameraImageCapture::setCaptureDestination(QCameraImageCapture::CaptureDest
|
||||
\property QCameraImageCapture::readyForCapture
|
||||
\brief whether the service is ready to capture a an image immediately.
|
||||
|
||||
It's permissible to call capture() while the camera status is QCamera::ActiveStatus
|
||||
regardless of isReadyForCapture property value.
|
||||
If camera is not ready to capture image immediately,
|
||||
the capture request is queued with all the related camera settings
|
||||
to be executed as soon as possible.
|
||||
Calling capture() while \e readyForCapture is \c false is not permitted and
|
||||
results in an error.
|
||||
*/
|
||||
|
||||
bool QCameraImageCapture::isReadyForCapture() const
|
||||
@@ -523,11 +520,13 @@ bool QCameraImageCapture::isReadyForCapture() const
|
||||
the default directory, with a full path reported with imageCaptured() and imageSaved() signals.
|
||||
|
||||
QCamera saves all the capture parameters like exposure settings or
|
||||
image processing parameters, so changes to camera paramaters after
|
||||
image processing parameters, so changes to camera parameters after
|
||||
capture() is called do not affect previous capture requests.
|
||||
|
||||
QCameraImageCapture::capture returns the capture Id parameter, used with
|
||||
imageExposed(), imageCaptured() and imageSaved() signals.
|
||||
|
||||
\sa isReadyForCapture()
|
||||
*/
|
||||
int QCameraImageCapture::capture(const QString &file)
|
||||
{
|
||||
|
||||
@@ -111,7 +111,7 @@ QCameraImageCaptureControl::~QCameraImageCaptureControl()
|
||||
|
||||
The Camera service should save all the capture parameters
|
||||
like exposure settings or image processing parameters,
|
||||
so changes to camera paramaters after capture() is called
|
||||
so changes to camera parameters after capture() is called
|
||||
do not affect previous capture requests.
|
||||
|
||||
Returns the capture request id number, which is used later
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
\brief Platform notes for the BlackBerry Platform
|
||||
|
||||
Qt Multimedia supports BlackBerry devices that run the BB10 operating system.
|
||||
This page covers the availibility of different features on BB10.
|
||||
This page covers the availability of different features on BB10.
|
||||
|
||||
\section1 Implementation
|
||||
|
||||
|
||||
@@ -335,7 +335,7 @@ void QMediaPlayerPrivate::setPlaylistMedia()
|
||||
return;
|
||||
} else if (control != 0) {
|
||||
// If we've just switched to a new playlist,
|
||||
// then last emited currentMediaChanged was a playlist.
|
||||
// then last emitted currentMediaChanged was a playlist.
|
||||
// Make sure we emit currentMediaChanged if new playlist has
|
||||
// the same media as the previous one:
|
||||
// sample.m3u
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
player->setVideoOutput(myVideoSurface);
|
||||
player->setMedia(QUrl::fromLocalFile("observation.mp4"));
|
||||
player->play(); // Start receving frames as they get presented to myVideoSurface
|
||||
player->play(); // Start receiving frames as they get presented to myVideoSurface
|
||||
\endcode
|
||||
|
||||
This same approach works with the QCamera object as well, to receive viewfinder or video
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#ifndef QVIDEOPROBE_H
|
||||
#define QVIDEOPROBE_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QtCore/QObject>
|
||||
#include <QtMultimedia/qvideoframe.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@@ -141,8 +141,8 @@ QAbstractVideoSurface::Error QVideoSurfaceGenericPainter::start(const QVideoSurf
|
||||
bool ok = m_imageFormat != QImage::Format_Invalid && !m_imageSize.isEmpty();
|
||||
#ifndef QT_NO_OPENGL
|
||||
if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES)
|
||||
#endif
|
||||
ok &= format.pixelFormat() != QVideoFrame::Format_RGB24;
|
||||
#endif
|
||||
if (ok)
|
||||
return QAbstractVideoSurface::NoError;
|
||||
} else if (t == QAbstractVideoBuffer::QPixmapHandle) {
|
||||
|
||||
@@ -276,33 +276,38 @@ void QAndroidCameraSession::adjustViewfinderSize(const QSize &captureSize, bool
|
||||
if (!m_camera)
|
||||
return;
|
||||
|
||||
QSize viewfinderResolution = m_camera->previewSize();
|
||||
QSize currentViewfinderResolution = m_camera->previewSize();
|
||||
const qreal aspectRatio = qreal(captureSize.width()) / qreal(captureSize.height());
|
||||
if (viewfinderResolution.isValid() &&
|
||||
qFuzzyCompare(aspectRatio,
|
||||
qreal(viewfinderResolution.width()) / viewfinderResolution.height())) {
|
||||
if (currentViewfinderResolution.isValid() &&
|
||||
qAbs(aspectRatio - (qreal(currentViewfinderResolution.width()) / currentViewfinderResolution.height())) < 0.01) {
|
||||
return;
|
||||
}
|
||||
|
||||
QSize adjustedViewfinderResolution;
|
||||
QList<QSize> previewSizes = m_camera->getSupportedPreviewSizes();
|
||||
for (int i = previewSizes.count() - 1; i >= 0; --i) {
|
||||
const QSize &size = previewSizes.at(i);
|
||||
// search for viewfinder resolution with the same aspect ratio
|
||||
if (qFuzzyCompare(aspectRatio, (static_cast<qreal>(size.width())/static_cast<qreal>(size.height())))) {
|
||||
viewfinderResolution = size;
|
||||
if (qAbs(aspectRatio - (qreal(size.width()) / size.height())) < 0.01) {
|
||||
adjustedViewfinderResolution = size;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_camera->previewSize() != viewfinderResolution) {
|
||||
if (!adjustedViewfinderResolution.isValid()) {
|
||||
qWarning("Cannot find a viewfinder resolution matching the capture aspect ratio.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentViewfinderResolution != adjustedViewfinderResolution) {
|
||||
if (m_videoOutput)
|
||||
m_videoOutput->setVideoSize(viewfinderResolution);
|
||||
m_videoOutput->setVideoSize(adjustedViewfinderResolution);
|
||||
|
||||
// if preview is started, we have to stop it first before changing its size
|
||||
if (m_previewStarted && restartPreview)
|
||||
m_camera->stopPreview();
|
||||
|
||||
m_camera->setPreviewSize(viewfinderResolution);
|
||||
m_camera->setPreviewSize(adjustedViewfinderResolution);
|
||||
|
||||
// restart preview
|
||||
if (m_previewStarted && restartPreview)
|
||||
|
||||
@@ -337,7 +337,7 @@ void QAndroidMediaPlayerControl::setMedia(const QMediaContent &mediaContent,
|
||||
if (!mTempFile.isNull())
|
||||
mediaPath = QStringLiteral("file://") + mTempFile->fileName();
|
||||
} else {
|
||||
mediaPath = url.toString();
|
||||
mediaPath = url.toString(QUrl::FullyEncoded);
|
||||
}
|
||||
|
||||
if (mVideoSize.isValid() && mVideoOutput)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
TARGET = dsengine
|
||||
win32:!qtHaveModule(opengl) {
|
||||
win32:!qtHaveModule(opengl)|contains(QT_CONFIG,dynamicgl) {
|
||||
LIBS_PRIVATE += -lgdi32 -luser32
|
||||
}
|
||||
PLUGIN_TYPE=mediaservice
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "dsvideodevicecontrol.h"
|
||||
|
||||
#ifdef QMEDIA_DIRECTSHOW_CAMERA
|
||||
#include <QtCore/QElapsedTimer>
|
||||
#include <dshow.h>
|
||||
#include "dscameraservice.h"
|
||||
#endif
|
||||
@@ -121,7 +122,6 @@ QByteArray DSServicePlugin::defaultDevice(const QByteArray &service) const
|
||||
{
|
||||
#ifdef QMEDIA_DIRECTSHOW_CAMERA
|
||||
if (service == Q_MEDIASERVICE_CAMERA) {
|
||||
if (m_cameraDevices.isEmpty())
|
||||
updateDevices();
|
||||
|
||||
return m_defaultCameraDevice;
|
||||
@@ -135,7 +135,6 @@ QList<QByteArray> DSServicePlugin::devices(const QByteArray &service) const
|
||||
{
|
||||
#ifdef QMEDIA_DIRECTSHOW_CAMERA
|
||||
if (service == Q_MEDIASERVICE_CAMERA) {
|
||||
if (m_cameraDevices.isEmpty())
|
||||
updateDevices();
|
||||
|
||||
return m_cameraDevices;
|
||||
@@ -149,7 +148,6 @@ QString DSServicePlugin::deviceDescription(const QByteArray &service, const QByt
|
||||
{
|
||||
#ifdef QMEDIA_DIRECTSHOW_CAMERA
|
||||
if (service == Q_MEDIASERVICE_CAMERA) {
|
||||
if (m_cameraDevices.isEmpty())
|
||||
updateDevices();
|
||||
|
||||
for (int i=0; i<m_cameraDevices.count(); i++)
|
||||
@@ -164,6 +162,10 @@ QString DSServicePlugin::deviceDescription(const QByteArray &service, const QByt
|
||||
|
||||
void DSServicePlugin::updateDevices() const
|
||||
{
|
||||
static QElapsedTimer timer;
|
||||
if (timer.isValid() && timer.elapsed() < 500) // ms
|
||||
return;
|
||||
|
||||
addRefCount();
|
||||
|
||||
m_defaultCameraDevice.clear();
|
||||
@@ -176,6 +178,7 @@ void DSServicePlugin::updateDevices() const
|
||||
}
|
||||
|
||||
releaseRefCount();
|
||||
timer.restart();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -454,7 +454,9 @@ QList<QByteArray> QWindowsAudioDeviceInfo::availableDevices(QAudio::Mode mode)
|
||||
pPropBag->Release();
|
||||
pMoniker->Release();
|
||||
}
|
||||
pEnum->Release();
|
||||
}
|
||||
pDevEnum->Release();
|
||||
}
|
||||
CoUninitialize();
|
||||
#else // Q_OS_WINCE
|
||||
|
||||
@@ -430,7 +430,7 @@ void QWindowsAudioInput::initMixer()
|
||||
return;
|
||||
mixerID = (HMIXEROBJ)mixerIntID;
|
||||
|
||||
// Get the Destination (Recording) Line Infomation
|
||||
// Get the Destination (Recording) Line Information
|
||||
MIXERLINE mixerLine;
|
||||
mixerLine.cbStruct = sizeof(MIXERLINE);
|
||||
mixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
|
||||
|
||||
@@ -1296,7 +1296,7 @@ void MFPlayerSession::commitRateChange(qreal rate, BOOL isThin)
|
||||
// (which might be earlier than the last decoded key frame)
|
||||
resetPosition = true;
|
||||
} else if (cmdNow == CmdPause) {
|
||||
// If paused, dont reset the position until we resume, otherwise
|
||||
// If paused, don't reset the position until we resume, otherwise
|
||||
// a new frame will be rendered
|
||||
m_presentationClock->GetCorrelatedTime(0, &hnsClockTime, &hnsSystemTime);
|
||||
m_request.setCommand(CmdSeekResume);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
9877
tests/auto/bic/data/QtMultimedia.5.1.0.linux-gcc-amd64.txt
Normal file
9877
tests/auto/bic/data/QtMultimedia.5.1.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
10180
tests/auto/bic/data/QtMultimedia.5.2.0.linux-gcc-amd64.txt
Normal file
10180
tests/auto/bic/data/QtMultimedia.5.2.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
10269
tests/auto/bic/data/QtMultimedia.5.3.0.linux-gcc-amd64.txt
Normal file
10269
tests/auto/bic/data/QtMultimedia.5.3.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
10592
tests/auto/bic/data/QtMultimedia.5.4.0.linux-gcc-amd64.txt
Normal file
10592
tests/auto/bic/data/QtMultimedia.5.4.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
20736
tests/auto/bic/data/QtMultimediaWidgets.5.1.0.linux-gcc-amd64.txt
Normal file
20736
tests/auto/bic/data/QtMultimediaWidgets.5.1.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
21178
tests/auto/bic/data/QtMultimediaWidgets.5.2.0.linux-gcc-amd64.txt
Normal file
21178
tests/auto/bic/data/QtMultimediaWidgets.5.2.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
21267
tests/auto/bic/data/QtMultimediaWidgets.5.3.0.linux-gcc-amd64.txt
Normal file
21267
tests/auto/bic/data/QtMultimediaWidgets.5.3.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
24271
tests/auto/bic/data/QtMultimediaWidgets.5.4.0.linux-gcc-amd64.txt
Normal file
24271
tests/auto/bic/data/QtMultimediaWidgets.5.4.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user