summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia')
-rw-r--r--src/multimedia/audio/qaudio.cpp26
-rw-r--r--src/multimedia/audio/qaudio.h5
-rw-r--r--src/multimedia/audio/qaudiobuffer.cpp10
-rw-r--r--src/multimedia/audio/qaudiodecoder.h2
-rw-r--r--src/multimedia/audio/qaudioinput.h4
-rw-r--r--src/multimedia/audio/qaudiooutput.h4
-rw-r--r--src/multimedia/audio/qaudioprobe.h2
-rw-r--r--src/multimedia/audio/qaudiosystemplugin.h2
-rw-r--r--src/multimedia/audio/qsound.h2
-rw-r--r--src/multimedia/audio/qsoundeffect.h2
-rw-r--r--src/multimedia/audio/qsoundeffect_pulse_p.cpp48
-rw-r--r--src/multimedia/audio/qsoundeffect_pulse_p.h5
-rw-r--r--src/multimedia/camera/qcamera.h13
-rw-r--r--src/multimedia/camera/qcameraexposure.h8
-rw-r--r--src/multimedia/camera/qcameraimagecapture.h4
-rw-r--r--src/multimedia/controls/controls.pri7
-rw-r--r--src/multimedia/controls/qaudiodecodercontrol.h2
-rw-r--r--src/multimedia/controls/qaudioencodersettingscontrol.h4
-rw-r--r--src/multimedia/controls/qaudioinputselectorcontrol.h2
-rw-r--r--src/multimedia/controls/qaudiooutputselectorcontrol.h2
-rw-r--r--src/multimedia/controls/qaudiorolecontrol.h2
-rw-r--r--src/multimedia/controls/qcameracapturebufferformatcontrol.h2
-rw-r--r--src/multimedia/controls/qcameracapturedestinationcontrol.h2
-rw-r--r--src/multimedia/controls/qcameracontrol.h2
-rw-r--r--src/multimedia/controls/qcameraexposurecontrol.h2
-rw-r--r--src/multimedia/controls/qcamerafeedbackcontrol.h2
-rw-r--r--src/multimedia/controls/qcameraflashcontrol.h2
-rw-r--r--src/multimedia/controls/qcamerafocuscontrol.h2
-rw-r--r--src/multimedia/controls/qcameraimagecapturecontrol.h2
-rw-r--r--src/multimedia/controls/qcameraimageprocessingcontrol.h2
-rw-r--r--src/multimedia/controls/qcamerainfocontrol.h2
-rw-r--r--src/multimedia/controls/qcameralockscontrol.h2
-rw-r--r--src/multimedia/controls/qcameraviewfindersettingscontrol.h4
-rw-r--r--src/multimedia/controls/qcamerazoomcontrol.h2
-rw-r--r--src/multimedia/controls/qcustomaudiorolecontrol.cpp117
-rw-r--r--src/multimedia/controls/qcustomaudiorolecontrol.h76
-rw-r--r--src/multimedia/controls/qimageencodercontrol.h4
-rw-r--r--src/multimedia/controls/qmediaaudioprobecontrol.h2
-rw-r--r--src/multimedia/controls/qmediaavailabilitycontrol.h2
-rw-r--r--src/multimedia/controls/qmediacontainercontrol.h2
-rw-r--r--src/multimedia/controls/qmediagaplessplaybackcontrol.h2
-rw-r--r--src/multimedia/controls/qmedianetworkaccesscontrol.h2
-rw-r--r--src/multimedia/controls/qmediaplayercontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediaplayercontrol.h2
-rw-r--r--src/multimedia/controls/qmediarecordercontrol.h2
-rw-r--r--src/multimedia/controls/qmediastreamscontrol.h2
-rw-r--r--src/multimedia/controls/qmediavideoprobecontrol.h2
-rw-r--r--src/multimedia/controls/qmetadatareadercontrol.h2
-rw-r--r--src/multimedia/controls/qmetadatawritercontrol.h2
-rw-r--r--src/multimedia/controls/qradiodatacontrol.h2
-rw-r--r--src/multimedia/controls/qradiotunercontrol.h2
-rw-r--r--src/multimedia/controls/qvideodeviceselectorcontrol.h2
-rw-r--r--src/multimedia/controls/qvideoencodersettingscontrol.h6
-rw-r--r--src/multimedia/controls/qvideorenderercontrol.h2
-rw-r--r--src/multimedia/controls/qvideowindowcontrol.h2
-rw-r--r--src/multimedia/doc/qtmultimedia.qdocconf3
-rw-r--r--src/multimedia/gsttools_headers/gstvideoconnector_p.h8
-rw-r--r--src/multimedia/gsttools_headers/qgstappsrc_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstcodecsinfo_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h4
-rw-r--r--src/multimedia/gsttools_headers/qgstreamerbushelper_p.h4
-rw-r--r--src/multimedia/gsttools_headers/qgstreamermessage_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgstreamervideowidget_p.h5
-rw-r--r--src/multimedia/gsttools_headers/qgstreamervideowindow_p.h3
-rw-r--r--src/multimedia/gsttools_headers/qgsttools_global_p.h70
-rw-r--r--src/multimedia/gsttools_headers/qgstutils_p.h87
-rw-r--r--src/multimedia/gsttools_headers/qgstvideobuffer_p.h5
-rw-r--r--src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h7
-rw-r--r--src/multimedia/multimedia.pro6
-rw-r--r--src/multimedia/playback/qmedianetworkplaylistprovider.cpp3
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp102
-rw-r--r--src/multimedia/playback/qmediaplayer.h11
-rw-r--r--src/multimedia/playback/qmediaplaylist.h10
-rw-r--r--src/multimedia/playback/qmediaplaylistnavigator.cpp5
-rw-r--r--src/multimedia/playback/qplaylistfileparser.cpp2
-rw-r--r--src/multimedia/qmediacontrol.h4
-rw-r--r--src/multimedia/qmediaobject.cpp8
-rw-r--r--src/multimedia/radio/qradiodata.h2
-rw-r--r--src/multimedia/radio/qradiotuner.h2
-rw-r--r--src/multimedia/recording/qaudiorecorder.h2
-rw-r--r--src/multimedia/recording/qmediarecorder.h10
-rw-r--r--src/multimedia/video/qabstractvideofilter.h2
-rw-r--r--src/multimedia/video/qabstractvideosurface.h2
-rw-r--r--src/multimedia/video/qimagevideobuffer.cpp2
-rw-r--r--src/multimedia/video/qvideoframe.cpp38
-rw-r--r--src/multimedia/video/qvideoprobe.h2
-rw-r--r--src/multimedia/video/qvideosurfaceformat.cpp29
-rw-r--r--src/multimedia/video/qvideosurfaceformat.h3
94 files changed, 672 insertions, 217 deletions
diff --git a/src/multimedia/audio/qaudio.cpp b/src/multimedia/audio/qaudio.cpp
index d4f89e898..82613270a 100644
--- a/src/multimedia/audio/qaudio.cpp
+++ b/src/multimedia/audio/qaudio.cpp
@@ -79,13 +79,18 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterAudioMetaTypes)
/*!
\enum QAudio::State
- \value ActiveState Audio data is being processed, this state is set after start() is called
- and while audio data is available to be processed.
- \value SuspendedState The audio device is in a suspended state, this state will only be entered
- after suspend() is called.
- \value StoppedState The audio device is closed, and is not processing any audio data
- \value IdleState The QIODevice passed in has no data and audio system's buffer is empty, this state
- is set after start() is called and while no audio data is available to be processed.
+ \value ActiveState Audio data is being processed, this state is set after start() is called
+ and while audio data is available to be processed.
+ \value SuspendedState The audio stream is in a suspended state. Entered after suspend() is called
+ or when another stream takes control of the audio device. In the later case,
+ a call to resume will return control of the audio device to this stream. This
+ should usually only be done upon user request.
+ \value StoppedState The audio device is closed, and is not processing any audio data
+ \value IdleState The QIODevice passed in has no data and audio system's buffer is empty, this state
+ is set after start() is called and while no audio data is available to be processed.
+ \value InterruptedState This stream is in a suspended state because another higher priority stream currently
+ has control of the audio device. Playback cannot resume until the higher priority
+ stream relinquishes control of the audio device.
*/
/*!
@@ -110,6 +115,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterAudioMetaTypes)
\value AccessibilityRole For accessibility, such as with a screen reader
\value SonificationRole Sonification, such as with user interface sounds
\value GameRole Game audio
+ \value CustomRole The role is specified by QMediaPlayer::customAudioRole()
\since 5.6
\sa QMediaPlayer::setAudioRole()
@@ -285,6 +291,9 @@ QDebug operator<<(QDebug dbg, QAudio::State state)
case QAudio::IdleState:
dbg << "IdleState";
break;
+ case QAudio::InterruptedState:
+ dbg << "InterruptedState";
+ break;
}
return dbg;
}
@@ -339,6 +348,9 @@ QDebug operator<<(QDebug dbg, QAudio::Role role)
case QAudio::VoiceCommunicationRole:
dbg << "VoiceCommunicationRole";
break;
+ case QAudio::CustomRole:
+ dbg << "CustomRole";
+ break;
}
return dbg;
}
diff --git a/src/multimedia/audio/qaudio.h b/src/multimedia/audio/qaudio.h
index 1c38e9f35..90a8c236f 100644
--- a/src/multimedia/audio/qaudio.h
+++ b/src/multimedia/audio/qaudio.h
@@ -55,7 +55,7 @@ class QString;
namespace QAudio
{
enum Error { NoError, OpenError, IOError, UnderrunError, FatalError };
- enum State { ActiveState, SuspendedState, StoppedState, IdleState };
+ enum State { ActiveState, SuspendedState, StoppedState, IdleState, InterruptedState };
enum Mode { AudioInput, AudioOutput };
enum Role {
@@ -68,7 +68,8 @@ namespace QAudio
RingtoneRole,
AccessibilityRole,
SonificationRole,
- GameRole
+ GameRole,
+ CustomRole
};
enum VolumeScale {
diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp
index fe07d1e47..849d79ab3 100644
--- a/src/multimedia/audio/qaudiobuffer.cpp
+++ b/src/multimedia/audio/qaudiobuffer.cpp
@@ -531,32 +531,32 @@ void *QAudioBuffer::data()
*/
/*!
- \fn QAudioBuffer::StereoFrame::StereoFrame()
+ \fn template <typename T> QAudioBuffer::StereoFrame<T>::StereoFrame()
Constructs a new frame with the "silent" value for this
sample format (0 for signed formats and floats, 0x8* for unsigned formats).
*/
/*!
- \fn QAudioBuffer::StereoFrame::StereoFrame(T leftSample, T rightSample)
+ \fn template <typename T> QAudioBuffer::StereoFrame<T>::StereoFrame(T leftSample, T rightSample)
Constructs a new frame with the supplied \a leftSample and \a rightSample values.
*/
/*!
- \fn QAudioBuffer::StereoFrame::operator=(const StereoFrame &other)
+ \fn template <typename T> QAudioBuffer::StereoFrame<T>::operator=(const StereoFrame &other)
Assigns \a other to this frame.
*/
/*!
- \fn QAudioBuffer::StereoFrame::average() const
+ \fn template <typename T> QAudioBuffer::StereoFrame<T>::average() const
Returns the arithmetic average of the left and right samples.
*/
-/*! \fn QAudioBuffer::StereoFrame::clear()
+/*! \fn template <typename T> QAudioBuffer::StereoFrame<T>::clear()
Sets the values of this frame to the "silent" value.
*/
diff --git a/src/multimedia/audio/qaudiodecoder.h b/src/multimedia/audio/qaudiodecoder.h
index 85e0b75f7..4ba107946 100644
--- a/src/multimedia/audio/qaudiodecoder.h
+++ b/src/multimedia/audio/qaudiodecoder.h
@@ -75,7 +75,7 @@ public:
ServiceMissingError
};
- explicit QAudioDecoder(QObject *parent = Q_NULLPTR);
+ explicit QAudioDecoder(QObject *parent = nullptr);
~QAudioDecoder();
static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs = QStringList());
diff --git a/src/multimedia/audio/qaudioinput.h b/src/multimedia/audio/qaudioinput.h
index 5794276d2..db482a145 100644
--- a/src/multimedia/audio/qaudioinput.h
+++ b/src/multimedia/audio/qaudioinput.h
@@ -62,8 +62,8 @@ class Q_MULTIMEDIA_EXPORT QAudioInput : public QObject
Q_OBJECT
public:
- explicit QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR);
- explicit QAudioInput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR);
+ explicit QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr);
+ explicit QAudioInput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr);
~QAudioInput();
QAudioFormat format() const;
diff --git a/src/multimedia/audio/qaudiooutput.h b/src/multimedia/audio/qaudiooutput.h
index 9f817271d..1c037cd2b 100644
--- a/src/multimedia/audio/qaudiooutput.h
+++ b/src/multimedia/audio/qaudiooutput.h
@@ -62,8 +62,8 @@ class Q_MULTIMEDIA_EXPORT QAudioOutput : public QObject
Q_OBJECT
public:
- explicit QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR);
- explicit QAudioOutput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR);
+ explicit QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr);
+ explicit QAudioOutput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr);
~QAudioOutput();
QAudioFormat format() const;
diff --git a/src/multimedia/audio/qaudioprobe.h b/src/multimedia/audio/qaudioprobe.h
index 376a54e34..a3fc4598d 100644
--- a/src/multimedia/audio/qaudioprobe.h
+++ b/src/multimedia/audio/qaudioprobe.h
@@ -53,7 +53,7 @@ class Q_MULTIMEDIA_EXPORT QAudioProbe : public QObject
{
Q_OBJECT
public:
- explicit QAudioProbe(QObject *parent = Q_NULLPTR);
+ explicit QAudioProbe(QObject *parent = nullptr);
~QAudioProbe();
bool setSource(QMediaObject *source);
diff --git a/src/multimedia/audio/qaudiosystemplugin.h b/src/multimedia/audio/qaudiosystemplugin.h
index e304f1c46..3539201a2 100644
--- a/src/multimedia/audio/qaudiosystemplugin.h
+++ b/src/multimedia/audio/qaudiosystemplugin.h
@@ -78,7 +78,7 @@ class Q_MULTIMEDIA_EXPORT QAudioSystemPlugin : public QObject, public QAudioSyst
Q_INTERFACES(QAudioSystemFactoryInterface)
public:
- explicit QAudioSystemPlugin(QObject *parent = Q_NULLPTR);
+ explicit QAudioSystemPlugin(QObject *parent = nullptr);
~QAudioSystemPlugin();
QList<QByteArray> availableDevices(QAudio::Mode) const override = 0;
diff --git a/src/multimedia/audio/qsound.h b/src/multimedia/audio/qsound.h
index 304019ced..0b6320025 100644
--- a/src/multimedia/audio/qsound.h
+++ b/src/multimedia/audio/qsound.h
@@ -58,7 +58,7 @@ public:
static void play(const QString& filename);
- explicit QSound(const QString &filename, QObject *parent = Q_NULLPTR);
+ explicit QSound(const QString &filename, QObject *parent = nullptr);
~QSound();
int loops() const;
diff --git a/src/multimedia/audio/qsoundeffect.h b/src/multimedia/audio/qsoundeffect.h
index 7420d7b81..8bde1fe56 100644
--- a/src/multimedia/audio/qsoundeffect.h
+++ b/src/multimedia/audio/qsoundeffect.h
@@ -80,7 +80,7 @@ public:
Error
};
- explicit QSoundEffect(QObject *parent = Q_NULLPTR);
+ explicit QSoundEffect(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 a4861d2a9..981d4c01f 100644
--- a/src/multimedia/audio/qsoundeffect_pulse_p.cpp
+++ b/src/multimedia/audio/qsoundeffect_pulse_p.cpp
@@ -73,20 +73,23 @@ inline pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
spec.rate = format.sampleRate();
spec.channels = format.channelCount();
-
- if (format.sampleSize() == 8)
- spec.format = PA_SAMPLE_U8;
- else if (format.sampleSize() == 16) {
- switch (format.byteOrder()) {
- case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S16BE; break;
- case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S16LE; break;
- }
- }
- else if (format.sampleSize() == 32) {
- switch (format.byteOrder()) {
- case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S32BE; break;
- case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S32LE; break;
+ spec.format = PA_SAMPLE_INVALID;
+ const bool isBigEndian = (format.byteOrder() == QAudioFormat::BigEndian);
+
+ if (format.sampleType() == QAudioFormat::UnSignedInt) {
+ if (format.sampleSize() == 8)
+ spec.format = PA_SAMPLE_U8;
+ } else if (format.sampleType() == QAudioFormat::SignedInt) {
+ if (format.sampleSize() == 16) {
+ spec.format = isBigEndian ? PA_SAMPLE_S16BE : PA_SAMPLE_S16LE;
+ } else if (format.sampleSize() == 24) {
+ spec.format = isBigEndian ? PA_SAMPLE_S24BE : PA_SAMPLE_S24LE;
+ } else if (format.sampleSize() == 32) {
+ spec.format = isBigEndian ? PA_SAMPLE_S32BE : PA_SAMPLE_S32LE;
}
+ } else if (format.sampleType() == QAudioFormat::Float) {
+ if (format.sampleSize() == 32)
+ spec.format = isBigEndian ? PA_SAMPLE_FLOAT32BE : PA_SAMPLE_FLOAT32LE;
}
return spec;
@@ -190,7 +193,11 @@ private Q_SLOTS:
pa_context_set_state_callback(m_context, context_state_callback, this);
- if (pa_context_connect(m_context, 0, (pa_context_flags_t)0, 0) < 0) {
+ const QByteArray srvStrEnv = qgetenv("QT_PULSE_SERVER_STRING");
+ const char *srvStr = srvStrEnv.isNull() ? 0 : srvStrEnv.constData();
+ pa_context_flags_t flags = qEnvironmentVariableIsSet("QT_PULSE_NOAUTOSPAWN") ? PA_CONTEXT_NOAUTOSPAWN : (pa_context_flags_t)0;
+
+ if (pa_context_connect(m_context, srvStr, flags, 0) < 0) {
qWarning("PulseAudioService: pa_context_connect() failed");
pa_context_unref(m_context);
unlock();
@@ -529,31 +536,34 @@ void QSoundEffectPrivate::setLoopCount(int loopCount)
qreal QSoundEffectPrivate::volume() const
{
- QReadLocker locker(&m_volumeLock);
+ QMutexLocker locker(&m_volumeLock);
return m_volume;
}
void QSoundEffectPrivate::setVolume(qreal volume)
{
- QWriteLocker locker(&m_volumeLock);
+ QMutexLocker locker(&m_volumeLock);
if (qFuzzyCompare(m_volume, volume))
return;
m_volume = qBound(qreal(0), volume, qreal(1));
+ locker.unlock();
emit volumeChanged();
}
bool QSoundEffectPrivate::isMuted() const
{
- QReadLocker locker(&m_volumeLock);
+ QMutexLocker locker(&m_volumeLock);
return m_muted;
}
void QSoundEffectPrivate::setMuted(bool muted)
{
- QWriteLocker locker(&m_volumeLock);
+ m_volumeLock.lock();
m_muted = muted;
+ m_volumeLock.unlock();
+
emit mutedChanged();
}
@@ -878,7 +888,7 @@ int QSoundEffectPrivate::writeToStream(const void *data, int size)
if (size < 1)
return 0;
- m_volumeLock.lockForRead();
+ m_volumeLock.lock();
qreal volume = m_muted ? 0 : m_volume;
m_volumeLock.unlock();
pa_free_cb_t writeDoneCb = stream_write_done_callback;
diff --git a/src/multimedia/audio/qsoundeffect_pulse_p.h b/src/multimedia/audio/qsoundeffect_pulse_p.h
index 7be88c55a..268a99326 100644
--- a/src/multimedia/audio/qsoundeffect_pulse_p.h
+++ b/src/multimedia/audio/qsoundeffect_pulse_p.h
@@ -56,7 +56,7 @@
#include <QtCore/qobject.h>
#include <QtCore/qdatetime.h>
-#include <QtCore/qreadwritelock.h>
+#include <QtCore/qmutex.h>
#include <qmediaplayer.h>
#include <pulse/pulseaudio.h>
#include "qsamplecache_p.h"
@@ -175,7 +175,8 @@ private:
bool m_resourcesAvailable;
- mutable QReadWriteLock m_volumeLock;
+ // Protects volume while PuseAudio is accessing it
+ mutable QMutex m_volumeLock;
QMediaPlayerResourceSetInterface *m_resources;
};
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index 685298905..06187fec0 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -165,10 +165,10 @@ public:
FrontFace
};
- explicit QCamera(QObject *parent = Q_NULLPTR);
- explicit QCamera(const QByteArray& deviceName, QObject *parent = Q_NULLPTR);
- explicit QCamera(const QCameraInfo& cameraInfo, QObject *parent = Q_NULLPTR);
- explicit QCamera(QCamera::Position position, QObject *parent = Q_NULLPTR);
+ explicit QCamera(QObject *parent = nullptr);
+ explicit QCamera(const QByteArray& deviceName, QObject *parent = nullptr);
+ explicit QCamera(const QCameraInfo& cameraInfo, QObject *parent = nullptr);
+ explicit QCamera(QCamera::Position position, QObject *parent = nullptr);
~QCamera();
#if QT_DEPRECATED_SINCE(5, 3)
@@ -262,7 +262,10 @@ QT_WARNING_DISABLE_CLANG("-Wfloat-equal")
QT_WARNING_DISABLE_GCC("-Wfloat-equal")
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator==(const QCamera::FrameRateRange &r1, const QCamera::FrameRateRange &r2) Q_DECL_NOTHROW
-{ return r1.minimumFrameRate == r2.minimumFrameRate && r1.maximumFrameRate == r2.maximumFrameRate; }
+{
+ return qFuzzyCompare(r1.minimumFrameRate, r2.minimumFrameRate)
+ && qFuzzyCompare(r1.maximumFrameRate, r2.maximumFrameRate);
+}
QT_WARNING_POP
diff --git a/src/multimedia/camera/qcameraexposure.h b/src/multimedia/camera/qcameraexposure.h
index e0924ca60..336d4c0b3 100644
--- a/src/multimedia/camera/qcameraexposure.h
+++ b/src/multimedia/camera/qcameraexposure.h
@@ -135,9 +135,9 @@ public:
qreal requestedAperture() const;
qreal requestedShutterSpeed() const;
- QList<int> supportedIsoSensitivities(bool *continuous = Q_NULLPTR) const;
- QList<qreal> supportedApertures(bool *continuous = Q_NULLPTR) const;
- QList<qreal> supportedShutterSpeeds(bool *continuous = Q_NULLPTR) const;
+ QList<int> supportedIsoSensitivities(bool *continuous = nullptr) const;
+ QList<qreal> supportedApertures(bool *continuous = nullptr) const;
+ QList<qreal> supportedShutterSpeeds(bool *continuous = nullptr) const;
public Q_SLOTS:
void setFlashMode(FlashModes mode);
@@ -168,7 +168,7 @@ Q_SIGNALS:
private:
friend class QCamera;
friend class QCameraPrivate;
- explicit QCameraExposure(QCamera *parent = Q_NULLPTR);
+ explicit QCameraExposure(QCamera *parent = nullptr);
virtual ~QCameraExposure();
Q_DISABLE_COPY(QCameraExposure)
diff --git a/src/multimedia/camera/qcameraimagecapture.h b/src/multimedia/camera/qcameraimagecapture.h
index 12feb9eec..6fedb7e2c 100644
--- a/src/multimedia/camera/qcameraimagecapture.h
+++ b/src/multimedia/camera/qcameraimagecapture.h
@@ -87,7 +87,7 @@ public:
};
Q_DECLARE_FLAGS(CaptureDestinations, CaptureDestination)
- explicit QCameraImageCapture(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR);
+ explicit QCameraImageCapture(QMediaObject *mediaObject, QObject *parent = nullptr);
~QCameraImageCapture();
bool isAvailable() const;
@@ -104,7 +104,7 @@ public:
QString imageCodecDescription(const QString &codecName) const;
QList<QSize> supportedResolutions(const QImageEncoderSettings &settings = QImageEncoderSettings(),
- bool *continuous = Q_NULLPTR) const;
+ bool *continuous = nullptr) const;
QImageEncoderSettings encodingSettings() const;
void setEncodingSettings(const QImageEncoderSettings& settings);
diff --git a/src/multimedia/controls/controls.pri b/src/multimedia/controls/controls.pri
index 7ab2e51c4..cfebe9777 100644
--- a/src/multimedia/controls/controls.pri
+++ b/src/multimedia/controls/controls.pri
@@ -37,7 +37,8 @@ PUBLIC_HEADERS += \
controls/qmediaaudioprobecontrol.h \
controls/qmediavideoprobecontrol.h \
controls/qmediaavailabilitycontrol.h \
- controls/qaudiorolecontrol.h
+ controls/qaudiorolecontrol.h \
+ controls/qcustomaudiorolecontrol.h
PRIVATE_HEADERS += \
controls/qmediaplaylistcontrol_p.h \
@@ -81,5 +82,5 @@ SOURCES += \
controls/qaudioinputselectorcontrol.cpp \
controls/qaudiooutputselectorcontrol.cpp \
controls/qvideodeviceselectorcontrol.cpp \
- controls/qaudiorolecontrol.cpp
-
+ controls/qaudiorolecontrol.cpp \
+ controls/qcustomaudiorolecontrol.cpp
diff --git a/src/multimedia/controls/qaudiodecodercontrol.h b/src/multimedia/controls/qaudiodecodercontrol.h
index f02da4963..6ab27ba62 100644
--- a/src/multimedia/controls/qaudiodecodercontrol.h
+++ b/src/multimedia/controls/qaudiodecodercontrol.h
@@ -92,7 +92,7 @@ Q_SIGNALS:
void durationChanged(qint64 duration);
protected:
- explicit QAudioDecoderControl(QObject *parent = Q_NULLPTR);
+ explicit QAudioDecoderControl(QObject *parent = nullptr);
};
#define QAudioDecoderControl_iid "org.qt-project.qt.audiodecodercontrol/5.0"
diff --git a/src/multimedia/controls/qaudioencodersettingscontrol.h b/src/multimedia/controls/qaudioencodersettingscontrol.h
index 1906904d8..1f973f0ea 100644
--- a/src/multimedia/controls/qaudioencodersettingscontrol.h
+++ b/src/multimedia/controls/qaudioencodersettingscontrol.h
@@ -67,13 +67,13 @@ public:
virtual QString codecDescription(const QString &codecName) const = 0;
virtual QList<int> supportedSampleRates(const QAudioEncoderSettings &settings,
- bool *continuous = Q_NULLPTR) const = 0;
+ bool *continuous = nullptr) const = 0;
virtual QAudioEncoderSettings audioSettings() const = 0;
virtual void setAudioSettings(const QAudioEncoderSettings&) = 0;
protected:
- explicit QAudioEncoderSettingsControl(QObject *parent = Q_NULLPTR);
+ explicit QAudioEncoderSettingsControl(QObject *parent = nullptr);
};
#define QAudioEncoderSettingsControl_iid "org.qt-project.qt.audioencodersettingscontrol/5.0"
diff --git a/src/multimedia/controls/qaudioinputselectorcontrol.h b/src/multimedia/controls/qaudioinputselectorcontrol.h
index eceaa76dd..9665b55de 100644
--- a/src/multimedia/controls/qaudioinputselectorcontrol.h
+++ b/src/multimedia/controls/qaudioinputselectorcontrol.h
@@ -68,7 +68,7 @@ Q_SIGNALS:
void availableInputsChanged();
protected:
- explicit QAudioInputSelectorControl(QObject *parent = Q_NULLPTR);
+ explicit QAudioInputSelectorControl(QObject *parent = nullptr);
};
#define QAudioInputSelectorControl_iid "org.qt-project.qt.audioinputselectorcontrol/5.0"
diff --git a/src/multimedia/controls/qaudiooutputselectorcontrol.h b/src/multimedia/controls/qaudiooutputselectorcontrol.h
index b2d27a349..de44d0ebb 100644
--- a/src/multimedia/controls/qaudiooutputselectorcontrol.h
+++ b/src/multimedia/controls/qaudiooutputselectorcontrol.h
@@ -68,7 +68,7 @@ Q_SIGNALS:
void availableOutputsChanged();
protected:
- explicit QAudioOutputSelectorControl(QObject *parent = Q_NULLPTR);
+ explicit QAudioOutputSelectorControl(QObject *parent = nullptr);
};
#define QAudioOutputSelectorControl_iid "org.qt-project.qt.audiooutputselectorcontrol/5.0"
diff --git a/src/multimedia/controls/qaudiorolecontrol.h b/src/multimedia/controls/qaudiorolecontrol.h
index 5d9db177b..c59874fdf 100644
--- a/src/multimedia/controls/qaudiorolecontrol.h
+++ b/src/multimedia/controls/qaudiorolecontrol.h
@@ -64,7 +64,7 @@ Q_SIGNALS:
void audioRoleChanged(QAudio::Role role);
protected:
- explicit QAudioRoleControl(QObject *parent = Q_NULLPTR);
+ explicit QAudioRoleControl(QObject *parent = nullptr);
};
#define QAudioRoleControl_iid "org.qt-project.qt.audiorolecontrol/5.6"
diff --git a/src/multimedia/controls/qcameracapturebufferformatcontrol.h b/src/multimedia/controls/qcameracapturebufferformatcontrol.h
index cb8c3d6d9..c659384b6 100644
--- a/src/multimedia/controls/qcameracapturebufferformatcontrol.h
+++ b/src/multimedia/controls/qcameracapturebufferformatcontrol.h
@@ -62,7 +62,7 @@ Q_SIGNALS:
void bufferFormatChanged(QVideoFrame::PixelFormat);
protected:
- explicit QCameraCaptureBufferFormatControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraCaptureBufferFormatControl(QObject *parent = nullptr);
};
#define QCameraCaptureBufferFormatControl_iid "org.qt-project.qt.cameracapturebufferformatcontrol/5.0"
diff --git a/src/multimedia/controls/qcameracapturedestinationcontrol.h b/src/multimedia/controls/qcameracapturedestinationcontrol.h
index 90142d6b5..30d69d47a 100644
--- a/src/multimedia/controls/qcameracapturedestinationcontrol.h
+++ b/src/multimedia/controls/qcameracapturedestinationcontrol.h
@@ -62,7 +62,7 @@ Q_SIGNALS:
void captureDestinationChanged(QCameraImageCapture::CaptureDestinations);
protected:
- explicit QCameraCaptureDestinationControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraCaptureDestinationControl(QObject *parent = nullptr);
};
#define QCameraCaptureDestinationControl_iid "org.qt-project.qt.cameracapturedestinationcontrol/5.0"
diff --git a/src/multimedia/controls/qcameracontrol.h b/src/multimedia/controls/qcameracontrol.h
index f17af0ce9..f7a1b4288 100644
--- a/src/multimedia/controls/qcameracontrol.h
+++ b/src/multimedia/controls/qcameracontrol.h
@@ -83,7 +83,7 @@ Q_SIGNALS:
void captureModeChanged(QCamera::CaptureModes);
protected:
- explicit QCameraControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraControl(QObject *parent = nullptr);
};
#define QCameraControl_iid "org.qt-project.qt.cameracontrol/5.0"
diff --git a/src/multimedia/controls/qcameraexposurecontrol.h b/src/multimedia/controls/qcameraexposurecontrol.h
index 88dda12ed..7694380e5 100644
--- a/src/multimedia/controls/qcameraexposurecontrol.h
+++ b/src/multimedia/controls/qcameraexposurecontrol.h
@@ -87,7 +87,7 @@ Q_SIGNALS:
void parameterRangeChanged(int parameter);
protected:
- explicit QCameraExposureControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraExposureControl(QObject *parent = nullptr);
};
#define QCameraExposureControl_iid "org.qt-project.qt.cameraexposurecontrol/5.0"
diff --git a/src/multimedia/controls/qcamerafeedbackcontrol.h b/src/multimedia/controls/qcamerafeedbackcontrol.h
index cee97210f..195ad3915 100644
--- a/src/multimedia/controls/qcamerafeedbackcontrol.h
+++ b/src/multimedia/controls/qcamerafeedbackcontrol.h
@@ -84,7 +84,7 @@ public:
virtual bool setEventFeedbackSound(EventType, const QString &filePath) = 0;
protected:
- explicit QCameraFeedbackControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraFeedbackControl(QObject *parent = nullptr);
};
#define QCameraFeedbackControl_iid "org.qt-project.qt.camerafeedbackcontrol/5.0"
diff --git a/src/multimedia/controls/qcameraflashcontrol.h b/src/multimedia/controls/qcameraflashcontrol.h
index 08e991f5a..d4b7d1f4c 100644
--- a/src/multimedia/controls/qcameraflashcontrol.h
+++ b/src/multimedia/controls/qcameraflashcontrol.h
@@ -68,7 +68,7 @@ Q_SIGNALS:
void flashReady(bool);
protected:
- explicit QCameraFlashControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraFlashControl(QObject *parent = nullptr);
};
#define QCameraFlashControl_iid "org.qt-project.qt.cameraflashcontrol/5.0"
diff --git a/src/multimedia/controls/qcamerafocuscontrol.h b/src/multimedia/controls/qcamerafocuscontrol.h
index 32da7cc31..a93d2fd1e 100644
--- a/src/multimedia/controls/qcamerafocuscontrol.h
+++ b/src/multimedia/controls/qcamerafocuscontrol.h
@@ -77,7 +77,7 @@ Q_SIGNALS:
void focusZonesChanged();
protected:
- explicit QCameraFocusControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraFocusControl(QObject *parent = nullptr);
};
#define QCameraFocusControl_iid "org.qt-project.qt.camerafocuscontrol/5.0"
diff --git a/src/multimedia/controls/qcameraimagecapturecontrol.h b/src/multimedia/controls/qcameraimagecapturecontrol.h
index 4fe7b9387..e6700fce5 100644
--- a/src/multimedia/controls/qcameraimagecapturecontrol.h
+++ b/src/multimedia/controls/qcameraimagecapturecontrol.h
@@ -80,7 +80,7 @@ Q_SIGNALS:
void error(int id, int error, const QString &errorString);
protected:
- explicit QCameraImageCaptureControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraImageCaptureControl(QObject *parent = nullptr);
};
#define QCameraImageCaptureControl_iid "org.qt-project.qt.cameraimagecapturecontrol/5.0"
diff --git a/src/multimedia/controls/qcameraimageprocessingcontrol.h b/src/multimedia/controls/qcameraimageprocessingcontrol.h
index ee46143e4..8be435f8f 100644
--- a/src/multimedia/controls/qcameraimageprocessingcontrol.h
+++ b/src/multimedia/controls/qcameraimageprocessingcontrol.h
@@ -82,7 +82,7 @@ public:
virtual void setParameter(ProcessingParameter parameter, const QVariant &value) = 0;
protected:
- explicit QCameraImageProcessingControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraImageProcessingControl(QObject *parent = nullptr);
};
#define QCameraImageProcessingControl_iid "org.qt-project.qt.cameraimageprocessingcontrol/5.0"
diff --git a/src/multimedia/controls/qcamerainfocontrol.h b/src/multimedia/controls/qcamerainfocontrol.h
index 32f85fc3a..9ee0a3abf 100644
--- a/src/multimedia/controls/qcamerainfocontrol.h
+++ b/src/multimedia/controls/qcamerainfocontrol.h
@@ -58,7 +58,7 @@ public:
virtual int cameraOrientation(const QString &deviceName) const = 0;
protected:
- explicit QCameraInfoControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraInfoControl(QObject *parent = nullptr);
};
#define QCameraInfoControl_iid "org.qt-project.qt.camerainfocontrol/5.3"
diff --git a/src/multimedia/controls/qcameralockscontrol.h b/src/multimedia/controls/qcameralockscontrol.h
index 01178642f..d545d971e 100644
--- a/src/multimedia/controls/qcameralockscontrol.h
+++ b/src/multimedia/controls/qcameralockscontrol.h
@@ -67,7 +67,7 @@ Q_SIGNALS:
void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason);
protected:
- explicit QCameraLocksControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraLocksControl(QObject *parent = nullptr);
};
#define QCameraLocksControl_iid "org.qt-project.qt.cameralockscontrol/5.0"
diff --git a/src/multimedia/controls/qcameraviewfindersettingscontrol.h b/src/multimedia/controls/qcameraviewfindersettingscontrol.h
index c67fdaabb..7877bd1db 100644
--- a/src/multimedia/controls/qcameraviewfindersettingscontrol.h
+++ b/src/multimedia/controls/qcameraviewfindersettingscontrol.h
@@ -70,7 +70,7 @@ public:
virtual void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) = 0;
protected:
- explicit QCameraViewfinderSettingsControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraViewfinderSettingsControl(QObject *parent = nullptr);
};
#define QCameraViewfinderSettingsControl_iid "org.qt-project.qt.cameraviewfindersettingscontrol/5.0"
@@ -92,7 +92,7 @@ public:
virtual void setViewfinderSettings(const QCameraViewfinderSettings &settings) = 0;
protected:
- explicit QCameraViewfinderSettingsControl2(QObject *parent = Q_NULLPTR);
+ explicit QCameraViewfinderSettingsControl2(QObject *parent = nullptr);
};
#define QCameraViewfinderSettingsControl2_iid "org.qt-project.qt.cameraviewfindersettingscontrol2/5.5"
diff --git a/src/multimedia/controls/qcamerazoomcontrol.h b/src/multimedia/controls/qcamerazoomcontrol.h
index 776d6ddab..feca6a362 100644
--- a/src/multimedia/controls/qcamerazoomcontrol.h
+++ b/src/multimedia/controls/qcamerazoomcontrol.h
@@ -75,7 +75,7 @@ Q_SIGNALS:
void currentDigitalZoomChanged(qreal digitalZoom);
protected:
- explicit QCameraZoomControl(QObject *parent = Q_NULLPTR);
+ explicit QCameraZoomControl(QObject *parent = nullptr);
};
#define QCameraZoomControl_iid "org.qt-project.qt.camerazoomcontrol/5.0"
diff --git a/src/multimedia/controls/qcustomaudiorolecontrol.cpp b/src/multimedia/controls/qcustomaudiorolecontrol.cpp
new file mode 100644
index 000000000..39431be01
--- /dev/null
+++ b/src/multimedia/controls/qcustomaudiorolecontrol.cpp
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 QNX Software Systems. All rights reserved.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmediacontrol_p.h"
+#include "qcustomaudiorolecontrol.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QCustomAudioRoleControl
+ \inmodule QtMultimedia
+ \ingroup multimedia_control
+ \since 5.11
+
+ \brief The QCustomAudioRoleControl class provides control over the audio role of a media object.
+
+ If a QMediaService supports audio roles it may implement QCustomAudioRoleControl in order to
+ provide access to roles unknown to Qt.
+
+ The functionality provided by this control is exposed to application code through the
+ QMediaPlayer class.
+
+ The interface name of QCustomAudioRoleControl is \c org.qt-project.qt.customaudiorolecontrol/5.11 as
+ defined in QCustomAudioRoleControl_iid.
+
+ \sa QMediaService::requestControl(), QMediaPlayer
+*/
+
+/*!
+ \macro QCustomAudioRoleControl_iid
+
+ \c org.qt-project.qt.customaudiorolecontrol/5.11
+
+ Defines the interface name of the QCustomAudioRoleControl class.
+
+ \relates QCustomAudioRoleControl
+*/
+
+/*!
+ Construct a QCustomAudioRoleControl with the given \a parent.
+*/
+QCustomAudioRoleControl::QCustomAudioRoleControl(QObject *parent)
+ : QMediaControl(*new QMediaControlPrivate, parent)
+{
+}
+
+/*!
+ Destroys the audio role control.
+*/
+QCustomAudioRoleControl::~QCustomAudioRoleControl()
+{
+}
+
+/*!
+ \fn QAudio::Role QCustomAudioRoleControl::customAudioRole() const
+
+ Returns the audio role of the media played by the media service.
+*/
+
+/*!
+ \fn void QCustomAudioRoleControl::setCustomAudioRole(const QString &role)
+
+ Sets the audio \a role of the media played by the media service.
+*/
+
+/*!
+ \fn QStringList QCustomAudioRoleControl::supportedCustomAudioRoles() const
+
+ Returns a list of custom audio roles that the media service supports. An
+ empty list may indicate that the supported custom audio roles aren't known.
+ The list may not be complete.
+*/
+
+/*!
+ \fn void QCustomAudioRoleControl::customAudioRoleChanged(const QString &role)
+
+ Signal emitted when the audio \a role has changed.
+ */
+
+#include "moc_qcustomaudiorolecontrol.cpp"
+QT_END_NAMESPACE
diff --git a/src/multimedia/controls/qcustomaudiorolecontrol.h b/src/multimedia/controls/qcustomaudiorolecontrol.h
new file mode 100644
index 000000000..f71bc67df
--- /dev/null
+++ b/src/multimedia/controls/qcustomaudiorolecontrol.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 QNX Software Systems. All rights reserved.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QCUSTOMAUDIOROLECONTROL_H
+#define QCUSTOMAUDIOROLECONTROL_H
+
+#include <QtMultimedia/qmediacontrol.h>
+#include <QtMultimedia/qaudio.h>
+
+QT_BEGIN_NAMESPACE
+
+// Class forward declaration required for QDoc bug
+class QString;
+class QStringList;
+
+class Q_MULTIMEDIA_EXPORT QCustomAudioRoleControl : public QMediaControl
+{
+ Q_OBJECT
+
+public:
+ virtual ~QCustomAudioRoleControl();
+
+ virtual QString customAudioRole() const = 0;
+ virtual void setCustomAudioRole(const QString &role) = 0;
+
+ virtual QStringList supportedCustomAudioRoles() const = 0;
+
+Q_SIGNALS:
+ void customAudioRoleChanged(const QString &role);
+
+protected:
+ explicit QCustomAudioRoleControl(QObject *parent = nullptr);
+};
+
+#define QCustomAudioRoleControl_iid "org.qt-project.qt.customaudiorolecontrol/5.11"
+Q_MEDIA_DECLARE_CONTROL(QCustomAudioRoleControl, QCustomAudioRoleControl_iid)
+
+QT_END_NAMESPACE
+
+#endif // QCUSTOMAUDIOROLECONTROL_H
diff --git a/src/multimedia/controls/qimageencodercontrol.h b/src/multimedia/controls/qimageencodercontrol.h
index 292e16b1f..9c2164413 100644
--- a/src/multimedia/controls/qimageencodercontrol.h
+++ b/src/multimedia/controls/qimageencodercontrol.h
@@ -68,13 +68,13 @@ public:
virtual QString imageCodecDescription(const QString &codecName) const = 0;
virtual QList<QSize> supportedResolutions(const QImageEncoderSettings &settings,
- bool *continuous = Q_NULLPTR) const = 0;
+ bool *continuous = nullptr) const = 0;
virtual QImageEncoderSettings imageSettings() const = 0;
virtual void setImageSettings(const QImageEncoderSettings &settings) = 0;
protected:
- explicit QImageEncoderControl(QObject *parent = Q_NULLPTR);
+ explicit QImageEncoderControl(QObject *parent = nullptr);
};
#define QImageEncoderControl_iid "org.qt-project.qt.imageencodercontrol/5.0"
diff --git a/src/multimedia/controls/qmediaaudioprobecontrol.h b/src/multimedia/controls/qmediaaudioprobecontrol.h
index 9d679c768..74cb1bc5a 100644
--- a/src/multimedia/controls/qmediaaudioprobecontrol.h
+++ b/src/multimedia/controls/qmediaaudioprobecontrol.h
@@ -56,7 +56,7 @@ Q_SIGNALS:
void flush();
protected:
- explicit QMediaAudioProbeControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaAudioProbeControl(QObject *parent = nullptr);
};
#define QMediaAudioProbeControl_iid "org.qt-project.qt.mediaaudioprobecontrol/5.0"
diff --git a/src/multimedia/controls/qmediaavailabilitycontrol.h b/src/multimedia/controls/qmediaavailabilitycontrol.h
index 55149ccb0..a61617b1f 100644
--- a/src/multimedia/controls/qmediaavailabilitycontrol.h
+++ b/src/multimedia/controls/qmediaavailabilitycontrol.h
@@ -62,7 +62,7 @@ Q_SIGNALS:
void availabilityChanged(QMultimedia::AvailabilityStatus availability);
protected:
- explicit QMediaAvailabilityControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaAvailabilityControl(QObject *parent = nullptr);
};
#define QMediaAvailabilityControl_iid "org.qt-project.qt.mediaavailabilitycontrol/5.0"
diff --git a/src/multimedia/controls/qmediacontainercontrol.h b/src/multimedia/controls/qmediacontainercontrol.h
index 8c315590e..23c2918b9 100644
--- a/src/multimedia/controls/qmediacontainercontrol.h
+++ b/src/multimedia/controls/qmediacontainercontrol.h
@@ -62,7 +62,7 @@ public:
virtual QString containerDescription(const QString &formatMimeType) const = 0;
protected:
- explicit QMediaContainerControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaContainerControl(QObject *parent = nullptr);
};
#define QMediaContainerControl_iid "org.qt-project.qt.mediacontainercontrol/5.0"
diff --git a/src/multimedia/controls/qmediagaplessplaybackcontrol.h b/src/multimedia/controls/qmediagaplessplaybackcontrol.h
index 8ab31ef62..23e2b4fc2 100644
--- a/src/multimedia/controls/qmediagaplessplaybackcontrol.h
+++ b/src/multimedia/controls/qmediagaplessplaybackcontrol.h
@@ -66,7 +66,7 @@ Q_SIGNALS:
void advancedToNextMedia();
protected:
- explicit QMediaGaplessPlaybackControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaGaplessPlaybackControl(QObject *parent = nullptr);
};
#define QMediaGaplessPlaybackControl_iid "org.qt-project.qt.mediagaplessplaybackcontrol/5.0"
diff --git a/src/multimedia/controls/qmedianetworkaccesscontrol.h b/src/multimedia/controls/qmedianetworkaccesscontrol.h
index 1c258a0bb..daae4f389 100644
--- a/src/multimedia/controls/qmedianetworkaccesscontrol.h
+++ b/src/multimedia/controls/qmedianetworkaccesscontrol.h
@@ -65,7 +65,7 @@ Q_SIGNALS:
void configurationChanged(const QNetworkConfiguration& configuration);
protected:
- explicit QMediaNetworkAccessControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaNetworkAccessControl(QObject *parent = nullptr);
};
#define QMediaNetworkAccessControl_iid "org.qt-project.qt.medianetworkaccesscontrol/5.0"
diff --git a/src/multimedia/controls/qmediaplayercontrol.cpp b/src/multimedia/controls/qmediaplayercontrol.cpp
index 46de05b51..07b277ffb 100644
--- a/src/multimedia/controls/qmediaplayercontrol.cpp
+++ b/src/multimedia/controls/qmediaplayercontrol.cpp
@@ -353,7 +353,7 @@ QMediaPlayerControl::QMediaPlayerControl(QObject *parent):
Pauses playback of the current media.
- If sucessful the player control will immediately enter the \l {QMediaPlayer::PausedState}
+ If successful the player control will immediately enter the \l {QMediaPlayer::PausedState}
{paused} state.
\sa state(), play(), stop()
diff --git a/src/multimedia/controls/qmediaplayercontrol.h b/src/multimedia/controls/qmediaplayercontrol.h
index a3fb1d4e1..d231097f4 100644
--- a/src/multimedia/controls/qmediaplayercontrol.h
+++ b/src/multimedia/controls/qmediaplayercontrol.h
@@ -110,7 +110,7 @@ Q_SIGNALS:
void error(int error, const QString &errorString);
protected:
- explicit QMediaPlayerControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaPlayerControl(QObject *parent = nullptr);
};
#define QMediaPlayerControl_iid "org.qt-project.qt.mediaplayercontrol/5.0"
diff --git a/src/multimedia/controls/qmediarecordercontrol.h b/src/multimedia/controls/qmediarecordercontrol.h
index 85f5c78d5..a0529ce59 100644
--- a/src/multimedia/controls/qmediarecordercontrol.h
+++ b/src/multimedia/controls/qmediarecordercontrol.h
@@ -88,7 +88,7 @@ public Q_SLOTS:
virtual void setVolume(qreal volume) = 0;
protected:
- explicit QMediaRecorderControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaRecorderControl(QObject *parent = nullptr);
};
#define QMediaRecorderControl_iid "org.qt-project.qt.mediarecordercontrol/5.0"
diff --git a/src/multimedia/controls/qmediastreamscontrol.h b/src/multimedia/controls/qmediastreamscontrol.h
index 3c36e96cb..e2506882d 100644
--- a/src/multimedia/controls/qmediastreamscontrol.h
+++ b/src/multimedia/controls/qmediastreamscontrol.h
@@ -73,7 +73,7 @@ Q_SIGNALS:
void activeStreamsChanged();
protected:
- explicit QMediaStreamsControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaStreamsControl(QObject *parent = nullptr);
};
#define QMediaStreamsControl_iid "org.qt-project.qt.mediastreamscontrol/5.0"
diff --git a/src/multimedia/controls/qmediavideoprobecontrol.h b/src/multimedia/controls/qmediavideoprobecontrol.h
index 25caefee6..363975055 100644
--- a/src/multimedia/controls/qmediavideoprobecontrol.h
+++ b/src/multimedia/controls/qmediavideoprobecontrol.h
@@ -58,7 +58,7 @@ Q_SIGNALS:
void flush();
protected:
- explicit QMediaVideoProbeControl(QObject *parent = Q_NULLPTR);
+ explicit QMediaVideoProbeControl(QObject *parent = nullptr);
};
#define QMediaVideoProbeControl_iid "org.qt-project.qt.mediavideoprobecontrol/5.0"
diff --git a/src/multimedia/controls/qmetadatareadercontrol.h b/src/multimedia/controls/qmetadatareadercontrol.h
index 455ce814e..b7be6b7b5 100644
--- a/src/multimedia/controls/qmetadatareadercontrol.h
+++ b/src/multimedia/controls/qmetadatareadercontrol.h
@@ -71,7 +71,7 @@ Q_SIGNALS:
void metaDataAvailableChanged(bool available);
protected:
- explicit QMetaDataReaderControl(QObject *parent = Q_NULLPTR);
+ explicit QMetaDataReaderControl(QObject *parent = nullptr);
};
#define QMetaDataReaderControl_iid "org.qt-project.qt.metadatareadercontrol/5.0"
diff --git a/src/multimedia/controls/qmetadatawritercontrol.h b/src/multimedia/controls/qmetadatawritercontrol.h
index da3413f77..95a314b90 100644
--- a/src/multimedia/controls/qmetadatawritercontrol.h
+++ b/src/multimedia/controls/qmetadatawritercontrol.h
@@ -74,7 +74,7 @@ Q_SIGNALS:
void metaDataAvailableChanged(bool available);
protected:
- explicit QMetaDataWriterControl(QObject *parent = Q_NULLPTR);
+ explicit QMetaDataWriterControl(QObject *parent = nullptr);
};
#define QMetaDataWriterControl_iid "org.qt-project.qt.metadatawritercontrol/5.0"
diff --git a/src/multimedia/controls/qradiodatacontrol.h b/src/multimedia/controls/qradiodatacontrol.h
index 28b3a57b2..98302b918 100644
--- a/src/multimedia/controls/qradiodatacontrol.h
+++ b/src/multimedia/controls/qradiodatacontrol.h
@@ -76,7 +76,7 @@ Q_SIGNALS:
void error(QRadioData::Error err);
protected:
- explicit QRadioDataControl(QObject *parent = Q_NULLPTR);
+ explicit QRadioDataControl(QObject *parent = nullptr);
};
#define QRadioDataControl_iid "org.qt-project.qt.radiodatacontrol/5.0"
diff --git a/src/multimedia/controls/qradiotunercontrol.h b/src/multimedia/controls/qradiotunercontrol.h
index 9a9e12059..bdf529d42 100644
--- a/src/multimedia/controls/qradiotunercontrol.h
+++ b/src/multimedia/controls/qradiotunercontrol.h
@@ -107,7 +107,7 @@ Q_SIGNALS:
void antennaConnectedChanged(bool connectionStatus);
protected:
- explicit QRadioTunerControl(QObject *parent = Q_NULLPTR);
+ explicit QRadioTunerControl(QObject *parent = nullptr);
};
#define QRadioTunerControl_iid "org.qt-project.qt.radiotunercontrol/5.0"
diff --git a/src/multimedia/controls/qvideodeviceselectorcontrol.h b/src/multimedia/controls/qvideodeviceselectorcontrol.h
index 10a703bb2..2d55c0d70 100644
--- a/src/multimedia/controls/qvideodeviceselectorcontrol.h
+++ b/src/multimedia/controls/qvideodeviceselectorcontrol.h
@@ -71,7 +71,7 @@ Q_SIGNALS:
void devicesChanged();
protected:
- explicit QVideoDeviceSelectorControl(QObject *parent = Q_NULLPTR);
+ explicit QVideoDeviceSelectorControl(QObject *parent = nullptr);
};
#define QVideoDeviceSelectorControl_iid "org.qt-project.qt.videodeviceselectorcontrol/5.0"
diff --git a/src/multimedia/controls/qvideoencodersettingscontrol.h b/src/multimedia/controls/qvideoencodersettingscontrol.h
index ea1401aeb..366d585ee 100644
--- a/src/multimedia/controls/qvideoencodersettingscontrol.h
+++ b/src/multimedia/controls/qvideoencodersettingscontrol.h
@@ -65,10 +65,10 @@ public:
virtual ~QVideoEncoderSettingsControl();
virtual QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings,
- bool *continuous = Q_NULLPTR) const = 0;
+ bool *continuous = nullptr) const = 0;
virtual QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings,
- bool *continuous = Q_NULLPTR) const = 0;
+ bool *continuous = nullptr) const = 0;
virtual QStringList supportedVideoCodecs() const = 0;
virtual QString videoCodecDescription(const QString &codecName) const = 0;
@@ -77,7 +77,7 @@ public:
virtual void setVideoSettings(const QVideoEncoderSettings &settings) = 0;
protected:
- explicit QVideoEncoderSettingsControl(QObject *parent = Q_NULLPTR);
+ explicit QVideoEncoderSettingsControl(QObject *parent = nullptr);
};
#define QVideoEncoderSettingsControl_iid "org.qt-project.qt.videoencodersettingscontrol/5.0"
diff --git a/src/multimedia/controls/qvideorenderercontrol.h b/src/multimedia/controls/qvideorenderercontrol.h
index 2ddab28e1..87552271a 100644
--- a/src/multimedia/controls/qvideorenderercontrol.h
+++ b/src/multimedia/controls/qvideorenderercontrol.h
@@ -56,7 +56,7 @@ public:
virtual void setSurface(QAbstractVideoSurface *surface) = 0;
protected:
- explicit QVideoRendererControl(QObject *parent = Q_NULLPTR);
+ explicit QVideoRendererControl(QObject *parent = nullptr);
};
#define QVideoRendererControl_iid "org.qt-project.qt.videorenderercontrol/5.0"
diff --git a/src/multimedia/controls/qvideowindowcontrol.h b/src/multimedia/controls/qvideowindowcontrol.h
index d26579ddc..510a29989 100644
--- a/src/multimedia/controls/qvideowindowcontrol.h
+++ b/src/multimedia/controls/qvideowindowcontrol.h
@@ -94,7 +94,7 @@ Q_SIGNALS:
void nativeSizeChanged();
protected:
- explicit QVideoWindowControl(QObject *parent = Q_NULLPTR);
+ explicit QVideoWindowControl(QObject *parent = nullptr);
};
#define QVideoWindowControl_iid "org.qt-project.qt.videowindowcontrol/5.0"
diff --git a/src/multimedia/doc/qtmultimedia.qdocconf b/src/multimedia/doc/qtmultimedia.qdocconf
index e3d3827c5..074fcb75e 100644
--- a/src/multimedia/doc/qtmultimedia.qdocconf
+++ b/src/multimedia/doc/qtmultimedia.qdocconf
@@ -43,6 +43,9 @@ qhp.QtMultimedia.subprojects.examples.sortPages = true
exampledirs += ../../../examples \
snippets
+manifestmeta.highlighted.names = "QtMultimedia/QML Video Shader Effects Example" \
+ "QtMultimedia/Media Player Example"
+
headerdirs += ../..
imagedirs += src/images \
diff --git a/src/multimedia/gsttools_headers/gstvideoconnector_p.h b/src/multimedia/gsttools_headers/gstvideoconnector_p.h
index 4fa1456c8..a38ca2e65 100644
--- a/src/multimedia/gsttools_headers/gstvideoconnector_p.h
+++ b/src/multimedia/gsttools_headers/gstvideoconnector_p.h
@@ -51,6 +51,8 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
+
#include <gst/gst.h>
G_BEGIN_DECLS
@@ -69,7 +71,7 @@ G_BEGIN_DECLS
typedef struct _GstVideoConnector GstVideoConnector;
typedef struct _GstVideoConnectorClass GstVideoConnectorClass;
-struct _GstVideoConnector {
+struct Q_GSTTOOLS_EXPORT _GstVideoConnector {
GstElement element;
GstPad *srcpad;
@@ -81,14 +83,14 @@ struct _GstVideoConnector {
GstBuffer *latest_buffer;
};
-struct _GstVideoConnectorClass {
+struct Q_GSTTOOLS_EXPORT _GstVideoConnectorClass {
GstElementClass parent_class;
/* action signal to resend new segment */
void (*resend_new_segment) (GstElement * element, gboolean emitFailedSignal);
};
-GType gst_video_connector_get_type (void);
+GType Q_GSTTOOLS_EXPORT gst_video_connector_get_type (void);
G_END_DECLS
diff --git a/src/multimedia/gsttools_headers/qgstappsrc_p.h b/src/multimedia/gsttools_headers/qgstappsrc_p.h
index e50915231..c7e87037d 100644
--- a/src/multimedia/gsttools_headers/qgstappsrc_p.h
+++ b/src/multimedia/gsttools_headers/qgstappsrc_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <QtCore/qobject.h>
#include <QtCore/qiodevice.h>
@@ -63,7 +64,7 @@
QT_BEGIN_NAMESPACE
-class QGstAppSrc : public QObject
+class Q_GSTTOOLS_EXPORT QGstAppSrc : public QObject
{
Q_OBJECT
public:
diff --git a/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h b/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h
index e03da1ab5..45e573262 100644
--- a/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h
+++ b/src/multimedia/gsttools_headers/qgstbufferpoolinterface_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qabstractvideobuffer.h>
#include <qvideosurfaceformat.h>
#include <QtCore/qobject.h>
@@ -65,7 +66,7 @@ const QLatin1String QGstBufferPoolPluginKey("bufferpool");
/*!
Abstract interface for video buffers allocation.
*/
-class QGstBufferPoolInterface
+class Q_GSTTOOLS_EXPORT QGstBufferPoolInterface
{
public:
virtual ~QGstBufferPoolInterface() {}
diff --git a/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h b/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h
index af1a4486f..33ab3de4b 100644
--- a/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h
+++ b/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <QtCore/qmap.h>
#include <QtCore/qstringlist.h>
@@ -58,7 +59,7 @@
QT_BEGIN_NAMESPACE
-class QGstCodecsInfo
+class Q_GSTTOOLS_EXPORT QGstCodecsInfo
{
public:
enum ElementType { AudioEncoder, VideoEncoder, Muxer };
diff --git a/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h b/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h
index 1a961c6d9..0c193fda9 100644
--- a/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h
+++ b/src/multimedia/gsttools_headers/qgstreameraudioinputselector_p.h
@@ -51,12 +51,13 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qaudioinputselectorcontrol.h>
#include <QtCore/qstringlist.h>
QT_BEGIN_NAMESPACE
-class QGstreamerAudioInputSelector : public QAudioInputSelectorControl
+class Q_GSTTOOLS_EXPORT QGstreamerAudioInputSelector : public QAudioInputSelectorControl
{
Q_OBJECT
public:
diff --git a/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h b/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h
index bacf8c71d..4fc5c7704 100644
--- a/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h
+++ b/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <gst/gst.h>
#include <qmediaaudioprobecontrol.h>
#include <QtCore/qmutex.h>
@@ -61,7 +62,7 @@
QT_BEGIN_NAMESPACE
-class QGstreamerAudioProbeControl
+class Q_GSTTOOLS_EXPORT QGstreamerAudioProbeControl
: public QMediaAudioProbeControl
, public QGstreamerBufferProbe
, public QSharedData
diff --git a/src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h b/src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h
index f7ba2bbd9..35644f934 100644
--- a/src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h
@@ -51,13 +51,15 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <gst/gst.h>
#include <QtCore/qglobal.h>
+
QT_BEGIN_NAMESPACE
-class QGstreamerBufferProbe
+class Q_GSTTOOLS_EXPORT QGstreamerBufferProbe
{
public:
enum Flags
diff --git a/src/multimedia/gsttools_headers/qgstreamerbushelper_p.h b/src/multimedia/gsttools_headers/qgstreamerbushelper_p.h
index 3216c07da..c7d06faf8 100644
--- a/src/multimedia/gsttools_headers/qgstreamerbushelper_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamerbushelper_p.h
@@ -51,9 +51,11 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <QObject>
#include "qgstreamermessage_p.h"
+
#include <gst/gst.h>
QT_BEGIN_NAMESPACE
@@ -78,7 +80,7 @@ Q_DECLARE_INTERFACE(QGstreamerBusMessageFilter, QGstreamerBusMessageFilter_iid)
class QGstreamerBusHelperPrivate;
-class QGstreamerBusHelper : public QObject
+class Q_GSTTOOLS_EXPORT QGstreamerBusHelper : public QObject
{
Q_OBJECT
friend class QGstreamerBusHelperPrivate;
diff --git a/src/multimedia/gsttools_headers/qgstreamermessage_p.h b/src/multimedia/gsttools_headers/qgstreamermessage_p.h
index 5d832ccfa..2f9d1745c 100644
--- a/src/multimedia/gsttools_headers/qgstreamermessage_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamermessage_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <QMetaType>
#include <gst/gst.h>
@@ -60,7 +61,7 @@ QT_BEGIN_NAMESPACE
// Required for QDoc workaround
class QString;
-class QGstreamerMessage
+class Q_GSTTOOLS_EXPORT QGstreamerMessage
{
public:
QGstreamerMessage();
diff --git a/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h b/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h
index e1ac453c7..b660cc7b3 100644
--- a/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamervideoinputdevicecontrol_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qvideodeviceselectorcontrol.h>
#include <QtCore/qstringlist.h>
@@ -59,7 +60,7 @@
QT_BEGIN_NAMESPACE
-class QGstreamerVideoInputDeviceControl : public QVideoDeviceSelectorControl
+class Q_GSTTOOLS_EXPORT QGstreamerVideoInputDeviceControl : public QVideoDeviceSelectorControl
{
Q_OBJECT
public:
diff --git a/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h b/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h
index b599b0e78..b15b6099c 100644
--- a/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <gst/gst.h>
#include <gst/video/video.h>
#include <qmediavideoprobecontrol.h>
@@ -62,7 +63,7 @@
QT_BEGIN_NAMESPACE
-class QGstreamerVideoProbeControl
+class Q_GSTTOOLS_EXPORT QGstreamerVideoProbeControl
: public QMediaVideoProbeControl
, public QGstreamerBufferProbe
, public QSharedData
diff --git a/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h b/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h
index 1d22e1125..2f0b80d45 100644
--- a/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamervideorenderer_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qvideorenderercontrol.h>
#include <private/qvideosurfacegstsink_p.h>
#include <qabstractvideosurface.h>
@@ -59,7 +60,7 @@
QT_BEGIN_NAMESPACE
-class QGstreamerVideoRenderer : public QVideoRendererControl, public QGstreamerVideoRendererInterface
+class Q_GSTTOOLS_EXPORT QGstreamerVideoRenderer : public QVideoRendererControl, public QGstreamerVideoRendererInterface
{
Q_OBJECT
Q_INTERFACES(QGstreamerVideoRendererInterface)
diff --git a/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h b/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h
index b2dfece60..3e3240725 100644
--- a/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamervideowidget_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qvideowidgetcontrol.h>
#include "qgstreamervideorendererinterface_p.h"
@@ -59,9 +60,9 @@
QT_BEGIN_NAMESPACE
-class QGstreamerVideoWidget;
+class Q_GSTTOOLS_EXPORT QGstreamerVideoWidget;
-class QGstreamerVideoWidgetControl
+class Q_GSTTOOLS_EXPORT QGstreamerVideoWidgetControl
: public QVideoWidgetControl
, public QGstreamerVideoRendererInterface
, public QGstreamerSyncMessageFilter
diff --git a/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h b/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h
index b489650f9..5f893f10e 100644
--- a/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h
+++ b/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qvideowindowcontrol.h>
#include "qgstreamervideorendererinterface_p.h"
@@ -61,7 +62,7 @@
QT_BEGIN_NAMESPACE
class QAbstractVideoSurface;
-class QGstreamerVideoWindow :
+class Q_GSTTOOLS_EXPORT QGstreamerVideoWindow :
public QVideoWindowControl,
public QGstreamerVideoRendererInterface,
public QGstreamerSyncMessageFilter,
diff --git a/src/multimedia/gsttools_headers/qgsttools_global_p.h b/src/multimedia/gsttools_headers/qgsttools_global_p.h
new file mode 100644
index 000000000..babcd3aaf
--- /dev/null
+++ b/src/multimedia/gsttools_headers/qgsttools_global_p.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGSTTOOLS_GLOBAL_H
+#define QGSTTOOLS_GLOBAL_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_STATIC
+# if defined(QT_BUILD_MULTIMEDIAGSTTOOLS_LIB)
+# define Q_GSTTOOLS_EXPORT Q_DECL_EXPORT
+# else
+# define Q_GSTTOOLS_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define Q_GSTTOOLS_EXPORT
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QGSTTOOLS_GLOBAL_H
diff --git a/src/multimedia/gsttools_headers/qgstutils_p.h b/src/multimedia/gsttools_headers/qgstutils_p.h
index 8b7de3661..24d3e889d 100644
--- a/src/multimedia/gsttools_headers/qgstutils_p.h
+++ b/src/multimedia/gsttools_headers/qgstutils_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <QtCore/qmap.h>
#include <QtCore/qset.h>
#include <QtCore/qvector.h>
@@ -85,7 +86,7 @@ class QImage;
class QVideoSurfaceFormat;
namespace QGstUtils {
- struct CameraInfo
+ struct Q_GSTTOOLS_EXPORT CameraInfo
{
QString name;
QString description;
@@ -94,74 +95,74 @@ namespace QGstUtils {
QByteArray driver;
};
- QMap<QByteArray, QVariant> gstTagListToMap(const GstTagList *list);
+ Q_GSTTOOLS_EXPORT QMap<QByteArray, QVariant> gstTagListToMap(const GstTagList *list);
- QSize capsResolution(const GstCaps *caps);
- QSize capsCorrectedResolution(const GstCaps *caps);
- QAudioFormat audioFormatForCaps(const GstCaps *caps);
+ Q_GSTTOOLS_EXPORT QSize capsResolution(const GstCaps *caps);
+ Q_GSTTOOLS_EXPORT QSize capsCorrectedResolution(const GstCaps *caps);
+ Q_GSTTOOLS_EXPORT QAudioFormat audioFormatForCaps(const GstCaps *caps);
#if GST_CHECK_VERSION(1,0,0)
- QAudioFormat audioFormatForSample(GstSample *sample);
+ Q_GSTTOOLS_EXPORT QAudioFormat audioFormatForSample(GstSample *sample);
#else
- QAudioFormat audioFormatForBuffer(GstBuffer *buffer);
+ Q_GSTTOOLS_EXPORT QAudioFormat audioFormatForBuffer(GstBuffer *buffer);
#endif
- GstCaps *capsForAudioFormat(const QAudioFormat &format);
- void initializeGst();
- QMultimedia::SupportEstimate hasSupport(const QString &mimeType,
+ Q_GSTTOOLS_EXPORT GstCaps *capsForAudioFormat(const QAudioFormat &format);
+ Q_GSTTOOLS_EXPORT void initializeGst();
+ Q_GSTTOOLS_EXPORT QMultimedia::SupportEstimate hasSupport(const QString &mimeType,
const QStringList &codecs,
const QSet<QString> &supportedMimeTypeSet);
- QVector<CameraInfo> enumerateCameras(GstElementFactory *factory = 0);
- QList<QByteArray> cameraDevices(GstElementFactory * factory = 0);
- QString cameraDescription(const QString &device, GstElementFactory * factory = 0);
- QCamera::Position cameraPosition(const QString &device, GstElementFactory * factory = 0);
- int cameraOrientation(const QString &device, GstElementFactory * factory = 0);
- QByteArray cameraDriver(const QString &device, GstElementFactory * factory = 0);
+ Q_GSTTOOLS_EXPORT QVector<CameraInfo> enumerateCameras(GstElementFactory *factory = 0);
+ Q_GSTTOOLS_EXPORT QList<QByteArray> cameraDevices(GstElementFactory * factory = 0);
+ Q_GSTTOOLS_EXPORT QString cameraDescription(const QString &device, GstElementFactory * factory = 0);
+ Q_GSTTOOLS_EXPORT QCamera::Position cameraPosition(const QString &device, GstElementFactory * factory = 0);
+ Q_GSTTOOLS_EXPORT int cameraOrientation(const QString &device, GstElementFactory * factory = 0);
+ Q_GSTTOOLS_EXPORT QByteArray cameraDriver(const QString &device, GstElementFactory * factory = 0);
- QSet<QString> supportedMimeTypes(bool (*isValidFactory)(GstElementFactory *factory));
+ Q_GSTTOOLS_EXPORT QSet<QString> supportedMimeTypes(bool (*isValidFactory)(GstElementFactory *factory));
#if GST_CHECK_VERSION(1,0,0)
- QImage bufferToImage(GstBuffer *buffer, const GstVideoInfo &info);
- QVideoSurfaceFormat formatForCaps(
+ Q_GSTTOOLS_EXPORT QImage bufferToImage(GstBuffer *buffer, const GstVideoInfo &info);
+ Q_GSTTOOLS_EXPORT QVideoSurfaceFormat formatForCaps(
GstCaps *caps,
GstVideoInfo *info = 0,
QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle);
#else
- QImage bufferToImage(GstBuffer *buffer);
- QVideoSurfaceFormat formatForCaps(
+ Q_GSTTOOLS_EXPORT QImage bufferToImage(GstBuffer *buffer);
+ Q_GSTTOOLS_EXPORT QVideoSurfaceFormat formatForCaps(
GstCaps *caps,
int *bytesPerLine = 0,
QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle);
#endif
- GstCaps *capsForFormats(const QList<QVideoFrame::PixelFormat> &formats);
+ Q_GSTTOOLS_EXPORT GstCaps *capsForFormats(const QList<QVideoFrame::PixelFormat> &formats);
void setFrameTimeStamps(QVideoFrame *frame, GstBuffer *buffer);
- void setMetaData(GstElement *element, const QMap<QByteArray, QVariant> &data);
- void setMetaData(GstBin *bin, const QMap<QByteArray, QVariant> &data);
+ Q_GSTTOOLS_EXPORT void setMetaData(GstElement *element, const QMap<QByteArray, QVariant> &data);
+ Q_GSTTOOLS_EXPORT void setMetaData(GstBin *bin, const QMap<QByteArray, QVariant> &data);
- GstCaps *videoFilterCaps();
+ Q_GSTTOOLS_EXPORT GstCaps *videoFilterCaps();
- QSize structureResolution(const GstStructure *s);
- QVideoFrame::PixelFormat structurePixelFormat(const GstStructure *s, int *bpp = 0);
- QSize structurePixelAspectRatio(const GstStructure *s);
- QPair<qreal, qreal> structureFrameRateRange(const GstStructure *s);
+ Q_GSTTOOLS_EXPORT QSize structureResolution(const GstStructure *s);
+ Q_GSTTOOLS_EXPORT QVideoFrame::PixelFormat structurePixelFormat(const GstStructure *s, int *bpp = 0);
+ Q_GSTTOOLS_EXPORT QSize structurePixelAspectRatio(const GstStructure *s);
+ Q_GSTTOOLS_EXPORT QPair<qreal, qreal> structureFrameRateRange(const GstStructure *s);
- QString fileExtensionForMimeType(const QString &mimeType);
+ Q_GSTTOOLS_EXPORT QString fileExtensionForMimeType(const QString &mimeType);
}
-void qt_gst_object_ref_sink(gpointer object);
-GstCaps *qt_gst_pad_get_current_caps(GstPad *pad);
-GstCaps *qt_gst_pad_get_caps(GstPad *pad);
-GstStructure *qt_gst_structure_new_empty(const char *name);
-gboolean qt_gst_element_query_position(GstElement *element, GstFormat format, gint64 *cur);
-gboolean qt_gst_element_query_duration(GstElement *element, GstFormat format, gint64 *cur);
-GstCaps *qt_gst_caps_normalize(GstCaps *caps);
-const gchar *qt_gst_element_get_factory_name(GstElement *element);
-gboolean qt_gst_caps_can_intersect(const GstCaps * caps1, const GstCaps * caps2);
-GList *qt_gst_video_sinks();
-void qt_gst_util_double_to_fraction(gdouble src, gint *dest_n, gint *dest_d);
-
-QDebug operator <<(QDebug debug, GstCaps *caps);
+Q_GSTTOOLS_EXPORT void qt_gst_object_ref_sink(gpointer object);
+Q_GSTTOOLS_EXPORT GstCaps *qt_gst_pad_get_current_caps(GstPad *pad);
+Q_GSTTOOLS_EXPORT GstCaps *qt_gst_pad_get_caps(GstPad *pad);
+Q_GSTTOOLS_EXPORT GstStructure *qt_gst_structure_new_empty(const char *name);
+Q_GSTTOOLS_EXPORT gboolean qt_gst_element_query_position(GstElement *element, GstFormat format, gint64 *cur);
+Q_GSTTOOLS_EXPORT gboolean qt_gst_element_query_duration(GstElement *element, GstFormat format, gint64 *cur);
+Q_GSTTOOLS_EXPORT GstCaps *qt_gst_caps_normalize(GstCaps *caps);
+Q_GSTTOOLS_EXPORT const gchar *qt_gst_element_get_factory_name(GstElement *element);
+Q_GSTTOOLS_EXPORT gboolean qt_gst_caps_can_intersect(const GstCaps * caps1, const GstCaps * caps2);
+Q_GSTTOOLS_EXPORT GList *qt_gst_video_sinks();
+Q_GSTTOOLS_EXPORT void qt_gst_util_double_to_fraction(gdouble src, gint *dest_n, gint *dest_d);
+
+Q_GSTTOOLS_EXPORT QDebug operator <<(QDebug debug, GstCaps *caps);
QT_END_NAMESPACE
diff --git a/src/multimedia/gsttools_headers/qgstvideobuffer_p.h b/src/multimedia/gsttools_headers/qgstvideobuffer_p.h
index d2802d9a2..c67c57021 100644
--- a/src/multimedia/gsttools_headers/qgstvideobuffer_p.h
+++ b/src/multimedia/gsttools_headers/qgstvideobuffer_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qabstractvideobuffer.h>
#include <QtCore/qvariant.h>
@@ -60,14 +61,14 @@
QT_BEGIN_NAMESPACE
#if GST_CHECK_VERSION(1,0,0)
-class QGstVideoBuffer : public QAbstractPlanarVideoBuffer
+class Q_GSTTOOLS_EXPORT QGstVideoBuffer : public QAbstractPlanarVideoBuffer
{
public:
QGstVideoBuffer(GstBuffer *buffer, const GstVideoInfo &info);
QGstVideoBuffer(GstBuffer *buffer, const GstVideoInfo &info,
HandleType handleType, const QVariant &handle);
#else
-class QGstVideoBuffer : public QAbstractVideoBuffer
+class Q_GSTTOOLS_EXPORT QGstVideoBuffer : public QAbstractVideoBuffer
{
public:
QGstVideoBuffer(GstBuffer *buffer, int bytesPerLine);
diff --git a/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h b/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h
index 6a0c4c6bd..df36dbe09 100644
--- a/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h
+++ b/src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <private/qgsttools_global_p.h>
#include <qabstractvideobuffer.h>
#include <qvideosurfaceformat.h>
#include <QtCore/qobject.h>
@@ -64,7 +65,7 @@ class QAbstractVideoSurface;
const QLatin1String QGstVideoRendererPluginKey("gstvideorenderer");
-class QGstVideoRenderer
+class Q_GSTTOOLS_EXPORT QGstVideoRenderer
{
public:
virtual ~QGstVideoRenderer() {}
@@ -81,7 +82,7 @@ public:
/*
Abstract interface for video buffers allocation.
*/
-class QGstVideoRendererInterface
+class Q_GSTTOOLS_EXPORT QGstVideoRendererInterface
{
public:
virtual ~QGstVideoRendererInterface() {}
@@ -92,7 +93,7 @@ public:
#define QGstVideoRendererInterface_iid "org.qt-project.qt.gstvideorenderer/5.4"
Q_DECLARE_INTERFACE(QGstVideoRendererInterface, QGstVideoRendererInterface_iid)
-class QGstVideoRendererPlugin : public QObject, public QGstVideoRendererInterface
+class Q_GSTTOOLS_EXPORT QGstVideoRendererPlugin : public QObject, public QGstVideoRendererInterface
{
Q_OBJECT
Q_INTERFACES(QGstVideoRendererInterface)
diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro
index 0f3f3ff6b..63c50f09e 100644
--- a/src/multimedia/multimedia.pro
+++ b/src/multimedia/multimedia.pro
@@ -67,14 +67,12 @@ include(recording/recording.pri)
include(video/video.pri)
ANDROID_BUNDLED_JAR_DEPENDENCIES = \
- jar/QtMultimedia-bundled.jar:org.qtproject.qt5.android.multimedia.QtMultimediaUtils
-ANDROID_JAR_DEPENDENCIES = \
jar/QtMultimedia.jar:org.qtproject.qt5.android.multimedia.QtMultimediaUtils
ANDROID_LIB_DEPENDENCIES = \
plugins/mediaservice/libqtmedia_android.so \
- lib/libQt5MultimediaQuick_p.so:Qt5Quick
+ lib/libQt5MultimediaQuick.so:Qt5Quick
ANDROID_BUNDLED_FILES += \
- lib/libQt5MultimediaQuick_p.so
+ lib/libQt5MultimediaQuick.so
ANDROID_PERMISSIONS += \
android.permission.CAMERA \
android.permission.RECORD_AUDIO
diff --git a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp
index a4ad97251..3f24d0f55 100644
--- a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp
+++ b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp
@@ -42,6 +42,7 @@
#include "qmediacontent.h"
#include "qmediaobject_p.h"
#include "qplaylistfileparser_p.h"
+#include "qrandom.h"
QT_BEGIN_NAMESPACE
@@ -266,7 +267,7 @@ void QMediaNetworkPlaylistProvider::shuffle()
QList<QMediaContent> resources;
while (!d->resources.isEmpty()) {
- resources.append(d->resources.takeAt(qrand() % d->resources.size()));
+ resources.append(d->resources.takeAt(QRandomGenerator::global()->bounded(d->resources.size())));
}
d->resources = resources;
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 16fdec8ea..01c91babc 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -49,6 +49,7 @@
#include <qmediaplaylistsourcecontrol_p.h>
#include <qmedianetworkaccesscontrol.h>
#include <qaudiorolecontrol.h>
+#include <qcustomaudiorolecontrol.h>
#include <QtCore/qcoreevent.h>
#include <QtCore/qmetaobject.h>
@@ -111,6 +112,7 @@ public:
: provider(0)
, control(0)
, audioRoleControl(0)
+ , customAudioRoleControl(0)
, playlist(0)
, networkAccessControl(0)
, state(QMediaPlayer::StoppedState)
@@ -124,6 +126,7 @@ public:
QMediaServiceProvider *provider;
QMediaPlayerControl* control;
QAudioRoleControl *audioRoleControl;
+ QCustomAudioRoleControl *customAudioRoleControl;
QString errorString;
QPointer<QObject> videoOutput;
@@ -616,6 +619,15 @@ QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags):
if (d->audioRoleControl) {
connect(d->audioRoleControl, &QAudioRoleControl::audioRoleChanged,
this, &QMediaPlayer::audioRoleChanged);
+
+ d->customAudioRoleControl = qobject_cast<QCustomAudioRoleControl *>(
+ d->service->requestControl(QCustomAudioRoleControl_iid));
+ if (d->customAudioRoleControl) {
+ connect(d->customAudioRoleControl,
+ &QCustomAudioRoleControl::customAudioRoleChanged,
+ this,
+ &QMediaPlayer::customAudioRoleChanged);
+ }
}
}
if (d->networkAccessControl != 0) {
@@ -641,6 +653,8 @@ QMediaPlayer::~QMediaPlayer()
d->service->releaseControl(d->control);
if (d->audioRoleControl)
d->service->releaseControl(d->audioRoleControl);
+ if (d->customAudioRoleControl)
+ d->service->releaseControl(d->customAudioRoleControl);
d->provider->releaseService(d->service);
}
@@ -718,7 +732,17 @@ void QMediaPlayer::setNetworkConfigurations(const QList<QNetworkConfiguration> &
QMediaPlayer::State QMediaPlayer::state() const
{
- return d_func()->state;
+ Q_D(const QMediaPlayer);
+
+ // In case if EndOfMedia status is already received
+ // but state is not.
+ if (d->control != 0
+ && d->status == QMediaPlayer::EndOfMedia
+ && d->state != d->control->state()) {
+ return d->control->state();
+ }
+
+ return d->state;
}
QMediaPlayer::MediaStatus QMediaPlayer::mediaStatus() const
@@ -1150,8 +1174,13 @@ void QMediaPlayer::setAudioRole(QAudio::Role audioRole)
{
Q_D(QMediaPlayer);
- if (d->audioRoleControl)
+ if (d->audioRoleControl) {
+ if (d->customAudioRoleControl != nullptr && d->audioRoleControl->audioRole() != audioRole) {
+ d->customAudioRoleControl->setCustomAudioRole(QString());
+ }
+
d->audioRoleControl->setAudioRole(audioRole);
+ }
}
/*!
@@ -1172,6 +1201,48 @@ QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const
return QList<QAudio::Role>();
}
+QString QMediaPlayer::customAudioRole() const
+{
+ Q_D(const QMediaPlayer);
+
+ if (audioRole() != QAudio::CustomRole)
+ return QString();
+
+ if (d->customAudioRoleControl != nullptr)
+ return d->customAudioRoleControl->customAudioRole();
+
+ return QString();
+}
+
+void QMediaPlayer::setCustomAudioRole(const QString &audioRole)
+{
+ Q_D(QMediaPlayer);
+
+ if (d->customAudioRoleControl) {
+ Q_ASSERT(d->audioRoleControl);
+ setAudioRole(QAudio::CustomRole);
+ d->customAudioRoleControl->setCustomAudioRole(audioRole);
+ }
+}
+
+/*!
+ Returns a list of supported custom audio roles. An empty list may
+ indicate that the supported custom audio roles aren't known. The
+ list may not be complete.
+
+ \since 5.11
+ \sa customAudioRole
+*/
+QStringList QMediaPlayer::supportedCustomAudioRoles() const
+{
+ Q_D(const QMediaPlayer);
+
+ if (d->customAudioRoleControl)
+ return d->customAudioRoleControl->supportedCustomAudioRoles();
+
+ return QStringList();
+}
+
// Enums
/*!
\enum QMediaPlayer::State
@@ -1279,6 +1350,14 @@ QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const
\since 5.6
*/
+/*!
+ \fn void QMediaPlayer::customAudioRoleChanged(const QString &role)
+
+ Signals that the audio \a role of the media player has changed.
+
+ \since 5.11
+*/
+
// Properties
/*!
\property QMediaPlayer::state
@@ -1461,11 +1540,30 @@ QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const
The audio role must be set before calling setMedia().
+ customAudioRole is cleared when this property is set to anything other than
+ QAudio::CustomRole.
+
\since 5.6
\sa supportedAudioRoles()
*/
/*!
+ \property QMediaPlayer::customAudioRole
+ \brief the role of the audio stream played by the media player.
+
+ It can be set to specify the type of audio being played when the backend supports
+ audio roles unknown to Qt. Specifying a role allows the system to make appropriate
+ decisions when it comes to volume, routing or post-processing.
+
+ The audio role must be set before calling setMedia().
+
+ audioRole is set to QAudio::CustomRole when this property is set.
+
+ \since 5.11
+ \sa supportedCustomAudioRoles()
+*/
+
+/*!
\fn void QMediaPlayer::durationChanged(qint64 duration)
Signal the duration of the content has changed to \a duration, expressed in milliseconds.
diff --git a/src/multimedia/playback/qmediaplayer.h b/src/multimedia/playback/qmediaplayer.h
index f23a94104..e69a32ee4 100644
--- a/src/multimedia/playback/qmediaplayer.h
+++ b/src/multimedia/playback/qmediaplayer.h
@@ -73,7 +73,8 @@ class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QMediaObject
Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
Q_PROPERTY(State state READ state NOTIFY stateChanged)
Q_PROPERTY(MediaStatus mediaStatus READ mediaStatus NOTIFY mediaStatusChanged)
- Q_PROPERTY(QAudio::Role audioRole READ audioRole WRITE setAudioRole)
+ Q_PROPERTY(QAudio::Role audioRole READ audioRole WRITE setAudioRole NOTIFY audioRoleChanged)
+ Q_PROPERTY(QString customAudioRole READ customAudioRole WRITE setCustomAudioRole NOTIFY customAudioRoleChanged)
Q_PROPERTY(QString error READ errorString)
Q_ENUMS(State)
Q_ENUMS(MediaStatus)
@@ -119,7 +120,7 @@ public:
MediaIsPlaylist
};
- explicit QMediaPlayer(QObject *parent = Q_NULLPTR, Flags flags = Flags());
+ explicit QMediaPlayer(QObject *parent = nullptr, Flags flags = Flags());
~QMediaPlayer();
static QMultimedia::SupportEstimate hasSupport(const QString &mimeType,
@@ -162,6 +163,9 @@ public:
QAudio::Role audioRole() const;
void setAudioRole(QAudio::Role audioRole);
QList<QAudio::Role> supportedAudioRoles() const;
+ QString customAudioRole() const;
+ void setCustomAudioRole(const QString &audioRole);
+ QStringList supportedCustomAudioRoles() const;
public Q_SLOTS:
void play();
@@ -174,7 +178,7 @@ public Q_SLOTS:
void setPlaybackRate(qreal rate);
- void setMedia(const QMediaContent &media, QIODevice *stream = Q_NULLPTR);
+ void setMedia(const QMediaContent &media, QIODevice *stream = nullptr);
void setPlaylist(QMediaPlaylist *playlist);
void setNetworkConfigurations(const QList<QNetworkConfiguration> &configurations);
@@ -200,6 +204,7 @@ Q_SIGNALS:
void playbackRateChanged(qreal rate);
void audioRoleChanged(QAudio::Role role);
+ void customAudioRoleChanged(const QString &role);
void error(QMediaPlayer::Error error);
diff --git a/src/multimedia/playback/qmediaplaylist.h b/src/multimedia/playback/qmediaplaylist.h
index b16e734f8..4eb93bd02 100644
--- a/src/multimedia/playback/qmediaplaylist.h
+++ b/src/multimedia/playback/qmediaplaylist.h
@@ -67,7 +67,7 @@ public:
enum PlaybackMode { CurrentItemOnce, CurrentItemInLoop, Sequential, Loop, Random };
enum Error { NoError, FormatError, FormatNotSupportedError, NetworkError, AccessDeniedError };
- explicit QMediaPlaylist(QObject *parent = Q_NULLPTR);
+ explicit QMediaPlaylist(QObject *parent = nullptr);
virtual ~QMediaPlaylist();
QMediaObject *mediaObject() const override;
@@ -96,11 +96,11 @@ public:
bool removeMedia(int start, int end);
bool clear();
- void load(const QNetworkRequest &request, const char *format = Q_NULLPTR);
- void load(const QUrl &location, const char *format = Q_NULLPTR);
- void load(QIODevice *device, const char *format = Q_NULLPTR);
+ void load(const QNetworkRequest &request, const char *format = nullptr);
+ void load(const QUrl &location, const char *format = nullptr);
+ void load(QIODevice *device, const char *format = nullptr);
- bool save(const QUrl &location, const char *format = Q_NULLPTR);
+ bool save(const QUrl &location, const char *format = nullptr);
bool save(QIODevice * device, const char *format);
Error error() const;
diff --git a/src/multimedia/playback/qmediaplaylistnavigator.cpp b/src/multimedia/playback/qmediaplaylistnavigator.cpp
index 192fd463c..0966c9396 100644
--- a/src/multimedia/playback/qmediaplaylistnavigator.cpp
+++ b/src/multimedia/playback/qmediaplaylistnavigator.cpp
@@ -43,6 +43,7 @@
#include "qmediaobject_p.h"
#include <QtCore/qdebug.h>
+#include <QtCore/qrandom.h>
QT_BEGIN_NAMESPACE
@@ -124,7 +125,7 @@ int QMediaPlaylistNavigatorPrivate::nextItemPos(int steps) const
randomModePositions.append(-1);
int res = randomModePositions[randomPositionsOffset+steps];
if (res<0 || res >= playlist->mediaCount()) {
- res = qrand() % playlist->mediaCount();
+ res = QRandomGenerator::global()->bounded(playlist->mediaCount());
randomModePositions[randomPositionsOffset+steps] = res;
}
@@ -177,7 +178,7 @@ int QMediaPlaylistNavigatorPrivate::previousItemPos(int steps) const
int res = randomModePositions[randomPositionsOffset-steps];
if (res<0 || res >= playlist->mediaCount()) {
- res = qrand() % playlist->mediaCount();
+ res = QRandomGenerator::global()->bounded(playlist->mediaCount());
randomModePositions[randomPositionsOffset-steps] = res;
}
diff --git a/src/multimedia/playback/qplaylistfileparser.cpp b/src/multimedia/playback/qplaylistfileparser.cpp
index 47a3d239e..0d33f040d 100644
--- a/src/multimedia/playback/qplaylistfileparser.cpp
+++ b/src/multimedia/playback/qplaylistfileparser.cpp
@@ -551,7 +551,7 @@ void QPlaylistFileParser::start(const QNetworkRequest& request, const QString &m
if (!d->m_currentParser.isNull()) {
abort();
- d->m_pendingJob = { Q_NULLPTR, QMediaResource(request, mimeType) };
+ d->m_pendingJob = { nullptr, QMediaResource(request, mimeType) };
return;
}
diff --git a/src/multimedia/qmediacontrol.h b/src/multimedia/qmediacontrol.h
index 680b18e7f..cff42e3ca 100644
--- a/src/multimedia/qmediacontrol.h
+++ b/src/multimedia/qmediacontrol.h
@@ -59,8 +59,8 @@ public:
~QMediaControl();
protected:
- explicit QMediaControl(QObject *parent = Q_NULLPTR);
- explicit QMediaControl(QMediaControlPrivate &dd, QObject *parent = Q_NULLPTR);
+ explicit QMediaControl(QObject *parent = nullptr);
+ explicit QMediaControl(QMediaControlPrivate &dd, QObject *parent = nullptr);
QMediaControlPrivate *d_ptr;
diff --git a/src/multimedia/qmediaobject.cpp b/src/multimedia/qmediaobject.cpp
index a2f0d58aa..71b2d148c 100644
--- a/src/multimedia/qmediaobject.cpp
+++ b/src/multimedia/qmediaobject.cpp
@@ -55,7 +55,13 @@ void QMediaObjectPrivate::_q_notify()
const QMetaObject* m = q->metaObject();
- for (int pi : qAsConst(notifyProperties)) {
+ // QTBUG-57045
+ // we create a copy of notifyProperties container to ensure that if a property is removed
+ // from the original container as a result of invoking propertyChanged signal, the iterator
+ // won't become invalidated
+ QSet<int> properties = notifyProperties;
+
+ for (int pi : qAsConst(properties)) {
QMetaProperty p = m->property(pi);
p.notifySignal().invoke(
q, QGenericArgument(QMetaType::typeName(p.userType()), p.read(q).data()));
diff --git a/src/multimedia/radio/qradiodata.h b/src/multimedia/radio/qradiodata.h
index 826c652ff..ffc8b44ba 100644
--- a/src/multimedia/radio/qradiodata.h
+++ b/src/multimedia/radio/qradiodata.h
@@ -82,7 +82,7 @@ public:
College
};
- explicit QRadioData(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR);
+ explicit QRadioData(QMediaObject *mediaObject, QObject *parent = nullptr);
~QRadioData();
QMultimedia::AvailabilityStatus availability() const;
diff --git a/src/multimedia/radio/qradiotuner.h b/src/multimedia/radio/qradiotuner.h
index 7952a2e6c..9e62c849d 100644
--- a/src/multimedia/radio/qradiotuner.h
+++ b/src/multimedia/radio/qradiotuner.h
@@ -78,7 +78,7 @@ public:
enum StereoMode { ForceStereo, ForceMono, Auto };
enum SearchMode { SearchFast, SearchGetStationId };
- explicit QRadioTuner(QObject *parent = Q_NULLPTR);
+ explicit QRadioTuner(QObject *parent = nullptr);
~QRadioTuner();
QMultimedia::AvailabilityStatus availability() const override;
diff --git a/src/multimedia/recording/qaudiorecorder.h b/src/multimedia/recording/qaudiorecorder.h
index 75f95d354..e57794b40 100644
--- a/src/multimedia/recording/qaudiorecorder.h
+++ b/src/multimedia/recording/qaudiorecorder.h
@@ -62,7 +62,7 @@ class Q_MULTIMEDIA_EXPORT QAudioRecorder : public QMediaRecorder
Q_OBJECT
Q_PROPERTY(QString audioInput READ audioInput WRITE setAudioInput NOTIFY audioInputChanged)
public:
- explicit QAudioRecorder(QObject *parent = Q_NULLPTR);
+ explicit QAudioRecorder(QObject *parent = nullptr);
~QAudioRecorder();
QStringList audioInputs() const;
diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h
index a12bcd632..0fdcf80e4 100644
--- a/src/multimedia/recording/qmediarecorder.h
+++ b/src/multimedia/recording/qmediarecorder.h
@@ -106,7 +106,7 @@ public:
OutOfSpaceError
};
- explicit QMediaRecorder(QMediaObject *mediaObject, QObject *parent = Q_NULLPTR);
+ explicit QMediaRecorder(QMediaObject *mediaObject, QObject *parent = nullptr);
~QMediaRecorder();
QMediaObject *mediaObject() const override;
@@ -137,16 +137,16 @@ public:
QString audioCodecDescription(const QString &codecName) const;
QList<int> supportedAudioSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(),
- bool *continuous = Q_NULLPTR) const;
+ bool *continuous = nullptr) const;
QStringList supportedVideoCodecs() const;
QString videoCodecDescription(const QString &codecName) const;
QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(),
- bool *continuous = Q_NULLPTR) const;
+ bool *continuous = nullptr) const;
QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(),
- bool *continuous = Q_NULLPTR) const;
+ bool *continuous = nullptr) const;
QAudioEncoderSettings audioSettings() const;
QVideoEncoderSettings videoSettings() const;
@@ -193,7 +193,7 @@ Q_SIGNALS:
void availabilityChanged(QMultimedia::AvailabilityStatus availability);
protected:
- QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = Q_NULLPTR);
+ QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = nullptr);
bool setMediaObject(QMediaObject *object) override;
QMediaRecorderPrivate *d_ptr;
diff --git a/src/multimedia/video/qabstractvideofilter.h b/src/multimedia/video/qabstractvideofilter.h
index 7e125fac4..6263f4730 100644
--- a/src/multimedia/video/qabstractvideofilter.h
+++ b/src/multimedia/video/qabstractvideofilter.h
@@ -68,7 +68,7 @@ class Q_MULTIMEDIA_EXPORT QAbstractVideoFilter : public QObject
Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
public:
- explicit QAbstractVideoFilter(QObject *parent = Q_NULLPTR);
+ explicit QAbstractVideoFilter(QObject *parent = nullptr);
~QAbstractVideoFilter();
bool isActive() const;
diff --git a/src/multimedia/video/qabstractvideosurface.h b/src/multimedia/video/qabstractvideosurface.h
index f3d3e0799..391c9e696 100644
--- a/src/multimedia/video/qabstractvideosurface.h
+++ b/src/multimedia/video/qabstractvideosurface.h
@@ -64,7 +64,7 @@ public:
ResourceError
};
- explicit QAbstractVideoSurface(QObject *parent = Q_NULLPTR);
+ explicit QAbstractVideoSurface(QObject *parent = nullptr);
~QAbstractVideoSurface();
virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(
diff --git a/src/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/video/qimagevideobuffer.cpp
index 59f708fed..f407e02d0 100644
--- a/src/multimedia/video/qimagevideobuffer.cpp
+++ b/src/multimedia/video/qimagevideobuffer.cpp
@@ -89,7 +89,7 @@ uchar *QImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
d->mapMode = mode;
if (numBytes)
- *numBytes = d->image.byteCount();
+ *numBytes = int(d->image.sizeInBytes());
if (bytesPerLine)
*bytesPerLine = d->image.bytesPerLine();
diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp
index 8578eee1c..bbb87b63b 100644
--- a/src/multimedia/video/qvideoframe.cpp
+++ b/src/multimedia/video/qvideoframe.cpp
@@ -1025,23 +1025,23 @@ extern void QT_FASTCALL qt_convert_NV12_to_ARGB32(const QVideoFrame&, uchar*);
extern void QT_FASTCALL qt_convert_NV21_to_ARGB32(const QVideoFrame&, uchar*);
static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = {
- /* Format_Invalid */ Q_NULLPTR, // Not needed
- /* Format_ARGB32 */ Q_NULLPTR, // Not needed
- /* Format_ARGB32_Premultiplied */ Q_NULLPTR, // Not needed
- /* Format_RGB32 */ Q_NULLPTR, // Not needed
- /* Format_RGB24 */ Q_NULLPTR, // Not needed
- /* Format_RGB565 */ Q_NULLPTR, // Not needed
- /* Format_RGB555 */ Q_NULLPTR, // Not needed
- /* Format_ARGB8565_Premultiplied */ Q_NULLPTR, // Not needed
+ /* Format_Invalid */ nullptr, // Not needed
+ /* Format_ARGB32 */ nullptr, // Not needed
+ /* Format_ARGB32_Premultiplied */ nullptr, // Not needed
+ /* Format_RGB32 */ nullptr, // Not needed
+ /* Format_RGB24 */ nullptr, // Not needed
+ /* Format_RGB565 */ nullptr, // Not needed
+ /* Format_RGB555 */ nullptr, // Not needed
+ /* Format_ARGB8565_Premultiplied */ nullptr, // Not needed
/* Format_BGRA32 */ qt_convert_BGRA32_to_ARGB32,
/* Format_BGRA32_Premultiplied */ qt_convert_BGRA32_to_ARGB32,
/* Format_BGR32 */ qt_convert_BGRA32_to_ARGB32,
/* Format_BGR24 */ qt_convert_BGR24_to_ARGB32,
/* Format_BGR565 */ qt_convert_BGR565_to_ARGB32,
/* Format_BGR555 */ qt_convert_BGR555_to_ARGB32,
- /* Format_BGRA5658_Premultiplied */ Q_NULLPTR,
+ /* Format_BGRA5658_Premultiplied */ nullptr,
/* Format_AYUV444 */ qt_convert_AYUV444_to_ARGB32,
- /* Format_AYUV444_Premultiplied */ Q_NULLPTR,
+ /* Format_AYUV444_Premultiplied */ nullptr,
/* Format_YUV444 */ qt_convert_YUV444_to_ARGB32,
/* Format_YUV420P */ qt_convert_YUV420P_to_ARGB32,
/* Format_YV12 */ qt_convert_YV12_to_ARGB32,
@@ -1049,15 +1049,15 @@ static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = {
/* Format_YUYV */ qt_convert_YUYV_to_ARGB32,
/* Format_NV12 */ qt_convert_NV12_to_ARGB32,
/* Format_NV21 */ qt_convert_NV21_to_ARGB32,
- /* Format_IMC1 */ Q_NULLPTR,
- /* Format_IMC2 */ Q_NULLPTR,
- /* Format_IMC3 */ Q_NULLPTR,
- /* Format_IMC4 */ Q_NULLPTR,
- /* Format_Y8 */ Q_NULLPTR,
- /* Format_Y16 */ Q_NULLPTR,
- /* Format_Jpeg */ Q_NULLPTR, // Not needed
- /* Format_CameraRaw */ Q_NULLPTR,
- /* Format_AdobeDng */ Q_NULLPTR
+ /* Format_IMC1 */ nullptr,
+ /* Format_IMC2 */ nullptr,
+ /* Format_IMC3 */ nullptr,
+ /* Format_IMC4 */ nullptr,
+ /* Format_Y8 */ nullptr,
+ /* Format_Y16 */ nullptr,
+ /* Format_Jpeg */ nullptr, // Not needed
+ /* Format_CameraRaw */ nullptr,
+ /* Format_AdobeDng */ nullptr
};
static void qInitConvertFuncsAsm()
diff --git a/src/multimedia/video/qvideoprobe.h b/src/multimedia/video/qvideoprobe.h
index 854e71272..93ba4d2f5 100644
--- a/src/multimedia/video/qvideoprobe.h
+++ b/src/multimedia/video/qvideoprobe.h
@@ -53,7 +53,7 @@ class Q_MULTIMEDIA_EXPORT QVideoProbe : public QObject
{
Q_OBJECT
public:
- explicit QVideoProbe(QObject *parent = Q_NULLPTR);
+ explicit QVideoProbe(QObject *parent = nullptr);
~QVideoProbe();
bool setSource(QMediaObject *source);
diff --git a/src/multimedia/video/qvideosurfaceformat.cpp b/src/multimedia/video/qvideosurfaceformat.cpp
index c31c52ff7..384ab4e53 100644
--- a/src/multimedia/video/qvideosurfaceformat.cpp
+++ b/src/multimedia/video/qvideosurfaceformat.cpp
@@ -450,6 +450,35 @@ void QVideoSurfaceFormat::setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpac
}
/*!
+ Returns \c true if the surface is mirrored around its vertical axis.
+ This is typically needed for video frames coming from a front camera of a mobile device.
+
+ \note The mirroring here differs from QImage::mirrored, as a vertically mirrored QImage
+ will be mirrored around its x-axis.
+
+ \since 5.11
+ */
+bool QVideoSurfaceFormat::isMirrored() const
+{
+ return d->mirrored;
+}
+
+/*!
+ Sets if the surface is mirrored around its vertical axis.
+ This is typically needed for video frames coming from a front camera of a mobile device.
+ Default value is false.
+
+ \note The mirroring here differs from QImage::mirrored, as a vertically mirrored QImage
+ will be mirrored around its x-axis.
+
+ \since 5.11
+ */
+void QVideoSurfaceFormat::setMirrored(bool mirrored)
+{
+ d->mirrored = mirrored;
+}
+
+/*!
Returns a suggested size in pixels for the video stream.
This is the size of the viewport scaled according to the pixel aspect ratio.
diff --git a/src/multimedia/video/qvideosurfaceformat.h b/src/multimedia/video/qvideosurfaceformat.h
index 83785ac0a..175b199a7 100644
--- a/src/multimedia/video/qvideosurfaceformat.h
+++ b/src/multimedia/video/qvideosurfaceformat.h
@@ -117,6 +117,9 @@ public:
YCbCrColorSpace yCbCrColorSpace() const;
void setYCbCrColorSpace(YCbCrColorSpace colorSpace);
+ bool isMirrored() const;
+ void setMirrored(bool mirrored);
+
QSize sizeHint() const;
QList<QByteArray> propertyNames() const;