summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--config_help.txt2
-rw-r--r--examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp2
-rw-r--r--src/gsttools/qgstreamervideowidget.cpp4
-rw-r--r--src/gsttools/qgstutils.cpp45
-rw-r--r--src/multimedia/audio/qaudiobuffer.cpp24
-rw-r--r--src/multimedia/audio/qaudiodecoder.cpp18
-rw-r--r--src/multimedia/audio/qaudiodevicefactory.cpp8
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.cpp6
-rw-r--r--src/multimedia/audio/qaudioprobe.cpp6
-rw-r--r--src/multimedia/audio/qsamplecache_p.cpp10
-rw-r--r--src/multimedia/audio/qsamplecache_p.h2
-rw-r--r--src/multimedia/audio/qsoundeffect.cpp34
-rw-r--r--src/multimedia/audio/qsoundeffect.h2
-rw-r--r--src/multimedia/audio/qsoundeffect_pulse_p.cpp13
-rw-r--r--src/multimedia/audio/qsoundeffect_pulse_p.h2
-rw-r--r--src/multimedia/audio/qsoundeffect_qaudio_p.cpp16
-rw-r--r--src/multimedia/audio/qsoundeffect_qaudio_p.h5
-rw-r--r--src/multimedia/audio/qwavedecoder_p.h2
-rw-r--r--src/multimedia/camera/qcamera.cpp58
-rw-r--r--src/multimedia/camera/qcamera_p.h24
-rw-r--r--src/multimedia/camera/qcameraexposure.cpp6
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp6
-rw-r--r--src/multimedia/camera/qcameraimagecapture.cpp34
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.cpp2
-rw-r--r--src/multimedia/configure.json29
-rw-r--r--src/multimedia/controls/qmediaplaylistcontrol_p.h2
-rw-r--r--src/multimedia/controls/qmediaplaylistsourcecontrol_p.h2
-rw-r--r--src/multimedia/playback/qmediacontent.cpp60
-rw-r--r--src/multimedia/playback/qmediacontent.h13
-rw-r--r--src/multimedia/playback/qmedianetworkplaylistprovider_p.h4
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp86
-rw-r--r--src/multimedia/playback/qmediaplaylist.cpp6
-rw-r--r--src/multimedia/playback/qmediaplaylist_p.h12
-rw-r--r--src/multimedia/playback/qmediaplaylistioplugin_p.h2
-rw-r--r--src/multimedia/playback/qmediaplaylistnavigator.cpp2
-rw-r--r--src/multimedia/playback/qmediaplaylistnavigator_p.h2
-rw-r--r--src/multimedia/playback/qmediaplaylistprovider_p.h8
-rw-r--r--src/multimedia/playback/qmediaresource.cpp4
-rw-r--r--src/multimedia/playback/qmediaresource.h4
-rw-r--r--src/multimedia/playback/qplaylistfileparser.cpp35
-rw-r--r--src/multimedia/playback/qplaylistfileparser_p.h6
-rw-r--r--src/multimedia/qmediacontrol.h2
-rw-r--r--src/multimedia/qmediaobject.cpp6
-rw-r--r--src/multimedia/qmediaobject_p.h2
-rw-r--r--src/multimedia/qmediapluginloader.cpp34
-rw-r--r--src/multimedia/qmediaresourcepolicy_p.cpp2
-rw-r--r--src/multimedia/qmediaresourcepolicyplugin_p.h2
-rw-r--r--src/multimedia/qmediaresourceset_p.h2
-rw-r--r--src/multimedia/qmediaserviceprovider.cpp22
-rw-r--r--src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h15
-rw-r--r--src/multimedia/radio/qradiodata.cpp32
-rw-r--r--src/multimedia/radio/qradiotuner.cpp58
-rw-r--r--src/multimedia/recording/qaudiorecorder.cpp16
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp46
-rw-r--r--src/multimedia/video/qabstractvideobuffer.cpp4
-rw-r--r--src/multimedia/video/qabstractvideobuffer_p.h2
-rw-r--r--src/multimedia/video/qimagevideobuffer.cpp2
-rw-r--r--src/multimedia/video/qmemoryvideobuffer.cpp2
-rw-r--r--src/multimedia/video/qvideoframe.cpp31
-rw-r--r--src/multimedia/video/qvideoframe.h1
-rw-r--r--src/multimedia/video/qvideooutputorientationhandler_p.h2
-rw-r--r--src/multimedia/video/qvideoprobe.cpp6
-rw-r--r--src/multimedia/video/qvideosurfaceoutput.cpp4
-rw-r--r--src/multimedia/video/qvideosurfaceoutput_p.h2
-rw-r--r--src/multimediawidgets/qvideowidget.cpp2
-rw-r--r--src/plugins/android/src/common/qandroidvideooutput.cpp2
-rw-r--r--src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp2
-rw-r--r--src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h2
-rw-r--r--src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcameracontrol.h16
-rw-r--r--src/plugins/avfoundation/camera/avfcameradevicecontrol.h14
-rw-r--r--src/plugins/avfoundation/camera/avfcameradevicecontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcameraflashcontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcamerainfocontrol.h6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerametadatacontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfcamerarenderercontrol.h6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm30
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.h2
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.mm18
-rw-r--r--src/plugins/avfoundation/camera/avfcameraserviceplugin.h14
-rw-r--r--src/plugins/avfoundation/camera/avfcameraserviceplugin.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcamerasession.h2
-rw-r--r--src/plugins/avfoundation/camera/avfcamerasession.mm14
-rw-r--r--src/plugins/avfoundation/camera/avfcamerautility.h6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerautility.mm6
-rw-r--r--src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm8
-rw-r--r--src/plugins/avfoundation/camera/avfimagecapturecontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfmediaassetwriter.h29
-rw-r--r--src/plugins/avfoundation/camera/avfmediaassetwriter.mm31
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol.h24
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h4
-rw-r--r--src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h2
-rw-r--r--src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfdisplaylink.h4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm16
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h46
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h8
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h6
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm10
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h10
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h10
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm74
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm12
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm30
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h8
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm26
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidget.h6
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidget.mm4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h30
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h40
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm6
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp2
-rw-r--r--src/plugins/directshow/common/directshowutils.cpp6
-rw-r--r--src/plugins/directshow/directshow.pro5
-rw-r--r--src/plugins/directshow/directshow_camera.json4
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp5
-rw-r--r--src/plugins/directshow/dsserviceplugin.h6
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.cpp139
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.h8
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp94
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.h3
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp1
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp22
-rw-r--r--src/plugins/pulseaudio/qaudiooutput_pulse.cpp29
-rw-r--r--src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp6
-rw-r--r--src/plugins/wmf/player/mfplayersession.cpp6
-rw-r--r--src/plugins/wmf/player/mfplayersession.h3
-rw-r--r--src/plugins/wmf/sourceresolver.cpp10
-rw-r--r--src/plugins/wmf/sourceresolver.h2
-rw-r--r--src/plugins/wmf/wmf.pro5
-rw-r--r--src/plugins/wmf/wmf_audiodecode.json4
-rw-r--r--src/plugins/wmf/wmfserviceplugin.cpp9
-rw-r--r--src/plugins/wmf/wmfserviceplugin.h5
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput.cpp24
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp39
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h2
-rw-r--r--tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp20
-rw-r--r--tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp13
146 files changed, 1125 insertions, 902 deletions
diff --git a/.qmake.conf b/.qmake.conf
index c954a0944..f8cda0e7d 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,3 @@
load(qt_build_config)
-MODULE_VERSION = 5.12.2
+MODULE_VERSION = 5.13.0
diff --git a/config_help.txt b/config_help.txt
index 341f53506..f21d54402 100644
--- a/config_help.txt
+++ b/config_help.txt
@@ -5,6 +5,4 @@ Multimedia options:
-no-gstreamer ........ Disable support for GStreamer
-gstreamer [version] . Enable GStreamer support [auto]
With no parameter, 1.0 is tried first, then 0.10.
- -mediaplayer-backend <name> ... Select media player backend (Windows only)
- Supported backends: directshow (default), wmf
-evr ................. Enables EVR in DirectShow and WMF [auto]
diff --git a/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp b/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp
index 7ee3eb541..513df4f31 100644
--- a/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp
+++ b/examples/multimediawidgets/customvideosurface/customvideowidget/videowidget.cpp
@@ -64,7 +64,7 @@ VideoWidget::VideoWidget(QWidget *parent)
setAttribute(Qt::WA_NoSystemBackground, true);
QPalette palette = this->palette();
- palette.setColor(QPalette::Background, Qt::black);
+ palette.setColor(QPalette::Window, Qt::black);
setPalette(palette);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
diff --git a/src/gsttools/qgstreamervideowidget.cpp b/src/gsttools/qgstreamervideowidget.cpp
index 633f39fa2..bb85e1eb7 100644
--- a/src/gsttools/qgstreamervideowidget.cpp
+++ b/src/gsttools/qgstreamervideowidget.cpp
@@ -53,7 +53,7 @@ public:
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QPalette palette;
- palette.setColor(QPalette::Background, Qt::black);
+ palette.setColor(QPalette::Window, Qt::black);
setPalette(palette);
}
@@ -80,7 +80,7 @@ public:
void paint_helper()
{
QPainter painter(this);
- painter.fillRect(rect(), palette().background());
+ painter.fillRect(rect(), palette().window());
}
protected:
diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp
index 24372f7ae..5989d2133 100644
--- a/src/gsttools/qgstutils.cpp
+++ b/src/gsttools/qgstutils.cpp
@@ -686,6 +686,51 @@ QVector<QGstUtils::CameraInfo> QGstUtils::enumerateCameras(GstElementFactory *fa
camerasCacheAgeTimer.restart();
#endif // linux_v4l
+#if defined(Q_OS_WIN) && GST_CHECK_VERSION(1,4,0)
+ QGstUtils::initializeGst();
+ GstDeviceMonitor *monitor = gst_device_monitor_new();
+ auto caps = gst_caps_new_empty_simple("video/x-raw");
+ gst_device_monitor_add_filter(monitor, "Video/Source", caps);
+ gst_caps_unref(caps);
+
+ GList *devs = gst_device_monitor_get_devices(monitor);
+ while (devs) {
+ GstDevice *dev = reinterpret_cast<GstDevice*>(devs->data);
+ gchar *name = gst_device_get_display_name(dev);
+ gchar *desc = nullptr;
+
+ GstElement *element = gst_device_create_element(dev, nullptr);
+ if (element) {
+ GParamSpec *prop = g_object_class_find_property(G_OBJECT_GET_CLASS(element), "device-path");
+ if (prop) {
+ GValue value = G_VALUE_INIT;
+ g_value_init(&value, prop->value_type);
+ g_object_get_property(G_OBJECT(element), prop->name, &value);
+ desc = g_value_dup_string(&value);
+ g_value_unset(&value);
+
+ CameraInfo device = {
+ desc,
+ name,
+ 0,
+ QCamera::UnspecifiedPosition,
+ QByteArray()
+ };
+
+ devices.append(device);
+ }
+
+ gst_object_unref(element);
+ }
+
+ g_free(desc);
+ g_free(name);
+ gst_object_unref(dev);
+ devs = g_list_delete_link(devs, devs);
+ }
+ gst_object_unref(monitor);
+#endif // #if defined(Q_OS_WIN) && GST_CHECK_VERSION(1,4,0)
+
return devices;
}
diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp
index 849d79ab3..f3e7ae670 100644
--- a/src/multimedia/audio/qaudiobuffer.cpp
+++ b/src/multimedia/audio/qaudiobuffer.cpp
@@ -85,7 +85,7 @@ public:
static QAudioBufferPrivate *acquire(QAudioBufferPrivate *other)
{
if (!other)
- return 0;
+ return nullptr;
// Ref the other (if there are extant data() pointers, they will
// also point here - it's a feature, not a bug, like QByteArray)
@@ -131,7 +131,7 @@ public:
}
}
} else
- mBuffer = 0;
+ mBuffer = nullptr;
}
~QMemoryAudioBufferProvider()
@@ -178,7 +178,7 @@ QAudioBufferPrivate *QAudioBufferPrivate::clone()
}
}
- return 0;
+ return nullptr;
}
/*!
@@ -199,7 +199,7 @@ QAudioBufferPrivate *QAudioBufferPrivate::clone()
Create a new, empty, invalid buffer.
*/
QAudioBuffer::QAudioBuffer()
- : d(0)
+ : d(nullptr)
{
}
@@ -244,7 +244,7 @@ QAudioBuffer::QAudioBuffer(const QByteArray &data, const QAudioFormat &format, q
int frameCount = format.framesForBytes(data.size());
d = new QAudioBufferPrivate(new QMemoryAudioBufferProvider(data.constData(), frameCount, format, startTime));
} else
- d = 0;
+ d = nullptr;
}
/*!
@@ -259,9 +259,9 @@ QAudioBuffer::QAudioBuffer(const QByteArray &data, const QAudioFormat &format, q
QAudioBuffer::QAudioBuffer(int numFrames, const QAudioFormat &format, qint64 startTime)
{
if (format.isValid())
- d = new QAudioBufferPrivate(new QMemoryAudioBufferProvider(0, numFrames, format, startTime));
+ d = new QAudioBufferPrivate(new QMemoryAudioBufferProvider(nullptr, numFrames, format, startTime));
else
- d = 0;
+ d = nullptr;
}
/*!
@@ -394,7 +394,7 @@ qint64 QAudioBuffer::startTime() const
const void* QAudioBuffer::constData() const
{
if (!isValid())
- return 0;
+ return nullptr;
return d->mProvider->constData();
}
@@ -417,7 +417,7 @@ const void* QAudioBuffer::constData() const
const void* QAudioBuffer::data() const
{
if (!isValid())
- return 0;
+ return nullptr;
return d->mProvider->constData();
}
@@ -456,7 +456,7 @@ const void* QAudioBuffer::data() const
void *QAudioBuffer::data()
{
if (!isValid())
- return 0;
+ return nullptr;
if (d->mCount.load() != 1) {
// Can't share a writable buffer
@@ -465,7 +465,7 @@ void *QAudioBuffer::data()
// This shouldn't happen
if (!newd)
- return 0;
+ return nullptr;
d->deref();
d = newd;
@@ -489,7 +489,7 @@ void *QAudioBuffer::data()
return memBuffer->writableData();
}
- return 0;
+ return nullptr;
}
// Template helper classes worth documenting
diff --git a/src/multimedia/audio/qaudiodecoder.cpp b/src/multimedia/audio/qaudiodecoder.cpp
index ea1d0e56d..b4ba854e1 100644
--- a/src/multimedia/audio/qaudiodecoder.cpp
+++ b/src/multimedia/audio/qaudiodecoder.cpp
@@ -84,8 +84,8 @@ class QAudioDecoderPrivate : public QMediaObjectPrivate
public:
QAudioDecoderPrivate()
- : provider(0)
- , control(0)
+ : provider(nullptr)
+ , control(nullptr)
, state(QAudioDecoder::StoppedState)
, error(QAudioDecoder::NoError)
{}
@@ -135,7 +135,7 @@ QAudioDecoder::QAudioDecoder(QObject *parent)
d->provider = QMediaServiceProvider::defaultServiceProvider();
if (d->service) {
d->control = qobject_cast<QAudioDecoderControl*>(d->service->requestControl(QAudioDecoderControl_iid));
- if (d->control != 0) {
+ if (d->control != nullptr) {
connect(d->control, SIGNAL(stateChanged(QAudioDecoder::State)), SLOT(_q_stateChanged(QAudioDecoder::State)));
connect(d->control, SIGNAL(error(int,QString)), SLOT(_q_error(int,QString)));
@@ -205,7 +205,7 @@ void QAudioDecoder::start()
{
Q_D(QAudioDecoder);
- if (d->control == 0) {
+ if (d->control == nullptr) {
QMetaObject::invokeMethod(this, "_q_error", Qt::QueuedConnection,
Q_ARG(int, QAudioDecoder::ServiceMissingError),
Q_ARG(QString, tr("The QAudioDecoder object does not have a valid service")));
@@ -226,7 +226,7 @@ void QAudioDecoder::stop()
{
Q_D(QAudioDecoder);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->stop();
}
@@ -256,7 +256,7 @@ void QAudioDecoder::setSourceFilename(const QString &fileName)
{
Q_D(QAudioDecoder);
- if (d->control != 0)
+ if (d->control != nullptr)
d_func()->control->setSourceFilename(fileName);
}
@@ -269,7 +269,7 @@ QIODevice *QAudioDecoder::sourceDevice() const
Q_D(const QAudioDecoder);
if (d->control)
return d->control->sourceDevice();
- return 0;
+ return nullptr;
}
/*!
@@ -285,7 +285,7 @@ void QAudioDecoder::setSourceDevice(QIODevice *device)
{
Q_D(QAudioDecoder);
- if (d->control != 0)
+ if (d->control != nullptr)
d_func()->control->setSourceDevice(device);
}
@@ -327,7 +327,7 @@ void QAudioDecoder::setAudioFormat(const QAudioFormat &format)
if (state() != QAudioDecoder::StoppedState)
return;
- if (d->control != 0)
+ if (d->control != nullptr)
d_func()->control->setAudioFormat(format);
}
diff --git a/src/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/audio/qaudiodevicefactory.cpp
index b1788f28a..cf770c468 100644
--- a/src/multimedia/audio/qaudiodevicefactory.cpp
+++ b/src/multimedia/audio/qaudiodevicefactory.cpp
@@ -77,7 +77,7 @@ class QNullInputDevice : public QAbstractAudioInput
{
public:
void start(QIODevice*) override { qWarning()<<"using null input device, none available";}
- QIODevice* start() override { qWarning()<<"using null input device, none available"; return 0; }
+ QIODevice *start() override { qWarning()<<"using null input device, none available"; return nullptr; }
void stop() override {}
void reset() override {}
void suspend() override {}
@@ -102,7 +102,7 @@ class QNullOutputDevice : public QAbstractAudioOutput
{
public:
void start(QIODevice*) override {qWarning()<<"using null output device, none available";}
- QIODevice* start() override { qWarning()<<"using null output device, none available"; return 0; }
+ QIODevice *start() override { qWarning()<<"using null output device, none available"; return nullptr; }
void stop() override {}
void reset() override {}
void suspend() override {}
@@ -194,7 +194,7 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultDevice(QAudio::Mode mode)
QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode)
{
- QAbstractAudioDeviceInfo *rc = 0;
+ QAbstractAudioDeviceInfo *rc = nullptr;
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
QAudioSystemFactoryInterface* plugin =
@@ -204,7 +204,7 @@ QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &re
rc = plugin->createDeviceInfo(handle, mode);
#endif
- return rc == 0 ? new QNullDeviceInfo() : rc;
+ return rc == nullptr ? new QNullDeviceInfo() : rc;
}
QAbstractAudioInput* QAudioDeviceFactory::createDefaultInputDevice(QAudioFormat const &format)
diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp
index f4f548017..b8cac18eb 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo.cpp
@@ -57,7 +57,7 @@ class QAudioDeviceInfoPrivate : public QSharedData
public:
QAudioDeviceInfoPrivate()
: mode(QAudio::AudioOutput)
- , info(0)
+ , info(nullptr)
{
}
@@ -67,7 +67,7 @@ public:
if (!handle.isEmpty())
info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
else
- info = NULL;
+ info = nullptr;
}
QAudioDeviceInfoPrivate(const QAudioDeviceInfoPrivate &other):
@@ -213,7 +213,7 @@ bool QAudioDeviceInfo::operator !=(const QAudioDeviceInfo &other) const
*/
bool QAudioDeviceInfo::isNull() const
{
- return d->info == 0;
+ return d->info == nullptr;
}
/*!
diff --git a/src/multimedia/audio/qaudioprobe.cpp b/src/multimedia/audio/qaudioprobe.cpp
index 23687c3cb..b6fe86b11 100644
--- a/src/multimedia/audio/qaudioprobe.cpp
+++ b/src/multimedia/audio/qaudioprobe.cpp
@@ -156,7 +156,7 @@ bool QAudioProbe::setSource(QMediaObject *source)
}
}
- return (!source || d->probee != 0);
+ return (!source || d->probee != nullptr);
}
/*!
@@ -176,7 +176,7 @@ bool QAudioProbe::setSource(QMediaObject *source)
*/
bool QAudioProbe::setSource(QMediaRecorder *mediaRecorder)
{
- QMediaObject *source = mediaRecorder ? mediaRecorder->mediaObject() : 0;
+ QMediaObject *source = mediaRecorder ? mediaRecorder->mediaObject() : nullptr;
bool result = setSource(source);
if (!mediaRecorder)
@@ -195,7 +195,7 @@ bool QAudioProbe::setSource(QMediaRecorder *mediaRecorder)
*/
bool QAudioProbe::isActive() const
{
- return d->probee != 0;
+ return d->probee != nullptr;
}
/*!
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp
index c956d764b..945fabe52 100644
--- a/src/multimedia/audio/qsamplecache_p.cpp
+++ b/src/multimedia/audio/qsamplecache_p.cpp
@@ -97,7 +97,7 @@ QT_BEGIN_NAMESPACE
QSampleCache::QSampleCache(QObject *parent)
: QObject(parent)
- , m_networkAccessManager(0)
+ , m_networkAccessManager(nullptr)
, m_mutex(QMutex::Recursive)
, m_capacity(0)
, m_usage(0)
@@ -327,8 +327,8 @@ void QSample::cleanup()
if (m_stream)
m_stream->deleteLater();
- m_waveDecoder = 0;
- m_stream = 0;
+ m_waveDecoder = nullptr;
+ m_stream = nullptr;
}
// Called in application thread
@@ -429,8 +429,8 @@ void QSample::onReady()
// Called in application thread, then moved to loader thread
QSample::QSample(const QUrl& url, QSampleCache *parent)
: m_parent(parent)
- , m_stream(0)
- , m_waveDecoder(0)
+ , m_stream(nullptr)
+ , m_waveDecoder(nullptr)
, m_url(url)
, m_sampleReadLength(0)
, m_state(Creating)
diff --git a/src/multimedia/audio/qsamplecache_p.h b/src/multimedia/audio/qsamplecache_p.h
index d3a348528..094e3281e 100644
--- a/src/multimedia/audio/qsamplecache_p.h
+++ b/src/multimedia/audio/qsamplecache_p.h
@@ -127,7 +127,7 @@ class Q_MULTIMEDIA_EXPORT QSampleCache : public QObject
public:
friend class QSample;
- QSampleCache(QObject *parent = 0);
+ QSampleCache(QObject *parent = nullptr);
~QSampleCache();
QSample* requestSample(const QUrl& url);
diff --git a/src/multimedia/audio/qsoundeffect.cpp b/src/multimedia/audio/qsoundeffect.cpp
index f093373ce..09085dca9 100644
--- a/src/multimedia/audio/qsoundeffect.cpp
+++ b/src/multimedia/audio/qsoundeffect.cpp
@@ -111,20 +111,34 @@ QT_BEGIN_NAMESPACE
sound effects.
*/
+static QSoundEffectPrivate *initPrivate(QSoundEffect *self, QSoundEffectPrivate *d)
+{
+ QObject::connect(d, &QSoundEffectPrivate::loopsRemainingChanged, self, &QSoundEffect::loopsRemainingChanged);
+ QObject::connect(d, &QSoundEffectPrivate::volumeChanged, self, &QSoundEffect::volumeChanged);
+ QObject::connect(d, &QSoundEffectPrivate::mutedChanged, self, &QSoundEffect::mutedChanged);
+ QObject::connect(d, &QSoundEffectPrivate::loadedChanged, self, &QSoundEffect::loadedChanged);
+ QObject::connect(d, &QSoundEffectPrivate::playingChanged, self, &QSoundEffect::playingChanged);
+ QObject::connect(d, &QSoundEffectPrivate::statusChanged, self, &QSoundEffect::statusChanged);
+ QObject::connect(d, &QSoundEffectPrivate::categoryChanged, self, &QSoundEffect::categoryChanged);
+
+ return d;
+}
/*!
Creates a QSoundEffect with the given \a parent.
*/
-QSoundEffect::QSoundEffect(QObject *parent) :
- QObject(parent)
+QSoundEffect::QSoundEffect(QObject *parent)
+ : QObject(parent)
+ , d(initPrivate(this, new QSoundEffectPrivate(this)))
+{
+}
+
+/*!
+ Creates a QSoundEffect with the given \a audioDevice and \a parent.
+*/
+QSoundEffect::QSoundEffect(const QAudioDeviceInfo &audioDevice, QObject *parent)
+ : QObject(parent)
+ , d(initPrivate(this, new QSoundEffectPrivate(audioDevice, this)))
{
- d = new QSoundEffectPrivate(this);
- connect(d, &QSoundEffectPrivate::loopsRemainingChanged, this, &QSoundEffect::loopsRemainingChanged);
- connect(d, &QSoundEffectPrivate::volumeChanged, this, &QSoundEffect::volumeChanged);
- connect(d, &QSoundEffectPrivate::mutedChanged, this, &QSoundEffect::mutedChanged);
- connect(d, &QSoundEffectPrivate::loadedChanged, this, &QSoundEffect::loadedChanged);
- connect(d, &QSoundEffectPrivate::playingChanged, this, &QSoundEffect::playingChanged);
- connect(d, &QSoundEffectPrivate::statusChanged, this, &QSoundEffect::statusChanged);
- connect(d, &QSoundEffectPrivate::categoryChanged, this, &QSoundEffect::categoryChanged);
}
/*!
diff --git a/src/multimedia/audio/qsoundeffect.h b/src/multimedia/audio/qsoundeffect.h
index b1c5fd22b..1185afe07 100644
--- a/src/multimedia/audio/qsoundeffect.h
+++ b/src/multimedia/audio/qsoundeffect.h
@@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE
class QSoundEffectPrivate;
+class QAudioDeviceInfo;
class Q_MULTIMEDIA_EXPORT QSoundEffect : public QObject
{
@@ -81,6 +82,7 @@ public:
};
explicit QSoundEffect(QObject *parent = nullptr);
+ explicit QSoundEffect(const QAudioDeviceInfo &audioDevice, QObject *parent = nullptr);
~QSoundEffect();
static QStringList supportedMimeTypes();
diff --git a/src/multimedia/audio/qsoundeffect_pulse_p.cpp b/src/multimedia/audio/qsoundeffect_pulse_p.cpp
index bbaf405b6..075e639a8 100644
--- a/src/multimedia/audio/qsoundeffect_pulse_p.cpp
+++ b/src/multimedia/audio/qsoundeffect_pulse_p.cpp
@@ -58,7 +58,7 @@
#include <private/qaudiohelpers_p.h>
#include <private/qmediaresourcepolicy_p.h>
#include <private/qmediaresourceset_p.h>
-
+#include <QAudioDeviceInfo>
#include <unistd.h>
//#define QT_PA_DEBUG
@@ -360,6 +360,12 @@ QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
this, &QSoundEffectPrivate::handleAvailabilityChanged);
}
+QSoundEffectPrivate::QSoundEffectPrivate(const QAudioDeviceInfo &audioDevice, QObject *parent)
+ : QSoundEffectPrivate(parent)
+{
+ m_sinkName = audioDevice.deviceName();
+}
+
void QSoundEffectPrivate::handleAvailabilityChanged(bool available)
{
m_resourcesAvailable = available;
@@ -1005,8 +1011,9 @@ void QSoundEffectPrivate::createPulseStream()
}
m_pulseStream = stream;
- if (pa_stream_connect_playback(m_pulseStream, nullptr, nullptr,
- PA_STREAM_START_CORKED, nullptr, nullptr) < 0) {
+ if (pa_stream_connect_playback(m_pulseStream,
+ m_sinkName.isEmpty() ? nullptr : m_sinkName.toLatin1().constData(),
+ nullptr, PA_STREAM_START_CORKED, nullptr, nullptr) < 0) {
qWarning("QSoundEffect(pulseaudio): Failed to connect stream, error = %s",
pa_strerror(pa_context_errno(pulseDaemon()->context())));
}
diff --git a/src/multimedia/audio/qsoundeffect_pulse_p.h b/src/multimedia/audio/qsoundeffect_pulse_p.h
index 8f74d67e7..e0073f0d5 100644
--- a/src/multimedia/audio/qsoundeffect_pulse_p.h
+++ b/src/multimedia/audio/qsoundeffect_pulse_p.h
@@ -73,6 +73,7 @@ class QSoundEffectPrivate : public QObject
Q_OBJECT
public:
explicit QSoundEffectPrivate(QObject* parent);
+ explicit QSoundEffectPrivate(const QAudioDeviceInfo &audioDevice, QObject *parent);
~QSoundEffectPrivate();
static QStringList supportedMimeTypes();
@@ -150,6 +151,7 @@ private:
static void stream_adjust_prebuffer_callback(pa_stream *s, int success, void *userdata);
pa_stream *m_pulseStream = nullptr;
+ QString m_sinkName;
int m_sinkInputId = -1;
pa_sample_spec m_pulseSpec;
int m_pulseBufferSize = 0;
diff --git a/src/multimedia/audio/qsoundeffect_qaudio_p.cpp b/src/multimedia/audio/qsoundeffect_qaudio_p.cpp
index d7a19eeec..ac4dd9cf9 100644
--- a/src/multimedia/audio/qsoundeffect_qaudio_p.cpp
+++ b/src/multimedia/audio/qsoundeffect_qaudio_p.cpp
@@ -66,6 +66,12 @@ QSoundEffectPrivate::QSoundEffectPrivate(QObject *parent):
{
}
+QSoundEffectPrivate::QSoundEffectPrivate(const QAudioDeviceInfo &audioDevice, QObject *parent)
+ : QObject(parent)
+ , d(new PrivateSoundSource(this, audioDevice))
+{
+}
+
QSoundEffectPrivate::~QSoundEffectPrivate()
{
}
@@ -309,8 +315,9 @@ void QSoundEffectPrivate::setCategory(const QString &category)
}
}
-PrivateSoundSource::PrivateSoundSource(QSoundEffectPrivate *s):
- QIODevice(s)
+PrivateSoundSource::PrivateSoundSource(QSoundEffectPrivate *s, const QAudioDeviceInfo &audioDevice)
+ : QIODevice(s)
+ , m_audioDevice(audioDevice)
{
soundeffect = s;
m_category = QLatin1String("game");
@@ -328,7 +335,10 @@ void PrivateSoundSource::sampleReady()
disconnect(m_sample, &QSample::error, this, &PrivateSoundSource::decoderError);
disconnect(m_sample, &QSample::ready, this, &PrivateSoundSource::sampleReady);
if (!m_audioOutput) {
- m_audioOutput = new QAudioOutput(m_sample->format());
+ if (m_audioDevice.isNull())
+ m_audioOutput = new QAudioOutput(m_sample->format());
+ else
+ m_audioOutput = new QAudioOutput(m_audioDevice, m_sample->format());
connect(m_audioOutput, &QAudioOutput::stateChanged, this, &PrivateSoundSource::stateChanged);
if (!m_muted)
m_audioOutput->setVolume(m_volume);
diff --git a/src/multimedia/audio/qsoundeffect_qaudio_p.h b/src/multimedia/audio/qsoundeffect_qaudio_p.h
index c02a85969..a3a48f60d 100644
--- a/src/multimedia/audio/qsoundeffect_qaudio_p.h
+++ b/src/multimedia/audio/qsoundeffect_qaudio_p.h
@@ -66,7 +66,7 @@ class PrivateSoundSource : public QIODevice
friend class QSoundEffectPrivate;
Q_OBJECT
public:
- PrivateSoundSource(QSoundEffectPrivate *s);
+ PrivateSoundSource(QSoundEffectPrivate *s, const QAudioDeviceInfo &audioDevice = QAudioDeviceInfo());
~PrivateSoundSource() {}
qint64 readData(char *data, qint64 len) override;
@@ -90,7 +90,7 @@ private:
bool m_sampleReady = false;
qint64 m_offset = 0;
QString m_category;
-
+ QAudioDeviceInfo m_audioDevice;
QSoundEffectPrivate *soundeffect = nullptr;
};
@@ -102,6 +102,7 @@ class QSoundEffectPrivate : public QObject
public:
explicit QSoundEffectPrivate(QObject *parent);
+ explicit QSoundEffectPrivate(const QAudioDeviceInfo &audioDevice, QObject *parent);
~QSoundEffectPrivate();
static QStringList supportedMimeTypes();
diff --git a/src/multimedia/audio/qwavedecoder_p.h b/src/multimedia/audio/qwavedecoder_p.h
index 0f1cef599..3be0dbaa6 100644
--- a/src/multimedia/audio/qwavedecoder_p.h
+++ b/src/multimedia/audio/qwavedecoder_p.h
@@ -64,7 +64,7 @@ class QWaveDecoder : public QIODevice
Q_OBJECT
public:
- explicit QWaveDecoder(QIODevice *source, QObject *parent = 0);
+ explicit QWaveDecoder(QIODevice *source, QObject *parent = nullptr);
~QWaveDecoder();
QAudioFormat audioFormat() const;
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index c7d64155c..46c6af9ff 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -206,12 +206,12 @@ void QCameraPrivate::initControls()
error = QCamera::NoError;
} else {
- control = 0;
- locksControl = 0;
- deviceControl = 0;
- infoControl = 0;
- viewfinderSettingsControl = 0;
- viewfinderSettingsControl2 = 0;
+ control = nullptr;
+ locksControl = nullptr;
+ deviceControl = nullptr;
+ infoControl = nullptr;
+ viewfinderSettingsControl = nullptr;
+ viewfinderSettingsControl2 = nullptr;
error = QCamera::ServiceMissingError;
errorString = QCamera::tr("The camera service is missing");
@@ -241,16 +241,16 @@ void QCameraPrivate::clear()
provider->releaseService(service);
}
- cameraExposure = 0;
- cameraFocus = 0;
- imageProcessing = 0;
- control = 0;
- locksControl = 0;
- deviceControl = 0;
- infoControl = 0;
- viewfinderSettingsControl = 0;
- viewfinderSettingsControl2 = 0;
- service = 0;
+ cameraExposure = nullptr;
+ cameraFocus = nullptr;
+ imageProcessing = nullptr;
+ control = nullptr;
+ locksControl = nullptr;
+ deviceControl = nullptr;
+ infoControl = nullptr;
+ viewfinderSettingsControl = nullptr;
+ viewfinderSettingsControl2 = nullptr;
+ service = nullptr;
}
void QCameraPrivate::updateLockStatus()
@@ -328,7 +328,7 @@ QCamera::QCamera(QObject *parent):
d->init();
// Select the default camera
- if (d->service != 0 && d->deviceControl)
+ if (d->service != nullptr && d->deviceControl)
d->deviceControl->setSelectedDevice(d->deviceControl->defaultDevice());
}
@@ -362,9 +362,17 @@ QCamera::QCamera(const QByteArray& deviceName, QObject *parent):
// The camera should not be used if device with requested name does not exist.
if (!found) {
- if (d->service && d->control)
- d->service->releaseControl(d->control);
+ if (d->service) {
+ if (d->control)
+ d->service->releaseControl(d->control);
+ if (d->deviceControl)
+ d->service->releaseControl(d->deviceControl);
+ if (d->infoControl)
+ d->service->releaseControl(d->infoControl);
+ }
d->control = nullptr;
+ d->deviceControl = nullptr;
+ d->infoControl = nullptr;
d->error = QCamera::ServiceMissingError;
d->errorString = QCamera::tr("The camera service is missing");
}
@@ -401,7 +409,7 @@ QCamera::QCamera(QCamera::Position position, QObject *parent)
Q_D(QCamera);
d->init();
- if (d->service != 0 && d->deviceControl) {
+ if (d->service != nullptr && d->deviceControl) {
bool selectDefault = true;
if (d->infoControl && position != UnspecifiedPosition) {
@@ -435,7 +443,7 @@ QCamera::~QCamera()
QMultimedia::AvailabilityStatus QCamera::availability() const
{
Q_D(const QCamera);
- if (d->control == NULL)
+ if (d->control == nullptr)
return QMultimedia::ServiceMissing;
if (d->deviceControl && d->deviceControl->deviceCount() == 0)
@@ -489,7 +497,7 @@ void QCamera::setViewfinder(QVideoWidget *viewfinder)
// We don't know (in this library) that QVideoWidget inherits QObject
QObject *viewFinderObject = reinterpret_cast<QObject*>(viewfinder);
- d->viewfinder = viewFinderObject && bind(viewFinderObject) ? viewFinderObject : 0;
+ d->viewfinder = viewFinderObject && bind(viewFinderObject) ? viewFinderObject : nullptr;
}
/*!
@@ -510,7 +518,7 @@ void QCamera::setViewfinder(QGraphicsVideoItem *viewfinder)
// but QObject inheritance depends on QObject coming first, so try this out.
QObject *viewFinderObject = reinterpret_cast<QObject*>(viewfinder);
- d->viewfinder = viewFinderObject && bind(viewFinderObject) ? viewFinderObject : 0;
+ d->viewfinder = viewFinderObject && bind(viewFinderObject) ? viewFinderObject : nullptr;
}
/*!
@@ -530,14 +538,14 @@ void QCamera::setViewfinder(QAbstractVideoSurface *surface)
if (d->viewfinder)
unbind(d->viewfinder);
- d->viewfinder = 0;
+ d->viewfinder = nullptr;
if (surface && bind(&d->surfaceViewfinder))
d->viewfinder = &d->surfaceViewfinder;
} else if (!surface) {
//unbind the surfaceViewfinder if null surface is set
unbind(&d->surfaceViewfinder);
- d->viewfinder = 0;
+ d->viewfinder = nullptr;
}
}
diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h
index 49b4376b2..99759dbd3 100644
--- a/src/multimedia/camera/qcamera_p.h
+++ b/src/multimedia/camera/qcamera_p.h
@@ -71,18 +71,18 @@ class QCameraPrivate : public QMediaObjectPrivate
public:
QCameraPrivate():
QMediaObjectPrivate(),
- provider(0),
- control(0),
- deviceControl(0),
- locksControl(0),
- infoControl(0),
- viewfinderSettingsControl(0),
- viewfinderSettingsControl2(0),
- cameraExposure(0),
- cameraFocus(0),
- imageProcessing(0),
- viewfinder(0),
- capture(0),
+ provider(nullptr),
+ control(nullptr),
+ deviceControl(nullptr),
+ locksControl(nullptr),
+ infoControl(nullptr),
+ viewfinderSettingsControl(nullptr),
+ viewfinderSettingsControl2(nullptr),
+ cameraExposure(nullptr),
+ cameraFocus(nullptr),
+ imageProcessing(nullptr),
+ viewfinder(nullptr),
+ capture(nullptr),
state(QCamera::UnloadedState),
error(QCamera::NoError),
requestedLocks(QCamera::NoLock),
diff --git a/src/multimedia/camera/qcameraexposure.cpp b/src/multimedia/camera/qcameraexposure.cpp
index d289aed33..91950c7d2 100644
--- a/src/multimedia/camera/qcameraexposure.cpp
+++ b/src/multimedia/camera/qcameraexposure.cpp
@@ -98,8 +98,8 @@ void QCameraExposurePrivate::initControls()
Q_Q(QCameraExposure);
QMediaService *service = camera->service();
- exposureControl = 0;
- flashControl = 0;
+ exposureControl = nullptr;
+ flashControl = nullptr;
if (service) {
exposureControl = qobject_cast<QCameraExposureControl *>(service->requestControl(QCameraExposureControl_iid));
flashControl = qobject_cast<QCameraFlashControl *>(service->requestControl(QCameraFlashControl_iid));
@@ -217,7 +217,7 @@ QCameraExposure::~QCameraExposure()
*/
bool QCameraExposure::isAvailable() const
{
- return d_func()->exposureControl != 0;
+ return d_func()->exposureControl != nullptr;
}
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp
index 848b33df8..e73a8ea46 100644
--- a/src/multimedia/camera/qcamerafocus.cpp
+++ b/src/multimedia/camera/qcamerafocus.cpp
@@ -339,8 +339,8 @@ void QCameraFocusPrivate::initControls()
{
Q_Q(QCameraFocus);
- focusControl = 0;
- zoomControl = 0;
+ focusControl = nullptr;
+ zoomControl = nullptr;
QMediaService *service = camera->service();
if (service) {
@@ -348,7 +348,7 @@ void QCameraFocusPrivate::initControls()
zoomControl = qobject_cast<QCameraZoomControl *>(service->requestControl(QCameraZoomControl_iid));
}
- available = focusControl != 0;
+ available = focusControl != nullptr;
if (!focusControl)
focusControl = new QCameraFocusFakeFocusControl(q);
diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qcameraimagecapture.cpp
index cedae2609..8f364a686 100644
--- a/src/multimedia/camera/qcameraimagecapture.cpp
+++ b/src/multimedia/camera/qcameraimagecapture.cpp
@@ -117,11 +117,11 @@ public:
};
QCameraImageCapturePrivate::QCameraImageCapturePrivate():
- mediaObject(0),
- control(0),
- encoderControl(0),
- captureDestinationControl(0),
- bufferFormatControl(0),
+ mediaObject(nullptr),
+ control(nullptr),
+ encoderControl(nullptr),
+ captureDestinationControl(nullptr),
+ bufferFormatControl(nullptr),
error(QCameraImageCapture::NoError)
{
}
@@ -144,11 +144,11 @@ void QCameraImageCapturePrivate::_q_readyChanged(bool ready)
void QCameraImageCapturePrivate::_q_serviceDestroyed()
{
- mediaObject = 0;
- control = 0;
- encoderControl = 0;
- captureDestinationControl = 0;
- bufferFormatControl = 0;
+ mediaObject = nullptr;
+ control = nullptr;
+ encoderControl = nullptr;
+ captureDestinationControl = nullptr;
+ bufferFormatControl = nullptr;
}
/*!
@@ -284,11 +284,11 @@ bool QCameraImageCapture::setMediaObject(QMediaObject *mediaObject)
}
// without QCameraImageCaptureControl discard the media object
- d->mediaObject = 0;
- d->control = 0;
- d->encoderControl = 0;
- d->captureDestinationControl = 0;
- d->bufferFormatControl = 0;
+ d->mediaObject = nullptr;
+ d->control = nullptr;
+ d->encoderControl = nullptr;
+ d->captureDestinationControl = nullptr;
+ d->bufferFormatControl = nullptr;
return false;
}
@@ -298,7 +298,7 @@ bool QCameraImageCapture::setMediaObject(QMediaObject *mediaObject)
*/
bool QCameraImageCapture::isAvailable() const
{
- if (d_func()->control != NULL)
+ if (d_func()->control != nullptr)
return true;
else
return false;
@@ -309,7 +309,7 @@ bool QCameraImageCapture::isAvailable() const
*/
QMultimedia::AvailabilityStatus QCameraImageCapture::availability() const
{
- if (d_func()->control != NULL)
+ if (d_func()->control != nullptr)
return QMultimedia::Available;
else
return QMultimedia::ServiceMissing;
diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp
index 737b74b73..c2cefeae7 100644
--- a/src/multimedia/camera/qcameraimageprocessing.cpp
+++ b/src/multimedia/camera/qcameraimageprocessing.cpp
@@ -130,7 +130,7 @@ void QCameraImageProcessingPrivate::initControls()
if (service)
imageControl = qobject_cast<QCameraImageProcessingControl *>(service->requestControl(QCameraImageProcessingControl_iid));
- available = (imageControl != 0);
+ available = (imageControl != nullptr);
if (!imageControl)
imageControl = new QCameraImageProcessingFakeControl(q_ptr);
diff --git a/src/multimedia/configure.json b/src/multimedia/configure.json
index 9980b0664..b50272424 100644
--- a/src/multimedia/configure.json
+++ b/src/multimedia/configure.json
@@ -9,10 +9,10 @@
"options": {
"alsa": "boolean",
"evr": { "type": "boolean" },
+ "directshow": { "type": "boolean" },
+ "wmf": { "type": "boolean" },
"gstreamer": { "type": "optionalString", "values": [ "no", "yes", "0.10", "1.0" ] },
- "pulseaudio": "boolean",
- "mediaplayer-backend": { "type": "string", "values": [ "directshow", "wmf" ] },
- "wmf-backend": { "type": "void", "name": "mediaplayer-backend", "value": "wmf" }
+ "pulseaudio": "boolean"
}
},
@@ -188,13 +188,6 @@
"condition": "config.win32 && libs.directshow",
"output": [ "feature", "privateFeature" ]
},
- "directshow-player": {
- "label": "DirectShow",
- "enable": "input.mediaplayer-backend == 'directshow'",
- "disable": "input.mediaplayer-backend == 'wmf'",
- "condition": "features.directshow && !features.wmf-player",
- "output": [ "privateFeature" ]
- },
"evr": {
"label": "evr.h",
"condition": "config.win32 && tests.evr",
@@ -284,13 +277,6 @@
"label": "Windows Media Foundation",
"condition": "config.win32 && libs.wmf",
"output": [ "privateFeature" ]
- },
- "wmf-player": {
- "label": "Windows Media Foundation",
- "enable": "input.mediaplayer-backend == 'wmf'",
- "disable": "input.mediaplayer-backend != 'wmf'",
- "condition": "features.wmf",
- "output": [ "privateFeature" ]
}
},
@@ -312,14 +298,7 @@
"avfoundation",
"wasapi",
"directshow",
- "wmf",
- {
- "message": "Media player backend",
- "type": "firstAvailableFeature",
- "args": "directshow-player wmf-player",
- "condition": "config.win32"
- }
-
+ "wmf"
]
}
]
diff --git a/src/multimedia/controls/qmediaplaylistcontrol_p.h b/src/multimedia/controls/qmediaplaylistcontrol_p.h
index 721a471c4..93c5a3e25 100644
--- a/src/multimedia/controls/qmediaplaylistcontrol_p.h
+++ b/src/multimedia/controls/qmediaplaylistcontrol_p.h
@@ -90,7 +90,7 @@ Q_SIGNALS:
void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
protected:
- QMediaPlaylistControl(QObject* parent = 0);
+ QMediaPlaylistControl(QObject *parent = nullptr);
};
#define QMediaPlaylistControl_iid "org.qt-project.qt.mediaplaylistcontrol/5.0"
diff --git a/src/multimedia/controls/qmediaplaylistsourcecontrol_p.h b/src/multimedia/controls/qmediaplaylistsourcecontrol_p.h
index 18bf91d5b..a98ee8738 100644
--- a/src/multimedia/controls/qmediaplaylistsourcecontrol_p.h
+++ b/src/multimedia/controls/qmediaplaylistsourcecontrol_p.h
@@ -73,7 +73,7 @@ Q_SIGNALS:
void playlistChanged(QMediaPlaylist* playlist);
protected:
- QMediaPlaylistSourceControl(QObject* parent = 0);
+ QMediaPlaylistSourceControl(QObject *parent = nullptr);
};
#define QMediaPlaylistSourceControl_iid "org.qt-project.qt.mediaplaylistsourcecontrol/5.0"
diff --git a/src/multimedia/playback/qmediacontent.cpp b/src/multimedia/playback/qmediacontent.cpp
index fe377b969..85ccc35a2 100644
--- a/src/multimedia/playback/qmediacontent.cpp
+++ b/src/multimedia/playback/qmediacontent.cpp
@@ -61,14 +61,20 @@ public:
isPlaylistOwned(false)
{}
+#if QT_DEPRECATED_SINCE(6, 0)
QMediaContentPrivate(const QMediaResourceList &r):
resources(r),
isPlaylistOwned(false)
{}
+#endif
QMediaContentPrivate(const QMediaContentPrivate &other):
QSharedData(other),
+#if QT_DEPRECATED_SINCE(6, 0)
resources(other.resources),
+#else
+ request(other.request),
+#endif
playlist(other.playlist),
isPlaylistOwned(false)
{}
@@ -77,7 +83,11 @@ public:
playlist(pls),
isPlaylistOwned(isOwn)
{
+#if QT_DEPRECATED_SINCE(6, 0)
resources << QMediaResource(url);
+#else
+ request.setUrl(url);
+#endif
}
~QMediaContentPrivate()
@@ -88,10 +98,18 @@ public:
bool operator ==(const QMediaContentPrivate &other) const
{
+#if QT_DEPRECATED_SINCE(6, 0)
return resources == other.resources && playlist == other.playlist;
+#else
+ return request == other.request && playlist == other.playlist;
+#endif
}
+#if QT_DEPRECATED_SINCE(6, 0)
QMediaResourceList resources;
+#else
+ QNetworkRequest request;
+#endif
QPointer<QMediaPlaylist> playlist;
bool isPlaylistOwned;
@@ -139,7 +157,11 @@ QMediaContent::QMediaContent()
QMediaContent::QMediaContent(const QUrl &url):
d(new QMediaContentPrivate)
{
+#if QT_DEPRECATED_SINCE(6, 0)
d->resources << QMediaResource(url);
+#else
+ d->request.setUrl(url);
+#endif
}
/*!
@@ -152,10 +174,17 @@ QMediaContent::QMediaContent(const QUrl &url):
QMediaContent::QMediaContent(const QNetworkRequest &request):
d(new QMediaContentPrivate)
{
+#if QT_DEPRECATED_SINCE(6, 0)
d->resources << QMediaResource(request);
+#else
+ d->request = request;
+#endif
}
+#if QT_DEPRECATED_SINCE(6, 0)
/*!
+ \obsolete
+
Constructs a media content with \a resource providing a reference to the content.
*/
@@ -166,6 +195,8 @@ QMediaContent::QMediaContent(const QMediaResource &resource):
}
/*!
+ \obsolete
+
Constructs a media content with \a resources providing a reference to the content.
*/
@@ -173,6 +204,7 @@ QMediaContent::QMediaContent(const QMediaResourceList &resources):
d(new QMediaContentPrivate(resources))
{
}
+#endif
/*!
Constructs a copy of the media content \a other.
@@ -221,8 +253,8 @@ QMediaContent& QMediaContent::operator=(const QMediaContent &other)
bool QMediaContent::operator==(const QMediaContent &other) const
{
- return (d.constData() == 0 && other.d.constData() == 0) ||
- (d.constData() != 0 && other.d.constData() != 0 &&
+ return (d.constData() == 0 && other.d.constData() == nullptr) ||
+ (d.constData() != 0 && other.d.constData() != nullptr &&
*d.constData() == *other.d.constData());
}
@@ -241,7 +273,7 @@ bool QMediaContent::operator!=(const QMediaContent &other) const
bool QMediaContent::isNull() const
{
- return d.constData() == 0;
+ return d.constData() == nullptr;
}
/*!
@@ -250,7 +282,11 @@ bool QMediaContent::isNull() const
QUrl QMediaContent::canonicalUrl() const
{
+#if QT_DEPRECATED_SINCE(6, 0)
return canonicalResource().url();
+#else
+ return canonicalRequest().url();
+#endif
}
/*!
@@ -259,31 +295,41 @@ QUrl QMediaContent::canonicalUrl() const
QNetworkRequest QMediaContent::canonicalRequest() const
{
+#if QT_DEPRECATED_SINCE(6, 0)
return canonicalResource().request();
+#else
+ return d.constData() != 0 ? d->request : QNetworkRequest();
+#endif
}
+#if QT_DEPRECATED_SINCE(6, 0)
/*!
+ \obsolete
+
Returns a QMediaResource that represents that canonical resource for this media content.
*/
QMediaResource QMediaContent::canonicalResource() const
{
- return d.constData() != 0
+ return d.constData() != nullptr
? d->resources.value(0)
: QMediaResource();
}
/*!
+ \obsolete
+
Returns a list of alternative resources for this media content. The first item in this list
is always the canonical resource.
*/
QMediaResourceList QMediaContent::resources() const
{
- return d.constData() != 0
+ return d.constData() != nullptr
? d->resources
: QMediaResourceList();
}
+#endif // #if QT_DEPRECATED_SINCE(6, 0)
/*!
Returns a playlist for this media content or 0 if this QMediaContent is not a playlist.
@@ -291,9 +337,9 @@ QMediaResourceList QMediaContent::resources() const
QMediaPlaylist *QMediaContent::playlist() const
{
- return d.constData() != 0
+ return d.constData() != nullptr
? d->playlist.data()
- : 0;
+ : nullptr;
}
QT_END_NAMESPACE
diff --git a/src/multimedia/playback/qmediacontent.h b/src/multimedia/playback/qmediacontent.h
index f7c086752..5193a1fcc 100644
--- a/src/multimedia/playback/qmediacontent.h
+++ b/src/multimedia/playback/qmediacontent.h
@@ -58,8 +58,10 @@ public:
QMediaContent();
QMediaContent(const QUrl &contentUrl);
QMediaContent(const QNetworkRequest &contentRequest);
- QMediaContent(const QMediaResource &contentResource);
- QMediaContent(const QMediaResourceList &resources);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QT_DEPRECATED QMediaContent(const QMediaResource &contentResource);
+ QT_DEPRECATED QMediaContent(const QMediaResourceList &resources);
+#endif
QMediaContent(const QMediaContent &other);
QMediaContent(QMediaPlaylist *playlist, const QUrl &contentUrl = QUrl(), bool takeOwnership = false);
~QMediaContent();
@@ -73,9 +75,10 @@ public:
QUrl canonicalUrl() const;
QNetworkRequest canonicalRequest() const;
- QMediaResource canonicalResource() const;
-
- QMediaResourceList resources() const;
+#if QT_DEPRECATED_SINCE(6, 0)
+ QT_DEPRECATED QMediaResource canonicalResource() const;
+ QT_DEPRECATED QMediaResourceList resources() const;
+#endif
QMediaPlaylist *playlist() const;
private:
diff --git a/src/multimedia/playback/qmedianetworkplaylistprovider_p.h b/src/multimedia/playback/qmedianetworkplaylistprovider_p.h
index 3d1ffe66a..6b5220935 100644
--- a/src/multimedia/playback/qmedianetworkplaylistprovider_p.h
+++ b/src/multimedia/playback/qmedianetworkplaylistprovider_p.h
@@ -61,10 +61,10 @@ class Q_MULTIMEDIA_EXPORT QMediaNetworkPlaylistProvider : public QMediaPlaylistP
{
Q_OBJECT
public:
- QMediaNetworkPlaylistProvider(QObject *parent=0);
+ QMediaNetworkPlaylistProvider(QObject *parent = nullptr);
~QMediaNetworkPlaylistProvider();
- bool load(const QNetworkRequest &request, const char *format = 0) override;
+ bool load(const QNetworkRequest &request, const char *format = nullptr) override;
int mediaCount() const override;
QMediaContent media(int pos) const override;
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 19d4ec42c..3308537a9 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -109,12 +109,12 @@ class QMediaPlayerPrivate : public QMediaObjectPrivate
public:
QMediaPlayerPrivate()
- : provider(0)
- , control(0)
- , audioRoleControl(0)
- , customAudioRoleControl(0)
- , playlist(0)
- , networkAccessControl(0)
+ : provider(nullptr)
+ , control(nullptr)
+ , audioRoleControl(nullptr)
+ , customAudioRoleControl(nullptr)
+ , playlist(nullptr)
+ , networkAccessControl(nullptr)
, state(QMediaPlayer::StoppedState)
, status(QMediaPlayer::UnknownMediaStatus)
, error(QMediaPlayer::NoError)
@@ -148,7 +148,7 @@ public:
QMediaPlaylist *parentPlaylist(QMediaPlaylist *pls);
bool isInChain(const QUrl &url);
- void setMedia(const QMediaContent &media, QIODevice *stream = 0);
+ void setMedia(const QMediaContent &media, QIODevice *stream = nullptr);
void setPlaylist(QMediaPlaylist *playlist);
void setPlaylistMedia();
@@ -175,7 +175,7 @@ QMediaPlaylist *QMediaPlayerPrivate::parentPlaylist(QMediaPlaylist *pls)
for (QMediaPlaylist *current = rootMedia.playlist(); current && current != pls; current = current->currentMedia().playlist())
if (current->currentMedia().playlist() == pls)
return current;
- return 0;
+ return nullptr;
}
bool QMediaPlayerPrivate::isInChain(const QUrl &url)
@@ -309,7 +309,7 @@ void QMediaPlayerPrivate::_q_updateMedia(const QMediaContent &media)
const QMediaPlayer::State currentState = state;
- setMedia(media, 0);
+ setMedia(media, nullptr);
if (!media.isNull()) {
switch (currentState) {
@@ -329,8 +329,8 @@ void QMediaPlayerPrivate::_q_updateMedia(const QMediaContent &media)
void QMediaPlayerPrivate::_q_playlistDestroyed()
{
- playlist = 0;
- setMedia(QMediaContent(), 0);
+ playlist = nullptr;
+ setMedia(QMediaContent(), nullptr);
}
void QMediaPlayerPrivate::setMedia(const QMediaContent &media, QIODevice *stream)
@@ -360,7 +360,7 @@ void QMediaPlayerPrivate::setMedia(const QMediaContent &media, QIODevice *stream
// on the backend side since we can't load the new one and we want to be in the
// InvalidMedia status.
ignoreNextStatusChange = QMediaPlayer::NoMedia;
- control->setMedia(QMediaContent(), 0);
+ control->setMedia(QMediaContent(), nullptr);
} else if (hasStreamPlaybackFeature) {
control->setMedia(media, file.data());
@@ -386,7 +386,7 @@ void QMediaPlayerPrivate::setMedia(const QMediaContent &media, QIODevice *stream
tempFile->close();
file.reset(tempFile);
- control->setMedia(QMediaContent(QUrl::fromLocalFile(file->fileName())), 0);
+ control->setMedia(QMediaContent(QUrl::fromLocalFile(file->fileName())), nullptr);
#else
qWarning("Qt was built with -no-feature-temporaryfile: playback from resource file is not supported!");
#endif
@@ -447,13 +447,13 @@ void QMediaPlayerPrivate::setPlaylistMedia()
// media is not changed,
// frontend needs to emit currentMediaChanged
bool isSameMedia = (q->currentMedia() == playlist->currentMedia());
- setMedia(playlist->currentMedia(), 0);
+ setMedia(playlist->currentMedia(), nullptr);
if (isSameMedia) {
emit q->currentMediaChanged(q->currentMedia());
}
}
} else {
- setMedia(QMediaContent(), 0);
+ setMedia(QMediaContent(), nullptr);
}
}
@@ -545,7 +545,7 @@ void QMediaPlayerPrivate::_q_handlePlaylistLoadFailed()
if (playlist)
playlist->next();
else
- setMedia(QMediaContent(), 0);
+ setMedia(QMediaContent(), nullptr);
}
static QMediaService *playerService(QMediaPlayer::Flags flags)
@@ -583,12 +583,12 @@ QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags):
Q_D(QMediaPlayer);
d->provider = QMediaServiceProvider::defaultServiceProvider();
- if (d->service == 0) {
+ if (d->service == nullptr) {
d->error = ServiceMissingError;
} else {
d->control = qobject_cast<QMediaPlayerControl*>(d->service->requestControl(QMediaPlayerControl_iid));
d->networkAccessControl = qobject_cast<QMediaNetworkAccessControl*>(d->service->requestControl(QMediaNetworkAccessControl_iid));
- if (d->control != 0) {
+ if (d->control != nullptr) {
connect(d->control, SIGNAL(mediaChanged(QMediaContent)), SLOT(_q_handleMediaChanged(QMediaContent)));
connect(d->control, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(_q_stateChanged(QMediaPlayer::State)));
connect(d->control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
@@ -631,7 +631,7 @@ QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags):
}
}
}
- if (d->networkAccessControl != 0) {
+ if (d->networkAccessControl != nullptr) {
connect(d->networkAccessControl, SIGNAL(configurationChanged(QNetworkConfiguration)),
this, SIGNAL(networkConfigurationChanged(QNetworkConfiguration)));
}
@@ -685,7 +685,7 @@ const QIODevice *QMediaPlayer::mediaStream() const
if (d->control && d->qrcMedia.isNull())
return d->control->mediaStream();
- return 0;
+ return nullptr;
}
QMediaPlaylist *QMediaPlayer::playlist() const
@@ -737,7 +737,7 @@ QMediaPlayer::State QMediaPlayer::state() const
// In case if EndOfMedia status is already received
// but state is not.
- if (d->control != 0
+ if (d->control != nullptr
&& d->status == QMediaPlayer::EndOfMedia
&& d->state != d->control->state()) {
return d->control->state();
@@ -755,7 +755,7 @@ qint64 QMediaPlayer::duration() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->duration();
return -1;
@@ -765,7 +765,7 @@ qint64 QMediaPlayer::position() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->position();
return 0;
@@ -775,7 +775,7 @@ int QMediaPlayer::volume() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->volume();
return 0;
@@ -785,7 +785,7 @@ bool QMediaPlayer::isMuted() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isMuted();
return false;
@@ -795,7 +795,7 @@ int QMediaPlayer::bufferStatus() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->bufferStatus();
return 0;
@@ -805,7 +805,7 @@ bool QMediaPlayer::isAudioAvailable() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isAudioAvailable();
return false;
@@ -815,7 +815,7 @@ bool QMediaPlayer::isVideoAvailable() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isVideoAvailable();
return false;
@@ -825,7 +825,7 @@ bool QMediaPlayer::isSeekable() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isSeekable();
return false;
@@ -835,7 +835,7 @@ qreal QMediaPlayer::playbackRate() const
{
Q_D(const QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->playbackRate();
return 0.0;
@@ -880,7 +880,7 @@ void QMediaPlayer::play()
{
Q_D(QMediaPlayer);
- if (d->control == 0) {
+ if (d->control == nullptr) {
QMetaObject::invokeMethod(this, "_q_error", Qt::QueuedConnection,
Q_ARG(int, QMediaPlayer::ServiceMissingError),
Q_ARG(QString, tr("The QMediaPlayer object does not have a valid service")));
@@ -918,7 +918,7 @@ void QMediaPlayer::pause()
{
Q_D(QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->pause();
}
@@ -930,7 +930,7 @@ void QMediaPlayer::stop()
{
Q_D(QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->stop();
// If media player didn't stop in response to control.
@@ -949,7 +949,7 @@ void QMediaPlayer::setPosition(qint64 position)
{
Q_D(QMediaPlayer);
- if (d->control == 0)
+ if (d->control == nullptr)
return;
d->control->setPosition(qMax(position, 0ll));
@@ -959,7 +959,7 @@ void QMediaPlayer::setVolume(int v)
{
Q_D(QMediaPlayer);
- if (d->control == 0)
+ if (d->control == nullptr)
return;
int clamped = qBound(0, v, 100);
@@ -973,7 +973,7 @@ void QMediaPlayer::setMuted(bool muted)
{
Q_D(QMediaPlayer);
- if (d->control == 0 || muted == isMuted())
+ if (d->control == nullptr || muted == isMuted())
return;
d->control->setMuted(muted);
@@ -983,7 +983,7 @@ void QMediaPlayer::setPlaybackRate(qreal rate)
{
Q_D(QMediaPlayer);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->setPlaybackRate(rate);
}
@@ -1011,7 +1011,7 @@ void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream)
QMediaContent oldMedia = d->rootMedia;
d->disconnectPlaylist();
- d->playlist = 0;
+ d->playlist = nullptr;
d->rootMedia = media;
d->nestedPlaylists = 0;
@@ -1097,7 +1097,7 @@ void QMediaPlayer::setVideoOutput(QVideoWidget *output)
// We don't know (in this library) that QVideoWidget inherits QObject
QObject *outputObject = reinterpret_cast<QObject*>(output);
- d->videoOutput = outputObject && bind(outputObject) ? outputObject : 0;
+ d->videoOutput = outputObject && bind(outputObject) ? outputObject : nullptr;
}
/*!
@@ -1119,7 +1119,7 @@ void QMediaPlayer::setVideoOutput(QGraphicsVideoItem *output)
// but QObject inheritance depends on QObject coming first, so try this out.
QObject *outputObject = reinterpret_cast<QObject*>(output);
- d->videoOutput = outputObject && bind(outputObject) ? outputObject : 0;
+ d->videoOutput = outputObject && bind(outputObject) ? outputObject : nullptr;
}
/*!
@@ -1139,14 +1139,14 @@ void QMediaPlayer::setVideoOutput(QAbstractVideoSurface *surface)
if (d->videoOutput)
unbind(d->videoOutput);
- d->videoOutput = 0;
+ d->videoOutput = nullptr;
if (surface && bind(&d->surfaceOutput))
d->videoOutput = &d->surfaceOutput;
} else if (!surface) {
//unbind the surfaceOutput if null surface is set
unbind(&d->surfaceOutput);
- d->videoOutput = 0;
+ d->videoOutput = nullptr;
}
}
@@ -1165,7 +1165,7 @@ QAudio::Role QMediaPlayer::audioRole() const
{
Q_D(const QMediaPlayer);
- if (d->audioRoleControl != NULL)
+ if (d->audioRoleControl != nullptr)
return d->audioRoleControl->audioRole();
return QAudio::UnknownRole;
diff --git a/src/multimedia/playback/qmediaplaylist.cpp b/src/multimedia/playback/qmediaplaylist.cpp
index 97fe75044..7618827da 100644
--- a/src/multimedia/playback/qmediaplaylist.cpp
+++ b/src/multimedia/playback/qmediaplaylist.cpp
@@ -124,7 +124,7 @@ QMediaPlaylist::QMediaPlaylist(QObject *parent)
d->q_ptr = this;
d->networkPlaylistControl = new QMediaNetworkPlaylistControl(this);
- setMediaObject(0);
+ setMediaObject(nullptr);
}
/*!
@@ -163,9 +163,9 @@ bool QMediaPlaylist::setMediaObject(QMediaObject *mediaObject)
return true;
QMediaService *service = mediaObject
- ? mediaObject->service() : 0;
+ ? mediaObject->service() : nullptr;
- QMediaPlaylistControl *newControl = 0;
+ QMediaPlaylistControl *newControl = nullptr;
if (service)
newControl = qobject_cast<QMediaPlaylistControl*>(service->requestControl(QMediaPlaylistControl_iid));
diff --git a/src/multimedia/playback/qmediaplaylist_p.h b/src/multimedia/playback/qmediaplaylist_p.h
index 8e081dd67..16fce00a9 100644
--- a/src/multimedia/playback/qmediaplaylist_p.h
+++ b/src/multimedia/playback/qmediaplaylist_p.h
@@ -78,9 +78,9 @@ class QMediaPlaylistPrivate
Q_DECLARE_PUBLIC(QMediaPlaylist)
public:
QMediaPlaylistPrivate()
- :mediaObject(0),
- control(0),
- networkPlaylistControl(0),
+ :mediaObject(nullptr),
+ control(nullptr),
+ networkPlaylistControl(nullptr),
error(QMediaPlaylist::NoError)
{
}
@@ -98,10 +98,10 @@ public:
void _q_mediaObjectDeleted()
{
Q_Q(QMediaPlaylist);
- mediaObject = 0;
+ mediaObject = nullptr;
if (control != networkPlaylistControl)
- control = 0;
- q->setMediaObject(0);
+ control = nullptr;
+ q->setMediaObject(nullptr);
}
QMediaObject *mediaObject;
diff --git a/src/multimedia/playback/qmediaplaylistioplugin_p.h b/src/multimedia/playback/qmediaplaylistioplugin_p.h
index 1e157d135..50bdcf9c0 100644
--- a/src/multimedia/playback/qmediaplaylistioplugin_p.h
+++ b/src/multimedia/playback/qmediaplaylistioplugin_p.h
@@ -106,7 +106,7 @@ class Q_MULTIMEDIA_EXPORT QMediaPlaylistIOPlugin : public QObject, public QMedia
Q_OBJECT
Q_INTERFACES(QMediaPlaylistIOInterface)
public:
- explicit QMediaPlaylistIOPlugin(QObject *parent = 0);
+ explicit QMediaPlaylistIOPlugin(QObject *parent = nullptr);
~QMediaPlaylistIOPlugin();
bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const override = 0;
diff --git a/src/multimedia/playback/qmediaplaylistnavigator.cpp b/src/multimedia/playback/qmediaplaylistnavigator.cpp
index 0966c9396..120f621f5 100644
--- a/src/multimedia/playback/qmediaplaylistnavigator.cpp
+++ b/src/multimedia/playback/qmediaplaylistnavigator.cpp
@@ -63,7 +63,7 @@ class QMediaPlaylistNavigatorPrivate
Q_DECLARE_NON_CONST_PUBLIC(QMediaPlaylistNavigator)
public:
QMediaPlaylistNavigatorPrivate()
- :playlist(0),
+ :playlist(nullptr),
currentPos(-1),
lastValidPos(-1),
playbackMode(QMediaPlaylist::Sequential),
diff --git a/src/multimedia/playback/qmediaplaylistnavigator_p.h b/src/multimedia/playback/qmediaplaylistnavigator_p.h
index 3899c42d9..2ac03a62c 100644
--- a/src/multimedia/playback/qmediaplaylistnavigator_p.h
+++ b/src/multimedia/playback/qmediaplaylistnavigator_p.h
@@ -67,7 +67,7 @@ class Q_MULTIMEDIA_EXPORT QMediaPlaylistNavigator : public QObject
Q_PROPERTY(QMediaContent currentItem READ currentItem)
public:
- QMediaPlaylistNavigator(QMediaPlaylistProvider *playlist, QObject *parent = 0);
+ QMediaPlaylistNavigator(QMediaPlaylistProvider *playlist, QObject *parent = nullptr);
virtual ~QMediaPlaylistNavigator();
QMediaPlaylistProvider *playlist() const;
diff --git a/src/multimedia/playback/qmediaplaylistprovider_p.h b/src/multimedia/playback/qmediaplaylistprovider_p.h
index 899c7c8bc..ed27612b9 100644
--- a/src/multimedia/playback/qmediaplaylistprovider_p.h
+++ b/src/multimedia/playback/qmediaplaylistprovider_p.h
@@ -70,12 +70,12 @@ class Q_MULTIMEDIA_EXPORT QMediaPlaylistProvider : public QObject
{
Q_OBJECT
public:
- QMediaPlaylistProvider(QObject *parent=0);
+ QMediaPlaylistProvider(QObject *parent = nullptr);
virtual ~QMediaPlaylistProvider();
- virtual bool load(const QNetworkRequest &request, const char *format = 0);
- virtual bool load(QIODevice * device, const char *format = 0);
- virtual bool save(const QUrl &location, const char *format = 0);
+ virtual bool load(const QNetworkRequest &request, const char *format = nullptr);
+ virtual bool load(QIODevice *device, const char *format = nullptr);
+ virtual bool save(const QUrl &location, const char *format = nullptr);
virtual bool save(QIODevice * device, const char *format);
virtual int mediaCount() const = 0;
diff --git a/src/multimedia/playback/qmediaresource.cpp b/src/multimedia/playback/qmediaresource.cpp
index 0a59b0de8..181b37525 100644
--- a/src/multimedia/playback/qmediaresource.cpp
+++ b/src/multimedia/playback/qmediaresource.cpp
@@ -39,6 +39,8 @@
#include "qmediaresource.h"
+#if QT_DEPRECATED_SINCE(6, 0)
+
#include <QtCore/qsize.h>
#include <QtCore/qurl.h>
#include <QtCore/qvariant.h>
@@ -61,6 +63,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterMediaResourceMetaTypes)
\inmodule QtMultimedia
\ingroup multimedia
\ingroup multimedia_playback
+ \obsolete
A media resource is composed of a \l {url()}{URL} containing the
location of the resource and a set of properties that describe the
@@ -418,3 +421,4 @@ void QMediaResource::setResolution(int width, int height)
}
QT_END_NAMESPACE
+#endif // #if QT_DEPRECATED_SINCE(6, 0)
diff --git a/src/multimedia/playback/qmediaresource.h b/src/multimedia/playback/qmediaresource.h
index 9740166c6..8cded3128 100644
--- a/src/multimedia/playback/qmediaresource.h
+++ b/src/multimedia/playback/qmediaresource.h
@@ -46,6 +46,8 @@
#include <QtMultimedia/qtmultimediaglobal.h>
+#if QT_DEPRECATED_SINCE(6, 0)
+
QT_BEGIN_NAMESPACE
// Class forward declaration required for QDoc bug
@@ -124,4 +126,6 @@ QT_END_NAMESPACE
Q_DECLARE_METATYPE(QMediaResource)
Q_DECLARE_METATYPE(QMediaResourceList)
+#endif // #if QT_DEPRECATED_SINCE(6, 0)
+
#endif
diff --git a/src/multimedia/playback/qplaylistfileparser.cpp b/src/multimedia/playback/qplaylistfileparser.cpp
index 0d33f040d..92e7f97e8 100644
--- a/src/multimedia/playback/qplaylistfileparser.cpp
+++ b/src/multimedia/playback/qplaylistfileparser.cpp
@@ -273,7 +273,7 @@ class QPlaylistFileParserPrivate
public:
QPlaylistFileParserPrivate(QPlaylistFileParser *q)
: q_ptr(q)
- , m_stream(0)
+ , m_stream(nullptr)
, m_type(QPlaylistFileParser::UNKNOWN)
, m_scanIndex(0)
, m_lineIndex(-1)
@@ -299,9 +299,10 @@ public:
struct ParserJob
{
QIODevice *m_stream;
- QMediaResource m_resource;
- bool isValid() const { return m_stream || !m_resource.isNull(); }
- void reset() { m_stream = 0; m_resource = QMediaResource(); }
+ QMediaContent m_media;
+ QString m_mimeType;
+ bool isValid() const { return m_stream || !m_media.isNull(); }
+ void reset() { m_stream = nullptr; m_media = QMediaContent(); m_mimeType = QString(); }
} m_pendingJob;
int m_scanIndex;
int m_lineIndex;
@@ -498,22 +499,12 @@ QPlaylistFileParser::FileType QPlaylistFileParser::findPlaylistType(const QStrin
/*
* Delegating
*/
-void QPlaylistFileParser::start(const QMediaContent &media, QIODevice *stream)
+void QPlaylistFileParser::start(const QMediaContent &media, QIODevice *stream, const QString &mimeType)
{
- const QMediaResource &mediaResource = media.canonicalResource();
- const QString &mimeType = mediaResource.mimeType();
-
- if (stream) {
- start(stream, mediaResource.mimeType());
- } else {
- const QNetworkRequest &request = mediaResource.request();
- const QUrl &url = mediaResource.url();
-
- if (request.url().isValid())
- start(request, mimeType);
- else
- start(QNetworkRequest(url), mimeType);
- }
+ if (stream)
+ start(stream, mimeType);
+ else
+ start(media.canonicalRequest(), mimeType);
}
void QPlaylistFileParser::start(QIODevice *stream, const QString &mimeType)
@@ -528,7 +519,7 @@ void QPlaylistFileParser::start(QIODevice *stream, const QString &mimeType)
if (!d->m_currentParser.isNull()) {
abort();
- d->m_pendingJob = { stream, QMediaResource(QUrl(), mimeType) };
+ d->m_pendingJob = { stream, QUrl(), mimeType };
return;
}
@@ -551,7 +542,7 @@ void QPlaylistFileParser::start(const QNetworkRequest& request, const QString &m
if (!d->m_currentParser.isNull()) {
abort();
- d->m_pendingJob = { nullptr, QMediaResource(request, mimeType) };
+ d->m_pendingJob = { nullptr, request, mimeType };
return;
}
@@ -604,7 +595,7 @@ void QPlaylistFileParserPrivate::handleParserFinished()
m_source.reset();
if (m_pendingJob.isValid())
- q->start(m_pendingJob.m_resource, m_pendingJob.m_stream);
+ q->start(m_pendingJob.m_media, m_pendingJob.m_stream, m_pendingJob.m_mimeType);
}
void QPlaylistFileParserPrivate::abort()
diff --git a/src/multimedia/playback/qplaylistfileparser_p.h b/src/multimedia/playback/qplaylistfileparser_p.h
index 927dbb739..cf96ccdbf 100644
--- a/src/multimedia/playback/qplaylistfileparser_p.h
+++ b/src/multimedia/playback/qplaylistfileparser_p.h
@@ -66,7 +66,7 @@ class Q_MULTIMEDIA_EXPORT QPlaylistFileParser : public QObject
{
Q_OBJECT
public:
- QPlaylistFileParser(QObject *parent = 0);
+ QPlaylistFileParser(QObject *parent = nullptr);
~QPlaylistFileParser();
enum FileType
@@ -86,7 +86,7 @@ public:
NetworkError
};
- void start(const QMediaContent &media, QIODevice *stream = 0);
+ void start(const QMediaContent &media, QIODevice *stream = nullptr, const QString &mimeType = QString());
void start(const QNetworkRequest &request, const QString &mimeType = QString());
void abort();
@@ -109,7 +109,7 @@ private:
const QString& mime);
static FileType findPlaylistType(const QString &suffix,
const QString& mime,
- const char *data = 0,
+ const char *data = nullptr,
quint32 size = 0);
Q_DISABLE_COPY(QPlaylistFileParser)
diff --git a/src/multimedia/qmediacontrol.h b/src/multimedia/qmediacontrol.h
index cff42e3ca..48ae44f8a 100644
--- a/src/multimedia/qmediacontrol.h
+++ b/src/multimedia/qmediacontrol.h
@@ -68,7 +68,7 @@ private:
Q_DECLARE_PRIVATE(QMediaControl)
};
-template <typename T> const char *qmediacontrol_iid() { return 0; }
+template <typename T> const char *qmediacontrol_iid() { return nullptr; }
#define Q_MEDIA_DECLARE_CONTROL(Class, IId) \
template <> inline const char *qmediacontrol_iid<Class *>() { return IId; }
diff --git a/src/multimedia/qmediaobject.cpp b/src/multimedia/qmediaobject.cpp
index 71b2d148c..a12cab404 100644
--- a/src/multimedia/qmediaobject.cpp
+++ b/src/multimedia/qmediaobject.cpp
@@ -127,7 +127,7 @@ QMediaObject::~QMediaObject()
QMultimedia::AvailabilityStatus QMediaObject::availability() const
{
- if (d_func()->service == 0)
+ if (d_func()->service == nullptr)
return QMultimedia::ServiceMissing;
if (d_func()->availabilityControl)
@@ -216,7 +216,7 @@ void QMediaObject::unbind(QObject *object)
QMediaBindableInterface *helper = qobject_cast<QMediaBindableInterface*>(object);
if (helper && helper->mediaObject() == this)
- helper->setMediaObject(0);
+ helper->setMediaObject(nullptr);
else
qWarning() << "QMediaObject: Trying to unbind not connected helper object";
}
@@ -395,7 +395,7 @@ void QMediaObject::setupControls()
{
Q_D(QMediaObject);
- if (d->service != 0) {
+ if (d->service != nullptr) {
d->metaDataControl = qobject_cast<QMetaDataReaderControl*>(
d->service->requestControl(QMetaDataReaderControl_iid));
diff --git a/src/multimedia/qmediaobject_p.h b/src/multimedia/qmediaobject_p.h
index 3e663e03d..85caf9a50 100644
--- a/src/multimedia/qmediaobject_p.h
+++ b/src/multimedia/qmediaobject_p.h
@@ -73,7 +73,7 @@ class QMediaObjectPrivate
Q_DECLARE_PUBLIC(QMediaObject)
public:
- QMediaObjectPrivate(): service(0), metaDataControl(0), availabilityControl(0), notifyTimer(0), q_ptr(0) {}
+ QMediaObjectPrivate() : service(nullptr), metaDataControl(nullptr), availabilityControl(nullptr), notifyTimer(nullptr), q_ptr(nullptr) {}
virtual ~QMediaObjectPrivate() {}
void _q_notify();
diff --git a/src/multimedia/qmediapluginloader.cpp b/src/multimedia/qmediapluginloader.cpp
index bd3c525f4..78ba3207f 100644
--- a/src/multimedia/qmediapluginloader.cpp
+++ b/src/multimedia/qmediapluginloader.cpp
@@ -68,11 +68,11 @@ QStringList QMediaPluginLoader::keys() const
QObject* QMediaPluginLoader::instance(QString const &key)
{
if (!m_metadata.contains(key))
- return 0;
+ return nullptr;
int idx = m_metadata.value(key).first().value(QStringLiteral("index")).toDouble();
if (idx < 0)
- return 0;
+ return nullptr;
return m_factoryLoader->instance(idx);
}
@@ -82,6 +82,7 @@ QList<QObject*> QMediaPluginLoader::instances(QString const &key)
if (!m_metadata.contains(key))
return QList<QObject*>();
+ QList<QString> keys;
QList<QObject *> objects;
const auto list = m_metadata.value(key);
for (const QJsonObject &jsonobj : list) {
@@ -91,10 +92,39 @@ QList<QObject*> QMediaPluginLoader::instances(QString const &key)
QObject *object = m_factoryLoader->instance(idx);
if (!objects.contains(object)) {
+ QJsonArray arr = jsonobj.value(QStringLiteral("Keys")).toArray();
+ keys.append(!arr.isEmpty() ? arr.at(0).toString() : QStringLiteral(""));
objects.append(object);
}
}
+ static const bool showDebug = qEnvironmentVariableIntValue("QT_DEBUG_PLUGINS");
+ static const QStringList preferredPlugins =
+ qEnvironmentVariable("QT_MULTIMEDIA_PREFERRED_PLUGINS").split(QLatin1Char(','), QString::SkipEmptyParts);
+ for (int i = preferredPlugins.size() - 1; i >= 0; --i) {
+ auto name = preferredPlugins[i];
+ bool found = false;
+ for (int j = 0; j < keys.size(); ++j) {
+ if (!keys[j].startsWith(name))
+ continue;
+
+ auto obj = objects[j];
+ objects.removeAt(j);
+ objects.prepend(obj);
+ auto k = keys[j];
+ keys.removeAt(j);
+ keys.prepend(k);
+ found = true;
+ break;
+ }
+
+ if (showDebug && !found)
+ qWarning() << "QMediaPluginLoader: pattern" << name << "did not match any loaded plugin";
+ }
+
+ if (showDebug)
+ qDebug() << "QMediaPluginLoader: loaded plugins for key" << key << ":" << keys;
+
return objects;
}
diff --git a/src/multimedia/qmediaresourcepolicy_p.cpp b/src/multimedia/qmediaresourcepolicy_p.cpp
index 1577f11af..14dc15968 100644
--- a/src/multimedia/qmediaresourcepolicy_p.cpp
+++ b/src/multimedia/qmediaresourcepolicy_p.cpp
@@ -84,7 +84,7 @@ QObject* QMediaResourcePolicy::createResourceSet(const QString& interfaceId)
QMediaResourceSetFactoryInterface *factory =
qobject_cast<QMediaResourceSetFactoryInterface*>(resourcePolicyLoader()
->instance(QLatin1String("default")));
- QObject* obj = 0;
+ QObject *obj = nullptr;
if (factory)
obj = factory->create(interfaceId);
diff --git a/src/multimedia/qmediaresourcepolicyplugin_p.h b/src/multimedia/qmediaresourcepolicyplugin_p.h
index 7b53c3b3a..e37551390 100644
--- a/src/multimedia/qmediaresourcepolicyplugin_p.h
+++ b/src/multimedia/qmediaresourcepolicyplugin_p.h
@@ -72,7 +72,7 @@ class Q_MULTIMEDIA_EXPORT QMediaResourcePolicyPlugin : public QObject, public QM
Q_INTERFACES(QMediaResourceSetFactoryInterface)
public:
- QMediaResourcePolicyPlugin(QObject *parent = 0);
+ QMediaResourcePolicyPlugin(QObject *parent = nullptr);
~QMediaResourcePolicyPlugin();
};
diff --git a/src/multimedia/qmediaresourceset_p.h b/src/multimedia/qmediaresourceset_p.h
index a0158877f..5ad4ca7aa 100644
--- a/src/multimedia/qmediaresourceset_p.h
+++ b/src/multimedia/qmediaresourceset_p.h
@@ -80,7 +80,7 @@ Q_SIGNALS:
void availabilityChanged(bool available);
protected:
- QMediaPlayerResourceSetInterface(QObject *parent = 0);
+ QMediaPlayerResourceSetInterface(QObject *parent = nullptr);
};
QT_END_NAMESPACE
diff --git a/src/multimedia/qmediaserviceprovider.cpp b/src/multimedia/qmediaserviceprovider.cpp
index 21e34bd49..4166ff8eb 100644
--- a/src/multimedia/qmediaserviceprovider.cpp
+++ b/src/multimedia/qmediaserviceprovider.cpp
@@ -56,7 +56,7 @@ class QMediaServiceProviderHintPrivate : public QSharedData
{
public:
QMediaServiceProviderHintPrivate(QMediaServiceProviderHint::Type type)
- :type(type), cameraPosition(QCamera::UnspecifiedPosition), features(0)
+ :type(type), cameraPosition(QCamera::UnspecifiedPosition), features(nullptr)
{
}
@@ -309,7 +309,7 @@ class QPluginServiceProvider : public QMediaServiceProvider
QByteArray type;
QMediaServiceProviderPlugin *plugin;
- MediaServiceData() : plugin(0) { }
+ MediaServiceData() : plugin(nullptr) { }
};
QMap<const QMediaService*, MediaServiceData> mediaServiceData;
@@ -329,7 +329,7 @@ public:
}
if (!plugins.isEmpty()) {
- QMediaServiceProviderPlugin *plugin = 0;
+ QMediaServiceProviderPlugin *plugin = nullptr;
switch (hint.type()) {
case QMediaServiceProviderHint::Null:
@@ -423,9 +423,9 @@ public:
break;
}
- if (plugin != 0) {
+ if (plugin != nullptr) {
QMediaService *service = plugin->create(key);
- if (service != 0) {
+ if (service != nullptr) {
MediaServiceData d;
d.type = type;
d.plugin = plugin;
@@ -437,15 +437,15 @@ public:
}
qWarning() << "defaultServiceProvider::requestService(): no service found for -" << key;
- return 0;
+ return nullptr;
}
void releaseService(QMediaService *service) override
{
- if (service != 0) {
+ if (service != nullptr) {
MediaServiceData d = mediaServiceData.take(service);
- if (d.plugin != 0)
+ if (d.plugin != nullptr)
d.plugin->release(service);
}
}
@@ -704,7 +704,7 @@ QMediaServiceProviderHint::Features QMediaServiceProvider::supportedFeatures(con
{
Q_UNUSED(service);
- return QMediaServiceProviderHint::Features(0);
+ return QMediaServiceProviderHint::Features(nullptr);
}
/*!
@@ -798,7 +798,7 @@ int QMediaServiceProvider::cameraOrientation(const QByteArray &device) const
return 0;
}
-static QMediaServiceProvider *qt_defaultMediaServiceProvider = 0;
+static QMediaServiceProvider *qt_defaultMediaServiceProvider = nullptr;
/*!
Sets a media service \a provider as the default.
@@ -817,7 +817,7 @@ void QMediaServiceProvider::setDefaultServiceProvider(QMediaServiceProvider *pro
*/
QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
{
- return qt_defaultMediaServiceProvider != 0
+ return qt_defaultMediaServiceProvider != nullptr
? qt_defaultMediaServiceProvider
: static_cast<QMediaServiceProvider *>(pluginProvider());
}
diff --git a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h b/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h
index 465821cb1..894796dfb 100644
--- a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h
+++ b/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h
@@ -79,9 +79,19 @@ class Q_MULTIMEDIAQUICK_EXPORT QDeclarativeVideoOutput : public QQuickItem
Q_PROPERTY(QRectF sourceRect READ sourceRect NOTIFY sourceRectChanged)
Q_PROPERTY(QRectF contentRect READ contentRect NOTIFY contentRectChanged)
Q_PROPERTY(QQmlListProperty<QAbstractVideoFilter> filters READ filters);
+ Q_PROPERTY(FlushMode flushMode READ flushMode WRITE setFlushMode NOTIFY flushModeChanged)
+ Q_ENUMS(FlushMode)
Q_ENUMS(FillMode)
public:
+
+ enum FlushMode
+ {
+ EmptyFrame,
+ FirstFrame,
+ LastFrame
+ };
+
enum FillMode
{
Stretch = Qt::IgnoreAspectRatio,
@@ -125,6 +135,9 @@ public:
QQmlListProperty<QAbstractVideoFilter> filters();
+ FlushMode flushMode() const { return m_flushMode; }
+ void setFlushMode(FlushMode mode);
+
Q_SIGNALS:
void sourceChanged();
void fillModeChanged(QDeclarativeVideoOutput::FillMode);
@@ -132,6 +145,7 @@ Q_SIGNALS:
void autoOrientationChanged();
void sourceRectChanged();
void contentRectChanged();
+ void flushModeChanged();
protected:
QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
@@ -175,6 +189,7 @@ private:
QScopedPointer<QDeclarativeVideoBackend> m_backend;
QList<QAbstractVideoFilter *> m_filters;
+ FlushMode m_flushMode = EmptyFrame;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/radio/qradiodata.cpp b/src/multimedia/radio/qradiodata.cpp
index 9ed6cb522..d71488b52 100644
--- a/src/multimedia/radio/qradiodata.cpp
+++ b/src/multimedia/radio/qradiodata.cpp
@@ -95,14 +95,14 @@ public:
};
QRadioDataPrivate::QRadioDataPrivate()
- : mediaObject(0)
- , control(0)
+ : mediaObject(nullptr)
+ , control(nullptr)
{}
void QRadioDataPrivate::_q_serviceDestroyed()
{
- mediaObject = 0;
- control = 0;
+ mediaObject = nullptr;
+ control = nullptr;
}
/*!
@@ -211,8 +211,8 @@ bool QRadioData::setMediaObject(QMediaObject *mediaObject)
}
// without QRadioDataControl discard the media object
- d->mediaObject = 0;
- d->control = 0;
+ d->mediaObject = nullptr;
+ d->control = nullptr;
return false;
}
@@ -228,7 +228,7 @@ QMultimedia::AvailabilityStatus QRadioData::availability() const
{
Q_D(const QRadioData);
- if (d->control == 0)
+ if (d->control == nullptr)
return QMultimedia::ServiceMissing;
return d->mediaObject->availability();
@@ -244,7 +244,7 @@ QString QRadioData::stationId() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->stationId();
return QString();
}
@@ -259,7 +259,7 @@ QRadioData::ProgramType QRadioData::programType() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->programType();
return QRadioData::Undefined;
@@ -275,7 +275,7 @@ QString QRadioData::programTypeName() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->programTypeName();
return QString();
}
@@ -290,7 +290,7 @@ QString QRadioData::stationName() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->stationName();
return QString();
}
@@ -305,7 +305,7 @@ QString QRadioData::radioText() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->radioText();
return QString();
}
@@ -320,7 +320,7 @@ bool QRadioData::isAlternativeFrequenciesEnabled() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isAlternativeFrequenciesEnabled();
return false;
}
@@ -329,7 +329,7 @@ void QRadioData::setAlternativeFrequenciesEnabled( bool enabled )
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->setAlternativeFrequenciesEnabled(enabled);
}
@@ -343,7 +343,7 @@ QRadioData::Error QRadioData::error() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->error();
return QRadioData::ResourceError;
}
@@ -357,7 +357,7 @@ QString QRadioData::errorString() const
{
Q_D(const QRadioData);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->errorString();
return QString();
}
diff --git a/src/multimedia/radio/qradiotuner.cpp b/src/multimedia/radio/qradiotuner.cpp
index 3206b4ee5..cc9abdbf8 100644
--- a/src/multimedia/radio/qradiotuner.cpp
+++ b/src/multimedia/radio/qradiotuner.cpp
@@ -88,7 +88,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterRadioTunerMetaTypes)
class QRadioTunerPrivate : public QMediaObjectPrivate
{
public:
- QRadioTunerPrivate():provider(0), control(0), radioData(0) {}
+ QRadioTunerPrivate():provider(nullptr), control(nullptr), radioData(nullptr) {}
QMediaServiceProvider *provider;
QRadioTunerControl* control;
QRadioData *radioData;
@@ -112,9 +112,9 @@ QRadioTuner::QRadioTuner(QObject *parent):
d->provider = QMediaServiceProvider::defaultServiceProvider();
- if (d->service != 0) {
+ if (d->service != nullptr) {
d->control = qobject_cast<QRadioTunerControl*>(d->service->requestControl(QRadioTunerControl_iid));
- if (d->control != 0) {
+ if (d->control != nullptr) {
connect(d->control, SIGNAL(stateChanged(QRadioTuner::State)), SIGNAL(stateChanged(QRadioTuner::State)));
connect(d->control, SIGNAL(bandChanged(QRadioTuner::Band)), SIGNAL(bandChanged(QRadioTuner::Band)));
connect(d->control, SIGNAL(frequencyChanged(int)), SIGNAL(frequencyChanged(int)));
@@ -154,7 +154,7 @@ QRadioTuner::~QRadioTuner()
*/
QMultimedia::AvailabilityStatus QRadioTuner::availability() const
{
- if (d_func()->control == 0)
+ if (d_func()->control == nullptr)
return QMultimedia::ServiceMissing;
if (!d_func()->control->isAntennaConnected())
@@ -187,7 +187,7 @@ QRadioTuner::Band QRadioTuner::band() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->band();
return QRadioTuner::FM;
@@ -202,7 +202,7 @@ int QRadioTuner::frequency() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->frequency();
return 0;
@@ -217,7 +217,7 @@ int QRadioTuner::frequencyStep(QRadioTuner::Band band) const
{
Q_D(const QRadioTuner);
- if(d->control != 0)
+ if (d->control != nullptr)
return d->control->frequencyStep(band);
return 0;
@@ -231,7 +231,7 @@ QPair<int,int> QRadioTuner::frequencyRange(QRadioTuner::Band band) const
{
Q_D(const QRadioTuner);
- if(d->control != 0)
+ if (d->control != nullptr)
return d->control->frequencyRange(band);
return qMakePair<int,int>(0,0);
@@ -246,7 +246,7 @@ bool QRadioTuner::isStereo() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isStereo();
return false;
@@ -262,7 +262,7 @@ QRadioTuner::StereoMode QRadioTuner::stereoMode() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->stereoMode();
return QRadioTuner::Auto;
@@ -272,7 +272,7 @@ void QRadioTuner::setStereoMode(QRadioTuner::StereoMode mode)
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->setStereoMode(mode);
}
@@ -286,7 +286,7 @@ bool QRadioTuner::isBandSupported(QRadioTuner::Band band) const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isBandSupported(band);
return false;
@@ -300,7 +300,7 @@ void QRadioTuner::start()
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->start();
}
@@ -312,7 +312,7 @@ void QRadioTuner::stop()
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->stop();
}
@@ -325,7 +325,7 @@ int QRadioTuner::signalStrength() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->signalStrength();
return 0;
@@ -341,7 +341,7 @@ int QRadioTuner::volume() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->volume();
return 0;
@@ -356,7 +356,7 @@ bool QRadioTuner::isMuted() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isMuted();
return false;
@@ -372,7 +372,7 @@ void QRadioTuner::setBand(QRadioTuner::Band band)
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->setBand(band);
}
@@ -387,7 +387,7 @@ void QRadioTuner::setFrequency(int frequency)
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->setFrequency(frequency);
}
@@ -395,7 +395,7 @@ void QRadioTuner::setVolume(int volume)
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->setVolume(volume);
}
@@ -403,7 +403,7 @@ void QRadioTuner::setMuted(bool muted)
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->setMuted(muted);
}
@@ -418,7 +418,7 @@ bool QRadioTuner::isSearching() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isSearching();
return false;
@@ -432,7 +432,7 @@ bool QRadioTuner::isAntennaConnected() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->isAntennaConnected();
return false;
@@ -448,7 +448,7 @@ void QRadioTuner::searchForward()
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->searchForward();
}
@@ -462,7 +462,7 @@ void QRadioTuner::searchBackward()
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->searchBackward();
}
@@ -490,7 +490,7 @@ void QRadioTuner::searchAllStations(QRadioTuner::SearchMode searchMode)
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->searchAllStations(searchMode);
}
@@ -504,7 +504,7 @@ void QRadioTuner::cancelSearch()
{
Q_D(QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
d->control->cancelSearch();
}
@@ -518,7 +518,7 @@ QRadioTuner::Error QRadioTuner::error() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->error();
return QRadioTuner::ResourceError;
@@ -534,7 +534,7 @@ QString QRadioTuner::errorString() const
{
Q_D(const QRadioTuner);
- if (d->control != 0)
+ if (d->control != nullptr)
return d->control->errorString();
return QString();
diff --git a/src/multimedia/recording/qaudiorecorder.cpp b/src/multimedia/recording/qaudiorecorder.cpp
index 1d3e5ba7f..dcbdabc17 100644
--- a/src/multimedia/recording/qaudiorecorder.cpp
+++ b/src/multimedia/recording/qaudiorecorder.cpp
@@ -96,11 +96,11 @@ public:
void initControls()
{
Q_Q(QAudioRecorder);
- audioInputSelector = 0;
+ audioInputSelector = nullptr;
- QMediaService *service = mediaObject ? mediaObject->service() : 0;
+ QMediaService *service = mediaObject ? mediaObject->service() : nullptr;
- if (service != 0)
+ if (service != nullptr)
audioInputSelector = qobject_cast<QAudioInputSelectorControl*>(service->requestControl(QAudioInputSelectorControl_iid));
if (audioInputSelector) {
@@ -113,8 +113,8 @@ public:
QAudioRecorderPrivate():
QMediaRecorderPrivate(),
- provider(0),
- audioInputSelector(0) {}
+ provider(nullptr),
+ audioInputSelector(nullptr) {}
QMediaServiceProvider *provider;
QAudioInputSelectorControl *audioInputSelector;
@@ -128,7 +128,7 @@ public:
*/
QAudioRecorder::QAudioRecorder(QObject *parent):
- QMediaRecorder(*new QAudioRecorderPrivate, 0, parent)
+ QMediaRecorder(*new QAudioRecorderPrivate, nullptr, parent)
{
Q_D(QAudioRecorder);
d->provider = QMediaServiceProvider::defaultServiceProvider();
@@ -145,9 +145,9 @@ QAudioRecorder::QAudioRecorder(QObject *parent):
QAudioRecorder::~QAudioRecorder()
{
Q_D(QAudioRecorder);
- QMediaService *service = d->mediaObject ? d->mediaObject->service() : 0;
+ QMediaService *service = d->mediaObject ? d->mediaObject->service() : nullptr;
QMediaObject *mediaObject = d->mediaObject;
- setMediaObject(0);
+ setMediaObject(nullptr);
if (service && d->audioInputSelector)
service->releaseControl(d->audioInputSelector);
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp
index 3bab3dada..2b7729481 100644
--- a/src/multimedia/recording/qmediarecorder.cpp
+++ b/src/multimedia/recording/qmediarecorder.cpp
@@ -89,15 +89,15 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterMediaRecorderMetaTypes)
QMediaRecorderPrivate::QMediaRecorderPrivate():
- mediaObject(0),
- control(0),
- formatControl(0),
- audioControl(0),
- videoControl(0),
- metaDataControl(0),
- availabilityControl(0),
+ mediaObject(nullptr),
+ control(nullptr),
+ formatControl(nullptr),
+ audioControl(nullptr),
+ videoControl(nullptr),
+ metaDataControl(nullptr),
+ availabilityControl(nullptr),
settingsChanged(false),
- notifyTimer(0),
+ notifyTimer(nullptr),
state(QMediaRecorder::StoppedState),
error(QMediaRecorder::NoError)
{
@@ -135,13 +135,13 @@ void QMediaRecorderPrivate::_q_error(int error, const QString &errorString)
void QMediaRecorderPrivate::_q_serviceDestroyed()
{
- mediaObject = 0;
- control = 0;
- formatControl = 0;
- audioControl = 0;
- videoControl = 0;
- metaDataControl = 0;
- availabilityControl = 0;
+ mediaObject = nullptr;
+ control = nullptr;
+ formatControl = nullptr;
+ audioControl = nullptr;
+ videoControl = nullptr;
+ metaDataControl = nullptr;
+ availabilityControl = nullptr;
settingsChanged = true;
}
@@ -328,12 +328,12 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
}
}
- d->control = 0;
- d->formatControl = 0;
- d->audioControl = 0;
- d->videoControl = 0;
- d->metaDataControl = 0;
- d->availabilityControl = 0;
+ d->control = nullptr;
+ d->formatControl = nullptr;
+ d->audioControl = nullptr;
+ d->videoControl = nullptr;
+ d->metaDataControl = nullptr;
+ d->availabilityControl = nullptr;
d->mediaObject = object;
@@ -407,7 +407,7 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
}
}
- d->mediaObject = 0;
+ d->mediaObject = nullptr;
return false;
}
@@ -453,7 +453,7 @@ bool QMediaRecorder::isAvailable() const
*/
QMultimedia::AvailabilityStatus QMediaRecorder::availability() const
{
- if (d_func()->control == NULL)
+ if (d_func()->control == nullptr)
return QMultimedia::ServiceMissing;
if (d_func()->availabilityControl)
diff --git a/src/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/video/qabstractvideobuffer.cpp
index 50e38a98c..f0dd6d2eb 100644
--- a/src/multimedia/video/qabstractvideobuffer.cpp
+++ b/src/multimedia/video/qabstractvideobuffer.cpp
@@ -126,7 +126,7 @@ int QAbstractVideoBufferPrivate::map(
Constructs an abstract video buffer of the given \a type.
*/
QAbstractVideoBuffer::QAbstractVideoBuffer(HandleType type)
- : d_ptr(0)
+ : d_ptr(nullptr)
, m_type(type)
{
}
@@ -328,7 +328,7 @@ uchar *QAbstractPlanarVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPe
*bytesPerLine = strides[0];
return data[0];
} else {
- return 0;
+ return nullptr;
}
}
diff --git a/src/multimedia/video/qabstractvideobuffer_p.h b/src/multimedia/video/qabstractvideobuffer_p.h
index 9e3ced9b5..4877d3120 100644
--- a/src/multimedia/video/qabstractvideobuffer_p.h
+++ b/src/multimedia/video/qabstractvideobuffer_p.h
@@ -64,7 +64,7 @@ class QAbstractVideoBufferPrivate
{
public:
QAbstractVideoBufferPrivate()
- : q_ptr(0)
+ : q_ptr(nullptr)
{}
virtual ~QAbstractVideoBufferPrivate()
diff --git a/src/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/video/qimagevideobuffer.cpp
index f407e02d0..28dacefc6 100644
--- a/src/multimedia/video/qimagevideobuffer.cpp
+++ b/src/multimedia/video/qimagevideobuffer.cpp
@@ -96,7 +96,7 @@ uchar *QImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
return d->image.bits();
} else {
- return 0;
+ return nullptr;
}
}
diff --git a/src/multimedia/video/qmemoryvideobuffer.cpp b/src/multimedia/video/qmemoryvideobuffer.cpp
index 1b52bb7cd..e05210d9d 100644
--- a/src/multimedia/video/qmemoryvideobuffer.cpp
+++ b/src/multimedia/video/qmemoryvideobuffer.cpp
@@ -112,7 +112,7 @@ uchar *QMemoryVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
return reinterpret_cast<uchar *>(d->data.data());
} else {
- return 0;
+ return nullptr;
}
}
diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp
index bbb87b63b..867bf1092 100644
--- a/src/multimedia/video/qvideoframe.cpp
+++ b/src/multimedia/video/qvideoframe.cpp
@@ -75,7 +75,7 @@ public:
, planeCount(0)
, pixelFormat(QVideoFrame::Format_Invalid)
, fieldType(QVideoFrame::ProgressiveFrame)
- , buffer(0)
+ , buffer(nullptr)
, mappedCount(0)
{
memset(data, 0, sizeof(data));
@@ -90,7 +90,7 @@ public:
, planeCount(0)
, pixelFormat(format)
, fieldType(QVideoFrame::ProgressiveFrame)
- , buffer(0)
+ , buffer(nullptr)
, mappedCount(0)
{
memset(data, 0, sizeof(data));
@@ -195,6 +195,9 @@ private:
\value Format_BGRA32_Premultiplied
The frame is stored using a premultiplied 32bit BGRA format.
+ \value Format_ABGR32
+ The frame is stored using a 32-bit ABGR format (0xAABBGGRR).
+
\value Format_BGR32
The frame is stored using a 32-bit BGR format (0xBBGGRRff).
@@ -409,7 +412,7 @@ QVideoFrame::~QVideoFrame()
*/
bool QVideoFrame::isValid() const
{
- return d->buffer != 0;
+ return d->buffer != nullptr;
}
/*!
@@ -485,7 +488,7 @@ void QVideoFrame::setFieldType(QVideoFrame::FieldType field)
bool QVideoFrame::isMapped() const
{
- return d->buffer != 0 && d->buffer->mapMode() != QAbstractVideoBuffer::NotMapped;
+ return d->buffer != nullptr && d->buffer->mapMode() != QAbstractVideoBuffer::NotMapped;
}
/*!
@@ -504,7 +507,7 @@ bool QVideoFrame::isMapped() const
*/
bool QVideoFrame::isWritable() const
{
- return d->buffer != 0 && (d->buffer->mapMode() & QAbstractVideoBuffer::WriteOnly);
+ return d->buffer != nullptr && (d->buffer->mapMode() & QAbstractVideoBuffer::WriteOnly);
}
/*!
@@ -520,7 +523,7 @@ bool QVideoFrame::isWritable() const
*/
bool QVideoFrame::isReadable() const
{
- return d->buffer != 0 && (d->buffer->mapMode() & QAbstractVideoBuffer::ReadOnly);
+ return d->buffer != nullptr && (d->buffer->mapMode() & QAbstractVideoBuffer::ReadOnly);
}
/*!
@@ -530,7 +533,7 @@ bool QVideoFrame::isReadable() const
*/
QAbstractVideoBuffer::MapMode QVideoFrame::mapMode() const
{
- return d->buffer != 0 ? d->buffer->mapMode() : QAbstractVideoBuffer::NotMapped;
+ return d->buffer != nullptr ? d->buffer->mapMode() : QAbstractVideoBuffer::NotMapped;
}
/*!
@@ -584,7 +587,7 @@ bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
}
}
- Q_ASSERT(d->data[0] == 0);
+ Q_ASSERT(d->data[0] == nullptr);
Q_ASSERT(d->bytesPerLine[0] == 0);
Q_ASSERT(d->planeCount == 0);
Q_ASSERT(d->mappedBytes == 0);
@@ -606,6 +609,7 @@ bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
case Format_ARGB8565_Premultiplied:
case Format_BGRA32:
case Format_BGRA32_Premultiplied:
+ case Format_ABGR32:
case Format_BGR32:
case Format_BGR24:
case Format_BGR565:
@@ -763,7 +767,7 @@ uchar *QVideoFrame::bits()
*/
uchar *QVideoFrame::bits(int plane)
{
- return plane >= 0 && plane < d->planeCount ? d->data[plane] : 0;
+ return plane >= 0 && plane < d->planeCount ? d->data[plane] : nullptr;
}
/*!
@@ -794,7 +798,7 @@ const uchar *QVideoFrame::bits() const
*/
const uchar *QVideoFrame::bits(int plane) const
{
- return plane >= 0 && plane < d->planeCount ? d->data[plane] : 0;
+ return plane >= 0 && plane < d->planeCount ? d->data[plane] : nullptr;
}
/*!
@@ -832,7 +836,7 @@ int QVideoFrame::planeCount() const
*/
QVariant QVideoFrame::handle() const
{
- return d->buffer != 0 ? d->buffer->handle() : QVariant();
+ return d->buffer != nullptr ? d->buffer->handle() : QVariant();
}
/*!
@@ -1035,6 +1039,7 @@ static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = {
/* Format_ARGB8565_Premultiplied */ nullptr, // Not needed
/* Format_BGRA32 */ qt_convert_BGRA32_to_ARGB32,
/* Format_BGRA32_Premultiplied */ qt_convert_BGRA32_to_ARGB32,
+ /* Format_ABGR32 */ nullptr,
/* Format_BGR32 */ qt_convert_BGRA32_to_ARGB32,
/* Format_BGR24 */ qt_convert_BGR24_to_ARGB32,
/* Format_BGR565 */ qt_convert_BGR565_to_ARGB32,
@@ -1102,7 +1107,7 @@ QImage qt_imageFromVideoFrame(const QVideoFrame &f)
// Formats supported by QImage don't need conversion
QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(frame.pixelFormat());
if (imageFormat != QImage::Format_Invalid) {
- result = QImage(frame.bits(), frame.width(), frame.height(), imageFormat).copy();
+ result = QImage(frame.bits(), frame.width(), frame.height(), frame.bytesPerLine(), imageFormat).copy();
}
// Load from JPG
@@ -1157,6 +1162,8 @@ QDebug operator<<(QDebug dbg, QVideoFrame::PixelFormat pf)
return dbg << "Format_BGRA32";
case QVideoFrame::Format_BGRA32_Premultiplied:
return dbg << "Format_BGRA32_Premultiplied";
+ case QVideoFrame::Format_ABGR32:
+ return dbg << "Format_ABGR32";
case QVideoFrame::Format_BGR32:
return dbg << "Format_BGR32";
case QVideoFrame::Format_BGR24:
diff --git a/src/multimedia/video/qvideoframe.h b/src/multimedia/video/qvideoframe.h
index be7517c7c..2d906cb7c 100644
--- a/src/multimedia/video/qvideoframe.h
+++ b/src/multimedia/video/qvideoframe.h
@@ -75,6 +75,7 @@ public:
Format_ARGB8565_Premultiplied,
Format_BGRA32,
Format_BGRA32_Premultiplied,
+ Format_ABGR32,
Format_BGR32,
Format_BGR24,
Format_BGR565,
diff --git a/src/multimedia/video/qvideooutputorientationhandler_p.h b/src/multimedia/video/qvideooutputorientationhandler_p.h
index b5cfc089b..d04a781ab 100644
--- a/src/multimedia/video/qvideooutputorientationhandler_p.h
+++ b/src/multimedia/video/qvideooutputorientationhandler_p.h
@@ -61,7 +61,7 @@ class Q_MULTIMEDIA_EXPORT QVideoOutputOrientationHandler : public QObject
{
Q_OBJECT
public:
- explicit QVideoOutputOrientationHandler(QObject *parent = 0);
+ explicit QVideoOutputOrientationHandler(QObject *parent = nullptr);
int currentOrientation() const;
diff --git a/src/multimedia/video/qvideoprobe.cpp b/src/multimedia/video/qvideoprobe.cpp
index b1531df63..f7995b297 100644
--- a/src/multimedia/video/qvideoprobe.cpp
+++ b/src/multimedia/video/qvideoprobe.cpp
@@ -161,7 +161,7 @@ bool QVideoProbe::setSource(QMediaObject *source)
}
}
- return (!source || d->probee != 0);
+ return (!source || d->probee != nullptr);
}
/*!
@@ -179,7 +179,7 @@ bool QVideoProbe::setSource(QMediaObject *source)
*/
bool QVideoProbe::setSource(QMediaRecorder *mediaRecorder)
{
- QMediaObject *source = mediaRecorder ? mediaRecorder->mediaObject() : 0;
+ QMediaObject *source = mediaRecorder ? mediaRecorder->mediaObject() : nullptr;
bool result = setSource(source);
if (!mediaRecorder)
@@ -198,7 +198,7 @@ bool QVideoProbe::setSource(QMediaRecorder *mediaRecorder)
*/
bool QVideoProbe::isActive() const
{
- return d->probee != 0;
+ return d->probee != nullptr;
}
/*!
diff --git a/src/multimedia/video/qvideosurfaceoutput.cpp b/src/multimedia/video/qvideosurfaceoutput.cpp
index feb956dd0..ebc9e1cb6 100644
--- a/src/multimedia/video/qvideosurfaceoutput.cpp
+++ b/src/multimedia/video/qvideosurfaceoutput.cpp
@@ -55,7 +55,7 @@ QVideoSurfaceOutput::QVideoSurfaceOutput(QObject*parent)
QVideoSurfaceOutput::~QVideoSurfaceOutput()
{
if (m_control) {
- m_control.data()->setSurface(0);
+ m_control.data()->setSurface(nullptr);
m_service.data()->releaseControl(m_control.data());
}
}
@@ -76,7 +76,7 @@ void QVideoSurfaceOutput::setVideoSurface(QAbstractVideoSurface *surface)
bool QVideoSurfaceOutput::setMediaObject(QMediaObject *object)
{
if (m_control) {
- m_control.data()->setSurface(0);
+ m_control.data()->setSurface(nullptr);
m_service.data()->releaseControl(m_control.data());
}
m_control.clear();
diff --git a/src/multimedia/video/qvideosurfaceoutput_p.h b/src/multimedia/video/qvideosurfaceoutput_p.h
index a1b24abbf..5d050bcb0 100644
--- a/src/multimedia/video/qvideosurfaceoutput_p.h
+++ b/src/multimedia/video/qvideosurfaceoutput_p.h
@@ -67,7 +67,7 @@ class QVideoSurfaceOutput : public QObject, public QMediaBindableInterface
Q_OBJECT
Q_INTERFACES(QMediaBindableInterface)
public:
- QVideoSurfaceOutput(QObject*parent = 0);
+ QVideoSurfaceOutput(QObject *parent = nullptr);
~QVideoSurfaceOutput();
QMediaObject *mediaObject() const override;
diff --git a/src/multimediawidgets/qvideowidget.cpp b/src/multimediawidgets/qvideowidget.cpp
index ab552b90d..ee40151af 100644
--- a/src/multimediawidgets/qvideowidget.cpp
+++ b/src/multimediawidgets/qvideowidget.cpp
@@ -623,7 +623,7 @@ QVideoWidget::QVideoWidget(QVideoWidgetPrivate &dd, QWidget *parent)
d_ptr->q_ptr = this;
QPalette palette = QWidget::palette();
- palette.setColor(QPalette::Background, Qt::black);
+ palette.setColor(QPalette::Window, Qt::black);
setPalette(palette);
}
diff --git a/src/plugins/android/src/common/qandroidvideooutput.cpp b/src/plugins/android/src/common/qandroidvideooutput.cpp
index b425b9d89..eeaf70982 100644
--- a/src/plugins/android/src/common/qandroidvideooutput.cpp
+++ b/src/plugins/android/src/common/qandroidvideooutput.cpp
@@ -314,7 +314,7 @@ void QAndroidTextureVideoOutput::onFrameAvailable()
return;
QAbstractVideoBuffer *buffer = new AndroidTextureVideoBuffer(this, m_nativeSize);
- QVideoFrame frame(buffer, m_nativeSize, QVideoFrame::Format_BGR32);
+ QVideoFrame frame(buffer, m_nativeSize, QVideoFrame::Format_ABGR32);
if (m_surface->isActive() && (m_surface->surfaceFormat().pixelFormat() != frame.pixelFormat()
|| m_surface->surfaceFormat().frameSize() != frame.size())) {
diff --git a/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp b/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp
index e69c9c16e..d70c8100b 100644
--- a/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp
+++ b/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp
@@ -48,7 +48,7 @@ QList<QVideoFrame::PixelFormat> QAndroidSGVideoNodeFactoryPlugin::supportedPixel
QList<QVideoFrame::PixelFormat> pixelFormats;
if (handleType == QAbstractVideoBuffer::GLTextureHandle)
- pixelFormats.append(QVideoFrame::Format_BGR32);
+ pixelFormats.append(QVideoFrame::Format_ABGR32);
return pixelFormats;
}
diff --git a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
index 4ba987e53..94aa6a8f0 100644
--- a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
@@ -56,7 +56,7 @@ public:
QStringList supportedAudioCodecs() const override;
QString codecDescription(const QString &codecName) const override;
- QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override;
+ QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = nullptr) const override;
QAudioEncoderSettings audioSettings() const override;
void setAudioSettings(const QAudioEncoderSettings &settings) override;
diff --git a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
index 80669d242..a902a71f9 100644
--- a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
+++ b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
@@ -54,16 +54,16 @@ class AVFAudioInputSelectorControl : public QAudioInputSelectorControl
{
Q_OBJECT
public:
- AVFAudioInputSelectorControl(AVFCameraService *service, QObject *parent = 0);
+ AVFAudioInputSelectorControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFAudioInputSelectorControl();
- QList<QString> availableInputs() const;
- QString inputDescription(const QString &name) const;
- QString defaultInput() const;
- QString activeInput() const;
+ QList<QString> availableInputs() const override;
+ QString inputDescription(const QString &name) const override;
+ QString defaultInput() const override;
+ QString activeInput() const override;
public Q_SLOTS:
- void setActiveInput(const QString &name);
+ void setActiveInput(const QString &name) override;
public:
//device changed since the last createCaptureDevice()
diff --git a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
index b6228290d..de29fd970 100644
--- a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
+++ b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
@@ -102,7 +102,7 @@ void AVFAudioInputSelectorControl::setActiveInput(const QString &name)
AVCaptureDevice *AVFAudioInputSelectorControl::createCaptureDevice()
{
m_dirty = false;
- AVCaptureDevice *device = 0;
+ AVCaptureDevice *device = nullptr;
if (!m_activeInput.isEmpty()) {
device = [AVCaptureDevice deviceWithUniqueID:
diff --git a/src/plugins/avfoundation/camera/avfcameracontrol.h b/src/plugins/avfoundation/camera/avfcameracontrol.h
index 7489e6cb3..df371e864 100644
--- a/src/plugins/avfoundation/camera/avfcameracontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameracontrol.h
@@ -53,19 +53,19 @@ class AVFCameraControl : public QCameraControl
{
Q_OBJECT
public:
- AVFCameraControl(AVFCameraService *service, QObject *parent = 0);
+ AVFCameraControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraControl();
- QCamera::State state() const;
- void setState(QCamera::State state);
+ QCamera::State state() const override;
+ void setState(QCamera::State state) override;
- QCamera::Status status() const;
+ QCamera::Status status() const override;
- QCamera::CaptureModes captureMode() const;
- void setCaptureMode(QCamera::CaptureModes);
- bool isCaptureModeSupported(QCamera::CaptureModes mode) const;
+ QCamera::CaptureModes captureMode() const override;
+ void setCaptureMode(QCamera::CaptureModes) override;
+ bool isCaptureModeSupported(QCamera::CaptureModes mode) const override;
- bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const;
+ bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override;
private Q_SLOTS:
void updateStatus();
diff --git a/src/plugins/avfoundation/camera/avfcameradevicecontrol.h b/src/plugins/avfoundation/camera/avfcameradevicecontrol.h
index ac84b1983..0a16c0408 100644
--- a/src/plugins/avfoundation/camera/avfcameradevicecontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameradevicecontrol.h
@@ -54,19 +54,19 @@ class AVFCameraDeviceControl : public QVideoDeviceSelectorControl
{
Q_OBJECT
public:
- AVFCameraDeviceControl(AVFCameraService *service, QObject *parent = 0);
+ AVFCameraDeviceControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraDeviceControl();
- int deviceCount() const;
+ int deviceCount() const override;
- QString deviceName(int index) const;
- QString deviceDescription(int index) const;
+ QString deviceName(int index) const override;
+ QString deviceDescription(int index) const override;
- int defaultDevice() const;
- int selectedDevice() const;
+ int defaultDevice() const override;
+ int selectedDevice() const override;
public Q_SLOTS:
- void setSelectedDevice(int index);
+ void setSelectedDevice(int index) override;
public:
//device changed since the last createCaptureDevice()
diff --git a/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm b/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm
index 87180859a..907373b61 100644
--- a/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm
@@ -105,7 +105,7 @@ void AVFCameraDeviceControl::setSelectedDevice(int index)
AVCaptureDevice *AVFCameraDeviceControl::createCaptureDevice()
{
m_dirty = false;
- AVCaptureDevice *device = 0;
+ AVCaptureDevice *device = nullptr;
QString deviceId = deviceName(m_selectedDevice);
if (!deviceId.isEmpty()) {
diff --git a/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm b/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm
index 134c88e68..42303ce17 100644
--- a/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm
@@ -50,7 +50,7 @@
AVFCameraFlashControl::AVFCameraFlashControl(AVFCameraService *service)
: m_service(service)
- , m_session(0)
+ , m_session(nullptr)
, m_supportedModes(QCameraExposure::FlashOff)
, m_flashMode(QCameraExposure::FlashOff)
{
diff --git a/src/plugins/avfoundation/camera/avfcamerainfocontrol.h b/src/plugins/avfoundation/camera/avfcamerainfocontrol.h
index 806a51cbd..c3aa11918 100644
--- a/src/plugins/avfoundation/camera/avfcamerainfocontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerainfocontrol.h
@@ -48,10 +48,10 @@ class AVFCameraInfoControl : public QCameraInfoControl
{
Q_OBJECT
public:
- explicit AVFCameraInfoControl(QObject *parent = 0);
+ explicit AVFCameraInfoControl(QObject *parent = nullptr);
- QCamera::Position cameraPosition(const QString &deviceName) const;
- int cameraOrientation(const QString &deviceName) const;
+ QCamera::Position cameraPosition(const QString &deviceName) const override;
+ int cameraOrientation(const QString &deviceName) const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h b/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h
index 1b00043d0..cba29c394 100644
--- a/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h
@@ -50,15 +50,15 @@ class AVFCameraMetaDataControl : public QMetaDataWriterControl
{
Q_OBJECT
public:
- AVFCameraMetaDataControl(AVFCameraService *service, QObject *parent=0);
+ AVFCameraMetaDataControl(AVFCameraService *service, QObject *parent = nullptr);
virtual ~AVFCameraMetaDataControl();
- bool isMetaDataAvailable() const;
- bool isWritable() const;
+ bool isMetaDataAvailable() const override;
+ bool isWritable() const override;
- QVariant metaData(const QString &key) const;
- void setMetaData(const QString &key, const QVariant &value);
- QStringList availableMetaData() const;
+ QVariant metaData(const QString &key) const override;
+ void setMetaData(const QString &key, const QVariant &value) override;
+ QStringList availableMetaData() const override;
private:
QMap<QString, QVariant> m_tags;
diff --git a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h
index e0966a027..3ef3d07d4 100644
--- a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h
@@ -58,11 +58,11 @@ class AVFCameraRendererControl : public QVideoRendererControl
{
Q_OBJECT
public:
- AVFCameraRendererControl(QObject *parent = 0);
+ AVFCameraRendererControl(QObject *parent = nullptr);
~AVFCameraRendererControl();
- QAbstractVideoSurface *surface() const;
- void setSurface(QAbstractVideoSurface *surface);
+ QAbstractVideoSurface *surface() const override;
+ void setSurface(QAbstractVideoSurface *surface) override;
void configureAVCaptureSession(AVFCameraSession *cameraSession);
void syncHandleViewfinderFrame(const QVideoFrame &frame);
diff --git a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm
index e4f234b7e..0359f5d0a 100644
--- a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm
@@ -65,7 +65,7 @@ public:
: QAbstractPlanarVideoBuffer(renderer->supportsTextures()
&& CVPixelBufferGetPixelFormatType(buffer) == kCVPixelFormatType_32BGRA
? GLTextureHandle : NoHandle)
- , m_texture(0)
+ , m_texture(nullptr)
, m_renderer(renderer)
#endif
, m_buffer(buffer)
@@ -117,8 +117,8 @@ public:
}
if (data) {
- data[0] = (uchar *)CVPixelBufferGetBaseAddressOfPlane(m_buffer, 0);
- data[1] = (uchar *)CVPixelBufferGetBaseAddressOfPlane(m_buffer, 1);
+ data[0] = static_cast<uchar*>(CVPixelBufferGetBaseAddressOfPlane(m_buffer, 0));
+ data[1] = static_cast<uchar*>(CVPixelBufferGetBaseAddressOfPlane(m_buffer, 1));
}
m_mode = mode;
@@ -140,9 +140,9 @@ public:
*bytesPerLine = CVPixelBufferGetBytesPerRow(m_buffer);
m_mode = mode;
- return (uchar*)CVPixelBufferGetBaseAddress(m_buffer);
+ return static_cast<uchar*>(CVPixelBufferGetBaseAddress(m_buffer));
} else {
- return 0;
+ return nullptr;
}
}
@@ -163,9 +163,9 @@ public:
if (!m_renderer->m_textureCache) {
CVReturn err = CVOpenGLESTextureCacheCreate(kCFAllocatorDefault,
- NULL,
+ nullptr,
[EAGLContext currentContext],
- NULL,
+ nullptr,
&m_renderer->m_textureCache);
if (err != kCVReturnSuccess)
@@ -178,7 +178,7 @@ public:
CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,
m_renderer->m_textureCache,
m_buffer,
- NULL,
+ nullptr,
GL_TEXTURE_2D,
GL_RGBA,
CVPixelBufferGetWidth(m_buffer),
@@ -211,10 +211,6 @@ private:
@interface AVFCaptureFramesDelegate : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate>
-{
-@private
- AVFCameraRendererControl *m_renderer;
-}
- (AVFCaptureFramesDelegate *) initWithRenderer:(AVFCameraRendererControl*)renderer;
@@ -225,6 +221,10 @@ private:
@end
@implementation AVFCaptureFramesDelegate
+{
+@private
+ AVFCameraRendererControl *m_renderer;
+}
- (AVFCaptureFramesDelegate *) initWithRenderer:(AVFCameraRendererControl*)renderer
{
@@ -266,11 +266,11 @@ private:
AVFCameraRendererControl::AVFCameraRendererControl(QObject *parent)
: QVideoRendererControl(parent)
- , m_surface(0)
+ , m_surface(nullptr)
, m_supportsTextures(false)
, m_needsHorizontalMirroring(false)
#ifdef Q_OS_IOS
- , m_textureCache(0)
+ , m_textureCache(nullptr)
#endif
{
m_viewfinderFramesDelegate = [[AVFCaptureFramesDelegate alloc] initWithRenderer:this];
@@ -317,7 +317,7 @@ void AVFCameraRendererControl::configureAVCaptureSession(AVFCameraSession *camer
m_videoDataOutput = [[[AVCaptureVideoDataOutput alloc] init] autorelease];
// Configure video output
- m_delegateQueue = dispatch_queue_create("vf_queue", NULL);
+ m_delegateQueue = dispatch_queue_create("vf_queue", nullptr);
[m_videoDataOutput
setSampleBufferDelegate:m_viewfinderFramesDelegate
queue:m_delegateQueue];
diff --git a/src/plugins/avfoundation/camera/avfcameraservice.h b/src/plugins/avfoundation/camera/avfcameraservice.h
index 9ce637ee3..2969882b0 100644
--- a/src/plugins/avfoundation/camera/avfcameraservice.h
+++ b/src/plugins/avfoundation/camera/avfcameraservice.h
@@ -75,7 +75,7 @@ class AVFCameraService : public QMediaService
{
Q_OBJECT
public:
- AVFCameraService(QObject *parent = 0);
+ AVFCameraService(QObject *parent = nullptr);
~AVFCameraService();
QMediaControl* requestControl(const char *name);
diff --git a/src/plugins/avfoundation/camera/avfcameraservice.mm b/src/plugins/avfoundation/camera/avfcameraservice.mm
index 71ea31e5b..33b4b72aa 100644
--- a/src/plugins/avfoundation/camera/avfcameraservice.mm
+++ b/src/plugins/avfoundation/camera/avfcameraservice.mm
@@ -74,7 +74,7 @@ QT_USE_NAMESPACE
AVFCameraService::AVFCameraService(QObject *parent):
QMediaService(parent),
- m_videoOutput(0)
+ m_videoOutput(nullptr)
{
m_session = new AVFCameraSession(this);
m_cameraControl = new AVFCameraControl(this);
@@ -93,12 +93,12 @@ AVFCameraService::AVFCameraService(QObject *parent):
#endif
m_imageCaptureControl = new AVFImageCaptureControl(this);
m_cameraFocusControl = new AVFCameraFocusControl(this);
- m_cameraExposureControl = 0;
+ m_cameraExposureControl = nullptr;
#ifdef Q_OS_IOS
m_cameraExposureControl = new AVFCameraExposureControl(this);
#endif
- m_cameraZoomControl = 0;
+ m_cameraZoomControl = nullptr;
#ifdef Q_OS_IOS
m_cameraZoomControl = new AVFCameraZoomControl(this);
#endif
@@ -120,9 +120,9 @@ AVFCameraService::~AVFCameraService()
#endif
if (m_videoOutput) {
- m_session->setVideoOutput(0);
+ m_session->setVideoOutput(nullptr);
delete m_videoOutput;
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
}
//delete controls before session,
@@ -199,7 +199,7 @@ QMediaControl *AVFCameraService::requestControl(const char *name)
return m_mediaContainerControl;
if (qstrcmp(name,QMediaVideoProbeControl_iid) == 0) {
- AVFMediaVideoProbeControl *videoProbe = 0;
+ AVFMediaVideoProbeControl *videoProbe = nullptr;
videoProbe = new AVFMediaVideoProbeControl(this);
m_session->addProbe(videoProbe);
return videoProbe;
@@ -220,7 +220,7 @@ QMediaControl *AVFCameraService::requestControl(const char *name)
}
}
- return 0;
+ return nullptr;
}
void AVFCameraService::releaseControl(QMediaControl *control)
@@ -230,9 +230,9 @@ void AVFCameraService::releaseControl(QMediaControl *control)
m_session->removeProbe(videoProbe);
delete videoProbe;
} else if (m_videoOutput == control) {
- m_session->setVideoOutput(0);
+ m_session->setVideoOutput(nullptr);
delete m_videoOutput;
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
}
}
diff --git a/src/plugins/avfoundation/camera/avfcameraserviceplugin.h b/src/plugins/avfoundation/camera/avfcameraserviceplugin.h
index aec9767a7..bd5f83249 100644
--- a/src/plugins/avfoundation/camera/avfcameraserviceplugin.h
+++ b/src/plugins/avfoundation/camera/avfcameraserviceplugin.h
@@ -60,15 +60,15 @@ class AVFServicePlugin : public QMediaServiceProviderPlugin,
public:
AVFServicePlugin();
- QMediaService* create(QString const& key);
- void release(QMediaService *service);
+ QMediaService* create(QString const &key) override;
+ void release(QMediaService *service) override;
- QByteArray defaultDevice(const QByteArray &service) const;
- QList<QByteArray> devices(const QByteArray &service) const;
- QString deviceDescription(const QByteArray &service, const QByteArray &device);
+ QByteArray defaultDevice(const QByteArray &service) const override;
+ QList<QByteArray> devices(const QByteArray &service) const override;
+ QString deviceDescription(const QByteArray &service, const QByteArray &device) override;
- QCamera::Position cameraPosition(const QByteArray &device) const;
- int cameraOrientation(const QByteArray &device) const;
+ QCamera::Position cameraPosition(const QByteArray &device) const override;
+ int cameraOrientation(const QByteArray &device) const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm b/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm
index 434d28683..08bd8c9bd 100644
--- a/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm
+++ b/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm
@@ -59,7 +59,7 @@ QMediaService* AVFServicePlugin::create(QString const& key)
else
qWarning() << "unsupported key:" << key;
- return 0;
+ return nullptr;
}
void AVFServicePlugin::release(QMediaService *service)
diff --git a/src/plugins/avfoundation/camera/avfcamerasession.h b/src/plugins/avfoundation/camera/avfcamerasession.h
index 3f90f1f7f..103ec0e17 100644
--- a/src/plugins/avfoundation/camera/avfcamerasession.h
+++ b/src/plugins/avfoundation/camera/avfcamerasession.h
@@ -70,7 +70,7 @@ class AVFCameraSession : public QObject
{
Q_OBJECT
public:
- AVFCameraSession(AVFCameraService *service, QObject *parent = 0);
+ AVFCameraSession(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraSession();
static int defaultCameraIndex();
diff --git a/src/plugins/avfoundation/camera/avfcamerasession.mm b/src/plugins/avfoundation/camera/avfcamerasession.mm
index 8e3436d39..8ed627774 100644
--- a/src/plugins/avfoundation/camera/avfcamerasession.mm
+++ b/src/plugins/avfoundation/camera/avfcamerasession.mm
@@ -64,11 +64,6 @@ int AVFCameraSession::m_defaultCameraIndex;
QList<AVFCameraInfo> AVFCameraSession::m_cameraDevices;
@interface AVFCameraSessionObserver : NSObject
-{
-@private
- AVFCameraSession *m_session;
- AVCaptureSession *m_captureSession;
-}
- (AVFCameraSessionObserver *) initWithCameraSession:(AVFCameraSession*)session;
- (void) processRuntimeError:(NSNotification *)notification;
@@ -78,6 +73,11 @@ QList<AVFCameraInfo> AVFCameraSession::m_cameraDevices;
@end
@implementation AVFCameraSessionObserver
+{
+@private
+ AVFCameraSession *m_session;
+ AVCaptureSession *m_captureSession;
+}
- (AVFCameraSessionObserver *) initWithCameraSession:(AVFCameraSession*)session
{
@@ -262,7 +262,7 @@ AVCaptureDevice *AVFCameraSession::videoCaptureDevice() const
if (m_videoInput)
return m_videoInput.device;
- return 0;
+ return nullptr;
}
QCamera::State AVFCameraSession::state() const
@@ -362,7 +362,7 @@ void AVFCameraSession::attachVideoInputDevice()
if (m_videoInput) {
[m_captureSession removeInput:m_videoInput];
[m_videoInput release];
- m_videoInput = 0;
+ m_videoInput = nullptr;
m_activeCameraInfo = AVFCameraInfo();
}
diff --git a/src/plugins/avfoundation/camera/avfcamerautility.h b/src/plugins/avfoundation/camera/avfcamerautility.h
index ba1bd3861..370302b1c 100644
--- a/src/plugins/avfoundation/camera/avfcamerautility.h
+++ b/src/plugins/avfoundation/camera/avfcamerautility.h
@@ -118,7 +118,7 @@ template<>
class AVFScopedPointer<dispatch_queue_t>
{
public:
- AVFScopedPointer() : m_queue(0) {}
+ AVFScopedPointer() : m_queue(nullptr) {}
explicit AVFScopedPointer(dispatch_queue_t q) : m_queue(q) {}
~AVFScopedPointer()
@@ -138,7 +138,7 @@ public:
return m_queue;
}
- void reset(dispatch_queue_t q = 0)
+ void reset(dispatch_queue_t q = nullptr)
{
if (m_queue)
dispatch_release(m_queue);
@@ -148,7 +148,7 @@ public:
private:
dispatch_queue_t m_queue;
- Q_DISABLE_COPY(AVFScopedPointer);
+ Q_DISABLE_COPY(AVFScopedPointer)
};
typedef QPair<qreal, qreal> AVFPSRange;
diff --git a/src/plugins/avfoundation/camera/avfcamerautility.mm b/src/plugins/avfoundation/camera/avfcamerautility.mm
index 8a2254c2e..e68fc703b 100644
--- a/src/plugins/avfoundation/camera/avfcamerautility.mm
+++ b/src/plugins/avfoundation/camera/avfcamerautility.mm
@@ -240,7 +240,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev
Q_ASSERT(!request.isNull() && request.isValid());
if (!captureDevice.formats || !captureDevice.formats.count)
- return 0;
+ return nullptr;
QVector<AVCaptureDeviceFormat *> formats(qt_unique_device_formats(captureDevice, filter));
@@ -254,7 +254,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev
}
if (!qt_area_sane(request))
- return 0;
+ return nullptr;
typedef QPair<QSize, AVCaptureDeviceFormat *> FormatPair;
@@ -272,7 +272,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev
}
if (!pairs.size())
- return 0;
+ return nullptr;
AVCaptureDeviceFormat *best = pairs[0].second;
QSize next(pairs[0].first);
diff --git a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm
index 0054a8d01..a77d7de03 100644
--- a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm
@@ -167,7 +167,7 @@ QCameraViewfinderSettings AVFCameraViewfinderSettingsControl2::viewfinderSetting
settings.setMinimumFrameRate(fps.first);
settings.setMaximumFrameRate(fps.second);
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (videoOutput) {
NSObject *obj = [videoOutput.videoSettings objectForKey:(id)kCVPixelBufferPixelFormatTypeKey];
if (obj && [obj isKindOfClass:[NSNumber class]]) {
@@ -291,7 +291,7 @@ QVector<QVideoFrame::PixelFormat> AVFCameraViewfinderSettingsControl2::viewfinde
{
QVector<QVideoFrame::PixelFormat> qtFormats;
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (!videoOutput) {
qDebugCamera() << Q_FUNC_INFO << "no video output found";
return qtFormats;
@@ -318,7 +318,7 @@ QVector<QVideoFrame::PixelFormat> AVFCameraViewfinderSettingsControl2::viewfinde
bool AVFCameraViewfinderSettingsControl2::convertPixelFormatIfSupported(QVideoFrame::PixelFormat qtFormat,
unsigned &avfFormat)const
{
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (!videoOutput)
return false;
@@ -372,7 +372,7 @@ bool AVFCameraViewfinderSettingsControl2::applySettings(const QCameraViewfinderS
// We still can update the pixel format at least.
}
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (videoOutput) {
unsigned avfPixelFormat = 0;
if (!convertPixelFormatIfSupported(settings.pixelFormat(), avfPixelFormat)) {
diff --git a/src/plugins/avfoundation/camera/avfimagecapturecontrol.h b/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
index 2cdf0e5f3..314e867e7 100644
--- a/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
+++ b/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
@@ -60,17 +60,17 @@ public:
QSharedPointer<QSemaphore> previewReady;
};
- AVFImageCaptureControl(AVFCameraService *service, QObject *parent = 0);
+ AVFImageCaptureControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFImageCaptureControl();
- bool isReadyForCapture() const;
+ bool isReadyForCapture() const override;
- QCameraImageCapture::DriveMode driveMode() const { return QCameraImageCapture::SingleImageCapture; }
- void setDriveMode(QCameraImageCapture::DriveMode ) {}
+ QCameraImageCapture::DriveMode driveMode() const override { return QCameraImageCapture::SingleImageCapture; }
+ void setDriveMode(QCameraImageCapture::DriveMode ) override {}
AVCaptureStillImageOutput *stillImageOutput() const {return m_stillImageOutput;}
- int capture(const QString &fileName);
- void cancelCapture();
+ int capture(const QString &fileName) override;
+ void cancelCapture() override;
private Q_SLOTS:
void updateCaptureConnection();
diff --git a/src/plugins/avfoundation/camera/avfmediaassetwriter.h b/src/plugins/avfoundation/camera/avfmediaassetwriter.h
index 624906c85..9d61d5089 100644
--- a/src/plugins/avfoundation/camera/avfmediaassetwriter.h
+++ b/src/plugins/avfoundation/camera/avfmediaassetwriter.h
@@ -59,37 +59,8 @@ QT_END_NAMESPACE
@interface QT_MANGLE_NAMESPACE(AVFMediaAssetWriter) : NSObject<AVCaptureVideoDataOutputSampleBufferDelegate,
AVCaptureAudioDataOutputSampleBufferDelegate>
{
-@private
- AVFCameraService *m_service;
-
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_cameraWriterInput;
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureDeviceInput> m_audioInput;
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureAudioDataOutput> m_audioOutput;
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_audioWriterInput;
- AVCaptureDevice *m_audioCaptureDevice;
-
- // Queue to write sample buffers:
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_writerQueue;
- // High priority serial queue for video output:
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_videoQueue;
- // Serial queue for audio output:
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_audioQueue;
-
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriter> m_assetWriter;
-
- QT_PREPEND_NAMESPACE(AVFMediaRecorderControlIOS) *m_delegate;
-
- bool m_setStartTime;
-
- QT_PREPEND_NAMESPACE(QAtomicInt) m_state;
@public
QT_PREPEND_NAMESPACE(AVFAtomicInt64) m_durationInMs;
-@private
- CMTime m_startTime;
- CMTime m_lastTimeStamp;
-
- NSDictionary *m_audioSettings;
- NSDictionary *m_videoSettings;
}
- (id)initWithDelegate:(QT_PREPEND_NAMESPACE(AVFMediaRecorderControlIOS) *)delegate;
diff --git a/src/plugins/avfoundation/camera/avfmediaassetwriter.mm b/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
index 5a1257f6c..318d66117 100644
--- a/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
+++ b/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
@@ -89,6 +89,37 @@ enum WriterState
@end
@implementation QT_MANGLE_NAMESPACE(AVFMediaAssetWriter)
+{
+@private
+ AVFCameraService *m_service;
+
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_cameraWriterInput;
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureDeviceInput> m_audioInput;
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureAudioDataOutput> m_audioOutput;
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_audioWriterInput;
+ AVCaptureDevice *m_audioCaptureDevice;
+
+ // Queue to write sample buffers:
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_writerQueue;
+ // High priority serial queue for video output:
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_videoQueue;
+ // Serial queue for audio output:
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_audioQueue;
+
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriter> m_assetWriter;
+
+ QT_PREPEND_NAMESPACE(AVFMediaRecorderControlIOS) *m_delegate;
+
+ bool m_setStartTime;
+
+ QT_PREPEND_NAMESPACE(QAtomicInt) m_state;
+@private
+ CMTime m_startTime;
+ CMTime m_lastTimeStamp;
+
+ NSDictionary *m_audioSettings;
+ NSDictionary *m_videoSettings;
+}
- (id)initWithDelegate:(AVFMediaRecorderControlIOS *)delegate
{
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.h b/src/plugins/avfoundation/camera/avfmediarecordercontrol.h
index a4894b3da..fbba5eca4 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol.h
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol.h
@@ -60,27 +60,27 @@ class AVFMediaRecorderControl : public QMediaRecorderControl
{
Q_OBJECT
public:
- AVFMediaRecorderControl(AVFCameraService *service, QObject *parent = 0);
+ AVFMediaRecorderControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFMediaRecorderControl();
- QUrl outputLocation() const;
- bool setOutputLocation(const QUrl &location);
+ QUrl outputLocation() const override;
+ bool setOutputLocation(const QUrl &location) override;
- QMediaRecorder::State state() const;
- QMediaRecorder::Status status() const;
+ QMediaRecorder::State state() const override;
+ QMediaRecorder::Status status() const override;
- qint64 duration() const;
+ qint64 duration() const override;
- bool isMuted() const;
- qreal volume() const;
+ bool isMuted() const override;
+ qreal volume() const override;
- void applySettings();
+ void applySettings() override;
void unapplySettings();
public Q_SLOTS:
- void setState(QMediaRecorder::State state);
- void setMuted(bool muted);
- void setVolume(qreal volume);
+ void setState(QMediaRecorder::State state) override;
+ void setMuted(bool muted) override;
+ void setVolume(qreal volume) override;
void handleRecordingStarted();
void handleRecordingFinished();
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
index 546eabf89..9a6057e6b 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
@@ -394,7 +394,7 @@ void AVFMediaRecorderControl::setupSessionForCapture()
qWarning() << "Failed to create audio device input";
} else if (![captureSession canAddInput:m_audioInput]) {
qWarning() << "Could not connect the audio input";
- m_audioInput = 0;
+ m_audioInput = nullptr;
} else {
[m_audioInput retain];
[captureSession addInput:m_audioInput];
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
index 8e049a595..9afb1068d 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
@@ -62,8 +62,8 @@ class AVFMediaRecorderControlIOS : public QMediaRecorderControl
{
Q_OBJECT
public:
- AVFMediaRecorderControlIOS(AVFCameraService *service, QObject *parent = 0);
- ~AVFMediaRecorderControlIOS();
+ AVFMediaRecorderControlIOS(AVFCameraService *service, QObject *parent = nullptr);
+ ~AVFMediaRecorderControlIOS() override;
QUrl outputLocation() const override;
bool setOutputLocation(const QUrl &location) override;
diff --git a/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h b/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h
index ce9ef4dbe..69a452a97 100644
--- a/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h
+++ b/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h
@@ -48,7 +48,7 @@ class AVFMediaVideoProbeControl : public QMediaVideoProbeControl
{
Q_OBJECT
public:
- explicit AVFMediaVideoProbeControl(QObject *parent = 0);
+ explicit AVFMediaVideoProbeControl(QObject *parent = nullptr);
~AVFMediaVideoProbeControl();
void newFrameProbed(const QVideoFrame& frame);
diff --git a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
index 9bdf5a788..7c9574f3d 100644
--- a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
@@ -59,10 +59,10 @@ public:
explicit AVFVideoEncoderSettingsControl(AVFCameraService *service);
QList<QSize> supportedResolutions(const QVideoEncoderSettings &requestedVideoSettings,
- bool *continuous = 0) const override;
+ bool *continuous = nullptr) const override;
QList<qreal> supportedFrameRates(const QVideoEncoderSettings &requestedVideoSettings,
- bool *continuous = 0) const override;
+ bool *continuous = nullptr) const override;
QStringList supportedVideoCodecs() const override;
QString videoCodecDescription(const QString &codecName) const override;
diff --git a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h
index 45db7aef7..ba0803807 100644
--- a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h
+++ b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h
@@ -55,7 +55,7 @@ class AVFDisplayLink : public QObject
{
Q_OBJECT
public:
- explicit AVFDisplayLink(QObject *parent = 0);
+ explicit AVFDisplayLink(QObject *parent = nullptr);
virtual ~AVFDisplayLink();
bool isValid() const;
bool isActive() const;
@@ -71,7 +71,7 @@ public:
void displayLinkEvent(const CVTimeStamp *);
protected:
- virtual bool event(QEvent *);
+ virtual bool event(QEvent *) override;
private:
#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
diff --git a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm
index 63747e486..bae18bc0a 100644
--- a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm
@@ -55,10 +55,6 @@ QT_USE_NAMESPACE
#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
@interface DisplayLinkObserver : NSObject
-{
- AVFDisplayLink *m_avfDisplayLink;
- CADisplayLink *m_displayLink;
-}
- (void)start;
- (void)stop;
@@ -67,6 +63,10 @@ QT_USE_NAMESPACE
@end
@implementation DisplayLinkObserver
+{
+ AVFDisplayLink *m_avfDisplayLink;
+ CADisplayLink *m_displayLink;
+}
- (id)initWithAVFDisplayLink:(AVFDisplayLink *)link
{
@@ -84,7 +84,7 @@ QT_USE_NAMESPACE
{
if (m_displayLink) {
[m_displayLink release];
- m_displayLink = NULL;
+ m_displayLink = nullptr;
}
[super dealloc];
@@ -129,7 +129,7 @@ static CVReturn CVDisplayLinkCallback(CVDisplayLinkRef displayLink,
AVFDisplayLink::AVFDisplayLink(QObject *parent)
: QObject(parent)
- , m_displayLink(0)
+ , m_displayLink(nullptr)
, m_pendingDisplayLinkEvent(false)
, m_isActive(false)
{
@@ -161,13 +161,13 @@ AVFDisplayLink::~AVFDisplayLink()
#else
CVDisplayLinkRelease(m_displayLink);
#endif
- m_displayLink = NULL;
+ m_displayLink = nullptr;
}
}
bool AVFDisplayLink::isValid() const
{
- return m_displayLink != 0;
+ return m_displayLink != nullptr;
}
bool AVFDisplayLink::isActive() const
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h
index a65ee8529..ac0ba0ab2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h
@@ -51,44 +51,44 @@ class AVFMediaPlayerControl : public QMediaPlayerControl
{
Q_OBJECT
public:
- explicit AVFMediaPlayerControl(QObject *parent = 0);
+ explicit AVFMediaPlayerControl(QObject *parent = nullptr);
~AVFMediaPlayerControl();
void setSession(AVFMediaPlayerSession *session);
- QMediaPlayer::State state() const;
- QMediaPlayer::MediaStatus mediaStatus() const;
+ QMediaPlayer::State state() const override;
+ QMediaPlayer::MediaStatus mediaStatus() const override;
- QMediaContent media() const;
- const QIODevice *mediaStream() const;
- void setMedia(const QMediaContent &content, QIODevice *stream);
+ QMediaContent media() const override;
+ const QIODevice *mediaStream() const override;
+ void setMedia(const QMediaContent &content, QIODevice *stream) override;
- qint64 position() const;
- qint64 duration() const;
+ qint64 position() const override;
+ qint64 duration() const override;
- int bufferStatus() const;
+ int bufferStatus() const override;
- int volume() const;
- bool isMuted() const;
+ int volume() const override;
+ bool isMuted() const override;
- bool isAudioAvailable() const;
- bool isVideoAvailable() const;
+ bool isAudioAvailable() const override;
+ bool isVideoAvailable() const override;
- bool isSeekable() const;
- QMediaTimeRange availablePlaybackRanges() const;
+ bool isSeekable() const override;
+ QMediaTimeRange availablePlaybackRanges() const override;
- qreal playbackRate() const;
- void setPlaybackRate(qreal rate);
+ qreal playbackRate() const override;
+ void setPlaybackRate(qreal rate) override;
public Q_SLOTS:
- void setPosition(qint64 pos);
+ void setPosition(qint64 pos) override;
- void play();
- void pause();
- void stop();
+ void play() override;
+ void pause() override;
+ void stop() override;
- void setVolume(int volume);
- void setMuted(bool muted);
+ void setVolume(int volume) override;
+ void setMuted(bool muted) override;
private:
AVFMediaPlayerSession *m_session;
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
index 396550047..ae99c7eda 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
@@ -50,14 +50,14 @@ class AVFMediaPlayerMetaDataControl : public QMetaDataReaderControl
{
Q_OBJECT
public:
- explicit AVFMediaPlayerMetaDataControl(AVFMediaPlayerSession *session, QObject *parent = 0);
+ explicit AVFMediaPlayerMetaDataControl(AVFMediaPlayerSession *session, QObject *parent = nullptr);
virtual ~AVFMediaPlayerMetaDataControl();
- bool isMetaDataAvailable() const;
+ bool isMetaDataAvailable() const override;
bool isWritable() const;
- QVariant metaData(const QString &key) const;
- QStringList availableMetaData() const;
+ QVariant metaData(const QString &key) const override;
+ QStringList availableMetaData() const override;
private Q_SLOTS:
void updateTags();
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
index 39783680b..b9ec38c0f 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
@@ -49,7 +49,7 @@ QT_USE_NAMESPACE
AVFMediaPlayerMetaDataControl::AVFMediaPlayerMetaDataControl(AVFMediaPlayerSession *session, QObject *parent)
: QMetaDataReaderControl(parent)
, m_session(session)
- , m_asset(0)
+ , m_asset(nullptr)
{
QObject::connect(m_session, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(updateTags()));
}
@@ -121,7 +121,7 @@ void AVFMediaPlayerMetaDataControl::updateTags()
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO;
#endif
- AVAsset *currentAsset = (AVAsset*)m_session->currentAssetHandle();
+ AVAsset *currentAsset = static_cast<AVAsset*>(m_session->currentAssetHandle());
//Don't read the tags from the same asset more than once
if (currentAsset == m_asset)
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h
index 4460a4867..6a4b915cf 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h
@@ -52,11 +52,11 @@ class AVFVideoOutput;
class AVFMediaPlayerService : public QMediaService
{
public:
- explicit AVFMediaPlayerService(QObject *parent = 0);
+ explicit AVFMediaPlayerService(QObject *parent = nullptr);
~AVFMediaPlayerService();
- QMediaControl* requestControl(const char *name);
- void releaseControl(QMediaControl *control);
+ QMediaControl* requestControl(const char *name) override;
+ void releaseControl(QMediaControl *control) override;
private:
AVFMediaPlayerSession *m_session;
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
index 91def6b3b..bc59fa921 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
@@ -56,7 +56,7 @@ QT_USE_NAMESPACE
AVFMediaPlayerService::AVFMediaPlayerService(QObject *parent)
: QMediaService(parent)
- , m_videoOutput(0)
+ , m_videoOutput(nullptr)
{
m_session = new AVFMediaPlayerSession(this);
m_control = new AVFMediaPlayerControl(this);
@@ -111,7 +111,7 @@ QMediaControl *AVFMediaPlayerService::requestControl(const char *name)
m_session->setVideoOutput(qobject_cast<AVFVideoOutput*>(m_videoOutput));
return m_videoOutput;
}
- return 0;
+ return nullptr;
}
void AVFMediaPlayerService::releaseControl(QMediaControl *control)
@@ -124,10 +124,10 @@ void AVFMediaPlayerService::releaseControl(QMediaControl *control)
AVFVideoRendererControl *renderControl = qobject_cast<AVFVideoRendererControl*>(m_videoOutput);
if (renderControl)
- renderControl->setSurface(0);
+ renderControl->setSurface(nullptr);
#endif
- m_videoOutput = 0;
- m_session->setVideoOutput(0);
+ m_videoOutput = nullptr;
+ m_session->setVideoOutput(nullptr);
delete control;
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h
index eae9b9a05..e08f0f46e 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h
@@ -59,12 +59,12 @@ class AVFMediaPlayerServicePlugin
public:
explicit AVFMediaPlayerServicePlugin();
- QMediaService* create(QString const& key);
- void release(QMediaService *service);
+ QMediaService* create(QString const& key) override;
+ void release(QMediaService *service) override;
- QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const;
- QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const;
- QStringList supportedMimeTypes() const;
+ QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override;
+ QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const override;
+ QStringList supportedMimeTypes() const override;
private:
void buildSupportedTypes();
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm
index dcdd9efed..59b29a3d2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm
@@ -60,7 +60,7 @@ QMediaService *AVFMediaPlayerServicePlugin::create(const QString &key)
return new AVFMediaPlayerService;
qWarning() << "unsupported key: " << key;
- return 0;
+ return nullptr;
}
void AVFMediaPlayerServicePlugin::release(QMediaService *service)
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
index e20f4a1ec..f6e0ef3bf 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
@@ -57,7 +57,7 @@ class AVFMediaPlayerSession : public QObject
{
Q_OBJECT
public:
- AVFMediaPlayerSession(AVFMediaPlayerService *service, QObject *parent = 0);
+ AVFMediaPlayerSession(AVFMediaPlayerService *service, QObject *parent = nullptr);
virtual ~AVFMediaPlayerSession();
void setVideoOutput(AVFVideoOutput *output);
@@ -127,7 +127,7 @@ Q_SIGNALS:
private:
class ResourceHandler {
public:
- ResourceHandler():resource(0) {}
+ ResourceHandler() : resource(nullptr) {}
~ResourceHandler() { clear(); }
void setResourceFile(const QString &file) {
if (resource) {
@@ -138,10 +138,10 @@ private:
}
resource = new QResource(file);
}
- bool isValid() const { return resource && resource->isValid() && resource->data() != 0; }
+ bool isValid() const { return resource && resource->isValid() && resource->data() != nullptr; }
const uchar *data() {
if (!isValid())
- return 0;
+ return nullptr;
if (resource->isCompressed()) {
if (rawData.size() == 0)
rawData = qUncompress(resource->data(), resource->size());
@@ -150,7 +150,7 @@ private:
return resource->data();
}
qint64 size() {
- if (data() == 0)
+ if (data() == nullptr)
return 0;
return resource->isCompressed() ? rawData.size() : resource->size();
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
index 06fb71ef8..2309221c2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
@@ -67,15 +67,6 @@ static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMe
static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext = &AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext;
@interface AVFMediaPlayerSessionObserver : NSObject
-{
-@private
- AVFMediaPlayerSession *m_session;
- AVPlayer *m_player;
- AVPlayerItem *m_playerItem;
- AVPlayerLayer *m_playerLayer;
- NSURL *m_URL;
- BOOL m_bufferIsLikelyToKeepUp;
-}
@property (readonly, getter=player) AVPlayer* m_player;
@property (readonly, getter=playerItem) AVPlayerItem* m_playerItem;
@@ -96,6 +87,15 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
@end
@implementation AVFMediaPlayerSessionObserver
+{
+@private
+ AVFMediaPlayerSession *m_session;
+ AVPlayer *m_player;
+ AVPlayerItem *m_playerItem;
+ AVPlayerLayer *m_playerLayer;
+ NSURL *m_URL;
+ BOOL m_bufferIsLikelyToKeepUp;
+}
@synthesize m_player, m_playerItem, m_playerLayer, m_session;
@@ -339,7 +339,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
case AVPlayerStatusFailed:
{
- AVPlayerItem *playerItem = (AVPlayerItem *)object;
+ AVPlayerItem *playerItem = static_cast<AVPlayerItem*>(object);
[self assetFailedToPrepareForPlayback:playerItem.error];
if (self.session)
@@ -411,10 +411,10 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
AVFMediaPlayerSession::AVFMediaPlayerSession(AVFMediaPlayerService *service, QObject *parent)
: QObject(parent)
, m_service(service)
- , m_videoOutput(0)
+ , m_videoOutput(nullptr)
, m_state(QMediaPlayer::StoppedState)
, m_mediaStatus(QMediaPlayer::NoMedia)
- , m_mediaStream(0)
+ , m_mediaStream(nullptr)
, m_muted(false)
, m_tryingAsync(false)
, m_volume(100)
@@ -435,8 +435,8 @@ AVFMediaPlayerSession::~AVFMediaPlayerSession()
qDebug() << Q_FUNC_INFO;
#endif
//Detatch the session from the sessionObserver (which could still be alive trying to communicate with this session).
- [(AVFMediaPlayerSessionObserver*)m_observer detatchSession];
- [(AVFMediaPlayerSessionObserver*)m_observer release];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) detatchSession];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) release];
}
void AVFMediaPlayerSession::setVideoOutput(AVFVideoOutput *output)
@@ -450,13 +450,13 @@ void AVFMediaPlayerSession::setVideoOutput(AVFVideoOutput *output)
//Set the current output layer to null to stop rendering
if (m_videoOutput) {
- m_videoOutput->setLayer(0);
+ m_videoOutput->setLayer(nullptr);
}
m_videoOutput = output;
if (m_videoOutput && m_state != QMediaPlayer::StoppedState)
- m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]);
+ m_videoOutput->setLayer([static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer]);
}
void *AVFMediaPlayerSession::currentAssetHandle()
@@ -464,7 +464,7 @@ void *AVFMediaPlayerSession::currentAssetHandle()
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO;
#endif
- AVAsset *currentAsset = [[(AVFMediaPlayerSessionObserver*)m_observer playerItem] asset];
+ AVAsset *currentAsset = [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem] asset];
return currentAsset;
}
@@ -494,7 +494,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
qDebug() << Q_FUNC_INFO << content.canonicalUrl();
#endif
- [(AVFMediaPlayerSessionObserver*)m_observer unloadMedia];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) unloadMedia];
m_resources = content;
m_mediaStream = stream;
@@ -528,7 +528,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
//initialize asset using content's URL
NSString *urlString = [NSString stringWithUTF8String:content.canonicalUrl().toEncoded().constData()];
NSURL *url = [NSURL URLWithString:urlString];
- [(AVFMediaPlayerSessionObserver*)m_observer setURL:url];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) setURL:url];
m_state = QMediaPlayer::StoppedState;
if (m_state != oldState)
@@ -537,7 +537,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
qint64 AVFMediaPlayerSession::position() const
{
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (!playerItem)
return m_requestedPosition != -1 ? m_requestedPosition : 0;
@@ -616,7 +616,7 @@ void AVFMediaPlayerSession::setSeekable(bool seekable)
QMediaTimeRange AVFMediaPlayerSession::availablePlaybackRanges() const
{
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (playerItem) {
QMediaTimeRange timeRanges;
@@ -649,7 +649,7 @@ void AVFMediaPlayerSession::setPlaybackRate(qreal rate)
m_rate = rate;
- AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
+ AVPlayer *player = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player];
if (player && m_state == QMediaPlayer::PlayingState)
[player setRate:m_rate];
@@ -665,7 +665,7 @@ void AVFMediaPlayerSession::setPosition(qint64 pos)
if (pos == position())
return;
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (!playerItem) {
m_requestedPosition = pos;
Q_EMIT positionChanged(m_requestedPosition);
@@ -711,7 +711,7 @@ void AVFMediaPlayerSession::play()
return;
if (m_videoOutput) {
- m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]);
+ m_videoOutput->setLayer([static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer]);
}
// Reset media status if the current status is EndOfMedia
@@ -720,7 +720,7 @@ void AVFMediaPlayerSession::play()
if (m_mediaStatus == QMediaPlayer::LoadedMedia || m_mediaStatus == QMediaPlayer::BufferedMedia) {
// Setting the rate starts playback
- [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] setRate:m_rate];
}
m_state = QMediaPlayer::PlayingState;
@@ -744,10 +744,10 @@ void AVFMediaPlayerSession::pause()
m_state = QMediaPlayer::PausedState;
if (m_videoOutput) {
- m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]);
+ m_videoOutput->setLayer([static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer]);
}
- [[(AVFMediaPlayerSessionObserver*)m_observer player] pause];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] pause];
// Reset media status if the current status is EndOfMedia
if (m_mediaStatus == QMediaPlayer::EndOfMedia)
@@ -767,11 +767,11 @@ void AVFMediaPlayerSession::stop()
return;
// AVPlayer doesn't have stop(), only pause() and play().
- [[(AVFMediaPlayerSessionObserver*)m_observer player] pause];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] pause];
setPosition(0);
if (m_videoOutput) {
- m_videoOutput->setLayer(0);
+ m_videoOutput->setLayer(nullptr);
}
if (m_mediaStatus == QMediaPlayer::BufferedMedia)
@@ -792,7 +792,7 @@ void AVFMediaPlayerSession::setVolume(int volume)
m_volume = volume;
- AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
+ AVPlayer *player = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player];
if (player)
[player setVolume:volume / 100.0f];
@@ -810,7 +810,7 @@ void AVFMediaPlayerSession::setMuted(bool muted)
m_muted = muted;
- AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
+ AVPlayer *player = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player];
if (player)
[player setMuted:muted];
@@ -832,14 +832,14 @@ void AVFMediaPlayerSession::processEOS()
// At this point, frames should not be rendered anymore.
// Clear the output layer to make sure of that.
if (m_videoOutput)
- m_videoOutput->setLayer(0);
+ m_videoOutput->setLayer(nullptr);
Q_EMIT stateChanged(m_state);
}
void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
{
- AVPlayerStatus currentStatus = [[(AVFMediaPlayerSessionObserver*)m_observer player] status];
+ AVPlayerStatus currentStatus = [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] status];
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO << currentStatus << ", " << m_mediaStatus << ", " << newState;
@@ -852,7 +852,7 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
QMediaPlayer::MediaStatus newStatus = m_mediaStatus;
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (playerItem) {
// Check each track for audio and video content
@@ -874,7 +874,7 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
setSeekable([[playerItem seekableTimeRanges] count] > 0);
// Get the native size of the video, and reset the bounds of the player layer
- AVPlayerLayer *playerLayer = [(AVFMediaPlayerSessionObserver*)m_observer playerLayer];
+ AVPlayerLayer *playerLayer = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer];
if (videoTrack && playerLayer) {
playerLayer.bounds = CGRectMake(0.0f, 0.0f,
videoTrack.naturalSize.width,
@@ -899,9 +899,9 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
}
- if (newState == QMediaPlayer::PlayingState && [(AVFMediaPlayerSessionObserver*)m_observer player]) {
+ if (newState == QMediaPlayer::PlayingState && [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player]) {
// Setting the rate is enough to start playback, no need to call play()
- [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] setRate:m_rate];
}
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h
index 054bce166..99b6bb0b5 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h
@@ -58,7 +58,7 @@ class QAbstractVideoSurface;
class AVFVideoFrameRenderer : public QObject
{
public:
- AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = 0);
+ AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = nullptr);
virtual ~AVFVideoFrameRenderer();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
index 0759702e8..b2c6638cc 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
@@ -54,15 +54,15 @@ QT_USE_NAMESPACE
AVFVideoFrameRenderer::AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent)
: QObject(parent)
- , m_videoLayerRenderer(0)
+ , m_videoLayerRenderer(nullptr)
, m_surface(surface)
- , m_offscreenSurface(0)
- , m_glContext(0)
+ , m_offscreenSurface(nullptr)
+ , m_glContext(nullptr)
, m_currentBuffer(1)
, m_isContextShared(true)
{
- m_fbo[0] = 0;
- m_fbo[1] = 0;
+ m_fbo[0] = nullptr;
+ m_fbo[1] = nullptr;
}
AVFVideoFrameRenderer::~AVFVideoFrameRenderer()
@@ -155,7 +155,7 @@ QOpenGLFramebufferObject *AVFVideoFrameRenderer::initRenderer(AVPlayerLayer *lay
}
if (!m_glContext->create()) {
qWarning("failed to create QOpenGLContext");
- return 0;
+ return nullptr;
}
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h
index 3def186ef..d9f6baa7e 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h
@@ -86,7 +86,7 @@ typedef CVOpenGLTextureRef CVOGLTextureRef;
class AVFVideoFrameRenderer : public QObject
{
public:
- AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = 0);
+ AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = nullptr);
virtual ~AVFVideoFrameRenderer();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm
index f84718c55..70e402e6c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm
@@ -54,11 +54,11 @@ QT_USE_NAMESPACE
AVFVideoFrameRenderer::AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent)
: QObject(parent)
- , m_glContext(0)
- , m_offscreenSurface(0)
+ , m_glContext(nullptr)
+ , m_offscreenSurface(nullptr)
, m_surface(surface)
- , m_textureCache(0)
- , m_videoOutput(0)
+ , m_textureCache(nullptr)
+ , m_videoOutput(nullptr)
, m_isContextShared(true)
{
}
@@ -81,7 +81,7 @@ void AVFVideoFrameRenderer::setPlayerLayer(AVPlayerLayer *layer)
Q_UNUSED(layer)
if (m_videoOutput) {
[m_videoOutput release];
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
// will be re-created in first call to copyPixelBufferFromLayer
}
}
@@ -92,7 +92,7 @@ CVOGLTextureRef AVFVideoFrameRenderer::renderLayerToTexture(AVPlayerLayer *layer
// If the glContext isn't shared, it doesn't make sense to return a texture for us
if (!m_isContextShared)
- return 0;
+ return nullptr;
size_t dummyWidth = 0, dummyHeight = 0;
return createCacheTextureFromLayer(layer, dummyWidth, dummyHeight);
@@ -111,7 +111,7 @@ CVPixelBufferRef AVFVideoFrameRenderer::copyPixelBufferFromLayer(AVPlayerLayer *
#ifdef QT_DEBUG_AVF
qWarning("copyPixelBufferFromLayer: invalid layer");
#endif
- return 0;
+ return nullptr;
}
if (!m_videoOutput) {
@@ -125,7 +125,7 @@ CVPixelBufferRef AVFVideoFrameRenderer::copyPixelBufferFromLayer(AVPlayerLayer *
CMTime currentCMFrameTime = [m_videoOutput itemTimeForHostTime:currentCAFrameTime];
// happens when buffering / loading
if (CMTimeCompare(currentCMFrameTime, kCMTimeZero) < 0) {
- return 0;
+ return nullptr;
}
CVPixelBufferRef pixelBuffer = [m_videoOutput copyPixelBufferForItemTime:currentCMFrameTime
@@ -135,7 +135,7 @@ CVPixelBufferRef AVFVideoFrameRenderer::copyPixelBufferFromLayer(AVPlayerLayer *
qWarning("copyPixelBufferForItemTime returned nil");
CMTimeShow(currentCMFrameTime);
#endif
- return 0;
+ return nullptr;
}
width = CVPixelBufferGetWidth(pixelBuffer);
@@ -149,12 +149,12 @@ CVOGLTextureRef AVFVideoFrameRenderer::createCacheTextureFromLayer(AVPlayerLayer
CVPixelBufferRef pixelBuffer = copyPixelBufferFromLayer(layer, width, height);
if (!pixelBuffer)
- return 0;
+ return nullptr;
CVOGLTextureCacheFlush(m_textureCache, 0);
- CVOGLTextureRef texture = 0;
- CVReturn err = CVOGLTextureCacheCreateTextureFromImage(kCFAllocatorDefault, m_textureCache, pixelBuffer, NULL,
+ CVOGLTextureRef texture = nullptr;
+ CVReturn err = CVOGLTextureCacheCreateTextureFromImage(kCFAllocatorDefault, m_textureCache, pixelBuffer, nullptr,
GL_TEXTURE_2D, GL_RGBA,
(GLsizei) width, (GLsizei) height,
GL_BGRA, GL_UNSIGNED_BYTE, 0,
@@ -214,7 +214,7 @@ void AVFVideoFrameRenderer::initRenderer()
//Make sure we have an OpenGL context to make current
if (!m_glContext) {
//Create OpenGL context and set share context from surface
- QOpenGLContext *shareContext = 0;
+ QOpenGLContext *shareContext = nullptr;
if (m_surface) {
shareContext = qobject_cast<QOpenGLContext*>(m_surface->property("GLContext").value<QObject*>());
}
@@ -248,9 +248,9 @@ void AVFVideoFrameRenderer::initRenderer()
if (!m_textureCache) {
// Create a new open gl texture cache
- CVReturn err = CVOGLTextureCacheCreate(kCFAllocatorDefault, NULL,
+ CVReturn err = CVOGLTextureCacheCreate(kCFAllocatorDefault, nullptr,
[EAGLContext currentContext],
- NULL, &m_textureCache);
+ nullptr, &m_textureCache);
if (err) {
#ifdef QT_DEBUG_AVF
qWarning("Error at CVOGLTextureCacheCreate %d", err);
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h
index 26032f0be..85dc19d31 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h
@@ -58,13 +58,13 @@ class AVFVideoRendererControl : public QVideoRendererControl, public AVFVideoOut
Q_OBJECT
Q_INTERFACES(AVFVideoOutput)
public:
- explicit AVFVideoRendererControl(QObject *parent = 0);
+ explicit AVFVideoRendererControl(QObject *parent = nullptr);
virtual ~AVFVideoRendererControl();
- QAbstractVideoSurface *surface() const;
- void setSurface(QAbstractVideoSurface *surface);
+ QAbstractVideoSurface *surface() const override;
+ void setSurface(QAbstractVideoSurface *surface) override;
- void setLayer(void *playerLayer);
+ void setLayer(void *playerLayer) override;
private Q_SLOTS:
void updateVideoFrame(const CVTimeStamp &ts);
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm
index e40b7eb17..5f468e532 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm
@@ -75,7 +75,7 @@ public:
}
MapMode mapMode() const { return NotMapped; }
- uchar *map(MapMode, int*, int*) { return 0; }
+ uchar *map(MapMode, int*, int*) { return nullptr; }
void unmap() {}
QVariant handle() const
@@ -116,9 +116,9 @@ private:
AVFVideoRendererControl::AVFVideoRendererControl(QObject *parent)
: QVideoRendererControl(parent)
- , m_surface(0)
- , m_playerLayer(0)
- , m_frameRenderer(0)
+ , m_surface(nullptr)
+ , m_playerLayer(nullptr)
+ , m_frameRenderer(nullptr)
, m_enableOpenGL(false)
{
@@ -132,7 +132,7 @@ AVFVideoRendererControl::~AVFVideoRendererControl()
qDebug() << Q_FUNC_INFO;
#endif
m_displayLink->stop();
- [(AVPlayerLayer*)m_playerLayer release];
+ [static_cast<AVPlayerLayer*>(m_playerLayer) release];
}
QAbstractVideoSurface *AVFVideoRendererControl::surface() const
@@ -160,10 +160,10 @@ void AVFVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
//If the surface changed, then the current frame renderer is no longer valid
delete m_frameRenderer;
- m_frameRenderer = 0;
+ m_frameRenderer = nullptr;
//If there is now no surface to render too
- if (m_surface == 0) {
+ if (m_surface == nullptr) {
m_displayLink->stop();
return;
}
@@ -191,8 +191,8 @@ void AVFVideoRendererControl::setLayer(void *playerLayer)
if (m_playerLayer == playerLayer)
return;
- [(AVPlayerLayer*)playerLayer retain];
- [(AVPlayerLayer*)m_playerLayer release];
+ [static_cast<AVPlayerLayer*>(playerLayer) retain];
+ [static_cast<AVPlayerLayer*>(playerLayer) release];
m_playerLayer = playerLayer;
@@ -208,7 +208,7 @@ void AVFVideoRendererControl::setLayer(void *playerLayer)
#endif
//If there is no layer to render, stop scheduling updates
- if (m_playerLayer == 0) {
+ if (m_playerLayer == nullptr) {
m_displayLink->stop();
return;
}
@@ -225,7 +225,7 @@ void AVFVideoRendererControl::updateVideoFrame(const CVTimeStamp &ts)
{
Q_UNUSED(ts)
- AVPlayerLayer *playerLayer = (AVPlayerLayer*)m_playerLayer;
+ AVPlayerLayer *playerLayer = static_cast<AVPlayerLayer*>(playerLayer);
if (!playerLayer) {
qWarning("updateVideoFrame called without AVPlayerLayer (which shouldn't happen");
@@ -240,7 +240,7 @@ void AVFVideoRendererControl::updateVideoFrame(const CVTimeStamp &ts)
CVOGLTextureRef tex = m_frameRenderer->renderLayerToTexture(playerLayer);
//Make sure we got a valid texture
- if (tex == 0)
+ if (tex == nullptr)
return;
QAbstractVideoBuffer *buffer = new TextureCacheVideoBuffer(tex);
@@ -305,7 +305,7 @@ void AVFVideoRendererControl::updateVideoFrame(const CVTimeStamp &ts)
void AVFVideoRendererControl::setupVideoOutput()
{
- AVPlayerLayer *playerLayer = (AVPlayerLayer*)m_playerLayer;
+ AVPlayerLayer *playerLayer = static_cast<AVPlayerLayer*>(playerLayer);
if (playerLayer)
m_nativeSize = QSize(playerLayer.bounds.size.width, playerLayer.bounds.size.height);
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidget.h b/src/plugins/avfoundation/mediaplayer/avfvideowidget.h
index be6f16e64..faf71f1a4 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidget.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidget.h
@@ -57,14 +57,14 @@ public:
AVFVideoWidget(QWidget *parent);
virtual ~AVFVideoWidget();
- QSize sizeHint() const;
+ QSize sizeHint() const override;
Qt::AspectRatioMode aspectRatioMode() const;
void setAspectRatioMode(Qt::AspectRatioMode mode);
void setPlayerLayer(AVPlayerLayer *layer);
protected:
- void resizeEvent(QResizeEvent *);
- void paintEvent(QPaintEvent *);
+ void resizeEvent(QResizeEvent *) override;
+ void paintEvent(QPaintEvent *) override;
private:
void updateAspectRatio();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
index 7eb5a71cf..be349710c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
@@ -56,8 +56,8 @@ QT_USE_NAMESPACE
AVFVideoWidget::AVFVideoWidget(QWidget *parent)
: QWidget(parent)
, m_aspectRatioMode(Qt::KeepAspectRatio)
- , m_playerLayer(0)
- , m_nativeView(0)
+ , m_playerLayer(nullptr)
+ , m_nativeView(nullptr)
{
setAutoFillBackground(false);
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h
index f442d666a..22379d273 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h
@@ -54,30 +54,30 @@ class AVFVideoWidgetControl : public QVideoWidgetControl, public AVFVideoOutput
Q_OBJECT
Q_INTERFACES(AVFVideoOutput)
public:
- AVFVideoWidgetControl(QObject *parent = 0);
+ AVFVideoWidgetControl(QObject *parent = nullptr);
virtual ~AVFVideoWidgetControl();
- void setLayer(void *playerLayer);
+ void setLayer(void *playerLayer) override;
- QWidget *videoWidget();
+ QWidget *videoWidget() override;
- bool isFullScreen() const;
- void setFullScreen(bool fullScreen);
+ bool isFullScreen() const override;
+ void setFullScreen(bool fullScreen) override;
- Qt::AspectRatioMode aspectRatioMode() const;
- void setAspectRatioMode(Qt::AspectRatioMode mode);
+ Qt::AspectRatioMode aspectRatioMode() const override;
+ void setAspectRatioMode(Qt::AspectRatioMode mode) override;
- int brightness() const;
- void setBrightness(int brightness);
+ int brightness() const override;
+ void setBrightness(int brightness) override;
- int contrast() const;
- void setContrast(int contrast);
+ int contrast() const override;
+ void setContrast(int contrast) override;
- int hue() const;
- void setHue(int hue);
+ int hue() const override;
+ void setHue(int hue) override;
- int saturation() const;
- void setSaturation(int saturation);
+ int saturation() const override;
+ void setSaturation(int saturation) override;
private:
AVFVideoWidget *m_videoWidget;
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm
index 287dd3add..91ece817e 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm
@@ -56,7 +56,7 @@ AVFVideoWidgetControl::AVFVideoWidgetControl(QObject *parent)
, m_hue(0)
, m_saturation(0)
{
- m_videoWidget = new AVFVideoWidget(0);
+ m_videoWidget = new AVFVideoWidget(nullptr);
}
AVFVideoWidgetControl::~AVFVideoWidgetControl()
@@ -73,7 +73,7 @@ void AVFVideoWidgetControl::setLayer(void *playerLayer)
qDebug() << Q_FUNC_INFO << playerLayer;
#endif
- m_videoWidget->setPlayerLayer((AVPlayerLayer*)playerLayer);
+ m_videoWidget->setPlayerLayer(static_cast<AVPlayerLayer*>(playerLayer));
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h
index 18bf3fa71..763656c6c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h
@@ -61,40 +61,40 @@ class AVFVideoWindowControl : public QVideoWindowControl, public AVFVideoOutput
Q_INTERFACES(AVFVideoOutput)
public:
- AVFVideoWindowControl(QObject *parent = 0);
+ AVFVideoWindowControl(QObject *parent = nullptr);
virtual ~AVFVideoWindowControl();
// QVideoWindowControl interface
public:
- WId winId() const;
- void setWinId(WId id);
+ WId winId() const override;
+ void setWinId(WId id) override;
- QRect displayRect() const;
- void setDisplayRect(const QRect &rect);
+ QRect displayRect() const override;
+ void setDisplayRect(const QRect &rect) override;
- bool isFullScreen() const;
- void setFullScreen(bool fullScreen);
+ bool isFullScreen() const override;
+ void setFullScreen(bool fullScreen) override;
- void repaint();
- QSize nativeSize() const;
+ void repaint() override;
+ QSize nativeSize() const override;
- Qt::AspectRatioMode aspectRatioMode() const;
- void setAspectRatioMode(Qt::AspectRatioMode mode);
+ Qt::AspectRatioMode aspectRatioMode() const override;
+ void setAspectRatioMode(Qt::AspectRatioMode mode) override;
- int brightness() const;
- void setBrightness(int brightness);
+ int brightness() const override;
+ void setBrightness(int brightness) override;
- int contrast() const;
- void setContrast(int contrast);
+ int contrast() const override;
+ void setContrast(int contrast) override;
- int hue() const;
- void setHue(int hue);
+ int hue() const override;
+ void setHue(int hue) override;
- int saturation() const;
- void setSaturation(int saturation);
+ int saturation() const override;
+ void setSaturation(int saturation) override;
// AVFVideoOutput interface
- void setLayer(void *playerLayer);
+ void setLayer(void *playerLayer) override;
private:
void updateAspectRatio();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
index 5727cb0f4..7fa41fdc2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
@@ -60,8 +60,8 @@ AVFVideoWindowControl::AVFVideoWindowControl(QObject *parent)
, m_hue(0)
, m_saturation(0)
, m_aspectRatioMode(Qt::IgnoreAspectRatio)
- , m_playerLayer(0)
- , m_nativeView(0)
+ , m_playerLayer(nullptr)
+ , m_nativeView(nullptr)
{
}
@@ -188,7 +188,7 @@ void AVFVideoWindowControl::setSaturation(int saturation)
void AVFVideoWindowControl::setLayer(void *playerLayer)
{
- AVPlayerLayer *layer = (AVPlayerLayer*)playerLayer;
+ AVPlayerLayer *layer = static_cast<AVPlayerLayer*>(playerLayer);
if (m_playerLayer == layer)
return;
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 872b97bcc..fdaedea7a 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -1208,6 +1208,8 @@ HRESULT EVRCustomPresenter::checkEndOfStream()
// Everything is complete. Now we can tell the EVR that we are done.
notifyEvent(EC_COMPLETE, (LONG_PTR)S_OK, 0);
m_endStreaming = false;
+
+ stopSurface();
return S_OK;
}
diff --git a/src/plugins/directshow/common/directshowutils.cpp b/src/plugins/directshow/common/directshowutils.cpp
index 8f3f321e7..d1c1d42ab 100644
--- a/src/plugins/directshow/common/directshowutils.cpp
+++ b/src/plugins/directshow/common/directshowutils.cpp
@@ -56,8 +56,10 @@ bool DirectShowUtils::isPinConnected(IPin *pin, HRESULT *hrOut)
hrOut = &hr;
*hrOut = pin->ConnectedTo(&connectedPin);
- if (*hrOut == VFW_E_NOT_CONNECTED) // Not an error in this case
+ if (*hrOut == VFW_E_NOT_CONNECTED) { // Not an error in this case
*hrOut = S_OK;
+ return false;
+ }
if (FAILED(*hrOut)) {
qCDebug(qtDirectShowPlugin, "Querying pin connection failed!");
@@ -282,7 +284,7 @@ bool DirectShowUtils::connectFilters(IGraphBuilder *graph,
// Try to connect to the upstream filter first.
if (findAndConnect(upstreamFilter))
- return false;
+ return true;
const auto getFilters = [graph, hrOut]() -> IEnumFilters * {
IEnumFilters *f = nullptr;
diff --git a/src/plugins/directshow/directshow.pro b/src/plugins/directshow/directshow.pro
index 54d617166..e531efc53 100644
--- a/src/plugins/directshow/directshow.pro
+++ b/src/plugins/directshow/directshow.pro
@@ -17,12 +17,11 @@ mingw {
}
include(common/common.pri)
-qtConfig(directshow-player): include(player/player.pri)
+include(player/player.pri)
include(camera/camera.pri)
OTHER_FILES += \
- directshow.json \
- directshow_camera.json
+ directshow.json
PLUGIN_TYPE = mediaservice
PLUGIN_CLASS_NAME = DSServicePlugin
diff --git a/src/plugins/directshow/directshow_camera.json b/src/plugins/directshow/directshow_camera.json
deleted file mode 100644
index c37ce2c9a..000000000
--- a/src/plugins/directshow/directshow_camera.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "Keys": ["directshow"],
- "Services": ["org.qt-project.qt.camera"]
-}
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index 64b30f561..727a11b55 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -51,9 +51,7 @@
#include <dshow.h>
#include "dscameraservice.h"
-#if QT_CONFIG(directshow_player)
#include "directshowplayerservice.h"
-#endif
#include <qmediaserviceproviderplugin.h>
@@ -95,12 +93,11 @@ QMediaService* DSServicePlugin::create(QString const& key)
addRefCount();
return new DSCameraService;
}
-#if QT_CONFIG(directshow_player)
+
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) {
addRefCount();
return new DirectShowPlayerService;
}
-#endif
return 0;
}
diff --git a/src/plugins/directshow/dsserviceplugin.h b/src/plugins/directshow/dsserviceplugin.h
index 2e87058c3..55db9310c 100644
--- a/src/plugins/directshow/dsserviceplugin.h
+++ b/src/plugins/directshow/dsserviceplugin.h
@@ -55,13 +55,7 @@ class DSServicePlugin
Q_INTERFACES(QMediaServiceSupportedDevicesInterface)
Q_INTERFACES(QMediaServiceDefaultDeviceInterface)
Q_INTERFACES(QMediaServiceFeaturesInterface)
- // The player service provided by the WMF-plugin should preferably be used.
- // DirectShow should then only provide the camera (see QTBUG-29172, QTBUG-29175).
-#if QT_CONFIG(directshow_player)
Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "directshow.json")
-#else
- Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "directshow_camera.json")
-#endif
public:
QMediaService* create(QString const& key) override;
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
index 90d2b3e7d..52b73a7df 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
@@ -477,21 +477,14 @@ static QString convertBSTR(BSTR *string)
return value;
}
-void DirectShowMetaDataControl::reset()
+void DirectShowMetaDataControl::setMetadata(const QVariantMap &metadata)
{
- bool hadMetadata = !m_metadata.isEmpty();
- m_metadata.clear();
-
- setMetadataAvailable(false);
-
- if (hadMetadata)
- emit metaDataChanged();
+ m_metadata = metadata;
+ setMetadataAvailable(!m_metadata.isEmpty());
}
-void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter *source, const QString &fileSrc)
+void DirectShowMetaDataControl::updateMetadata(const QString &fileSrc, QVariantMap &metadata)
{
- m_metadata.clear();
-
#if QT_CONFIG(wshellitem)
if (!sHCreateItemFromParsingName) {
QSystemLibrary lib(QStringLiteral("shell32"));
@@ -518,90 +511,90 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
continue;
if (IsEqualPropertyKey(key, PKEY_Author)) {
- m_metadata.insert(QMediaMetaData::Author, convertValue(var));
+ metadata.insert(QMediaMetaData::Author, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Title)) {
- m_metadata.insert(QMediaMetaData::Title, convertValue(var));
+ metadata.insert(QMediaMetaData::Title, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_SubTitle)) {
- m_metadata.insert(QMediaMetaData::SubTitle, convertValue(var));
+ metadata.insert(QMediaMetaData::SubTitle, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_ParentalRating)) {
- m_metadata.insert(QMediaMetaData::ParentalRating, convertValue(var));
+ metadata.insert(QMediaMetaData::ParentalRating, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Comment)) {
- m_metadata.insert(QMediaMetaData::Description, convertValue(var));
+ metadata.insert(QMediaMetaData::Description, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Copyright)) {
- m_metadata.insert(QMediaMetaData::Copyright, convertValue(var));
+ metadata.insert(QMediaMetaData::Copyright, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_ProviderStyle)) {
- m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
+ metadata.insert(QMediaMetaData::Genre, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Year)) {
- m_metadata.insert(QMediaMetaData::Year, convertValue(var));
+ metadata.insert(QMediaMetaData::Year, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_DateEncoded)) {
- m_metadata.insert(QMediaMetaData::Date, convertValue(var));
+ metadata.insert(QMediaMetaData::Date, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Rating)) {
- m_metadata.insert(QMediaMetaData::UserRating,
+ metadata.insert(QMediaMetaData::UserRating,
int((convertValue(var).toUInt() - 1) / qreal(98) * 100));
} else if (IsEqualPropertyKey(key, PKEY_Keywords)) {
- m_metadata.insert(QMediaMetaData::Keywords, convertValue(var));
+ metadata.insert(QMediaMetaData::Keywords, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Language)) {
- m_metadata.insert(QMediaMetaData::Language, convertValue(var));
+ metadata.insert(QMediaMetaData::Language, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Publisher)) {
- m_metadata.insert(QMediaMetaData::Publisher, convertValue(var));
+ metadata.insert(QMediaMetaData::Publisher, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Duration)) {
- m_metadata.insert(QMediaMetaData::Duration,
+ metadata.insert(QMediaMetaData::Duration,
(convertValue(var).toLongLong() + 10000) / 10000);
} else if (IsEqualPropertyKey(key, PKEY_Audio_EncodingBitrate)) {
- m_metadata.insert(QMediaMetaData::AudioBitRate, convertValue(var));
+ metadata.insert(QMediaMetaData::AudioBitRate, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_AverageLevel)) {
- m_metadata.insert(QMediaMetaData::AverageLevel, convertValue(var));
+ metadata.insert(QMediaMetaData::AverageLevel, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Audio_ChannelCount)) {
- m_metadata.insert(QMediaMetaData::ChannelCount, convertValue(var));
+ metadata.insert(QMediaMetaData::ChannelCount, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Audio_PeakValue)) {
- m_metadata.insert(QMediaMetaData::PeakValue, convertValue(var));
+ metadata.insert(QMediaMetaData::PeakValue, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Audio_SampleRate)) {
- m_metadata.insert(QMediaMetaData::SampleRate, convertValue(var));
+ metadata.insert(QMediaMetaData::SampleRate, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_AlbumTitle)) {
- m_metadata.insert(QMediaMetaData::AlbumTitle, convertValue(var));
+ metadata.insert(QMediaMetaData::AlbumTitle, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_AlbumArtist)) {
- m_metadata.insert(QMediaMetaData::AlbumArtist, convertValue(var));
+ metadata.insert(QMediaMetaData::AlbumArtist, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Artist)) {
- m_metadata.insert(QMediaMetaData::ContributingArtist, convertValue(var));
+ metadata.insert(QMediaMetaData::ContributingArtist, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Composer)) {
- m_metadata.insert(QMediaMetaData::Composer, convertValue(var));
+ metadata.insert(QMediaMetaData::Composer, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Conductor)) {
- m_metadata.insert(QMediaMetaData::Conductor, convertValue(var));
+ metadata.insert(QMediaMetaData::Conductor, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Lyrics)) {
- m_metadata.insert(QMediaMetaData::Lyrics, convertValue(var));
+ metadata.insert(QMediaMetaData::Lyrics, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Mood)) {
- m_metadata.insert(QMediaMetaData::Mood, convertValue(var));
+ metadata.insert(QMediaMetaData::Mood, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_TrackNumber)) {
- m_metadata.insert(QMediaMetaData::TrackNumber, convertValue(var));
+ metadata.insert(QMediaMetaData::TrackNumber, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Genre)) {
- m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
+ metadata.insert(QMediaMetaData::Genre, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_ThumbnailStream)) {
- m_metadata.insert(QMediaMetaData::ThumbnailImage, convertValue(var));
+ metadata.insert(QMediaMetaData::ThumbnailImage, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Video_FrameHeight)) {
QSize res;
res.setHeight(convertValue(var).toUInt());
if (SUCCEEDED(pStore->GetValue(PKEY_Video_FrameWidth, &var)))
res.setWidth(convertValue(var).toUInt());
- m_metadata.insert(QMediaMetaData::Resolution, res);
+ metadata.insert(QMediaMetaData::Resolution, res);
} else if (IsEqualPropertyKey(key, PKEY_Video_HorizontalAspectRatio)) {
QSize aspectRatio;
aspectRatio.setWidth(convertValue(var).toUInt());
if (SUCCEEDED(pStore->GetValue(PKEY_Video_VerticalAspectRatio, &var)))
aspectRatio.setHeight(convertValue(var).toUInt());
- m_metadata.insert(QMediaMetaData::PixelAspectRatio, aspectRatio);
+ metadata.insert(QMediaMetaData::PixelAspectRatio, aspectRatio);
} else if (IsEqualPropertyKey(key, PKEY_Video_FrameRate)) {
- m_metadata.insert(QMediaMetaData::VideoFrameRate,
+ metadata.insert(QMediaMetaData::VideoFrameRate,
convertValue(var).toReal() / 1000);
} else if (IsEqualPropertyKey(key, PKEY_Video_EncodingBitrate)) {
- m_metadata.insert(QMediaMetaData::VideoBitRate, convertValue(var));
+ metadata.insert(QMediaMetaData::VideoBitRate, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Video_Director)) {
- m_metadata.insert(QMediaMetaData::Director, convertValue(var));
+ metadata.insert(QMediaMetaData::Director, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Writer)) {
- m_metadata.insert(QMediaMetaData::Writer, convertValue(var));
+ metadata.insert(QMediaMetaData::Writer, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Video_Compression)) {
- m_metadata.insert(QMediaMetaData::VideoCodec, nameForGUIDString(convertValue(var).toString()));
+ metadata.insert(QMediaMetaData::VideoCodec, nameForGUIDString(convertValue(var).toString()));
} else if (IsEqualPropertyKey(key, PKEY_Audio_Format)) {
- m_metadata.insert(QMediaMetaData::AudioCodec, nameForGUIDString(convertValue(var).toString()));
+ metadata.insert(QMediaMetaData::AudioCodec, nameForGUIDString(convertValue(var).toString()));
}
PropVariantClear(&var);
@@ -614,11 +607,14 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
shellItem->Release();
}
}
-
- if (!m_metadata.isEmpty())
- goto send_event;
+#else
+ Q_UNUSED(fileSrc);
+ Q_UNUSED(metadata);
#endif
+}
+void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter *source, QVariantMap &metadata)
+{
#if QT_CONFIG(wmsdk)
if (IWMHeaderInfo *info = com_cast<IWMHeaderInfo>(source, IID_IWMHeaderInfo)) {
const auto keys = *qt_wmMetaDataKeys();
@@ -644,15 +640,15 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
var = (var.toUInt() - 1) / qreal(98) * 100;
}
- m_metadata.insert(key.qtName, var);
+ metadata.insert(key.qtName, var);
}
}
info->Release();
}
- if (!m_metadata.isEmpty())
- goto send_event;
+ if (!metadata.isEmpty())
+ return;
#endif
{
IAMMediaContent *content = 0;
@@ -668,41 +664,23 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
BSTR string = 0;
if (content->get_AuthorName(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Author, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Author, convertBSTR(&string));
if (content->get_Title(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Title, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Title, convertBSTR(&string));
if (content->get_Description(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Description, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Description, convertBSTR(&string));
if (content->get_Rating(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::UserRating, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::UserRating, convertBSTR(&string));
if (content->get_Copyright(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Copyright, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Copyright, convertBSTR(&string));
content->Release();
}
}
-
-send_event:
- // DirectShowMediaPlayerService holds a lock at this point so defer emitting signals to a later
- // time.
- QCoreApplication::postEvent(this, new QEvent(QEvent::Type(MetaDataChanged)));
-}
-
-void DirectShowMetaDataControl::customEvent(QEvent *event)
-{
- if (event->type() == QEvent::Type(MetaDataChanged)) {
- event->accept();
-
- setMetadataAvailable(!m_metadata.isEmpty());
-
- emit metaDataChanged();
- } else {
- QMetaDataReaderControl::customEvent(event);
- }
}
void DirectShowMetaDataControl::setMetadataAvailable(bool available)
@@ -711,5 +689,10 @@ void DirectShowMetaDataControl::setMetadataAvailable(bool available)
return;
m_available = available;
- emit metaDataAvailableChanged(m_available);
+
+ // If the metadata is not available, notify about it immediately.
+ Qt::ConnectionType type = m_available ? Qt::QueuedConnection : Qt::AutoConnection;
+ QMetaObject::invokeMethod(this, "metaDataAvailableChanged", type, Q_ARG(bool, m_available));
+ // Currently the metadata is changed only with its availability.
+ QMetaObject::invokeMethod(this, "metaDataChanged", type);
}
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h
index ea20bf0c5..4196a7950 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.h
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.h
@@ -62,12 +62,10 @@ public:
QVariant metaData(const QString &key) const override;
QStringList availableMetaData() const override;
- void reset();
- void updateMetadata(IFilterGraph2 *graph, IBaseFilter *source,
- const QString &fileSrc = QString());
+ void setMetadata(const QVariantMap &metadata);
-protected:
- void customEvent(QEvent *event) override;
+ static void updateMetadata(const QString &fileSrc, QVariantMap &metadata);
+ static void updateMetadata(IFilterGraph2 *graph, IBaseFilter *source, QVariantMap &metadata);
private:
void setMetadataAvailable(bool available);
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index 08d99d735..d48350fa2 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -142,6 +142,7 @@ DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
, m_graphStatus(NoMedia)
, m_stream(0)
, m_graph(0)
+ , m_graphBuilder(nullptr)
, m_source(0)
, m_audioOutput(0)
, m_videoOutput(0)
@@ -297,7 +298,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
if (m_graph)
releaseGraph();
- m_resources = media.resources();
+ m_url = media.canonicalUrl();
m_stream = stream;
m_error = QMediaPlayer::NoError;
m_errorString = QString();
@@ -310,13 +311,11 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
m_seekable = false;
m_atEnd = false;
m_dontCacheNextSeekResult = false;
- m_metaDataControl->reset();
+ m_metaDataControl->setMetadata(QVariantMap());
- if (m_resources.isEmpty() && !stream) {
+ if (m_url.isEmpty() && !stream) {
m_pendingTasks = 0;
m_graphStatus = NoMedia;
-
- m_url.clear();
} else if (stream && (!stream->isReadable() || stream->isSequential())) {
m_pendingTasks = 0;
m_graphStatus = InvalidMedia;
@@ -328,6 +327,15 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
m_graphStatus = Loading;
m_graph = com_new<IFilterGraph2>(CLSID_FilterGraph, iid_IFilterGraph2);
+ m_graphBuilder = com_new<ICaptureGraphBuilder2>(CLSID_CaptureGraphBuilder2, IID_ICaptureGraphBuilder2);
+
+ // Attach the filter graph to the capture graph.
+ HRESULT hr = m_graphBuilder->SetFiltergraph(m_graph);
+ if (FAILED(hr)) {
+ qCWarning(qtDirectShowPlugin, "[0x%x] Failed to attach filter to capture graph", hr);
+ m_graphBuilder->Release();
+ m_graphBuilder = nullptr;
+ }
if (stream)
m_pendingTasks = SetStreamSource;
@@ -348,9 +356,6 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
{
IBaseFilter *source = 0;
- QMediaResource resource = m_resources.takeFirst();
- m_url = resource.url();
-
HRESULT hr = E_FAIL;
if (m_url.scheme() == QLatin1String("http") || m_url.scheme() == QLatin1String("https")) {
static const GUID clsid_WMAsfReader = {
@@ -403,7 +408,7 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
m_pendingTasks |= SetRate;
m_source = source;
- } else if (!m_resources.isEmpty()) {
+ } else if (!m_url.isEmpty()) {
m_pendingTasks |= SetUrlSource;
} else {
m_graphStatus = InvalidMedia;
@@ -596,7 +601,6 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker)
{
- Q_UNUSED(locker)
if (m_graphStatus != Loaded) {
if (IMediaEvent *event = com_cast<IMediaEvent>(m_graph, IID_IMediaEvent)) {
event->GetEventHandle(reinterpret_cast<OAEVENT *>(&m_eventHandle));
@@ -625,6 +629,11 @@ void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker)
m_graphStatus = Loaded;
+ // Do not block gui thread while updating metadata from file.
+ locker->unlock();
+ DirectShowMetaDataControl::updateMetadata(m_url.toString(), m_metadata);
+ locker->relock();
+
QCoreApplication::postEvent(this, new QEvent(QEvent::Type(FinalizedLoad)));
}
@@ -674,6 +683,11 @@ void DirectShowPlayerService::doReleaseGraph(QMutexLocker *locker)
m_graph->Release();
m_graph = 0;
+ if (m_graphBuilder) {
+ m_graphBuilder->Release();
+ m_graphBuilder = nullptr;
+ }
+
m_loop->wake();
}
@@ -684,7 +698,7 @@ void DirectShowPlayerService::doSetVideoProbe(QMutexLocker *locker)
{
Q_UNUSED(locker);
- if (!m_graph) {
+ if (!m_graph || !m_graphBuilder) {
qCWarning(qtDirectShowPlugin, "Attempting to set a video probe without a valid graph!");
return;
}
@@ -700,41 +714,14 @@ void DirectShowPlayerService::doSetVideoProbe(QMutexLocker *locker)
return;
}
- // TODO: Make util function for getting this, so it's easy to keep it in sync.
- static const GUID subtypes[] = { MEDIASUBTYPE_ARGB32,
- MEDIASUBTYPE_RGB32,
- MEDIASUBTYPE_RGB24,
- MEDIASUBTYPE_RGB565,
- MEDIASUBTYPE_RGB555,
- MEDIASUBTYPE_AYUV,
- MEDIASUBTYPE_I420,
- MEDIASUBTYPE_IYUV,
- MEDIASUBTYPE_YV12,
- MEDIASUBTYPE_UYVY,
- MEDIASUBTYPE_YUYV,
- MEDIASUBTYPE_YUY2,
- MEDIASUBTYPE_NV12,
- MEDIASUBTYPE_MJPG,
- MEDIASUBTYPE_IMC1,
- MEDIASUBTYPE_IMC2,
- MEDIASUBTYPE_IMC3,
- MEDIASUBTYPE_IMC4 };
-
- // Negotiate the subtype
- DirectShowMediaType mediaType(AM_MEDIA_TYPE { MEDIATYPE_Video });
- const int items = (sizeof subtypes / sizeof(GUID));
- bool connected = false;
- for (int i = 0; i != items; ++i) {
- mediaType->subtype = subtypes[i];
- m_videoSampleGrabber->setMediaType(&mediaType);
- if (DirectShowUtils::connectFilters(m_graph, m_source, m_videoSampleGrabber->filter(), true)) {
- connected = true;
- break;
- }
- }
+ DirectShowMediaType mediaType({ MEDIATYPE_Video, MEDIASUBTYPE_ARGB32 });
+ m_videoSampleGrabber->setMediaType(&mediaType);
- if (!connected) {
- qCWarning(qtDirectShowPlugin, "Unable to connect the video probe!");
+ // Connect source filter to sample grabber filter.
+ HRESULT hr = m_graphBuilder->RenderStream(nullptr, &MEDIATYPE_Video,
+ m_source, nullptr, m_videoSampleGrabber->filter());
+ if (FAILED(hr)) {
+ qCWarning(qtDirectShowPlugin, "[0x%x] Failed to connect the video sample grabber", hr);
return;
}
@@ -765,8 +752,15 @@ void DirectShowPlayerService::doSetAudioProbe(QMutexLocker *locker)
}
if (!DirectShowUtils::connectFilters(m_graph, m_source, m_audioSampleGrabber->filter(), true)) {
- qCWarning(qtDirectShowPlugin, "Failed to connect the audio sample grabber");
- return;
+ // Connect source filter to sample grabber filter.
+ HRESULT hr = m_graphBuilder
+ ? m_graphBuilder->RenderStream(nullptr, &MEDIATYPE_Audio,
+ m_source, nullptr, m_audioSampleGrabber->filter())
+ : E_FAIL;
+ if (FAILED(hr)) {
+ qCWarning(qtDirectShowPlugin, "[0x%x] Failed to connect the audio sample grabber", hr);
+ return;
+ }
}
m_audioSampleGrabber->start(DirectShowSampleGrabber::CallbackMethod::BufferCB);
@@ -1406,7 +1400,11 @@ void DirectShowPlayerService::customEvent(QEvent *event)
QMutexLocker locker(&m_mutex);
m_playerControl->updateMediaInfo(m_duration, m_streamTypes, m_seekable);
- m_metaDataControl->updateMetadata(m_graph, m_source, m_url.toString());
+ if (m_metadata.isEmpty())
+ DirectShowMetaDataControl::updateMetadata(m_graph, m_source, m_metadata);
+
+ m_metaDataControl->setMetadata(m_metadata);
+ m_metadata.clear();
updateStatus();
} else if (event->type() == QEvent::Type(Error)) {
diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h
index 4a9e25678..a6eeb8a77 100644
--- a/src/plugins/directshow/player/directshowplayerservice.h
+++ b/src/plugins/directshow/player/directshowplayerservice.h
@@ -215,6 +215,7 @@ private:
QMediaPlayer::Error m_error;
QIODevice *m_stream;
IFilterGraph2 *m_graph;
+ ICaptureGraphBuilder2 *m_graphBuilder;
IBaseFilter *m_source;
IBaseFilter *m_audioOutput;
IBaseFilter *m_videoOutput;
@@ -224,13 +225,13 @@ private:
qint64 m_duration;
QMediaTimeRange m_playbackRange;
QUrl m_url;
- QMediaResourceList m_resources;
QString m_errorString;
QMutex m_mutex;
bool m_buffering;
bool m_seekable;
bool m_atEnd;
bool m_dontCacheNextSeekResult;
+ QVariantMap m_metadata;
friend class DirectShowPlayerServiceThread;
};
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 826d26bdb..74d59231c 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -462,6 +462,7 @@ HRESULT VideoSurfaceFilter::EndOfStream()
if (!m_pendingSample && m_running)
checkEOS();
+ stopSurface();
return S_OK;
}
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index 23cbd6082..77178c322 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -541,13 +541,20 @@ GstElement *CameraBinSession::buildCameraSource()
if (!m_videoSrc)
m_videoSrc = gst_element_factory_make("v4l2src", "camera_source");
+ if (!m_videoSrc)
+ m_videoSrc = gst_element_factory_make("ksvideosrc", "camera_source");
+
if (m_videoSrc)
g_object_set(G_OBJECT(m_cameraSrc), "video-source", m_videoSrc, NULL);
}
- if (m_videoSrc)
- g_object_set(G_OBJECT(m_videoSrc), "device", m_inputDevice.toUtf8().constData(), NULL);
+ if (m_videoSrc) {
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSrc), "device"))
+ g_object_set(G_OBJECT(m_videoSrc), "device", m_inputDevice.toUtf8().constData(), NULL);
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSrc), "device-path"))
+ g_object_set(G_OBJECT(m_videoSrc), "device-path", m_inputDevice.toUtf8().constData(), NULL);
+ }
} else if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_cameraSrc), "camera-device")) {
if (m_inputDevice == QLatin1String("secondary")) {
g_object_set(G_OBJECT(m_cameraSrc), "camera-device", 1, NULL);
@@ -1177,11 +1184,16 @@ void CameraBinSession::recordVideo()
if (format.isEmpty())
format = m_mediaContainerControl->actualContainerFormat();
- const QString actualFileName = m_mediaStorageLocation.generateFileName(m_sink.isLocalFile() ? m_sink.toLocalFile()
- : m_sink.toString(),
+ const QString fileName = m_sink.isLocalFile() ? m_sink.toLocalFile() : m_sink.toString();
+ const QFileInfo fileInfo(fileName);
+ const QString extension = fileInfo.suffix().isEmpty()
+ ? QGstUtils::fileExtensionForMimeType(format)
+ : fileInfo.suffix();
+
+ const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName,
QMediaStorageLocation::Movies,
QLatin1String("clip_"),
- QGstUtils::fileExtensionForMimeType(format));
+ extension);
m_recordingActive = true;
m_actualSink = QUrl::fromLocalFile(actualFileName);
diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
index ea7a2be0c..b4bd1c55c 100644
--- a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
+++ b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
@@ -310,7 +310,34 @@ bool QPulseAudioOutput::open()
if (!m_category.isNull())
pa_proplist_sets(propList, PA_PROP_MEDIA_ROLE, m_category.toLatin1().constData());
- m_stream = pa_stream_new_with_proplist(pulseEngine->context(), m_streamName.constData(), &m_spec, 0, propList);
+ static const auto mapName = qEnvironmentVariable("QT_PA_CHANNEL_MAP");
+ pa_channel_map_def_t mapDef = PA_CHANNEL_MAP_DEFAULT;
+ if (mapName == QLatin1String("ALSA"))
+ mapDef = PA_CHANNEL_MAP_ALSA;
+ else if (mapName == QLatin1String("AUX"))
+ mapDef = PA_CHANNEL_MAP_AUX;
+ else if (mapName == QLatin1String("WAVEEX"))
+ mapDef = PA_CHANNEL_MAP_WAVEEX;
+ else if (mapName == QLatin1String("OSS"))
+ mapDef = PA_CHANNEL_MAP_OSS;
+ else if (!mapName.isEmpty())
+ qWarning() << "Unknown pulse audio channel mapping definition:" << mapName;
+
+ pa_channel_map m;
+ auto channelMap = pa_channel_map_init_extend(&m, m_spec.channels, mapDef);
+ if (!channelMap)
+ qWarning() << "QAudioOutput: pa_channel_map_init_extend() Could not initialize channel map";
+
+ m_stream = pa_stream_new_with_proplist(pulseEngine->context(), m_streamName.constData(), &m_spec, channelMap, propList);
+ if (!m_stream) {
+ qWarning() << "QAudioOutput: pa_stream_new_with_proplist() failed!";
+ pulseEngine->unlock();
+ setError(QAudio::OpenError);
+ setState(QAudio::StoppedState);
+ emit stateChanged(m_deviceState);
+ return false;
+ }
+
pa_proplist_free(propList);
pa_stream_set_state_callback(m_stream, outputStreamStateCallback, this);
diff --git a/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp b/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp
index 438c2aae0..c0eada324 100644
--- a/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp
+++ b/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp
@@ -124,14 +124,12 @@ void MFAudioDecoderControl::setSourceFilename(const QString &fileName)
m_sourceFilename = fileName;
if (!m_sourceFilename.isEmpty()) {
m_sourceResolver->shutdown();
- QMediaResourceList rl;
QUrl url;
if (m_sourceFilename.startsWith(':'))
url = QUrl(QStringLiteral("qrc%1").arg(m_sourceFilename));
else
url = QUrl::fromLocalFile(m_sourceFilename);
- rl.push_back(QMediaResource(url));
- m_sourceResolver->load(rl, 0);
+ m_sourceResolver->load(url, 0);
m_loadingSource = true;
} else {
onSourceCleared();
@@ -155,7 +153,7 @@ void MFAudioDecoderControl::setSourceDevice(QIODevice *device)
m_device = device;
if (m_device) {
m_sourceResolver->shutdown();
- m_sourceResolver->load(QMediaResourceList(), m_device);
+ m_sourceResolver->load(QUrl(), m_device);
m_loadingSource = true;
} else {
onSourceCleared();
diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp
index 3219936a7..9f909252d 100644
--- a/src/plugins/wmf/player/mfplayersession.cpp
+++ b/src/plugins/wmf/player/mfplayersession.cpp
@@ -197,12 +197,12 @@ void MFPlayerSession::load(const QMediaContent &media, QIODevice *stream)
qDebug() << "load";
#endif
clear();
- QMediaResourceList resources = media.resources();
+ QUrl url = media.canonicalUrl();
if (m_status == QMediaPlayer::LoadingMedia && m_sourceResolver)
m_sourceResolver->cancel();
- if (resources.isEmpty() && !stream) {
+ if (url.isEmpty() && !stream) {
changeStatus(QMediaPlayer::NoMedia);
} else if (stream && (!stream->isReadable())) {
changeStatus(QMediaPlayer::InvalidMedia);
@@ -210,7 +210,7 @@ void MFPlayerSession::load(const QMediaContent &media, QIODevice *stream)
} else {
createSession();
changeStatus(QMediaPlayer::LoadingMedia);
- m_sourceResolver->load(resources, stream);
+ m_sourceResolver->load(url, stream);
}
emit positionChanged(position());
}
diff --git a/src/plugins/wmf/player/mfplayersession.h b/src/plugins/wmf/player/mfplayersession.h
index 72dc99d02..21fabbd92 100644
--- a/src/plugins/wmf/player/mfplayersession.h
+++ b/src/plugins/wmf/player/mfplayersession.h
@@ -62,9 +62,6 @@ QT_END_NAMESPACE
QT_USE_NAMESPACE
class SourceResolver;
-#ifndef Q_WS_SIMULATOR
-class EvrVideoWindowControl;
-#endif
class MFAudioEndpointControl;
class MFVideoRendererControl;
class MFPlayerControl;
diff --git a/src/plugins/wmf/sourceresolver.cpp b/src/plugins/wmf/sourceresolver.cpp
index 83949c976..c6f4e8566 100644
--- a/src/plugins/wmf/sourceresolver.cpp
+++ b/src/plugins/wmf/sourceresolver.cpp
@@ -158,7 +158,7 @@ HRESULT STDMETHODCALLTYPE SourceResolver::GetParameters(DWORD*, DWORD*)
return E_NOTIMPL;
}
-void SourceResolver::load(const QMediaResourceList &resources, QIODevice* stream)
+void SourceResolver::load(const QUrl &url, QIODevice* stream)
{
QMutexLocker locker(&m_mutex);
HRESULT hr = S_OK;
@@ -174,12 +174,10 @@ void SourceResolver::load(const QMediaResourceList &resources, QIODevice* stream
qWarning() << "Failed to create Source Resolver!";
emit error(hr);
} else if (stream) {
- QString url;
- if (!resources.isEmpty())
- url = resources.constFirst().url().toString();
+ QString urlString = url.toString();
m_stream = new MFStream(stream, false);
hr = m_sourceResolver->BeginCreateObjectFromByteStream(
- m_stream, url.isEmpty() ? 0 : reinterpret_cast<LPCWSTR>(url.utf16()),
+ m_stream, urlString.isEmpty() ? 0 : reinterpret_cast<LPCWSTR>(urlString.utf16()),
MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
, NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
if (FAILED(hr)) {
@@ -187,8 +185,6 @@ void SourceResolver::load(const QMediaResourceList &resources, QIODevice* stream
emit error(hr);
}
} else {
- QMediaResource resource = resources.constFirst();
- QUrl url = resource.url();
#ifdef DEBUG_MEDIAFOUNDATION
qDebug() << "loading :" << url;
qDebug() << "url path =" << url.path().mid(1);
diff --git a/src/plugins/wmf/sourceresolver.h b/src/plugins/wmf/sourceresolver.h
index 387f59739..aa104a60e 100644
--- a/src/plugins/wmf/sourceresolver.h
+++ b/src/plugins/wmf/sourceresolver.h
@@ -59,7 +59,7 @@ public:
HRESULT STDMETHODCALLTYPE GetParameters(DWORD*, DWORD*);
- void load(const QMediaResourceList &resources, QIODevice* stream);
+ void load(const QUrl &url, QIODevice* stream);
void cancel();
diff --git a/src/plugins/wmf/wmf.pro b/src/plugins/wmf/wmf.pro
index b202ff2a1..7c712233d 100644
--- a/src/plugins/wmf/wmf.pro
+++ b/src/plugins/wmf/wmf.pro
@@ -17,12 +17,11 @@ SOURCES += \
mfstream.cpp \
sourceresolver.cpp
-qtConfig(wmf-player): include (player/player.pri)
+include (player/player.pri)
include (decoder/decoder.pri)
OTHER_FILES += \
- wmf.json \
- wmf_audiodecode.json
+ wmf.json
PLUGIN_TYPE = mediaservice
PLUGIN_CLASS_NAME = WMFServicePlugin
diff --git a/src/plugins/wmf/wmf_audiodecode.json b/src/plugins/wmf/wmf_audiodecode.json
deleted file mode 100644
index 2a65dd758..000000000
--- a/src/plugins/wmf/wmf_audiodecode.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "Keys": ["windowsmediafoundation"],
- "Services": ["org.qt-project.qt.audiodecode"]
-}
diff --git a/src/plugins/wmf/wmfserviceplugin.cpp b/src/plugins/wmf/wmfserviceplugin.cpp
index 1eeb22428..740067600 100644
--- a/src/plugins/wmf/wmfserviceplugin.cpp
+++ b/src/plugins/wmf/wmfserviceplugin.cpp
@@ -42,9 +42,7 @@
#include <QtCore/QFile>
#include "wmfserviceplugin.h"
-#if QT_CONFIG(wmf_player)
#include "mfplayerservice.h"
-#endif
#include "mfdecoderservice.h"
#include <mfapi.h>
@@ -74,12 +72,11 @@ void releaseRefCount()
QMediaService* WMFServicePlugin::create(QString const& key)
{
-#if QT_CONFIG(wmf_player)
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) {
addRefCount();
return new MFPlayerService;
}
-#endif
+
if (key == QLatin1String(Q_MEDIASERVICE_AUDIODECODER)) {
addRefCount();
return new MFAudioDecoderService;
@@ -97,13 +94,9 @@ void WMFServicePlugin::release(QMediaService *service)
QMediaServiceProviderHint::Features WMFServicePlugin::supportedFeatures(
const QByteArray &service) const
{
-#if QT_CONFIG(wmf_player)
if (service == Q_MEDIASERVICE_MEDIAPLAYER)
return QMediaServiceProviderHint::StreamPlayback;
else
-#else
- Q_UNUSED(service);
-#endif
return QMediaServiceProviderHint::Features();
}
diff --git a/src/plugins/wmf/wmfserviceplugin.h b/src/plugins/wmf/wmfserviceplugin.h
index 826ca1d26..493a0b08c 100644
--- a/src/plugins/wmf/wmfserviceplugin.h
+++ b/src/plugins/wmf/wmfserviceplugin.h
@@ -55,11 +55,8 @@ class WMFServicePlugin
Q_INTERFACES(QMediaServiceSupportedDevicesInterface)
Q_INTERFACES(QMediaServiceDefaultDeviceInterface)
Q_INTERFACES(QMediaServiceFeaturesInterface)
-#if QT_CONFIG(wmf_player)
Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "wmf.json")
-#else
- Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "wmf_audiodecode.json")
-#endif
+
public:
QMediaService* create(QString const& key);
void release(QMediaService *service);
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
index 3c6a6f9c5..fccab54ab 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
@@ -878,4 +878,28 @@ void QDeclarativeVideoOutput::_q_invalidateSceneGraph()
m_backend->invalidateSceneGraph();
}
+/*!
+ \qmlproperty enumeration QtMultimedia::VideoOutput::flushMode
+
+ Set this property to define what \c VideoOutput should show
+ when playback is finished or stopped.
+
+ \list
+ \li EmptyFrame - clears video output.
+ \li FirstFrame - shows the first valid frame.
+ \li LastFrame - shows the last valid frame.
+ \endlist
+
+ The default flush mode is EmptyFrame.
+*/
+
+void QDeclarativeVideoOutput::setFlushMode(FlushMode mode)
+{
+ if (m_flushMode == mode)
+ return;
+
+ m_flushMode = mode;
+ emit flushModeChanged();
+}
+
QT_END_NAMESPACE
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp
index c51aec088..5cb4689cc 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp
@@ -46,6 +46,7 @@
#include <QtCore/qloggingcategory.h>
#include <private/qmediapluginloader_p.h>
#include <private/qsgvideonode_p.h>
+#include <private/qvideoframe_p.h>
#include <QtGui/QOpenGLContext>
#include <QtQuick/QQuickWindow>
@@ -210,13 +211,13 @@ void QDeclarativeVideoRendererBackend::releaseControl()
QSize QDeclarativeVideoRendererBackend::nativeSize() const
{
- return m_surface->surfaceFormat().sizeHint();
+ return m_surfaceFormat.sizeHint();
}
void QDeclarativeVideoRendererBackend::updateGeometry()
{
- const QRectF viewport = videoSurface()->surfaceFormat().viewport();
- const QSizeF frameSize = videoSurface()->surfaceFormat().frameSize();
+ const QRectF viewport = m_surfaceFormat.viewport();
+ const QSizeF frameSize = m_surfaceFormat.frameSize();
const QRectF normalizedViewport(viewport.x() / frameSize.width(),
viewport.y() / frameSize.height(),
viewport.width() / frameSize.width(),
@@ -257,13 +258,13 @@ void QDeclarativeVideoRendererBackend::updateGeometry()
}
}
- if (videoSurface()->surfaceFormat().scanLineDirection() == QVideoSurfaceFormat::BottomToTop) {
+ if (m_surfaceFormat.scanLineDirection() == QVideoSurfaceFormat::BottomToTop) {
qreal top = m_sourceTextureRect.top();
m_sourceTextureRect.setTop(m_sourceTextureRect.bottom());
m_sourceTextureRect.setBottom(top);
}
- if (videoSurface()->surfaceFormat().property("mirrored").toBool()) {
+ if (m_surfaceFormat.property("mirrored").toBool()) {
qreal left = m_sourceTextureRect.left();
m_sourceTextureRect.setLeft(m_sourceTextureRect.right());
m_sourceTextureRect.setRight(left);
@@ -294,7 +295,6 @@ QSGNode *QDeclarativeVideoRendererBackend::updatePaintNode(QSGNode *oldNode,
if (m_frameChanged) {
// Run the VideoFilter if there is one. This must be done before potentially changing the videonode below.
if (m_frame.isValid() && !m_filters.isEmpty()) {
- const QVideoSurfaceFormat surfaceFormat = videoSurface()->surfaceFormat();
for (int i = 0; i < m_filters.count(); ++i) {
QAbstractVideoFilter *filter = m_filters[i].filter;
QVideoFilterRunnable *&runnable = m_filters[i].runnable;
@@ -309,7 +309,7 @@ QSGNode *QDeclarativeVideoRendererBackend::updatePaintNode(QSGNode *oldNode,
if (i == m_filters.count() - 1)
flags |= QVideoFilterRunnable::LastInChain;
- QVideoFrame newFrame = runnable->run(&m_frame, surfaceFormat, flags);
+ QVideoFrame newFrame = runnable->run(&m_frame, m_surfaceFormat, flags);
if (newFrame.isValid() && newFrame != m_frame) {
isFrameModified = true;
@@ -336,12 +336,13 @@ QSGNode *QDeclarativeVideoRendererBackend::updatePaintNode(QSGNode *oldNode,
// Get a node that supports our frame. The surface is irrelevant, our
// QSGVideoItemSurface supports (logically) anything.
QVideoSurfaceFormat nodeFormat(m_frame.size(), m_frame.pixelFormat(), m_frame.handleType());
- const QVideoSurfaceFormat surfaceFormat = m_surface->surfaceFormat();
- nodeFormat.setYCbCrColorSpace(surfaceFormat.yCbCrColorSpace());
- nodeFormat.setPixelAspectRatio(surfaceFormat.pixelAspectRatio());
- nodeFormat.setScanLineDirection(surfaceFormat.scanLineDirection());
- nodeFormat.setViewport(surfaceFormat.viewport());
- nodeFormat.setFrameRate(surfaceFormat.frameRate());
+ nodeFormat.setYCbCrColorSpace(m_surfaceFormat.yCbCrColorSpace());
+ nodeFormat.setPixelAspectRatio(m_surfaceFormat.pixelAspectRatio());
+ nodeFormat.setScanLineDirection(m_surfaceFormat.scanLineDirection());
+ nodeFormat.setViewport(m_surfaceFormat.viewport());
+ nodeFormat.setFrameRate(m_surfaceFormat.frameRate());
+ // Update current surface format if something has changed.
+ m_surfaceFormat = nodeFormat;
videoNode = factory->createNode(nodeFormat);
if (videoNode) {
qCDebug(qLcVideo) << "updatePaintNode: Video node created. Handle type:" << m_frame.handleType()
@@ -367,6 +368,14 @@ QSGNode *QDeclarativeVideoRendererBackend::updatePaintNode(QSGNode *oldNode,
if (isFrameModified)
flags |= QSGVideoNode::FrameFiltered;
videoNode->setCurrentFrame(m_frame, flags);
+
+ if ((q->flushMode() == QDeclarativeVideoOutput::FirstFrame && !m_frameOnFlush.isValid())
+ || q->flushMode() == QDeclarativeVideoOutput::LastFrame) {
+ m_frameOnFlush = m_surfaceFormat.handleType() == QAbstractVideoBuffer::NoHandle
+ ? m_frame
+ : qt_imageFromVideoFrame(m_frame);
+ }
+
//don't keep the frame for more than really necessary
m_frameChanged = false;
m_frame = QVideoFrame();
@@ -403,7 +412,7 @@ QOpenGLContext *QDeclarativeVideoRendererBackend::glContext() const
void QDeclarativeVideoRendererBackend::present(const QVideoFrame &frame)
{
m_frameMutex.lock();
- m_frame = frame;
+ m_frame = frame.isValid() ? frame : m_frameOnFlush;
m_frameChanged = true;
m_frameMutex.unlock();
@@ -450,10 +459,12 @@ QList<QVideoFrame::PixelFormat> QSGVideoItemSurface::supportedPixelFormats(
bool QSGVideoItemSurface::start(const QVideoSurfaceFormat &format)
{
qCDebug(qLcVideo) << "Video surface format:" << format << "all supported formats:" << supportedPixelFormats(format.handleType());
+ m_backend->m_frameOnFlush = QVideoFrame();
if (!supportedPixelFormats(format.handleType()).contains(format.pixelFormat()))
return false;
+ m_backend->m_surfaceFormat = format;
return QAbstractVideoSurface::start(format);
}
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h
index 4f1a90c8b..c69e74150 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h
@@ -100,8 +100,10 @@ private:
QPointer<QVideoRendererControl> m_rendererControl;
QList<QSGVideoNodeFactoryInterface*> m_videoNodeFactories;
QSGVideoItemSurface *m_surface;
+ QVideoSurfaceFormat m_surfaceFormat;
QOpenGLContext *m_glContext;
QVideoFrame m_frame;
+ QVideoFrame m_frameOnFlush;
bool m_frameChanged;
QSGVideoNodeFactory_YUV m_i420Factory;
QSGVideoNodeFactory_RGB m_rgbFactory;
diff --git a/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp b/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp
index 707a01512..3059a4641 100644
--- a/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp
+++ b/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp
@@ -106,6 +106,7 @@ public slots:
private slots:
void fillMode();
+ void flushMode();
void orientation();
void surfaceSource();
void sourceRect();
@@ -161,6 +162,7 @@ void tst_QDeclarativeVideoOutput::initTestCase()
}
Q_DECLARE_METATYPE(QDeclarativeVideoOutput::FillMode)
+Q_DECLARE_METATYPE(QDeclarativeVideoOutput::FlushMode)
tst_QDeclarativeVideoOutput::tst_QDeclarativeVideoOutput()
: m_mappingComponent(0)
@@ -199,6 +201,24 @@ void tst_QDeclarativeVideoOutput::fillMode()
delete videoOutput;
}
+void tst_QDeclarativeVideoOutput::flushMode()
+{
+ QQmlComponent component(&m_engine);
+ component.setData(m_plainQML, QUrl());
+
+ QObject *videoOutput = component.create();
+ QVERIFY(videoOutput != 0);
+
+ QSignalSpy propSpy(videoOutput, SIGNAL(flushModeChanged()));
+
+ QCOMPARE(videoOutput->property("flushMode").value<QDeclarativeVideoOutput::FlushMode>(), QDeclarativeVideoOutput::EmptyFrame);
+ QCOMPARE(propSpy.count(), 0);
+
+ videoOutput->setProperty("flushMode", QVariant(int(QDeclarativeVideoOutput::FirstFrame)));
+ QCOMPARE(videoOutput->property("fillMode").value<QDeclarativeVideoOutput::FlushMode>(), QDeclarativeVideoOutput::FirstFrame);
+ QCOMPARE(propSpy.count(), 1);
+}
+
void tst_QDeclarativeVideoOutput::orientation()
{
QQmlComponent component(&m_engine);
diff --git a/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp b/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp
index fa98c8b16..7cbd57007 100644
--- a/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp
+++ b/tests/auto/integration/qsoundeffect/tst_qsoundeffect.cpp
@@ -60,6 +60,7 @@ private slots:
void testSetSourceWhileLoading();
void testSetSourceWhilePlaying();
+ void testSupportedMimeTypes_data();
void testSupportedMimeTypes();
void testCorruptFile();
void testPlaying24Bits();
@@ -387,9 +388,19 @@ void tst_QSoundEffect::testSetSourceWhilePlaying()
}
}
+void tst_QSoundEffect::testSupportedMimeTypes_data()
+{
+ // Verify also passing of audio device info as parameter
+ QTest::addColumn<QSoundEffect*>("instance");
+ QTest::newRow("without QAudioDeviceInfo") << sound;
+ QAudioDeviceInfo deviceInfo(QAudioDeviceInfo::defaultOutputDevice());
+ QTest::newRow("with QAudioDeviceInfo") << new QSoundEffect(deviceInfo, this);
+}
+
void tst_QSoundEffect::testSupportedMimeTypes()
{
- QStringList mimeTypes = sound->supportedMimeTypes();
+ QFETCH(QSoundEffect*, instance);
+ QStringList mimeTypes = instance->supportedMimeTypes();
QVERIFY(!mimeTypes.empty());
QVERIFY(mimeTypes.indexOf(QLatin1String("audio/wav")) != -1 ||
mimeTypes.indexOf(QLatin1String("audio/x-wav")) != -1 ||