diff options
Diffstat (limited to 'src/multimedia')
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; |