diff options
Diffstat (limited to 'src/multimedia')
52 files changed, 621 insertions, 438 deletions
diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp index 3768fd196..e4918edf2 100644 --- a/src/multimedia/audio/qaudiobuffer.cpp +++ b/src/multimedia/audio/qaudiobuffer.cpp @@ -140,15 +140,15 @@ public: free(mBuffer); } - void release() {delete this;} - QAudioFormat format() const {return mFormat;} - qint64 startTime() const {return mStartTime;} - int frameCount() const {return mFrameCount;} + void release() override {delete this;} + QAudioFormat format() const override {return mFormat;} + qint64 startTime() const override {return mStartTime;} + int frameCount() const override {return mFrameCount;} - void *constData() const {return mBuffer;} + void *constData() const override {return mBuffer;} - void *writableData() {return mBuffer;} - QAbstractAudioBuffer *clone() const + void *writableData() override {return mBuffer;} + QAbstractAudioBuffer *clone() const override { return new QMemoryAudioBufferProvider(mBuffer, mFrameCount, mFormat, mStartTime); } diff --git a/src/multimedia/audio/qaudiodecoder.h b/src/multimedia/audio/qaudiodecoder.h index a63a6836f..85e0b75f7 100644 --- a/src/multimedia/audio/qaudiodecoder.h +++ b/src/multimedia/audio/qaudiodecoder.h @@ -120,8 +120,8 @@ Q_SIGNALS: void durationChanged(qint64 duration); public: - virtual bool bind(QObject *); - virtual void unbind(QObject *); + bool bind(QObject *) override; + void unbind(QObject *) override; private: Q_DISABLE_COPY(QAudioDecoder) diff --git a/src/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/audio/qaudiodevicefactory.cpp index c3e4929b3..b1788f28a 100644 --- a/src/multimedia/audio/qaudiodevicefactory.cpp +++ b/src/multimedia/audio/qaudiodevicefactory.cpp @@ -61,64 +61,64 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, audioLoader, class QNullDeviceInfo : public QAbstractAudioDeviceInfo { public: - QAudioFormat preferredFormat() const { qWarning()<<"using null deviceinfo, none available"; return QAudioFormat(); } - bool isFormatSupported(const QAudioFormat& ) const { return false; } + QAudioFormat preferredFormat() const override { qWarning()<<"using null deviceinfo, none available"; return QAudioFormat(); } + bool isFormatSupported(const QAudioFormat& ) const override { return false; } QAudioFormat nearestFormat(const QAudioFormat& ) const { return QAudioFormat(); } - QString deviceName() const { return QString(); } - QStringList supportedCodecs() { return QStringList(); } - QList<int> supportedSampleRates() { return QList<int>(); } - QList<int> supportedChannelCounts() { return QList<int>(); } - QList<int> supportedSampleSizes() { return QList<int>(); } - QList<QAudioFormat::Endian> supportedByteOrders() { return QList<QAudioFormat::Endian>(); } - QList<QAudioFormat::SampleType> supportedSampleTypes() { return QList<QAudioFormat::SampleType>(); } + QString deviceName() const override { return QString(); } + QStringList supportedCodecs() override { return QStringList(); } + QList<int> supportedSampleRates() override { return QList<int>(); } + QList<int> supportedChannelCounts() override { return QList<int>(); } + QList<int> supportedSampleSizes() override { return QList<int>(); } + QList<QAudioFormat::Endian> supportedByteOrders() override { return QList<QAudioFormat::Endian>(); } + QList<QAudioFormat::SampleType> supportedSampleTypes() override { return QList<QAudioFormat::SampleType>(); } }; class QNullInputDevice : public QAbstractAudioInput { public: - void start(QIODevice*) { qWarning()<<"using null input device, none available";} - QIODevice* start() { qWarning()<<"using null input device, none available"; return 0; } - void stop() {} - void reset() {} - void suspend() {} - void resume() {} - int bytesReady() const { return 0; } - int periodSize() const { return 0; } - void setBufferSize(int ) {} - int bufferSize() const { return 0; } - void setNotifyInterval(int ) {} - int notifyInterval() const { return 0; } - qint64 processedUSecs() const { return 0; } - qint64 elapsedUSecs() const { return 0; } - QAudio::Error error() const { return QAudio::OpenError; } - QAudio::State state() const { return QAudio::StoppedState; } - void setFormat(const QAudioFormat&) {} - QAudioFormat format() const { return QAudioFormat(); } - void setVolume(qreal) {} - qreal volume() const {return 1.0f;} + void start(QIODevice*) override { qWarning()<<"using null input device, none available";} + QIODevice* start() override { qWarning()<<"using null input device, none available"; return 0; } + void stop() override {} + void reset() override {} + void suspend() override {} + void resume() override {} + int bytesReady() const override { return 0; } + int periodSize() const override { return 0; } + void setBufferSize(int ) override {} + int bufferSize() const override { return 0; } + void setNotifyInterval(int ) override {} + int notifyInterval() const override { return 0; } + qint64 processedUSecs() const override { return 0; } + qint64 elapsedUSecs() const override { return 0; } + QAudio::Error error() const override { return QAudio::OpenError; } + QAudio::State state() const override { return QAudio::StoppedState; } + void setFormat(const QAudioFormat&) override {} + QAudioFormat format() const override { return QAudioFormat(); } + void setVolume(qreal) override {} + qreal volume() const override {return 1.0f;} }; class QNullOutputDevice : public QAbstractAudioOutput { public: - void start(QIODevice*) {qWarning()<<"using null output device, none available";} - QIODevice* start() { qWarning()<<"using null output device, none available"; return 0; } - void stop() {} - void reset() {} - void suspend() {} - void resume() {} - int bytesFree() const { return 0; } - int periodSize() const { return 0; } - void setBufferSize(int ) {} - int bufferSize() const { return 0; } - void setNotifyInterval(int ) {} - int notifyInterval() const { return 0; } - qint64 processedUSecs() const { return 0; } - qint64 elapsedUSecs() const { return 0; } - QAudio::Error error() const { return QAudio::OpenError; } - QAudio::State state() const { return QAudio::StoppedState; } - void setFormat(const QAudioFormat&) {} - QAudioFormat format() const { return QAudioFormat(); } + void start(QIODevice*) override {qWarning()<<"using null output device, none available";} + QIODevice* start() override { qWarning()<<"using null output device, none available"; return 0; } + void stop() override {} + void reset() override {} + void suspend() override {} + void resume() override {} + int bytesFree() const override { return 0; } + int periodSize() const override { return 0; } + void setBufferSize(int ) override {} + int bufferSize() const override { return 0; } + void setNotifyInterval(int ) override {} + int notifyInterval() const override { return 0; } + qint64 processedUSecs() const override { return 0; } + qint64 elapsedUSecs() const override { return 0; } + QAudio::Error error() const override { return QAudio::OpenError; } + QAudio::State state() const override { return QAudio::StoppedState; } + void setFormat(const QAudioFormat&) override {} + QAudioFormat format() const override { return QAudioFormat(); } }; QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode) diff --git a/src/multimedia/audio/qaudiosystem.cpp b/src/multimedia/audio/qaudiosystem.cpp index 549b06373..b11993e55 100644 --- a/src/multimedia/audio/qaudiosystem.cpp +++ b/src/multimedia/audio/qaudiosystem.cpp @@ -48,7 +48,6 @@ QT_BEGIN_NAMESPACE \ingroup multimedia \ingroup multimedia_audio \inmodule QtMultimedia - \internal This class implements the audio functionality for QAudioDeviceInfo, i.e., QAudioDeviceInfo keeps a @@ -112,7 +111,6 @@ QT_BEGIN_NAMESPACE \ingroup multimedia \inmodule QtMultimedia - \internal QAbstractAudioOutput implements audio functionality for QAudioOutput, i.e., QAudioOutput routes function calls to @@ -252,7 +250,6 @@ QT_BEGIN_NAMESPACE \ingroup multimedia \inmodule QtMultimedia - \internal QAudioDeviceInput keeps an instance of QAbstractAudioInput and routes calls to functions of the same name to QAbstractAudioInput. diff --git a/src/multimedia/audio/qaudiosystemplugin.cpp b/src/multimedia/audio/qaudiosystemplugin.cpp index 636b614d4..6a255cf11 100644 --- a/src/multimedia/audio/qaudiosystemplugin.cpp +++ b/src/multimedia/audio/qaudiosystemplugin.cpp @@ -58,7 +58,6 @@ QAudioSystemPluginExtension::~QAudioSystemPluginExtension() \ingroup multimedia \ingroup multimedia_audio \inmodule QtMultimedia - \internal Writing a audio plugin is achieved by subclassing this base class, reimplementing the pure virtual functions availableDevices(), diff --git a/src/multimedia/audio/qaudiosystemplugin.h b/src/multimedia/audio/qaudiosystemplugin.h index 3368c9b98..e304f1c46 100644 --- a/src/multimedia/audio/qaudiosystemplugin.h +++ b/src/multimedia/audio/qaudiosystemplugin.h @@ -81,10 +81,10 @@ public: explicit QAudioSystemPlugin(QObject *parent = Q_NULLPTR); ~QAudioSystemPlugin(); - virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0; - virtual QAbstractAudioInput* createInput(const QByteArray& device) = 0; - virtual QAbstractAudioOutput* createOutput(const QByteArray& device) = 0; - virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0; + QList<QByteArray> availableDevices(QAudio::Mode) const override = 0; + QAbstractAudioInput* createInput(const QByteArray& device) override = 0; + QAbstractAudioOutput* createOutput(const QByteArray& device) override = 0; + QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) override = 0; }; QT_END_NAMESPACE diff --git a/src/multimedia/audio/qsoundeffect_qaudio_p.h b/src/multimedia/audio/qsoundeffect_qaudio_p.h index d8c416fdb..6fc3ae8d5 100644 --- a/src/multimedia/audio/qsoundeffect_qaudio_p.h +++ b/src/multimedia/audio/qsoundeffect_qaudio_p.h @@ -69,8 +69,8 @@ public: PrivateSoundSource(QSoundEffectPrivate* s); ~PrivateSoundSource() {} - qint64 readData( char* data, qint64 len); - qint64 writeData(const char* data, qint64 len); + qint64 readData( char* data, qint64 len) override; + qint64 writeData(const char* data, qint64 len) override; private Q_SLOTS: void sampleReady(); diff --git a/src/multimedia/audio/qwavedecoder_p.h b/src/multimedia/audio/qwavedecoder_p.h index 1cd20e07f..0f1cef599 100644 --- a/src/multimedia/audio/qwavedecoder_p.h +++ b/src/multimedia/audio/qwavedecoder_p.h @@ -70,9 +70,9 @@ public: QAudioFormat audioFormat() const; int duration() const; - qint64 size() const; - bool isSequential() const; - qint64 bytesAvailable() const; + qint64 size() const override; + bool isSequential() const override; + qint64 bytesAvailable() const override; Q_SIGNALS: void formatKnown(); @@ -82,8 +82,8 @@ private Q_SLOTS: void handleData(); private: - qint64 readData(char *data, qint64 maxlen); - qint64 writeData(const char *data, qint64 len); + qint64 readData(char *data, qint64 maxlen) override; + qint64 writeData(const char *data, qint64 len) override; bool enoughDataAvailable(); bool findChunk(const char *chunkId); diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h index 180760728..685298905 100644 --- a/src/multimedia/camera/qcamera.h +++ b/src/multimedia/camera/qcamera.h @@ -176,7 +176,7 @@ public: QT_DEPRECATED static QString deviceDescription(const QByteArray &device); #endif - QMultimedia::AvailabilityStatus availability() const; + QMultimedia::AvailabilityStatus availability() const override; State state() const; Status status() const; diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp index 9da48e257..848b33df8 100644 --- a/src/multimedia/camera/qcamerafocus.cpp +++ b/src/multimedia/camera/qcamerafocus.cpp @@ -68,15 +68,15 @@ public: QCameraFocusFakeZoomControl(QObject *parent) : QCameraZoomControl(parent) {} - qreal maximumOpticalZoom() const { return 1.0; } - qreal maximumDigitalZoom() const { return 1.0; } + qreal maximumOpticalZoom() const override { return 1.0; } + qreal maximumDigitalZoom() const override { return 1.0; } - qreal requestedOpticalZoom() const { return 1.0; } - qreal requestedDigitalZoom() const { return 1.0; } - qreal currentOpticalZoom() const { return 1.0; } - qreal currentDigitalZoom() const { return 1.0; } + qreal requestedOpticalZoom() const override { return 1.0; } + qreal requestedDigitalZoom() const override { return 1.0; } + qreal currentOpticalZoom() const override { return 1.0; } + qreal currentDigitalZoom() const override { return 1.0; } - void zoomTo(qreal, qreal) { qWarning("The camera doesn't support zooming."); } + void zoomTo(qreal, qreal) override { qWarning("The camera doesn't support zooming."); } }; class QCameraFocusFakeFocusControl : public QCameraFocusControl @@ -85,17 +85,17 @@ public: QCameraFocusFakeFocusControl(QObject *parent) : QCameraFocusControl(parent) {} - QCameraFocus::FocusModes focusMode() const { return QCameraFocus::AutoFocus; } - void setFocusMode(QCameraFocus::FocusModes) { qWarning("Focus mode selection is not supported"); } - bool isFocusModeSupported(QCameraFocus::FocusModes) const { return false; } + QCameraFocus::FocusModes focusMode() const override { return QCameraFocus::AutoFocus; } + void setFocusMode(QCameraFocus::FocusModes) override { qWarning("Focus mode selection is not supported"); } + bool isFocusModeSupported(QCameraFocus::FocusModes) const override { return false; } - QCameraFocus::FocusPointMode focusPointMode() const { return QCameraFocus::FocusPointAuto; } - void setFocusPointMode(QCameraFocus::FocusPointMode) { qWarning("Focus points mode selection is not supported"); } - bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const { return false; } - QPointF customFocusPoint() const { return QPointF(0.5,0.5); } - void setCustomFocusPoint(const QPointF &) { qWarning("Focus points selection is not supported"); } + QCameraFocus::FocusPointMode focusPointMode() const override { return QCameraFocus::FocusPointAuto; } + void setFocusPointMode(QCameraFocus::FocusPointMode) override { qWarning("Focus points mode selection is not supported"); } + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const override { return false; } + QPointF customFocusPoint() const override { return QPointF(0.5,0.5); } + void setCustomFocusPoint(const QPointF &) override { qWarning("Focus points selection is not supported"); } - QCameraFocusZoneList focusZones() const { return QCameraFocusZoneList(); } + QCameraFocusZoneList focusZones() const override { return QCameraFocusZoneList(); } }; diff --git a/src/multimedia/camera/qcameraimagecapture.h b/src/multimedia/camera/qcameraimagecapture.h index 3f3c6bd26..12feb9eec 100644 --- a/src/multimedia/camera/qcameraimagecapture.h +++ b/src/multimedia/camera/qcameraimagecapture.h @@ -93,7 +93,7 @@ public: bool isAvailable() const; QMultimedia::AvailabilityStatus availability() const; - QMediaObject *mediaObject() const; + QMediaObject *mediaObject() const override; Error error() const; QString errorString() const; @@ -135,7 +135,7 @@ Q_SIGNALS: void imageSaved(int id, const QString &fileName); protected: - bool setMediaObject(QMediaObject *); + bool setMediaObject(QMediaObject *) override; QCameraImageCapturePrivate *d_ptr; private: diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp index 431e3202d..91ba1d566 100644 --- a/src/multimedia/camera/qcameraimageprocessing.cpp +++ b/src/multimedia/camera/qcameraimageprocessing.cpp @@ -101,10 +101,10 @@ public: QCameraImageProcessingControl(parent) {} - bool isParameterSupported(ProcessingParameter) const { return false; } - bool isParameterValueSupported(ProcessingParameter, const QVariant &) const { return false; } - QVariant parameter(ProcessingParameter) const { return QVariant(); } - void setParameter(ProcessingParameter, const QVariant &) {} + bool isParameterSupported(ProcessingParameter) const override { return false; } + bool isParameterValueSupported(ProcessingParameter, const QVariant &) const override { return false; } + QVariant parameter(ProcessingParameter) const override { return QVariant(); } + void setParameter(ProcessingParameter, const QVariant &) override {} }; diff --git a/src/multimedia/configure.json b/src/multimedia/configure.json index e7758f0c8..2d51102f5 100644 --- a/src/multimedia/configure.json +++ b/src/multimedia/configure.json @@ -179,7 +179,7 @@ "features": { "alsa": { "label": "ALSA", - "condition": "config.unix && libs.alsa", + "condition": "config.unix && !config.qnx && libs.alsa", "output": [ "feature", "privateFeature" ] }, "avfoundation": { diff --git a/src/multimedia/doc/src/platform-notes-ios.qdoc b/src/multimedia/doc/src/platform-notes-ios.qdoc new file mode 100644 index 000000000..81e9ea0c5 --- /dev/null +++ b/src/multimedia/doc/src/platform-notes-ios.qdoc @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: http://www.gnu.org/copyleft/fdl.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! +\page qtmultimedia-ios.html +\title Qt Multimedia on iOS +\brief Platform notes for iOS + +This page covers the availability of Qt Multimedia features on iOS. + +\section1 Limitations + +Since Qt Multimedia for iOS uses the camera, the \c Info.plist assigned to +QMAKE_INFO_PLIST in the project file must contain the key +\c NSCameraUsageDescription. Otherwise the application will +abort on startup. See Info.plist documentation from Apple for more information +regarding this key. + +*/ diff --git a/src/multimedia/doc/src/qtmultimedia-index.qdoc b/src/multimedia/doc/src/qtmultimedia-index.qdoc index 553732fd1..dfc9c3f15 100644 --- a/src/multimedia/doc/src/qtmultimedia-index.qdoc +++ b/src/multimedia/doc/src/qtmultimedia-index.qdoc @@ -158,6 +158,7 @@ \list \li \l{Qt Multimedia on Windows}{Windows} + \li \l{Qt Multimedia on iOS}{iOS} \endlist \section2 Reference diff --git a/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h b/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h index 768f9c30d..e03da1ab5 100644 --- a/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h +++ b/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h @@ -96,11 +96,11 @@ public: explicit QGstBufferPoolPlugin(QObject *parent = 0); virtual ~QGstBufferPoolPlugin() {} - virtual bool isFormatSupported(const QVideoSurfaceFormat &format) const = 0; - virtual GstBuffer *takeBuffer(const QVideoSurfaceFormat &format, GstCaps *caps) = 0; - virtual void clear() = 0; + bool isFormatSupported(const QVideoSurfaceFormat &format) const override = 0; + GstBuffer *takeBuffer(const QVideoSurfaceFormat &format, GstCaps *caps) override = 0; + void clear() override = 0; - virtual QAbstractVideoBuffer::HandleType handleType() const = 0; + QAbstractVideoBuffer::HandleType handleType() const override = 0; /*! Build an QAbstractVideoBuffer instance from compatible GstBuffer. @@ -108,7 +108,7 @@ public: This method is called from gstreamer video sink thread. */ - virtual QAbstractVideoBuffer *prepareVideoBuffer(GstBuffer *buffer, int bytesPerLine) = 0; + QAbstractVideoBuffer *prepareVideoBuffer(GstBuffer *buffer, int bytesPerLine) override = 0; }; QT_END_NAMESPACE diff --git a/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h b/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h index 64e9ac21f..af1a4486f 100644 --- a/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h +++ b/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h @@ -63,22 +63,28 @@ class QGstCodecsInfo public: enum ElementType { AudioEncoder, VideoEncoder, Muxer }; + struct CodecInfo { + QString description; + QByteArray elementName; + GstRank rank; + }; + QGstCodecsInfo(ElementType elementType); QStringList supportedCodecs() const; QString codecDescription(const QString &codec) const; - -#if GST_CHECK_VERSION(0,10,31) - static GstCaps* supportedElementCaps(GstElementFactoryListType elementType, - GstRank minimumRank = GST_RANK_MARGINAL, - GstPadDirection padDirection = GST_PAD_SRC); -#endif + QByteArray codecElement(const QString &codec) const; + QStringList codecOptions(const QString &codec) const; private: + void updateCodecs(ElementType elementType); + GList *elementFactories(ElementType elementType) const; + QStringList m_codecs; - QMap<QString,QString> m_codecDescriptions; + QMap<QString, CodecInfo> m_codecInfo; }; +Q_DECLARE_TYPEINFO(QGstCodecsInfo::CodecInfo, Q_MOVABLE_TYPE); QT_END_NAMESPACE diff --git a/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h b/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h index 9c5ce3052..1a961c6d9 100644 --- a/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h +++ b/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h @@ -63,13 +63,13 @@ public: QGstreamerAudioInputSelector(QObject *parent); ~QGstreamerAudioInputSelector(); - 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; private: void update(); diff --git a/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h b/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h index d3062c5ad..bacf8c71d 100644 --- a/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h +++ b/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h @@ -72,8 +72,8 @@ public: virtual ~QGstreamerAudioProbeControl(); protected: - void probeCaps(GstCaps *caps); - bool probeBuffer(GstBuffer *buffer); + void probeCaps(GstCaps *caps) override; + bool probeBuffer(GstBuffer *buffer) override; private slots: void bufferProbed(); diff --git a/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h b/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h index bc3d6703e..e1ac453c7 100644 --- a/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h +++ b/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h @@ -67,19 +67,19 @@ public: QGstreamerVideoInputDeviceControl(GstElementFactory *factory, QObject *parent); ~QGstreamerVideoInputDeviceControl(); - 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; static QString primaryCamera() { return tr("Main camera"); } static QString secondaryCamera() { return tr("Front camera"); } public Q_SLOTS: - void setSelectedDevice(int index); + void setSelectedDevice(int index) override; private: GstElementFactory *m_factory; diff --git a/src/multimedia/gsttools_headers/qgstreamervideooverlay_p.h b/src/multimedia/gsttools_headers/qgstreamervideooverlay_p.h index bed411475..f3066fad8 100644 --- a/src/multimedia/gsttools_headers/qgstreamervideooverlay_p.h +++ b/src/multimedia/gsttools_headers/qgstreamervideooverlay_p.h @@ -94,8 +94,8 @@ public: int saturation() const; void setSaturation(int saturation); - bool processSyncMessage(const QGstreamerMessage &message); - bool processBusMessage(const QGstreamerMessage &message); + bool processSyncMessage(const QGstreamerMessage &message) override; + bool processBusMessage(const QGstreamerMessage &message) override; Q_SIGNALS: void nativeVideoSizeChanged(); @@ -109,7 +109,7 @@ private: GstElement *findBestVideoSink() const; void setWindowHandle_helper(WId id); void updateIsActive(); - void probeCaps(GstCaps *caps); + void probeCaps(GstCaps *caps) override; static void showPrerollFrameChanged(GObject *, GParamSpec *, QGstreamerVideoOverlay *); GstElement *m_videoSink; diff --git a/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h b/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h index 7520b7424..b599b0e78 100644 --- a/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h +++ b/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h @@ -72,8 +72,8 @@ public: explicit QGstreamerVideoProbeControl(QObject *parent); virtual ~QGstreamerVideoProbeControl(); - void probeCaps(GstCaps *caps); - bool probeBuffer(GstBuffer *buffer); + void probeCaps(GstCaps *caps) override; + bool probeBuffer(GstBuffer *buffer) override; void startFlushing(); void stopFlushing(); diff --git a/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h b/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h index 6dba54fe4..1d22e1125 100644 --- a/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h +++ b/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h @@ -67,13 +67,13 @@ public: QGstreamerVideoRenderer(QObject *parent = 0); virtual ~QGstreamerVideoRenderer(); - QAbstractVideoSurface *surface() const; - void setSurface(QAbstractVideoSurface *surface); + QAbstractVideoSurface *surface() const override; + void setSurface(QAbstractVideoSurface *surface) override; - GstElement *videoSink(); + GstElement *videoSink() override; - void stopRenderer(); - bool isReady() const { return m_surface != 0; } + void stopRenderer() override; + bool isReady() const override { return m_surface != 0; } signals: void sinkChanged(); diff --git a/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h b/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h index f0a76c152..b2dfece60 100644 --- a/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h +++ b/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h @@ -73,31 +73,31 @@ public: explicit QGstreamerVideoWidgetControl(QObject *parent = 0, const QByteArray &elementName = QByteArray()); virtual ~QGstreamerVideoWidgetControl(); - GstElement *videoSink(); + GstElement *videoSink() override; - QWidget *videoWidget(); + QWidget *videoWidget() override; - void stopRenderer(); + void stopRenderer() override; - Qt::AspectRatioMode aspectRatioMode() const; - void setAspectRatioMode(Qt::AspectRatioMode mode); + Qt::AspectRatioMode aspectRatioMode() const override; + void setAspectRatioMode(Qt::AspectRatioMode mode) override; - bool isFullScreen() const; - void setFullScreen(bool fullScreen); + bool isFullScreen() const override; + void setFullScreen(bool fullScreen) 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; - bool eventFilter(QObject *object, QEvent *event); + bool eventFilter(QObject *object, QEvent *event) override; signals: void sinkChanged(); @@ -111,8 +111,8 @@ private: void createVideoWidget(); void updateWidgetAttributes(); - bool processSyncMessage(const QGstreamerMessage &message); - bool processBusMessage(const QGstreamerMessage &message); + bool processSyncMessage(const QGstreamerMessage &message) override; + bool processBusMessage(const QGstreamerMessage &message) override; QGstreamerVideoOverlay m_videoOverlay; QGstreamerVideoWidget *m_widget; diff --git a/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h b/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h index 949a18773..b489650f9 100644 --- a/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h +++ b/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h @@ -73,41 +73,41 @@ public: explicit QGstreamerVideoWindow(QObject *parent = 0, const QByteArray &elementName = QByteArray()); ~QGstreamerVideoWindow(); - 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; - QSize nativeSize() const; + QSize nativeSize() const override; - Qt::AspectRatioMode aspectRatioMode() const; - void setAspectRatioMode(Qt::AspectRatioMode mode); + Qt::AspectRatioMode aspectRatioMode() const override; + void setAspectRatioMode(Qt::AspectRatioMode mode) override; - void repaint(); + void repaint() 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; QAbstractVideoSurface *surface() const; - GstElement *videoSink(); + GstElement *videoSink() override; - bool processSyncMessage(const QGstreamerMessage &message); - bool processBusMessage(const QGstreamerMessage &message); - bool isReady() const { return m_windowId != 0; } + bool processSyncMessage(const QGstreamerMessage &message) override; + bool processBusMessage(const QGstreamerMessage &message) override; + bool isReady() const override { return m_windowId != 0; } signals: void sinkChanged(); diff --git a/src/multimedia/gsttools_headers/qgstutils_p.h b/src/multimedia/gsttools_headers/qgstutils_p.h index 68c9ecda1..8b7de3661 100644 --- a/src/multimedia/gsttools_headers/qgstutils_p.h +++ b/src/multimedia/gsttools_headers/qgstutils_p.h @@ -146,6 +146,7 @@ namespace QGstUtils { QSize structurePixelAspectRatio(const GstStructure *s); QPair<qreal, qreal> structureFrameRateRange(const GstStructure *s); + QString fileExtensionForMimeType(const QString &mimeType); } void qt_gst_object_ref_sink(gpointer object); diff --git a/src/multimedia/gsttools_headers/qgstvideobuffer_p.h b/src/multimedia/gsttools_headers/qgstvideobuffer_p.h index 92128b92e..d2802d9a2 100644 --- a/src/multimedia/gsttools_headers/qgstvideobuffer_p.h +++ b/src/multimedia/gsttools_headers/qgstvideobuffer_p.h @@ -77,17 +77,17 @@ public: ~QGstVideoBuffer(); - MapMode mapMode() const; + MapMode mapMode() const override; #if GST_CHECK_VERSION(1,0,0) - int map(MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4]); + int map(MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4]) override; #else - uchar *map(MapMode mode, int *numBytes, int *bytesPerLine); + uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) override; #endif - void unmap(); + void unmap() override; - QVariant handle() const { return m_handle; } + QVariant handle() const override { return m_handle; } private: #if GST_CHECK_VERSION(1,0,0) GstVideoInfo m_videoInfo; diff --git a/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h b/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h index 433cdf8e5..6a0c4c6bd 100644 --- a/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h +++ b/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h @@ -100,7 +100,7 @@ public: explicit QGstVideoRendererPlugin(QObject *parent = 0); virtual ~QGstVideoRendererPlugin() {} - virtual QGstVideoRenderer *createRenderer() = 0; + QGstVideoRenderer *createRenderer() override = 0; }; diff --git a/src/multimedia/gsttools_headers/qgstvideorenderersink_p.h b/src/multimedia/gsttools_headers/qgstvideorenderersink_p.h index ff59810bc..3971c959d 100644 --- a/src/multimedia/gsttools_headers/qgstvideorenderersink_p.h +++ b/src/multimedia/gsttools_headers/qgstvideorenderersink_p.h @@ -76,14 +76,14 @@ public: QGstDefaultVideoRenderer(); ~QGstDefaultVideoRenderer(); - GstCaps *getCaps(QAbstractVideoSurface *surface); - bool start(QAbstractVideoSurface *surface, GstCaps *caps); - void stop(QAbstractVideoSurface *surface); + GstCaps *getCaps(QAbstractVideoSurface *surface) override; + bool start(QAbstractVideoSurface *surface, GstCaps *caps) override; + void stop(QAbstractVideoSurface *surface) override; - bool proposeAllocation(GstQuery *query); + bool proposeAllocation(GstQuery *query) override; - bool present(QAbstractVideoSurface *surface, GstBuffer *buffer); - void flush(QAbstractVideoSurface *surface); + bool present(QAbstractVideoSurface *surface, GstBuffer *buffer) override; + void flush(QAbstractVideoSurface *surface) override; private: QVideoSurfaceFormat m_format; @@ -109,7 +109,7 @@ public: GstFlowReturn render(GstBuffer *buffer); - bool event(QEvent *event); + bool event(QEvent *event) override; private slots: bool handleEvent(QMutexLocker *locker); diff --git a/src/multimedia/playback/playback.pri b/src/multimedia/playback/playback.pri index 3bbb8ce15..cc55fc1b0 100644 --- a/src/multimedia/playback/playback.pri +++ b/src/multimedia/playback/playback.pri @@ -12,7 +12,7 @@ PRIVATE_HEADERS += \ playback/qmediaplaylistioplugin_p.h \ playback/qmediaplaylistnavigator_p.h \ playback/qmedianetworkplaylistprovider_p.h \ - playback/playlistfileparser_p.h + playback/qplaylistfileparser_p.h SOURCES += \ playback/qmedianetworkplaylistprovider.cpp \ @@ -23,4 +23,4 @@ SOURCES += \ playback/qmediaplaylistnavigator.cpp \ playback/qmediaplaylistprovider.cpp \ playback/qmediaresource.cpp \ - playback/playlistfileparser.cpp + playback/qplaylistfileparser.cpp diff --git a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp index 7de90d9a1..a4ad97251 100644 --- a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp +++ b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp @@ -41,7 +41,7 @@ #include "qmediaplaylistprovider_p.h" #include "qmediacontent.h" #include "qmediaobject_p.h" -#include "playlistfileparser_p.h" +#include "qplaylistfileparser_p.h" QT_BEGIN_NAMESPACE @@ -62,8 +62,8 @@ public: bool QMediaNetworkPlaylistProviderPrivate::load(const QNetworkRequest &request) { - parser.stop(); - parser.start(request, false); + parser.abort(); + parser.start(request); return true; } @@ -83,12 +83,14 @@ void QMediaNetworkPlaylistProviderPrivate::_q_handleParserError(QPlaylistFilePar case QPlaylistFileParser::FormatNotSupportedError: playlistError = QMediaPlaylist::FormatNotSupportedError; break; + case QPlaylistFileParser::ResourceError: + // fall through case QPlaylistFileParser::NetworkError: playlistError = QMediaPlaylist::NetworkError; break; } - parser.stop(); + parser.abort(); emit q->loadFailed(playlistError, errorMessage); } diff --git a/src/multimedia/playback/qmedianetworkplaylistprovider_p.h b/src/multimedia/playback/qmedianetworkplaylistprovider_p.h index 94595751b..3d1ffe66a 100644 --- a/src/multimedia/playback/qmedianetworkplaylistprovider_p.h +++ b/src/multimedia/playback/qmedianetworkplaylistprovider_p.h @@ -62,26 +62,26 @@ class Q_MULTIMEDIA_EXPORT QMediaNetworkPlaylistProvider : public QMediaPlaylistP Q_OBJECT public: QMediaNetworkPlaylistProvider(QObject *parent=0); - virtual ~QMediaNetworkPlaylistProvider(); + ~QMediaNetworkPlaylistProvider(); - virtual bool load(const QNetworkRequest &request, const char *format = 0); + bool load(const QNetworkRequest &request, const char *format = 0) override; - virtual int mediaCount() const; - virtual QMediaContent media(int pos) const; + int mediaCount() const override; + QMediaContent media(int pos) const override; - virtual bool isReadOnly() const; + bool isReadOnly() const override; - virtual bool addMedia(const QMediaContent &content); - virtual bool addMedia(const QList<QMediaContent> &items); - virtual bool insertMedia(int pos, const QMediaContent &content); - virtual bool insertMedia(int pos, const QList<QMediaContent> &items); - virtual bool moveMedia(int from, int to); - virtual bool removeMedia(int pos); - virtual bool removeMedia(int start, int end); - virtual bool clear(); + bool addMedia(const QMediaContent &content) override; + bool addMedia(const QList<QMediaContent> &items) override; + bool insertMedia(int pos, const QMediaContent &content) override; + bool insertMedia(int pos, const QList<QMediaContent> &items) override; + bool moveMedia(int from, int to) override; + bool removeMedia(int pos) override; + bool removeMedia(int start, int end) override; + bool clear() override; public Q_SLOTS: - virtual void shuffle(); + void shuffle() override; private: Q_DISABLE_COPY(QMediaNetworkPlaylistProvider) diff --git a/src/multimedia/playback/qmediaplayer.h b/src/multimedia/playback/qmediaplayer.h index f8d91b999..f23a94104 100644 --- a/src/multimedia/playback/qmediaplayer.h +++ b/src/multimedia/playback/qmediaplayer.h @@ -157,7 +157,7 @@ public: QNetworkConfiguration currentNetworkConfiguration() const; - QMultimedia::AvailabilityStatus availability() const; + QMultimedia::AvailabilityStatus availability() const override; QAudio::Role audioRole() const; void setAudioRole(QAudio::Role audioRole); @@ -205,8 +205,8 @@ Q_SIGNALS: void networkConfigurationChanged(const QNetworkConfiguration &configuration); public: - virtual bool bind(QObject *); - virtual void unbind(QObject *); + bool bind(QObject *) override; + void unbind(QObject *) override; private: Q_DISABLE_COPY(QMediaPlayer) diff --git a/src/multimedia/playback/qmediaplaylist.h b/src/multimedia/playback/qmediaplaylist.h index 05ab8f42e..b16e734f8 100644 --- a/src/multimedia/playback/qmediaplaylist.h +++ b/src/multimedia/playback/qmediaplaylist.h @@ -70,7 +70,7 @@ public: explicit QMediaPlaylist(QObject *parent = Q_NULLPTR); virtual ~QMediaPlaylist(); - QMediaObject *mediaObject() const; + QMediaObject *mediaObject() const override; PlaybackMode playbackMode() const; void setPlaybackMode(PlaybackMode mode); @@ -129,7 +129,7 @@ Q_SIGNALS: void loadFailed(); protected: - bool setMediaObject(QMediaObject *object); + bool setMediaObject(QMediaObject *object) override; QMediaPlaylistPrivate *d_ptr; private: diff --git a/src/multimedia/playback/qmediaplaylist_p.h b/src/multimedia/playback/qmediaplaylist_p.h index 0c3375ba7..8e081dd67 100644 --- a/src/multimedia/playback/qmediaplaylist_p.h +++ b/src/multimedia/playback/qmediaplaylist_p.h @@ -141,26 +141,26 @@ public: connect(m_navigator, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)), SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode))); } - virtual ~QMediaNetworkPlaylistControl() {}; + ~QMediaNetworkPlaylistControl() {} - QMediaPlaylistProvider* playlistProvider() const { return m_navigator->playlist(); } - bool setPlaylistProvider(QMediaPlaylistProvider *mediaPlaylist) + QMediaPlaylistProvider* playlistProvider() const override { return m_navigator->playlist(); } + bool setPlaylistProvider(QMediaPlaylistProvider *mediaPlaylist) override { m_navigator->setPlaylist(mediaPlaylist); emit playlistProviderChanged(); return true; } - int currentIndex() const { return m_navigator->currentIndex(); } - void setCurrentIndex(int position) { m_navigator->jump(position); } - int nextIndex(int steps) const { return m_navigator->nextIndex(steps); } - int previousIndex(int steps) const { return m_navigator->previousIndex(steps); } + int currentIndex() const override { return m_navigator->currentIndex(); } + void setCurrentIndex(int position) override { m_navigator->jump(position); } + int nextIndex(int steps) const override { return m_navigator->nextIndex(steps); } + int previousIndex(int steps) const override { return m_navigator->previousIndex(steps); } - void next() { m_navigator->next(); } - void previous() { m_navigator->previous(); } + void next() override { m_navigator->next(); } + void previous() override { m_navigator->previous(); } - QMediaPlaylist::PlaybackMode playbackMode() const { return m_navigator->playbackMode(); } - void setPlaybackMode(QMediaPlaylist::PlaybackMode mode) { m_navigator->setPlaybackMode(mode); } + QMediaPlaylist::PlaybackMode playbackMode() const override { return m_navigator->playbackMode(); } + void setPlaybackMode(QMediaPlaylist::PlaybackMode mode) override { m_navigator->setPlaybackMode(mode); } private: QMediaPlaylistNavigator *m_navigator; diff --git a/src/multimedia/playback/qmediaplaylistioplugin_p.h b/src/multimedia/playback/qmediaplaylistioplugin_p.h index 73281b2bf..1e157d135 100644 --- a/src/multimedia/playback/qmediaplaylistioplugin_p.h +++ b/src/multimedia/playback/qmediaplaylistioplugin_p.h @@ -107,17 +107,17 @@ Q_OBJECT Q_INTERFACES(QMediaPlaylistIOInterface) public: explicit QMediaPlaylistIOPlugin(QObject *parent = 0); - virtual ~QMediaPlaylistIOPlugin(); + ~QMediaPlaylistIOPlugin(); - virtual bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const = 0; - virtual bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const = 0; + bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const override = 0; + bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const override = 0; - virtual bool canWrite(QIODevice *device, const QByteArray &format) const = 0; + bool canWrite(QIODevice *device, const QByteArray &format) const override = 0; - virtual QMediaPlaylistReader *createReader(QIODevice *device, const QByteArray &format = QByteArray()) = 0; - virtual QMediaPlaylistReader *createReader(const QUrl& location, const QByteArray &format = QByteArray()) = 0; + QMediaPlaylistReader *createReader(QIODevice *device, const QByteArray &format = QByteArray()) override = 0; + QMediaPlaylistReader *createReader(const QUrl& location, const QByteArray &format = QByteArray()) override = 0; - virtual QMediaPlaylistWriter *createWriter(QIODevice *device, const QByteArray &format) = 0; + QMediaPlaylistWriter *createWriter(QIODevice *device, const QByteArray &format) override = 0; }; QT_END_NAMESPACE diff --git a/src/multimedia/playback/qmediaplaylistnavigator.cpp b/src/multimedia/playback/qmediaplaylistnavigator.cpp index 1da7329ec..192fd463c 100644 --- a/src/multimedia/playback/qmediaplaylistnavigator.cpp +++ b/src/multimedia/playback/qmediaplaylistnavigator.cpp @@ -50,9 +50,9 @@ class QMediaPlaylistNullProvider : public QMediaPlaylistProvider { public: QMediaPlaylistNullProvider() :QMediaPlaylistProvider() {} - virtual ~QMediaPlaylistNullProvider() {} - virtual int mediaCount() const {return 0;} - virtual QMediaContent media(int) const { return QMediaContent(); } + ~QMediaPlaylistNullProvider() {} + int mediaCount() const override {return 0;} + QMediaContent media(int) const override { return QMediaContent(); } }; Q_GLOBAL_STATIC(QMediaPlaylistNullProvider, _q_nullMediaPlaylist) diff --git a/src/multimedia/playback/playlistfileparser.cpp b/src/multimedia/playback/qplaylistfileparser.cpp index 237e417a6..d0617d2cf 100644 --- a/src/multimedia/playback/playlistfileparser.cpp +++ b/src/multimedia/playback/qplaylistfileparser.cpp @@ -37,31 +37,48 @@ ** ****************************************************************************/ -#include "playlistfileparser_p.h" +#include "qplaylistfileparser_p.h" #include <qfileinfo.h> #include <QtCore/QDebug> +#include <QtCore/qiodevice.h> #include <QtNetwork/QNetworkReply> #include <QtNetwork/QNetworkRequest> +#include "qmediaplayer.h" #include "qmediaobject_p.h" -#include <private/qobject_p.h> #include "qmediametadata.h" +#include "qmediacontent.h" +#include "qmediaresource.h" QT_BEGIN_NAMESPACE namespace { -class ParserBase : public QObject + +class ParserBase { - Q_OBJECT public: - ParserBase(QObject *parent) - : QObject(parent) + explicit ParserBase(QPlaylistFileParser *parent) + : m_parent(parent) + , m_aborted(false) + { + Q_ASSERT(m_parent); + } + + bool parseLine(int lineIndex, const QString& line, const QUrl& root) { + if (m_aborted) + return false; + + const bool ok = parseLineImpl(lineIndex, line, root); + return ok && !m_aborted; } - virtual void parseLine(int lineIndex, const QString& line, const QUrl& root) = 0; + virtual void abort() { m_aborted = true; } + virtual ~ParserBase() { } protected: - QUrl expandToFullPath(const QUrl &root, const QString &line) + virtual bool parseLineImpl(int lineIndex, const QString& line, const QUrl& root) = 0; + + static QUrl expandToFullPath(const QUrl &root, const QString &line) { // On Linux, backslashes are not converted to forward slashes :/ if (line.startsWith(QLatin1String("//")) || line.startsWith(QLatin1String("\\\\"))) { @@ -84,22 +101,22 @@ protected: return url; } -Q_SIGNALS: - void newItem(const QVariant& content); - void finished(); - void error(QPlaylistFileParser::ParserError err, const QString& errorMsg); + void newItemFound(const QVariant& content) { Q_EMIT m_parent->newItem(content); } + +private: + QPlaylistFileParser *m_parent; + bool m_aborted; }; class M3UParser : public ParserBase { public: - M3UParser(QObject *parent) - : ParserBase(parent) + explicit M3UParser(QPlaylistFileParser *q) + : ParserBase(q) , m_extendedFormat(false) { } - /* * Extended M3U directives @@ -117,7 +134,7 @@ public: C:\Documents and Settings\I\My Music\Greatest Hits\Example.ogg */ - void parseLine(int lineIndex, const QString& line, const QUrl& root) + bool parseLineImpl(int lineIndex, const QString& line, const QUrl& root) override { if (line[0] == '#' ) { if (m_extendedFormat) { @@ -149,9 +166,11 @@ public: } } else { m_extraInfo[QLatin1String("url")] = expandToFullPath(root, line); - emit newItem(QVariant(m_extraInfo)); + newItemFound(QVariant(m_extraInfo)); m_extraInfo.clear(); } + + return true; } int getSplitIndex(const QString& line, int startPos) @@ -172,16 +191,15 @@ public: } private: - bool m_extendedFormat; QVariantMap m_extraInfo; + bool m_extendedFormat; }; class PLSParser : public ParserBase { - Q_OBJECT public: - PLSParser(QObject *parent) - : ParserBase(parent) + explicit PLSParser(QPlaylistFileParser *q) + : ParserBase(q) { } @@ -223,17 +241,19 @@ NumberOfEntries=2 Version=2 */ - void parseLine(int, const QString &line, const QUrl &root) + bool parseLineImpl(int, const QString &line, const QUrl &root) override { // We ignore everything but 'File' entries, since that's the only thing we care about. if (!line.startsWith(QLatin1String("File"))) - return; + return true; QString value = getValue(line); if (value.isEmpty()) - return; + return true; - emit newItem(expandToFullPath(root, value)); + newItemFound(expandToFullPath(root, value)); + + return true; } QString getValue(const QString& line) { @@ -247,75 +267,84 @@ Version=2 ///////////////////////////////////////////////////////////////////////////////////////////////// -class QPlaylistFileParserPrivate : public QObjectPrivate +class QPlaylistFileParserPrivate { Q_DECLARE_PUBLIC(QPlaylistFileParser) public: - QPlaylistFileParserPrivate() - : m_source(0) + QPlaylistFileParserPrivate(QPlaylistFileParser *q) + : q_ptr(q) + , m_stream(0) + , m_type(QPlaylistFileParser::UNKNOWN) , m_scanIndex(0) - , m_utf8(false) , m_lineIndex(-1) - , m_type(QPlaylistFileParser::UNKNOWN) - , m_currentParser(0) + , m_utf8(false) + , m_aborted(false) { } - void _q_handleData(); - void _q_handleError(); - void _q_handleParserError(QPlaylistFileParser::ParserError err, const QString& errorMsg); - void _q_handleParserFinished(); + void handleData(); + void handleParserFinished(); + void abort(); + void reset(); - QNetworkReply *m_source; + QScopedPointer<QNetworkReply, QScopedPointerDeleteLater> m_source; + QScopedPointer<ParserBase> m_currentParser; QByteArray m_buffer; - int m_scanIndex; QUrl m_root; - bool m_utf8; - int m_lineIndex; - QPlaylistFileParser::FileType m_type; - ParserBase *m_currentParser; QNetworkAccessManager m_mgr; + QString m_mimeType; + QPlaylistFileParser *q_ptr; + QIODevice *m_stream; + QPlaylistFileParser::FileType m_type; + 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(); } + } m_pendingJob; + int m_scanIndex; + int m_lineIndex; + bool m_utf8; + bool m_aborted; private: - void processLine(int startIndex, int length); + bool processLine(int startIndex, int length); }; #define LINE_LIMIT 4096 #define READ_LIMIT 64 -void QPlaylistFileParserPrivate::processLine(int startIndex, int length) +bool QPlaylistFileParserPrivate::processLine(int startIndex, int length) { Q_Q(QPlaylistFileParser); m_lineIndex++; if (!m_currentParser) { - Q_ASSERT(!m_currentParser); - - QString mimeType = m_source->header(QNetworkRequest::ContentTypeHeader).toString(); - m_type = QPlaylistFileParser::findPlaylistType(m_root.toString(), mimeType, m_buffer.constData(), m_buffer.size()); + const QString urlString = m_root.toString(); + const QString &suffix = !urlString.isEmpty() ? QFileInfo(urlString).suffix() : urlString; + const QString &mimeType = m_source->header(QNetworkRequest::ContentTypeHeader).toString(); + m_type = QPlaylistFileParser::findPlaylistType(suffix, !mimeType.isEmpty() ? mimeType : m_mimeType, m_buffer.constData(), quint32(m_buffer.size())); switch (m_type) { case QPlaylistFileParser::UNKNOWN: emit q->error(QPlaylistFileParser::FormatError, QPlaylistFileParser::tr("%1 playlist type is unknown").arg(m_root.toString())); - q->stop(); - return; + q->abort(); + return false; case QPlaylistFileParser::M3U: - m_currentParser = new M3UParser(q); + m_currentParser.reset(new M3UParser(q)); break; case QPlaylistFileParser::M3U8: - m_currentParser = new M3UParser(q); + m_currentParser.reset(new M3UParser(q)); m_utf8 = true; break; case QPlaylistFileParser::PLS: - m_currentParser = new PLSParser(q); + m_currentParser.reset(new PLSParser(q)); break; } - Q_ASSERT(m_currentParser); - QObject::connect(m_currentParser, SIGNAL(newItem(QVariant)), q, SIGNAL(newItem(QVariant))); - QObject::connect(m_currentParser, SIGNAL(finished()), q, SLOT(_q_handleParserFinished())); - QObject::connect(m_currentParser, SIGNAL(error(QPlaylistFileParser::ParserError,QString)), - q, SLOT(_q_handleParserError(QPlaylistFileParser::ParserError,QString))); + + Q_ASSERT(!m_currentParser.isNull()); } QString line; @@ -326,26 +355,28 @@ void QPlaylistFileParserPrivate::processLine(int startIndex, int length) line = QString::fromLatin1(m_buffer.constData() + startIndex, length).trimmed(); } if (line.isEmpty()) - return; + return true; Q_ASSERT(m_currentParser); - m_currentParser->parseLine(m_lineIndex, line, m_root); + return m_currentParser->parseLine(m_lineIndex, line, m_root); } -void QPlaylistFileParserPrivate::_q_handleData() +void QPlaylistFileParserPrivate::handleData() { Q_Q(QPlaylistFileParser); - while (m_source->bytesAvailable()) { + while (m_source->bytesAvailable() && !m_aborted) { int expectedBytes = qMin(READ_LIMIT, int(qMin(m_source->bytesAvailable(), qint64(LINE_LIMIT - m_buffer.size())))); m_buffer.push_back(m_source->read(expectedBytes)); int processedBytes = 0; - while (m_scanIndex < m_buffer.length()) { + while (m_scanIndex < m_buffer.length() && !m_aborted) { char s = m_buffer[m_scanIndex]; if (s == '\r' || s == '\n') { int l = m_scanIndex - processedBytes; - if (l > 0) - processLine(processedBytes, l); + if (l > 0) { + if (!processLine(processedBytes, l)) + break; + } processedBytes = m_scanIndex + 1; if (!m_source) { //some error happened, so exit parsing @@ -355,11 +386,13 @@ void QPlaylistFileParserPrivate::_q_handleData() m_scanIndex++; } + if (m_aborted) + break; + if (m_buffer.length() - processedBytes >= LINE_LIMIT) { - qWarning() << "error parsing playlist["<< m_root << "] with line content >= 4096 bytes."; emit q->error(QPlaylistFileParser::FormatError, QPlaylistFileParser::tr("invalid line in playlist file")); - q->stop(); - return; + q->abort(); + break; } if (m_source->isFinished() && !m_source->bytesAvailable()) { @@ -382,143 +415,226 @@ void QPlaylistFileParserPrivate::_q_handleData() m_scanIndex = 0; } - if (m_source->isFinished()) { - _q_handleParserFinished(); - } + handleParserFinished(); } -void QPlaylistFileParserPrivate::_q_handleError() +QPlaylistFileParser::QPlaylistFileParser(QObject *parent) + : QObject(parent) + , d_ptr(new QPlaylistFileParserPrivate(this)) { - Q_Q(QPlaylistFileParser); - emit q->error(QPlaylistFileParser::NetworkError, m_source->errorString()); - q->stop(); + } -void QPlaylistFileParserPrivate::_q_handleParserError(QPlaylistFileParser::ParserError err, const QString& errorMsg) +QPlaylistFileParser::~QPlaylistFileParser() { - Q_Q(QPlaylistFileParser); - emit q->error(err, errorMsg); + } -void QPlaylistFileParserPrivate::_q_handleParserFinished() +QPlaylistFileParser::FileType QPlaylistFileParser::findByMimeType(const QString &mime) { - Q_Q(QPlaylistFileParser); - bool isParserValid = (m_currentParser != 0); - if (!isParserValid) - emit q->error(QPlaylistFileParser::FormatNotSupportedError, QPlaylistFileParser::tr("Empty file provided")); + if (mime == QLatin1String("text/uri-list") || mime == QLatin1String("audio/x-mpegurl") || mime == QLatin1String("audio/mpegurl")) + return QPlaylistFileParser::M3U; - q->stop(); + if (mime == QLatin1String("application/x-mpegURL") || mime == QLatin1String("application/vnd.apple.mpegurl")) + return QPlaylistFileParser::M3U8; - if (isParserValid) - emit q->finished(); -} + if (mime == QLatin1String("audio/x-scpls")) + return QPlaylistFileParser::PLS; + return QPlaylistFileParser::UNKNOWN; +} -QPlaylistFileParser::QPlaylistFileParser(QObject *parent) - : QObject(*new QPlaylistFileParserPrivate, parent) +QPlaylistFileParser::FileType QPlaylistFileParser::findBySuffixType(const QString &suffix) { + const QString &s = suffix.toLower(); + + if (s == QLatin1String("m3u")) + return QPlaylistFileParser::M3U; + + if (s == QLatin1String("m3u8")) + return QPlaylistFileParser::M3U8; + if (s == QLatin1String("pls")) + return QPlaylistFileParser::PLS; + + return QPlaylistFileParser::UNKNOWN; } -QPlaylistFileParser::FileType QPlaylistFileParser::findPlaylistType(const QString& uri, const QString& mime, const void *data, quint32 size) +QPlaylistFileParser::FileType QPlaylistFileParser::findByDataHeader(const char *data, quint32 size) { - if (!data || !size) - return UNKNOWN; - - FileType uriType = UNKNOWN; - QString suffix = QFileInfo(uri).suffix().toLower(); - if (suffix == QLatin1String("m3u")) - uriType = M3U; - else if (suffix == QLatin1String("m3u8")) - uriType = M3U8; - else if (suffix == QLatin1String("pls")) - uriType = PLS; - - FileType mimeType = UNKNOWN; - if (mime == QLatin1String("text/uri-list") || mime == QLatin1String("audio/x-mpegurl") || mime == QLatin1String("audio/mpegurl")) - mimeType = QPlaylistFileParser::M3U; - else if (mime == QLatin1String("application/x-mpegURL") || mime == QLatin1String("application/vnd.apple.mpegurl")) - mimeType = QPlaylistFileParser::M3U8; - else if (mime == QLatin1String("audio/x-scpls")) - mimeType = QPlaylistFileParser::PLS; - - FileType bufferType = UNKNOWN; - if (size >= 7 && strncmp((const char*)data, "#EXTM3U", 7) == 0) - bufferType = M3U; - else if (size >= 10 && strncmp((const char*)data, "[playlist]", 10) == 0) - bufferType = PLS; - else { - // Make sure every line is a text string - quint32 n; - for (n = 0; n < size; n++) - if (!QChar(QLatin1Char(((const char*)data)[n])).isPrint()) - break; - if (n == size) - bufferType = M3U; - } + if (!data || size == 0) + return QPlaylistFileParser::UNKNOWN; - if (bufferType == M3U && (uriType == M3U8 || mimeType == M3U8)) - bufferType = M3U8; + if (size >= 7 && strncmp(data, "#EXTM3U", 7) == 0) + return QPlaylistFileParser::M3U; + + if (size >= 10 && strncmp(data, "[playlist]", 10) == 0) + return QPlaylistFileParser::PLS; + + return QPlaylistFileParser::UNKNOWN; +} - if (bufferType != UNKNOWN) - return bufferType; +QPlaylistFileParser::FileType QPlaylistFileParser::findPlaylistType(const QString& suffix, + const QString& mime, + const char *data, + quint32 size) +{ - if (uriType != UNKNOWN) - return uriType; + FileType dataHeaderType = findByDataHeader(data, size); + if (dataHeaderType != UNKNOWN) + return dataHeaderType; + FileType mimeType = findByMimeType(mime); if (mimeType != UNKNOWN) return mimeType; + FileType suffixType = findBySuffixType(suffix); + if (suffixType != UNKNOWN) + return suffixType; + return UNKNOWN; } -void QPlaylistFileParser::start(const QNetworkRequest& request, bool utf8) +/* + * Delegating + */ +void QPlaylistFileParser::start(const QMediaContent &media, QIODevice *stream) +{ + 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); + } +} + +void QPlaylistFileParser::start(QIODevice *stream, const QString &mimeType) { Q_D(QPlaylistFileParser); - stop(); + const bool validStream = stream ? (stream->isOpen() && stream->isReadable()) : false; + + if (!validStream) { + Q_EMIT error(ResourceError, tr("Invalid stream")); + return; + } + + if (!d->m_currentParser.isNull()) { + abort(); + d->m_pendingJob = { stream, QMediaResource(QUrl(), mimeType) }; + return; + } + + d->reset(); + d->m_mimeType = mimeType; + d->m_stream = stream; + connect(d->m_stream, SIGNAL(readyRead()), this, SLOT(_q_handleData())); + d->handleData(); +} - d->m_type = UNKNOWN; - d->m_utf8 = utf8; - d->m_root = request.url(); +void QPlaylistFileParser::start(const QNetworkRequest& request, const QString &mimeType) +{ + Q_D(QPlaylistFileParser); + const QUrl &url = request.url(); - if (d->m_root.isLocalFile() && !QFile::exists(d->m_root.toLocalFile())) { - emit error(NetworkError, QString(tr("%1 does not exist")).arg(d->m_root.toString())); + if (url.isLocalFile() && !QFile::exists(url.toLocalFile())) { + emit error(ResourceError, QString(tr("%1 does not exist")).arg(url.toString())); return; } - d->m_source = d->m_mgr.get(request); + if (!d->m_currentParser.isNull()) { + abort(); + d->m_pendingJob = { Q_NULLPTR, QMediaResource(request, mimeType) }; + return; + } - connect(d->m_source, SIGNAL(readyRead()), this, SLOT(_q_handleData())); - connect(d->m_source, SIGNAL(finished()), this, SLOT(_q_handleData())); - connect(d->m_source, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(_q_handleError())); + d->reset(); + d->m_root = url; + d->m_mimeType = mimeType; + d->m_source.reset(d->m_mgr.get(request)); + connect(d->m_source.data(), SIGNAL(readyRead()), this, SLOT(handleData())); + connect(d->m_source.data(), SIGNAL(finished()), this, SLOT(handleData())); + connect(d->m_source.data(), SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(handleError())); - d->_q_handleData(); + d->handleData(); } -void QPlaylistFileParser::stop() +void QPlaylistFileParser::abort() { Q_D(QPlaylistFileParser); - if (d->m_currentParser) { - disconnect(d->m_currentParser, SIGNAL(newItem(QVariant)), this, SIGNAL(newItem(QVariant))); - disconnect(d->m_currentParser, SIGNAL(finished()), this, SLOT(_q_handleParserFinished())); - disconnect(d->m_currentParser, SIGNAL(error(QPlaylistFileParser::ParserError,QString)), - this, SLOT(_q_handleParserError(QPlaylistFileParser::ParserError,QString))); - d->m_currentParser->deleteLater(); - d->m_currentParser = 0; - } + d->abort(); + + if (d->m_source) + d->m_source->disconnect(); - d->m_buffer.clear(); - d->m_scanIndex = 0; - d->m_lineIndex = -1; - if (d->m_source) { - disconnect(d->m_source, SIGNAL(readyRead()), this, SLOT(_q_handleData())); - disconnect(d->m_source, SIGNAL(finished()), this, SLOT(_q_handleData())); - disconnect(d->m_source, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(_q_handleError())); - d->m_source->deleteLater(); - d->m_source = 0; + if (d->m_stream) + disconnect(d->m_stream, SIGNAL(readyRead()), this, SLOT(handleData())); +} + +void QPlaylistFileParser::handleData() +{ + Q_D(QPlaylistFileParser); + d->handleData(); +} + +void QPlaylistFileParserPrivate::handleParserFinished() +{ + Q_Q(QPlaylistFileParser); + const bool isParserValid = !m_currentParser.isNull(); + if (!isParserValid && !m_aborted) + emit q->error(QPlaylistFileParser::FormatNotSupportedError, QPlaylistFileParser::tr("Empty file provided")); + + if (isParserValid && !m_aborted) { + m_currentParser.reset(); + emit q->finished(); } + + if (!m_aborted) + q->abort(); + + if (!m_source.isNull()) + m_source.reset(); + + if (m_pendingJob.isValid()) + q->start(m_pendingJob.m_resource, m_pendingJob.m_stream); +} + +void QPlaylistFileParserPrivate::abort() +{ + m_aborted = true; + if (!m_currentParser.isNull()) + m_currentParser->abort(); +} + +void QPlaylistFileParserPrivate::reset() +{ + Q_ASSERT(m_currentParser.isNull()); + Q_ASSERT(m_source.isNull()); + m_buffer.clear(); + m_root.clear(); + m_mimeType.clear(); + m_stream = 0; + m_type = QPlaylistFileParser::UNKNOWN; + m_scanIndex = 0; + m_lineIndex = -1; + m_utf8 = false; + m_aborted = false; + m_pendingJob.reset(); +} + +void QPlaylistFileParser::handleError() +{ + Q_D(QPlaylistFileParser); + const QString &errorString = d->m_source->errorString(); + Q_EMIT error(QPlaylistFileParser::NetworkError, errorString); + abort(); } -#include "moc_playlistfileparser_p.cpp" -#include "playlistfileparser.moc" QT_END_NAMESPACE diff --git a/src/multimedia/playback/playlistfileparser_p.h b/src/multimedia/playback/qplaylistfileparser_p.h index bdf95fe7a..927dbb739 100644 --- a/src/multimedia/playback/playlistfileparser_p.h +++ b/src/multimedia/playback/qplaylistfileparser_p.h @@ -52,10 +52,14 @@ // #include "qtmultimediaglobal.h" -#include <QtNetwork/QNetworkRequest> +#include <QtCore/qobject.h> QT_BEGIN_NAMESPACE +class QIODevice; +class QMediaContent; +class QNetworkRequest; + class QPlaylistFileParserPrivate; class Q_MULTIMEDIA_EXPORT QPlaylistFileParser : public QObject @@ -63,6 +67,7 @@ class Q_MULTIMEDIA_EXPORT QPlaylistFileParser : public QObject Q_OBJECT public: QPlaylistFileParser(QObject *parent = 0); + ~QPlaylistFileParser(); enum FileType { @@ -77,26 +82,39 @@ public: NoError, FormatError, FormatNotSupportedError, + ResourceError, NetworkError }; - static FileType findPlaylistType(const QString& uri, const QString& mime, const void *data, quint32 size); - - void start(const QNetworkRequest &request, bool utf8 = false); - void stop(); + void start(const QMediaContent &media, QIODevice *stream = 0); + void start(const QNetworkRequest &request, const QString &mimeType = QString()); + void abort(); Q_SIGNALS: void newItem(const QVariant& content); void finished(); void error(QPlaylistFileParser::ParserError err, const QString& errorMsg); +private Q_SLOTS: + void handleData(); + void handleError(); + private: + void start(QIODevice *stream, const QString &mimeType = QString()); + + static FileType findByMimeType(const QString &mime); + static FileType findBySuffixType(const QString &suffix); + static FileType findByDataHeader(const char *data, quint32 size); + static FileType findPlaylistType(QIODevice *device, + const QString& mime); + static FileType findPlaylistType(const QString &suffix, + const QString& mime, + const char *data = 0, + quint32 size = 0); + Q_DISABLE_COPY(QPlaylistFileParser) Q_DECLARE_PRIVATE(QPlaylistFileParser) - Q_PRIVATE_SLOT(d_func(), void _q_handleData()) - Q_PRIVATE_SLOT(d_func(), void _q_handleError()) - Q_PRIVATE_SLOT(d_func(), void _q_handleParserError(QPlaylistFileParser::ParserError err, const QString& errorMsg)) - Q_PRIVATE_SLOT(d_func(), void _q_handleParserFinished()) + QScopedPointer<QPlaylistFileParserPrivate> d_ptr; }; QT_END_NAMESPACE diff --git a/src/multimedia/qmediaresourcepolicy_p.cpp b/src/multimedia/qmediaresourcepolicy_p.cpp index 8c9ea8264..1577f11af 100644 --- a/src/multimedia/qmediaresourcepolicy_p.cpp +++ b/src/multimedia/qmediaresourcepolicy_p.cpp @@ -51,24 +51,24 @@ namespace { { } - bool isVideoEnabled() const + bool isVideoEnabled() const override { return true; } - bool isGranted() const + bool isGranted() const override { return true; } - bool isAvailable() const + bool isAvailable() const override { return true; } - void acquire() {} - void release() {} - void setVideoEnabled(bool) {} + void acquire() override {} + void release() override {} + void setVideoEnabled(bool) override {} }; } diff --git a/src/multimedia/qmediaserviceprovider.cpp b/src/multimedia/qmediaserviceprovider.cpp index 5d470d6bd..b0783fba6 100644 --- a/src/multimedia/qmediaserviceprovider.cpp +++ b/src/multimedia/qmediaserviceprovider.cpp @@ -315,7 +315,7 @@ class QPluginServiceProvider : public QMediaServiceProvider QMap<const QMediaService*, MediaServiceData> mediaServiceData; public: - QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint) + QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint) override { QString key(QLatin1String(type.constData())); @@ -440,7 +440,7 @@ public: return 0; } - void releaseService(QMediaService *service) + void releaseService(QMediaService *service) override { if (service != 0) { MediaServiceData d = mediaServiceData.take(service); @@ -450,7 +450,7 @@ public: } } - QMediaServiceProviderHint::Features supportedFeatures(const QMediaService *service) const + QMediaServiceProviderHint::Features supportedFeatures(const QMediaService *service) const override { if (service) { MediaServiceData d = mediaServiceData.value(service); @@ -470,7 +470,7 @@ public: QMultimedia::SupportEstimate hasSupport(const QByteArray &serviceType, const QString &mimeType, const QStringList& codecs, - int flags) const + int flags) const override { const QList<QObject*> instances = loader()->instances(QLatin1String(serviceType)); @@ -522,7 +522,7 @@ public: return supportEstimate; } - QStringList supportedMimeTypes(const QByteArray &serviceType, int flags) const + QStringList supportedMimeTypes(const QByteArray &serviceType, int flags) const override { const QList<QObject*> instances = loader()->instances(QLatin1String(serviceType)); @@ -569,7 +569,7 @@ public: return supportedTypes; } - QByteArray defaultDevice(const QByteArray &serviceType) const + QByteArray defaultDevice(const QByteArray &serviceType) const override { const auto instances = loader()->instances(QLatin1String(serviceType)); for (QObject *obj : instances) { @@ -589,7 +589,7 @@ public: return QByteArray(); } - QList<QByteArray> devices(const QByteArray &serviceType) const + QList<QByteArray> devices(const QByteArray &serviceType) const override { QList<QByteArray> res; @@ -606,7 +606,7 @@ public: return res; } - QString deviceDescription(const QByteArray &serviceType, const QByteArray &device) + QString deviceDescription(const QByteArray &serviceType, const QByteArray &device) override { const auto instances = loader()->instances(QLatin1String(serviceType)); for (QObject *obj : instances) { @@ -622,7 +622,7 @@ public: return QString(); } - QCamera::Position cameraPosition(const QByteArray &device) const + QCamera::Position cameraPosition(const QByteArray &device) const override { const QByteArray serviceType(Q_MEDIASERVICE_CAMERA); const auto instances = loader()->instances(QString::fromLatin1(serviceType)); @@ -642,7 +642,7 @@ public: return QCamera::UnspecifiedPosition; } - int cameraOrientation(const QByteArray &device) const + int cameraOrientation(const QByteArray &device) const override { const QByteArray serviceType(Q_MEDIASERVICE_CAMERA); const auto instances = loader()->instances(QString::fromLatin1(serviceType)); diff --git a/src/multimedia/qmediaserviceproviderplugin.h b/src/multimedia/qmediaserviceproviderplugin.h index 43fe55d43..6447e319a 100644 --- a/src/multimedia/qmediaserviceproviderplugin.h +++ b/src/multimedia/qmediaserviceproviderplugin.h @@ -195,8 +195,8 @@ class Q_MULTIMEDIA_EXPORT QMediaServiceProviderPlugin : public QObject, public Q Q_INTERFACES(QMediaServiceProviderFactoryInterface) public: - virtual QMediaService* create(const QString& key) = 0; - virtual void release(QMediaService *service) = 0; + QMediaService* create(const QString& key) override = 0; + void release(QMediaService *service) override = 0; }; /*! diff --git a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h b/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h index 54282cad4..465821cb1 100644 --- a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h +++ b/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h @@ -134,10 +134,10 @@ Q_SIGNALS: void contentRectChanged(); protected: - QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); - void itemChange(ItemChange change, const ItemChangeData &changeData); - void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); - void releaseResources(); + QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; + void itemChange(ItemChange change, const ItemChangeData &changeData) override; + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; + void releaseResources() override; private Q_SLOTS: void _q_updateMediaObject(); diff --git a/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h b/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h index ab7c5aa23..c094bed1f 100644 --- a/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h +++ b/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h @@ -101,8 +101,8 @@ class Q_MULTIMEDIAQUICK_EXPORT QSGVideoNodeFactoryPlugin : public QObject, publi Q_OBJECT Q_INTERFACES(QSGVideoNodeFactoryInterface) public: - virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const = 0; - virtual QSGVideoNode *createNode(const QVideoSurfaceFormat &format) = 0; + QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const override = 0; + QSGVideoNode *createNode(const QVideoSurfaceFormat &format) override = 0; }; QT_END_NAMESPACE diff --git a/src/multimedia/radio/qradiodata.h b/src/multimedia/radio/qradiodata.h index a5cc09900..826c652ff 100644 --- a/src/multimedia/radio/qradiodata.h +++ b/src/multimedia/radio/qradiodata.h @@ -87,7 +87,7 @@ public: QMultimedia::AvailabilityStatus availability() const; - QMediaObject *mediaObject() const; + QMediaObject *mediaObject() const override; QString stationId() const; ProgramType programType() const; @@ -113,7 +113,7 @@ Q_SIGNALS: void error(QRadioData::Error error); protected: - bool setMediaObject(QMediaObject *); + bool setMediaObject(QMediaObject *) override; QRadioDataPrivate *d_ptr; private: diff --git a/src/multimedia/radio/qradiotuner.h b/src/multimedia/radio/qradiotuner.h index a9de6416d..7952a2e6c 100644 --- a/src/multimedia/radio/qradiotuner.h +++ b/src/multimedia/radio/qradiotuner.h @@ -81,7 +81,7 @@ public: explicit QRadioTuner(QObject *parent = Q_NULLPTR); ~QRadioTuner(); - QMultimedia::AvailabilityStatus availability() const; + QMultimedia::AvailabilityStatus availability() const override; State state() const; diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h index 3ac25129b..a12bcd632 100644 --- a/src/multimedia/recording/qmediarecorder.h +++ b/src/multimedia/recording/qmediarecorder.h @@ -109,7 +109,7 @@ public: explicit QMediaRecorder(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR); ~QMediaRecorder(); - QMediaObject *mediaObject() const; + QMediaObject *mediaObject() const override; bool isAvailable() const; QMultimedia::AvailabilityStatus availability() const; @@ -194,7 +194,7 @@ Q_SIGNALS: protected: QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = Q_NULLPTR); - bool setMediaObject(QMediaObject *object); + bool setMediaObject(QMediaObject *object) override; QMediaRecorderPrivate *d_ptr; private: diff --git a/src/multimedia/video/qabstractvideobuffer.h b/src/multimedia/video/qabstractvideobuffer.h index dcefdf7bc..2352c0f3d 100644 --- a/src/multimedia/video/qabstractvideobuffer.h +++ b/src/multimedia/video/qabstractvideobuffer.h @@ -107,7 +107,7 @@ public: QAbstractPlanarVideoBuffer(HandleType type); virtual ~QAbstractPlanarVideoBuffer(); - uchar *map(MapMode mode, int *numBytes, int *bytesPerLine); + uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) override; virtual int map(MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4]) = 0; protected: diff --git a/src/multimedia/video/qabstractvideobuffer_p.h b/src/multimedia/video/qabstractvideobuffer_p.h index 6fbd75a30..9e3ced9b5 100644 --- a/src/multimedia/video/qabstractvideobuffer_p.h +++ b/src/multimedia/video/qabstractvideobuffer_p.h @@ -85,7 +85,7 @@ public: QAbstractPlanarVideoBufferPrivate() {} - int map(QAbstractVideoBuffer::MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4]); + int map(QAbstractVideoBuffer::MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4]) override; private: Q_DECLARE_PUBLIC(QAbstractPlanarVideoBuffer) diff --git a/src/multimedia/video/qimagevideobuffer_p.h b/src/multimedia/video/qimagevideobuffer_p.h index 6fa742c88..f2b88dd9b 100644 --- a/src/multimedia/video/qimagevideobuffer_p.h +++ b/src/multimedia/video/qimagevideobuffer_p.h @@ -67,10 +67,10 @@ public: QImageVideoBuffer(const QImage &image); ~QImageVideoBuffer(); - MapMode mapMode() const; + MapMode mapMode() const override; - uchar *map(MapMode mode, int *numBytes, int *bytesPerLine); - void unmap(); + uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) override; + void unmap() override; }; QT_END_NAMESPACE diff --git a/src/multimedia/video/qmemoryvideobuffer_p.h b/src/multimedia/video/qmemoryvideobuffer_p.h index 132f9367c..e1b1f83a9 100644 --- a/src/multimedia/video/qmemoryvideobuffer_p.h +++ b/src/multimedia/video/qmemoryvideobuffer_p.h @@ -65,10 +65,10 @@ public: QMemoryVideoBuffer(const QByteArray &data, int bytesPerLine); ~QMemoryVideoBuffer(); - MapMode mapMode() const; + MapMode mapMode() const override; - uchar *map(MapMode mode, int *numBytes, int *bytesPerLine); - void unmap(); + uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) override; + void unmap() override; }; QT_END_NAMESPACE diff --git a/src/multimedia/video/qvideosurfaceoutput_p.h b/src/multimedia/video/qvideosurfaceoutput_p.h index bca288191..a1b24abbf 100644 --- a/src/multimedia/video/qvideosurfaceoutput_p.h +++ b/src/multimedia/video/qvideosurfaceoutput_p.h @@ -70,12 +70,12 @@ public: QVideoSurfaceOutput(QObject*parent = 0); ~QVideoSurfaceOutput(); - QMediaObject *mediaObject() const; + QMediaObject *mediaObject() const override; void setVideoSurface(QAbstractVideoSurface *surface); protected: - bool setMediaObject(QMediaObject *object); + bool setMediaObject(QMediaObject *object) override; private: QPointer<QAbstractVideoSurface> m_surface; |