diff options
Diffstat (limited to 'src/plugins/gstreamer')
52 files changed, 322 insertions, 546 deletions
diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodercontrol.h b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodercontrol.h index c9c5c70e3..f5e26e553 100644 --- a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodercontrol.h +++ b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodercontrol.h @@ -64,25 +64,25 @@ public: QGstreamerAudioDecoderControl(QGstreamerAudioDecoderSession *session, QObject *parent = 0); ~QGstreamerAudioDecoderControl(); - QAudioDecoder::State state() const; + QAudioDecoder::State state() const override; - QString sourceFilename() const; - void setSourceFilename(const QString &fileName); + QString sourceFilename() const override; + void setSourceFilename(const QString &fileName) override; - QIODevice* sourceDevice() const; - void setSourceDevice(QIODevice *device); + QIODevice* sourceDevice() const override; + void setSourceDevice(QIODevice *device) override; - void start(); - void stop(); + void start() override; + void stop() override; - QAudioFormat audioFormat() const; - void setAudioFormat(const QAudioFormat &format); + QAudioFormat audioFormat() const override; + void setAudioFormat(const QAudioFormat &format) override; - QAudioBuffer read(); - bool bufferAvailable() const; + QAudioBuffer read() override; + bool bufferAvailable() const override; - qint64 position() const; - qint64 duration() const; + qint64 position() const override; + qint64 duration() const override; private: // Stuff goes here diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderservice.h b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderservice.h index df54d39f4..6e52b9d87 100644 --- a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderservice.h +++ b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderservice.h @@ -56,8 +56,8 @@ public: QGstreamerAudioDecoderService(QObject *parent = 0); ~QGstreamerAudioDecoderService(); - QMediaControl *requestControl(const char *name); - void releaseControl(QMediaControl *control); + QMediaControl *requestControl(const char *name) override; + void releaseControl(QMediaControl *control) override; private: QGstreamerAudioDecoderControl *m_control; diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.h b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.h index a5ae56637..d1b96043b 100644 --- a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.h +++ b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.h @@ -55,11 +55,11 @@ class QGstreamerAudioDecoderServicePlugin Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "audiodecoder.json") public: - QMediaService* create(QString const& key); - void release(QMediaService *service); + QMediaService* create(const QString &key) override; + void release(QMediaService *service) override; - QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const; - QStringList supportedMimeTypes() const; + QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs) const override; + QStringList supportedMimeTypes() const override; private: void updateSupportedMimeTypes() const; diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h index 3d0e9a2b0..385908cbd 100644 --- a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h +++ b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h @@ -74,7 +74,7 @@ public: QAudioDecoder::State state() const { return m_state; } QAudioDecoder::State pendingState() const { return m_pendingState; } - bool processBusMessage(const QGstreamerMessage &message); + bool processBusMessage(const QGstreamerMessage &message) override; #if QT_CONFIG(gstreamer_app) QGstAppSrc *appsrc() const { return m_appSrc; } diff --git a/src/plugins/gstreamer/camerabin/camerabinaudioencoder.h b/src/plugins/gstreamer/camerabin/camerabinaudioencoder.h index 943ef19b0..b8091c8ca 100644 --- a/src/plugins/gstreamer/camerabin/camerabinaudioencoder.h +++ b/src/plugins/gstreamer/camerabin/camerabinaudioencoder.h @@ -67,20 +67,20 @@ public: CameraBinAudioEncoder(QObject *parent); virtual ~CameraBinAudioEncoder(); - QStringList supportedAudioCodecs() const; - QString codecDescription(const QString &codecName) const; + QStringList supportedAudioCodecs() const override; + QString codecDescription(const QString &codecName) const override; QStringList supportedEncodingOptions(const QString &codec) const; QVariant encodingOption(const QString &codec, const QString &name) const; void setEncodingOption(const QString &codec, const QString &name, const QVariant &value); QList<int> supportedSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(), - bool *isContinuous = 0) const; + bool *isContinuous = 0) const override; QList<int> supportedChannelCounts(const QAudioEncoderSettings &settings = QAudioEncoderSettings()) const; QList<int> supportedSampleSizes(const QAudioEncoderSettings &settings = QAudioEncoderSettings()) const; - QAudioEncoderSettings audioSettings() const; - void setAudioSettings(const QAudioEncoderSettings&); + QAudioEncoderSettings audioSettings() const override; + void setAudioSettings(const QAudioEncoderSettings &) override; QAudioEncoderSettings actualAudioSettings() const; void setActualAudioSettings(const QAudioEncoderSettings&); diff --git a/src/plugins/gstreamer/camerabin/camerabincapturebufferformat.h b/src/plugins/gstreamer/camerabin/camerabincapturebufferformat.h index 96af6c7fb..a6cdc5297 100644 --- a/src/plugins/gstreamer/camerabin/camerabincapturebufferformat.h +++ b/src/plugins/gstreamer/camerabin/camerabincapturebufferformat.h @@ -59,10 +59,10 @@ public: CameraBinCaptureBufferFormat(CameraBinSession *session); virtual ~CameraBinCaptureBufferFormat(); - QList<QVideoFrame::PixelFormat> supportedBufferFormats() const; + QList<QVideoFrame::PixelFormat> supportedBufferFormats() const override; - QVideoFrame::PixelFormat bufferFormat() const; - void setBufferFormat(QVideoFrame::PixelFormat format); + QVideoFrame::PixelFormat bufferFormat() const override; + void setBufferFormat(QVideoFrame::PixelFormat format) override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabincapturedestination.h b/src/plugins/gstreamer/camerabin/camerabincapturedestination.h index 0ee40e7ba..460fd1aa3 100644 --- a/src/plugins/gstreamer/camerabin/camerabincapturedestination.h +++ b/src/plugins/gstreamer/camerabin/camerabincapturedestination.h @@ -56,9 +56,9 @@ public: CameraBinCaptureDestination(CameraBinSession *session); virtual ~CameraBinCaptureDestination(); - bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const; - QCameraImageCapture::CaptureDestinations captureDestination() const; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination); + bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const override; + QCameraImageCapture::CaptureDestinations captureDestination() const override; + void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabincontainer.cpp b/src/plugins/gstreamer/camerabin/camerabincontainer.cpp index 1479b4ba6..0fc51611e 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontainer.cpp +++ b/src/plugins/gstreamer/camerabin/camerabincontainer.cpp @@ -40,6 +40,7 @@ #include <QtMultimedia/private/qtmultimediaglobal_p.h> #include "camerabincontainer.h" #include <QtCore/qregexp.h> +#include <private/qgstutils_p.h> #include <QtCore/qdebug.h> @@ -51,14 +52,6 @@ CameraBinContainer::CameraBinContainer(QObject *parent) , m_supportedContainers(QGstCodecsInfo::Muxer) #endif { - //extension for containers hard to guess from mimetype - m_fileExtensions["video/x-matroska"] = "mkv"; - m_fileExtensions["video/quicktime"] = "mov"; - m_fileExtensions["video/x-msvideo"] = "avi"; - m_fileExtensions["video/msvideo"] = "avi"; - m_fileExtensions["audio/mpeg"] = "mp3"; - m_fileExtensions["application/x-shockwave-flash"] = "swf"; - m_fileExtensions["application/x-pn-realmedia"] = "rm"; } QStringList CameraBinContainer::supportedContainers() const @@ -128,9 +121,9 @@ GstEncodingContainerProfile *CameraBinContainer::createProfile() //if format is not in the list of supported gstreamer mime types, //try to find the mime type with matching extension if (!supportedFormats.contains(format)) { - QString extension = suggestedFileExtension(m_actualFormat); + QString extension = QGstUtils::fileExtensionForMimeType(m_actualFormat); for (const QString &formatCandidate : supportedFormats) { - if (suggestedFileExtension(formatCandidate) == extension) { + if (QGstUtils::fileExtensionForMimeType(formatCandidate) == extension) { format = formatCandidate; break; } @@ -153,27 +146,4 @@ GstEncodingContainerProfile *CameraBinContainer::createProfile() #endif -/*! - Suggest file extension for current container mimetype. - */ -QString CameraBinContainer::suggestedFileExtension(const QString &containerFormat) const -{ - //for container names like avi instead of video/x-msvideo, use it as extension - if (!containerFormat.contains('/')) - return containerFormat; - - QString format = containerFormat.left(containerFormat.indexOf(',')); - QString extension = m_fileExtensions.value(format); - - if (!extension.isEmpty() || format.isEmpty()) - return extension; - - QRegExp rx("[-/]([\\w]+)$"); - - if (rx.indexIn(format) != -1) - extension = rx.cap(1); - - return extension; -} - QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabincontainer.h b/src/plugins/gstreamer/camerabin/camerabincontainer.h index 25de50095..738e55e2a 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontainer.h +++ b/src/plugins/gstreamer/camerabin/camerabincontainer.h @@ -63,18 +63,16 @@ public: CameraBinContainer(QObject *parent); virtual ~CameraBinContainer() {} - virtual QStringList supportedContainers() const; - virtual QString containerDescription(const QString &formatMimeType) const; + QStringList supportedContainers() const override; + QString containerDescription(const QString &formatMimeType) const override; - virtual QString containerFormat() const; - virtual void setContainerFormat(const QString &format); + QString containerFormat() const override; + void setContainerFormat(const QString &format) override; QString actualContainerFormat() const; void setActualContainerFormat(const QString &containerFormat); void resetActualContainerFormat(); - QString suggestedFileExtension(const QString &containerFormat) const; - #if QT_CONFIG(gstreamer_encodingprofiles) GstEncodingContainerProfile *createProfile(); #endif @@ -85,7 +83,6 @@ Q_SIGNALS: private: QString m_format; QString m_actualFormat; - QMap<QString, QString> m_fileExtensions; #if QT_CONFIG(gstreamer_encodingprofiles) QGstCodecsInfo m_supportedContainers; diff --git a/src/plugins/gstreamer/camerabin/camerabincontrol.h b/src/plugins/gstreamer/camerabin/camerabincontrol.h index a4d052afb..56c02dad4 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontrol.h +++ b/src/plugins/gstreamer/camerabin/camerabincontrol.h @@ -59,16 +59,16 @@ public: bool isValid() const { return true; } - QCamera::State state() const; - void setState(QCamera::State state); + QCamera::State state() const override; + void setState(QCamera::State state) override; - QCamera::Status status() const; + QCamera::Status status() const override; - QCamera::CaptureModes captureMode() const; - void setCaptureMode(QCamera::CaptureModes mode); + QCamera::CaptureModes captureMode() const override; + void setCaptureMode(QCamera::CaptureModes mode) override; - bool isCaptureModeSupported(QCamera::CaptureModes mode) const; - bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const; + bool isCaptureModeSupported(QCamera::CaptureModes mode) const override; + bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; bool viewfinderColorSpaceConversion() const; CamerabinResourcePolicy *resourcePolicy() { return m_resourcePolicy; } diff --git a/src/plugins/gstreamer/camerabin/camerabinexposure.h b/src/plugins/gstreamer/camerabin/camerabinexposure.h index 0435569d4..c30da25ad 100644 --- a/src/plugins/gstreamer/camerabin/camerabinexposure.h +++ b/src/plugins/gstreamer/camerabin/camerabinexposure.h @@ -58,12 +58,12 @@ public: CameraBinExposure(CameraBinSession *session); virtual ~CameraBinExposure(); - bool isParameterSupported(ExposureParameter parameter) const; - QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const; + bool isParameterSupported(ExposureParameter parameter) const override; + QVariantList supportedParameterRange(ExposureParameter parameter, bool *continuous) const override; - QVariant requestedValue(ExposureParameter parameter) const; - QVariant actualValue(ExposureParameter parameter) const; - bool setValue(ExposureParameter parameter, const QVariant& value); + QVariant requestedValue(ExposureParameter parameter) const override; + QVariant actualValue(ExposureParameter parameter) const override; + bool setValue(ExposureParameter parameter, const QVariant &value) override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabinflash.h b/src/plugins/gstreamer/camerabin/camerabinflash.h index 0bcfef1b9..84177f122 100644 --- a/src/plugins/gstreamer/camerabin/camerabinflash.h +++ b/src/plugins/gstreamer/camerabin/camerabinflash.h @@ -57,11 +57,11 @@ public: CameraBinFlash(CameraBinSession *session); virtual ~CameraBinFlash(); - QCameraExposure::FlashModes flashMode() const; - void setFlashMode(QCameraExposure::FlashModes mode); - bool isFlashModeSupported(QCameraExposure::FlashModes mode) const; + QCameraExposure::FlashModes flashMode() const override; + void setFlashMode(QCameraExposure::FlashModes mode) override; + bool isFlashModeSupported(QCameraExposure::FlashModes mode) const override; - bool isFlashReady() const; + bool isFlashReady() const override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabinfocus.h b/src/plugins/gstreamer/camerabin/camerabinfocus.h index 2b510a987..72a5006f9 100644 --- a/src/plugins/gstreamer/camerabin/camerabinfocus.h +++ b/src/plugins/gstreamer/camerabin/camerabinfocus.h @@ -68,17 +68,17 @@ public: CameraBinFocus(CameraBinSession *session); virtual ~CameraBinFocus(); - QCameraFocus::FocusModes focusMode() const; - void setFocusMode(QCameraFocus::FocusModes mode); - bool isFocusModeSupported(QCameraFocus::FocusModes mode) const; + QCameraFocus::FocusModes focusMode() const override; + void setFocusMode(QCameraFocus::FocusModes mode) override; + bool isFocusModeSupported(QCameraFocus::FocusModes mode) const override; - QCameraFocus::FocusPointMode focusPointMode() const; - void setFocusPointMode(QCameraFocus::FocusPointMode mode) ; - bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const; - QPointF customFocusPoint() const; - void setCustomFocusPoint(const QPointF &point); + QCameraFocus::FocusPointMode focusPointMode() const override; + void setFocusPointMode(QCameraFocus::FocusPointMode mode) override; + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const override; + QPointF customFocusPoint() const override; + void setCustomFocusPoint(const QPointF &point) override; - QCameraFocusZoneList focusZones() const; + QCameraFocusZoneList focusZones() const override; void handleFocusMessage(GstMessage*); QCamera::LockStatus focusStatus() const { return m_focusStatus; } @@ -94,7 +94,7 @@ public Q_SLOTS: #if GST_CHECK_VERSION(1,0,0) protected: - void timerEvent(QTimerEvent *event); + void timerEvent(QTimerEvent *event) override; #endif private Q_SLOTS: @@ -111,7 +111,7 @@ private: void updateRegionOfInterest(const QVector<QRect> &rectangles); #if GST_CHECK_VERSION(1,0,0) - bool probeBuffer(GstBuffer *buffer); + bool probeBuffer(GstBuffer *buffer) override; #endif CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabinimagecapture.h b/src/plugins/gstreamer/camerabin/camerabinimagecapture.h index a8a55bb06..5e00ab6d5 100644 --- a/src/plugins/gstreamer/camerabin/camerabinimagecapture.h +++ b/src/plugins/gstreamer/camerabin/camerabinimagecapture.h @@ -62,14 +62,14 @@ public: CameraBinImageCapture(CameraBinSession *session); virtual ~CameraBinImageCapture(); - QCameraImageCapture::DriveMode driveMode() const { return QCameraImageCapture::SingleImageCapture; } - void setDriveMode(QCameraImageCapture::DriveMode) {} + QCameraImageCapture::DriveMode driveMode() const override { return QCameraImageCapture::SingleImageCapture; } + void setDriveMode(QCameraImageCapture::DriveMode) override {} - bool isReadyForCapture() const; - int capture(const QString &fileName); - void cancelCapture(); + bool isReadyForCapture() const override; + int capture(const QString &fileName) override; + void cancelCapture() override; - bool processBusMessage(const QGstreamerMessage &message); + bool processBusMessage(const QGstreamerMessage &message) override; private slots: void updateState(); @@ -85,8 +85,8 @@ private: { public: EncoderProbe(CameraBinImageCapture *capture) : capture(capture) {} - void probeCaps(GstCaps *caps); - bool probeBuffer(GstBuffer *buffer); + void probeCaps(GstCaps *caps) override; + bool probeBuffer(GstBuffer *buffer) override; private: CameraBinImageCapture * const capture; @@ -96,8 +96,8 @@ private: { public: MuxerProbe(CameraBinImageCapture *capture) : capture(capture) {} - void probeCaps(GstCaps *caps); - bool probeBuffer(GstBuffer *buffer); + void probeCaps(GstCaps *caps) override; + bool probeBuffer(GstBuffer *buffer) override; private: CameraBinImageCapture * const capture; diff --git a/src/plugins/gstreamer/camerabin/camerabinimageencoder.h b/src/plugins/gstreamer/camerabin/camerabinimageencoder.h index 8c777b9cd..96f7ae7aa 100644 --- a/src/plugins/gstreamer/camerabin/camerabinimageencoder.h +++ b/src/plugins/gstreamer/camerabin/camerabinimageencoder.h @@ -58,13 +58,13 @@ public: virtual ~CameraBinImageEncoder(); QList<QSize> supportedResolutions(const QImageEncoderSettings &settings = QImageEncoderSettings(), - bool *continuous = 0) const; + bool *continuous = 0) const override; - QStringList supportedImageCodecs() const; - QString imageCodecDescription(const QString &formatName) const; + QStringList supportedImageCodecs() const override; + QString imageCodecDescription(const QString &formatName) const override; - QImageEncoderSettings imageSettings() const; - void setImageSettings(const QImageEncoderSettings &settings); + QImageEncoderSettings imageSettings() const override; + void setImageSettings(const QImageEncoderSettings &settings) override; Q_SIGNALS: void settingsChanged(); diff --git a/src/plugins/gstreamer/camerabin/camerabinimageprocessing.h b/src/plugins/gstreamer/camerabin/camerabinimageprocessing.h index b09c8d52b..259138e91 100644 --- a/src/plugins/gstreamer/camerabin/camerabinimageprocessing.h +++ b/src/plugins/gstreamer/camerabin/camerabinimageprocessing.h @@ -75,10 +75,10 @@ public: bool setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceMode mode); bool isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const; - bool isParameterSupported(ProcessingParameter) const; - bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const; - QVariant parameter(ProcessingParameter parameter) const; - void setParameter(ProcessingParameter parameter, const QVariant &value); + bool isParameterSupported(ProcessingParameter) const override; + bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const override; + QVariant parameter(ProcessingParameter parameter) const override; + void setParameter(ProcessingParameter parameter, const QVariant &value) override; #if QT_CONFIG(gstreamer_photography) void lockWhiteBalance(); diff --git a/src/plugins/gstreamer/camerabin/camerabininfocontrol.h b/src/plugins/gstreamer/camerabin/camerabininfocontrol.h index c5029dc0a..9c801e804 100644 --- a/src/plugins/gstreamer/camerabin/camerabininfocontrol.h +++ b/src/plugins/gstreamer/camerabin/camerabininfocontrol.h @@ -53,8 +53,8 @@ public: CameraBinInfoControl(GstElementFactory *sourceFactory, QObject *parent); ~CameraBinInfoControl(); - QCamera::Position cameraPosition(const QString &deviceName) const; - int cameraOrientation(const QString &deviceName) const; + QCamera::Position cameraPosition(const QString &deviceName) const override; + int cameraOrientation(const QString &deviceName) const override; private: GstElementFactory * const m_sourceFactory; diff --git a/src/plugins/gstreamer/camerabin/camerabinlocks.h b/src/plugins/gstreamer/camerabin/camerabinlocks.h index c90675615..cd592ffd2 100644 --- a/src/plugins/gstreamer/camerabin/camerabinlocks.h +++ b/src/plugins/gstreamer/camerabin/camerabinlocks.h @@ -61,16 +61,16 @@ public: CameraBinLocks(CameraBinSession *session); virtual ~CameraBinLocks(); - QCamera::LockTypes supportedLocks() const; + QCamera::LockTypes supportedLocks() const override; - QCamera::LockStatus lockStatus(QCamera::LockType lock) const; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; - void searchAndLock(QCamera::LockTypes locks); - void unlock(QCamera::LockTypes locks); + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; protected: #if GST_CHECK_VERSION(1, 2, 0) - void timerEvent(QTimerEvent *event); + void timerEvent(QTimerEvent *event) override; #endif private slots: diff --git a/src/plugins/gstreamer/camerabin/camerabinmetadata.h b/src/plugins/gstreamer/camerabin/camerabinmetadata.h index 67d3bf46e..5fef7e388 100644 --- a/src/plugins/gstreamer/camerabin/camerabinmetadata.h +++ b/src/plugins/gstreamer/camerabin/camerabinmetadata.h @@ -52,12 +52,12 @@ public: virtual ~CameraBinMetaData() {} - bool isMetaDataAvailable() const { return true; } - bool isWritable() const { return true; } + bool isMetaDataAvailable() const override { return true; } + bool isWritable() const override { return true; } - QVariant metaData(const QString &key) const; - void setMetaData(const QString &key, const QVariant &value); - QStringList availableMetaData() const; + QVariant metaData(const QString &key) const override; + void setMetaData(const QString &key, const QVariant &value) override; + QStringList availableMetaData() const override; Q_SIGNALS: void metaDataChanged(const QMap<QByteArray, QVariant>&); diff --git a/src/plugins/gstreamer/camerabin/camerabinrecorder.h b/src/plugins/gstreamer/camerabin/camerabinrecorder.h index 86aa2fb94..8bd922fb8 100644 --- a/src/plugins/gstreamer/camerabin/camerabinrecorder.h +++ b/src/plugins/gstreamer/camerabin/camerabinrecorder.h @@ -59,27 +59,27 @@ public: CameraBinRecorder(CameraBinSession *session); virtual ~CameraBinRecorder(); - QUrl outputLocation() const; - bool setOutputLocation(const QUrl &sink); + QUrl outputLocation() const override; + bool setOutputLocation(const QUrl &sink) override; - QMediaRecorder::State state() const; - QMediaRecorder::Status status() const; + QMediaRecorder::State state() const override; + QMediaRecorder::Status status() const override; - qint64 duration() const; + qint64 duration() const override; - bool isMuted() const; - qreal volume() const; + bool isMuted() const override; + qreal volume() const override; - void applySettings(); + void applySettings() override; #if QT_CONFIG(gstreamer_encodingprofiles) GstEncodingContainerProfile *videoProfile(); #endif public slots: - void setState(QMediaRecorder::State state); - void setMuted(bool); - void setVolume(qreal volume); + void setState(QMediaRecorder::State state) override; + void setMuted(bool) override; + void setVolume(qreal volume) override; void updateStatus(); diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.h b/src/plugins/gstreamer/camerabin/camerabinservice.h index 9069c3d5c..44afef25f 100644 --- a/src/plugins/gstreamer/camerabin/camerabinservice.h +++ b/src/plugins/gstreamer/camerabin/camerabinservice.h @@ -71,8 +71,8 @@ public: CameraBinService(GstElementFactory *sourceFactory, QObject *parent = 0); virtual ~CameraBinService(); - QMediaControl *requestControl(const char *name); - void releaseControl(QMediaControl *); + QMediaControl *requestControl(const char *name) override; + void releaseControl(QMediaControl *) override; static bool isCameraBinAvailable(); diff --git a/src/plugins/gstreamer/camerabin/camerabinserviceplugin.h b/src/plugins/gstreamer/camerabin/camerabinserviceplugin.h index 9b16c0eca..b31e44459 100644 --- a/src/plugins/gstreamer/camerabin/camerabinserviceplugin.h +++ b/src/plugins/gstreamer/camerabin/camerabinserviceplugin.h @@ -65,18 +65,18 @@ public: CameraBinServicePlugin(); ~CameraBinServicePlugin(); - QMediaService* create(QString const& key); - void release(QMediaService *service); + QMediaService* create(const QString &key) override; + void release(QMediaService *service) override; - QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const; + QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override; - QByteArray defaultDevice(const QByteArray &service) const; - QList<QByteArray> devices(const QByteArray &service) const; - QString deviceDescription(const QByteArray &service, const QByteArray &device); + QByteArray defaultDevice(const QByteArray &service) const override; + QList<QByteArray> devices(const QByteArray &service) const override; + QString deviceDescription(const QByteArray &service, const QByteArray &device) override; QVariant deviceProperty(const QByteArray &service, const QByteArray &device, const QByteArray &property); - QCamera::Position cameraPosition(const QByteArray &device) const; - int cameraOrientation(const QByteArray &device) const; + QCamera::Position cameraPosition(const QByteArray &device) const override; + int cameraOrientation(const QByteArray &device) const override; private: GstElementFactory *sourceFactory() const; diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index b0a11bb44..ab0bea24a 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -1114,7 +1114,7 @@ void CameraBinSession::recordVideo() : m_sink.toString(), QMediaStorageLocation::Movies, QLatin1String("clip_"), - m_mediaContainerControl->suggestedFileExtension(format)); + QGstUtils::fileExtensionForMimeType(format)); m_recordingActive = true; m_actualSink = QUrl::fromLocalFile(actualFileName); diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.h b/src/plugins/gstreamer/camerabin/camerabinsession.h index 8966a2ece..d5c2d7822 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.h +++ b/src/plugins/gstreamer/camerabin/camerabinsession.h @@ -162,8 +162,8 @@ public: QString device() const { return m_inputDevice; } - bool processSyncMessage(const QGstreamerMessage &message); - bool processBusMessage(const QGstreamerMessage &message); + bool processSyncMessage(const QGstreamerMessage &message) override; + bool processBusMessage(const QGstreamerMessage &message) override; QGstreamerVideoProbeControl *videoProbe(); diff --git a/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.h b/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.h index 2cc9f925c..a38dc78da 100644 --- a/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.h +++ b/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.h @@ -55,10 +55,10 @@ public: CameraBinV4LImageProcessing(CameraBinSession *session); virtual ~CameraBinV4LImageProcessing(); - bool isParameterSupported(ProcessingParameter) const; - bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const; - QVariant parameter(ProcessingParameter parameter) const; - void setParameter(ProcessingParameter parameter, const QVariant &value); + bool isParameterSupported(ProcessingParameter) const override; + bool isParameterValueSupported(ProcessingParameter parameter, const QVariant &value) const override; + QVariant parameter(ProcessingParameter parameter) const override; + void setParameter(ProcessingParameter parameter, const QVariant &value) override; public slots: void updateParametersInfo(QCamera::Status cameraStatus); diff --git a/src/plugins/gstreamer/camerabin/camerabinvideoencoder.h b/src/plugins/gstreamer/camerabin/camerabinvideoencoder.h index 922b6f464..24013ceab 100644 --- a/src/plugins/gstreamer/camerabin/camerabinvideoencoder.h +++ b/src/plugins/gstreamer/camerabin/camerabinvideoencoder.h @@ -67,18 +67,18 @@ public: virtual ~CameraBinVideoEncoder(); QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), - bool *continuous = 0) const; + bool *continuous = 0) const override; QList< qreal > supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), - bool *continuous = 0) const; + bool *continuous = 0) const override; QPair<int,int> rateAsRational(qreal) const; - QStringList supportedVideoCodecs() const; - QString videoCodecDescription(const QString &codecName) const; + QStringList supportedVideoCodecs() const override; + QString videoCodecDescription(const QString &codecName) const override; - QVideoEncoderSettings videoSettings() const; - void setVideoSettings(const QVideoEncoderSettings &settings); + QVideoEncoderSettings videoSettings() const override; + void setVideoSettings(const QVideoEncoderSettings &settings) override; QVideoEncoderSettings actualVideoSettings() const; void setActualVideoSettings(const QVideoEncoderSettings&); diff --git a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h index 7a03a065c..59a0ca8a9 100644 --- a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h +++ b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h @@ -54,9 +54,9 @@ public: CameraBinViewfinderSettings(CameraBinSession *session); ~CameraBinViewfinderSettings(); - bool isViewfinderParameterSupported(ViewfinderParameter parameter) const; - QVariant viewfinderParameter(ViewfinderParameter parameter) const; - void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value); + bool isViewfinderParameterSupported(ViewfinderParameter parameter) const override; + QVariant viewfinderParameter(ViewfinderParameter parameter) const override; + void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings2.h b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings2.h index 36349b2de..5e03b007a 100644 --- a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings2.h +++ b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings2.h @@ -53,10 +53,10 @@ public: CameraBinViewfinderSettings2(CameraBinSession *session); ~CameraBinViewfinderSettings2(); - QList<QCameraViewfinderSettings> supportedViewfinderSettings() const; + QList<QCameraViewfinderSettings> supportedViewfinderSettings() const override; - QCameraViewfinderSettings viewfinderSettings() const; - void setViewfinderSettings(const QCameraViewfinderSettings &settings); + QCameraViewfinderSettings viewfinderSettings() const override; + void setViewfinderSettings(const QCameraViewfinderSettings &settings) override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/camerabin/camerabinzoom.h b/src/plugins/gstreamer/camerabin/camerabinzoom.h index e009de3b7..8ad4764b2 100644 --- a/src/plugins/gstreamer/camerabin/camerabinzoom.h +++ b/src/plugins/gstreamer/camerabin/camerabinzoom.h @@ -53,15 +53,15 @@ public: CameraBinZoom(CameraBinSession *session); virtual ~CameraBinZoom(); - qreal maximumOpticalZoom() const; - qreal maximumDigitalZoom() const; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; - qreal requestedOpticalZoom() const; - qreal requestedDigitalZoom() const; - qreal currentOpticalZoom() const; - qreal currentDigitalZoom() const; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; - void zoomTo(qreal optical, qreal digital); + void zoomTo(qreal optical, qreal digital) override; private: CameraBinSession *m_session; diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp index abb58c963..40294214a 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp @@ -48,52 +48,18 @@ QGstreamerAudioEncode::QGstreamerAudioEncode(QObject *parent) :QAudioEncoderSettingsControl(parent) + , m_codecs(QGstCodecsInfo::AudioEncoder) { - QList<QByteArray> codecCandidates; - - codecCandidates << "audio/mpeg" << "audio/vorbis" << "audio/speex" << "audio/GSM" - << "audio/PCM" << "audio/AMR" << "audio/AMR-WB" << "audio/FLAC"; - - m_elementNames["audio/mpeg"] = "lamemp3enc"; - m_elementNames["audio/AMR"] = "amrnbenc"; - m_elementNames["audio/AMR-WB"] = "amrwbenc"; - - m_elementNames["audio/vorbis"] = "vorbisenc"; - m_elementNames["audio/speex"] = "speexenc"; - m_elementNames["audio/PCM"] = "audioresample"; - m_elementNames["audio/FLAC"] = "flacenc"; - m_elementNames["audio/GSM"] = "gsmenc"; - - m_codecOptions["audio/vorbis"] = QStringList() << "min-bitrate" << "max-bitrate"; - m_codecOptions["audio/mpeg"] = QStringList() << "mode"; - m_codecOptions["audio/speex"] = QStringList() << "mode" << "vbr" << "vad" << "dtx"; - m_codecOptions["audio/GSM"] = QStringList(); - m_codecOptions["audio/PCM"] = QStringList(); - m_codecOptions["audio/AMR"] = QStringList(); - m_codecOptions["audio/AMR-WB"] = QStringList(); - - for (const QByteArray& codecName : qAsConst(codecCandidates)) { - QByteArray elementName = m_elementNames[codecName]; - GstElementFactory *factory = gst_element_factory_find(elementName.constData()); + for (const QString& codecName : m_codecs.supportedCodecs()) { + GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData()); if (factory) { - m_codecs.append(codecName); - const gchar *descr = gst_element_factory_get_description(factory); - - if (codecName == QByteArray("audio/PCM")) - m_codecDescriptions.insert(codecName, tr("Raw PCM audio")); - else - m_codecDescriptions.insert(codecName, QString::fromUtf8(descr)); - m_streamTypes.insert(codecName, QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC)); gst_object_unref(GST_OBJECT(factory)); } } - - //if (!m_codecs.isEmpty()) - // m_audioSettings.setCodec(m_codecs[0]); } QGstreamerAudioEncode::~QGstreamerAudioEncode() @@ -102,17 +68,17 @@ QGstreamerAudioEncode::~QGstreamerAudioEncode() QStringList QGstreamerAudioEncode::supportedAudioCodecs() const { - return m_codecs; + return m_codecs.supportedCodecs(); } QString QGstreamerAudioEncode::codecDescription(const QString &codecName) const { - return m_codecDescriptions.value(codecName); + return m_codecs.codecDescription(codecName); } QStringList QGstreamerAudioEncode::supportedEncodingOptions(const QString &codec) const { - return m_codecOptions.value(codec); + return m_codecs.codecOptions(codec); } QVariant QGstreamerAudioEncode::encodingOption( @@ -148,24 +114,24 @@ void QGstreamerAudioEncode::setAudioSettings(const QAudioEncoderSettings &settin GstElement *QGstreamerAudioEncode::createEncoder() { QString codec = m_audioSettings.codec(); - GstElement *encoderElement = gst_element_factory_make(m_elementNames.value(codec).constData(), NULL); + GstElement *encoderElement = gst_element_factory_make(m_codecs.codecElement(codec).constData(), NULL); if (!encoderElement) return 0; GstBin * encoderBin = GST_BIN(gst_bin_new("audio-encoder-bin")); - GstElement *capsFilter = gst_element_factory_make("capsfilter", NULL); + GstElement *sinkCapsFilter = gst_element_factory_make("capsfilter", NULL); + GstElement *srcCapsFilter = gst_element_factory_make("capsfilter", NULL); - gst_bin_add(encoderBin, capsFilter); - gst_bin_add(encoderBin, encoderElement); - gst_element_link(capsFilter, encoderElement); + gst_bin_add_many(encoderBin, sinkCapsFilter, encoderElement, srcCapsFilter, NULL); + gst_element_link_many(sinkCapsFilter, encoderElement, srcCapsFilter, NULL); // add ghostpads - GstPad *pad = gst_element_get_static_pad(capsFilter, "sink"); + GstPad *pad = gst_element_get_static_pad(sinkCapsFilter, "sink"); gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("sink", pad)); gst_object_unref(GST_OBJECT(pad)); - pad = gst_element_get_static_pad(encoderElement, "src"); + pad = gst_element_get_static_pad(srcCapsFilter, "src"); gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("src", pad)); gst_object_unref(GST_OBJECT(pad)); @@ -181,18 +147,23 @@ GstElement *QGstreamerAudioEncode::createEncoder() gst_caps_append_structure(caps,structure); - //qDebug() << "set caps filter:" << gst_caps_to_string(caps); - - g_object_set(G_OBJECT(capsFilter), "caps", caps, NULL); + g_object_set(G_OBJECT(sinkCapsFilter), "caps", caps, NULL); gst_caps_unref(caps); } + // Some encoders support several codecs. Setting a caps filter downstream with the desired + // codec (which is actually a string representation of the caps) will make sure we use the + // correct codec. + GstCaps *caps = gst_caps_from_string(codec.toUtf8().constData()); + g_object_set(G_OBJECT(srcCapsFilter), "caps", caps, NULL); + gst_caps_unref(caps); + if (encoderElement) { if (m_audioSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) { QMultimedia::EncodingQuality qualityValue = m_audioSettings.quality(); - if (codec == QLatin1String("audio/vorbis")) { + if (codec == QLatin1String("audio/x-vorbis")) { double qualityTable[] = { 0.1, //VeryLow 0.3, //Low @@ -211,7 +182,7 @@ GstElement *QGstreamerAudioEncode::createEncoder() 9 //VeryHigh }; g_object_set(G_OBJECT(encoderElement), "quality", quality[qualityValue], NULL); - } else if (codec == QLatin1String("audio/speex")) { + } else if (codec == QLatin1String("audio/x-speex")) { //0-10 range with default 8 double qualityTable[] = { 2, //VeryLow diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h index 8474aa1a0..04de602ad 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h +++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h @@ -49,6 +49,7 @@ #include <gst/gst.h> #include <qaudioformat.h> +#include <private/qgstcodecsinfo_p.h> QT_BEGIN_NAMESPACE @@ -61,30 +62,27 @@ public: QGstreamerAudioEncode(QObject *parent); virtual ~QGstreamerAudioEncode(); - QStringList supportedAudioCodecs() const; - QString codecDescription(const QString &codecName) const; + QStringList supportedAudioCodecs() const override; + QString codecDescription(const QString &codecName) const override; QStringList supportedEncodingOptions(const QString &codec) const; QVariant encodingOption(const QString &codec, const QString &name) const; void setEncodingOption(const QString &codec, const QString &name, const QVariant &value); QList<int> supportedSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(), - bool *isContinuous = 0) const; + bool *isContinuous = 0) const override; QList<int> supportedChannelCounts(const QAudioEncoderSettings &settings = QAudioEncoderSettings()) const; QList<int> supportedSampleSizes(const QAudioEncoderSettings &settings = QAudioEncoderSettings()) const; - QAudioEncoderSettings audioSettings() const; - void setAudioSettings(const QAudioEncoderSettings&); + QAudioEncoderSettings audioSettings() const override; + void setAudioSettings(const QAudioEncoderSettings &) override; GstElement *createEncoder(); QSet<QString> supportedStreamTypes(const QString &codecName) const; private: - QStringList m_codecs; - QMap<QString,QByteArray> m_elementNames; - QMap<QString,QString> m_codecDescriptions; - QMap<QString,QStringList> m_codecOptions; + QGstCodecsInfo m_codecs; QMap<QString, QMap<QString, QVariant> > m_options; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.h index 55d85ce6f..0e53f0890 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.h @@ -56,22 +56,22 @@ public: bool isValid() const { return true; } - QCamera::State state() const; - void setState(QCamera::State state); + QCamera::State state() const override; + void setState(QCamera::State state) override; - QCamera::Status status() const { return m_status; } + QCamera::Status status() const override { return m_status; } - QCamera::CaptureModes captureMode() const { return m_captureMode; } - void setCaptureMode(QCamera::CaptureModes mode); + QCamera::CaptureModes captureMode() const override { return m_captureMode; } + void setCaptureMode(QCamera::CaptureModes mode) override; - bool isCaptureModeSupported(QCamera::CaptureModes mode) const; + bool isCaptureModeSupported(QCamera::CaptureModes mode) const override; QCamera::LockTypes supportedLocks() const { return QCamera::NoLock; } - bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const; + bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; public slots: void reloadLater(); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.h index aa114535f..6839bbe68 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.h @@ -49,15 +49,15 @@ class QGstreamerCaptureMetaDataControl : public QMetaDataWriterControl Q_OBJECT public: QGstreamerCaptureMetaDataControl(QObject *parent); - virtual ~QGstreamerCaptureMetaDataControl() {}; + ~QGstreamerCaptureMetaDataControl() {} - bool isMetaDataAvailable() const { return true; } - bool isWritable() const { return true; } + bool isMetaDataAvailable() const override { return true; } + bool isWritable() const override { return true; } - QVariant metaData(const QString &key) const; - void setMetaData(const QString &key, const QVariant &value); - QStringList availableMetaData() const; + QVariant metaData(const QString &key) const override; + void setMetaData(const QString &key, const QVariant &value) override; + QStringList availableMetaData() const override; Q_SIGNALS: void metaDataChanged(const QMap<QByteArray, QVariant>&); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h index dc731d810..aba98d495 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h @@ -70,8 +70,8 @@ public: QGstreamerCaptureService(const QString &service, QObject *parent = 0); virtual ~QGstreamerCaptureService(); - QMediaControl *requestControl(const char *name); - void releaseControl(QMediaControl *); + QMediaControl *requestControl(const char *name) override; + void releaseControl(QMediaControl *) override; private: void setAudioPreview(GstElement *); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.h b/src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.h index 1af9cdc90..d8b7e9768 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.h @@ -69,20 +69,20 @@ class QGstreamerCaptureServicePlugin Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "mediacapture.json") #endif public: - QMediaService* create(QString const& key); - void release(QMediaService *service); + QMediaService* create(const QString &key) override; + void release(QMediaService *service) override; #if defined(USE_GSTREAMER_CAMERA) - QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const; + QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override; - QByteArray defaultDevice(const QByteArray &service) const; - QList<QByteArray> devices(const QByteArray &service) const; - QString deviceDescription(const QByteArray &service, const QByteArray &device); + QByteArray defaultDevice(const QByteArray &service) const override; + QList<QByteArray> devices(const QByteArray &service) const override; + QString deviceDescription(const QByteArray &service, const QByteArray &device) override; QVariant deviceProperty(const QByteArray &service, const QByteArray &device, const QByteArray &property); #endif - QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const; - QStringList supportedMimeTypes() const; + QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs) const override; + QStringList supportedMimeTypes() const override; private: void updateSupportedMimeTypes() const; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h index 79203224b..e0c9107a7 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h @@ -138,7 +138,7 @@ public: bool isReady() const; - bool processBusMessage(const QGstreamerMessage &message); + bool processBusMessage(const QGstreamerMessage &message) override; void addProbe(QGstreamerAudioProbeControl* probe); void removeProbe(QGstreamerAudioProbeControl* probe); @@ -166,8 +166,8 @@ public slots: void setVolume(qreal volume); private: - void probeCaps(GstCaps *caps); - bool probeBuffer(GstBuffer *buffer); + void probeCaps(GstCaps *caps) override; + bool probeBuffer(GstBuffer *buffer) override; enum PipelineMode { EmptyPipeline, PreviewPipeline, RecordingPipeline, PreviewAndRecordingPipeline }; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.h index 7d4145ae1..f58cf09c5 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.h @@ -53,12 +53,12 @@ public: QGstreamerImageCaptureControl(QGstreamerCaptureSession *session); virtual ~QGstreamerImageCaptureControl(); - QCameraImageCapture::DriveMode driveMode() const { return QCameraImageCapture::SingleImageCapture; } - void setDriveMode(QCameraImageCapture::DriveMode) {} + QCameraImageCapture::DriveMode driveMode() const override { return QCameraImageCapture::SingleImageCapture; } + void setDriveMode(QCameraImageCapture::DriveMode) override {} - bool isReadyForCapture() const; - int capture(const QString &fileName); - void cancelCapture(); + bool isReadyForCapture() const override; + int capture(const QString &fileName) override; + void cancelCapture() override; private slots: void updateState(); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerimageencode.h b/src/plugins/gstreamer/mediacapture/qgstreamerimageencode.h index d56a739f1..f3ebd3e90 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerimageencode.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamerimageencode.h @@ -59,13 +59,13 @@ public: virtual ~QGstreamerImageEncode(); QList<QSize> supportedResolutions(const QImageEncoderSettings &settings = QImageEncoderSettings(), - bool *continuous = 0) const; + bool *continuous = 0) const override; - QStringList supportedImageCodecs() const; - QString imageCodecDescription(const QString &codecName) const; + QStringList supportedImageCodecs() const override; + QString imageCodecDescription(const QString &codecName) const override; - QImageEncoderSettings imageSettings() const; - void setImageSettings(const QImageEncoderSettings &settings); + QImageEncoderSettings imageSettings() const override; + void setImageSettings(const QImageEncoderSettings &settings) override; Q_SIGNALS: void settingsChanged(); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp index 4e07b35bd..05f1c8af5 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp @@ -39,53 +39,19 @@ #include "qgstreamermediacontainercontrol.h" +#include <private/qgstutils_p.h> #include <QtCore/qdebug.h> QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent) :QMediaContainerControl(parent) + , m_containers(QGstCodecsInfo::Muxer) { - QList<QByteArray> formatCandidates; - formatCandidates << "matroska" << "ogg" << "mp4" << "wav" << "quicktime" << "avi" << "3gpp"; - formatCandidates << "flv" << "amr" << "asf" << "dv" << "gif"; - formatCandidates << "mpeg" << "vob" << "mpegts" << "3g2" << "3gp"; - formatCandidates << "raw"; - - m_elementNames["matroska"] = "matroskamux"; - m_elementNames["ogg"] = "oggmux"; - m_elementNames["mp4"] = "ffmux_mp4"; - m_elementNames["quicktime"] = "ffmux_mov"; - m_elementNames["avi"] = "avimux"; - m_elementNames["3gpp"] = "gppmux"; - m_elementNames["flv"] = "flvmux"; - m_elementNames["wav"] = "wavenc"; - m_elementNames["amr"] = "ffmux_amr"; - m_elementNames["asf"] = "ffmux_asf"; - m_elementNames["dv"] = "ffmux_dv"; - m_elementNames["gif"] = "ffmux_gif"; - m_elementNames["mpeg"] = "ffmux_mpeg"; - m_elementNames["vob"] = "ffmux_vob"; - m_elementNames["mpegts"] = "ffmux_mpegts"; - m_elementNames["3g2"] = "ffmux_3g2"; - m_elementNames["3gp"] = "ffmux_3gp"; - m_elementNames["raw"] = "identity"; - - m_containerExtensions["matroska"] = "mkv"; - m_containerExtensions["quicktime"] = "mov"; - m_containerExtensions["mpegts"] = "m2t"; - m_containerExtensions["mpeg"] = "mpg"; - QSet<QString> allTypes; - for (const QByteArray& formatName : qAsConst(formatCandidates)) { - QByteArray elementName = m_elementNames[formatName]; - GstElementFactory *factory = gst_element_factory_find(elementName.constData()); + for (const QString& formatName : supportedContainers()) { + GstElementFactory *factory = gst_element_factory_find(m_containers.codecElement(formatName).constData()); if (factory) { - m_supportedContainers.append(formatName); - const gchar *descr = gst_element_factory_get_description(factory); - m_containerDescriptions.insert(formatName, QString::fromUtf8(descr)); - - if (formatName == QByteArray("raw")) { m_streamTypes.insert(formatName, allTypes); } else { @@ -97,9 +63,6 @@ QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent gst_object_unref(GST_OBJECT(factory)); } } - - //if (!m_supportedContainers.isEmpty()) - // setContainerFormat(m_supportedContainers[0]); } QSet<QString> QGstreamerMediaContainerControl::supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction) @@ -129,5 +92,5 @@ QSet<QString> QGstreamerMediaContainerControl::supportedStreamTypes(const QStrin QString QGstreamerMediaContainerControl::containerExtension() const { - return m_containerExtensions.value(m_format, m_format); + return QGstUtils::fileExtensionForMimeType(m_format); } diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h index b8e2cc045..5c730b21d 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h @@ -45,6 +45,8 @@ #include <QtCore/qstringlist.h> #include <QtCore/qset.h> +#include <private/qgstcodecsinfo_p.h> + #include <gst/gst.h> QT_BEGIN_NAMESPACE @@ -54,15 +56,15 @@ class QGstreamerMediaContainerControl : public QMediaContainerControl Q_OBJECT public: QGstreamerMediaContainerControl(QObject *parent); - virtual ~QGstreamerMediaContainerControl() {}; + ~QGstreamerMediaContainerControl() {} - virtual QStringList supportedContainers() const { return m_supportedContainers; } - virtual QString containerFormat() const { return m_format; } - virtual void setContainerFormat(const QString &formatMimeType) { m_format = formatMimeType; } + QStringList supportedContainers() const override { return m_containers.supportedCodecs(); } + QString containerFormat() const override { return m_format; } + void setContainerFormat(const QString &formatMimeType) override { m_format = formatMimeType; } - virtual QString containerDescription(const QString &formatMimeType) const { return m_containerDescriptions.value(formatMimeType); } + QString containerDescription(const QString &formatMimeType) const override { return m_containers.codecDescription(formatMimeType); } - QByteArray formatElementName() const { return m_elementNames.value(containerFormat()); } + QByteArray formatElementName() const { return m_containers.codecElement(containerFormat()); } QSet<QString> supportedStreamTypes(const QString &container) const; @@ -72,10 +74,7 @@ public: private: QString m_format; - QStringList m_supportedContainers; - QMap<QString,QByteArray> m_elementNames; - QMap<QString, QString> m_containerDescriptions; - QMap<QString, QString> m_containerExtensions; + QGstCodecsInfo m_containers; QMap<QString, QSet<QString> > m_streamTypes; }; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h index 96e263e72..b80716f4c 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h @@ -56,26 +56,26 @@ public: QGstreamerRecorderControl(QGstreamerCaptureSession *session); virtual ~QGstreamerRecorderControl(); - QUrl outputLocation() const; - bool setOutputLocation(const QUrl &sink); + QUrl outputLocation() const override; + bool setOutputLocation(const QUrl &sink) override; - QMediaRecorder::State state() const; - QMediaRecorder::Status status() const; + QMediaRecorder::State state() const override; + QMediaRecorder::Status status() const override; - qint64 duration() const; + qint64 duration() const override; - bool isMuted() const; - qreal volume() const; + bool isMuted() const override; + qreal volume() const override; - void applySettings(); + void applySettings() override; public slots: - void setState(QMediaRecorder::State state); + void setState(QMediaRecorder::State state) override; void record(); void pause(); void stop(); - void setMuted(bool); - void setVolume(qreal volume); + void setMuted(bool) override; + void setVolume(qreal volume) override; private slots: void updateStatus(); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerv4l2input.h b/src/plugins/gstreamer/mediacapture/qgstreamerv4l2input.h index 20e855922..a82c7cf4b 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerv4l2input.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamerv4l2input.h @@ -56,10 +56,10 @@ public: QGstreamerV4L2Input(QObject *parent = 0); virtual ~QGstreamerV4L2Input(); - GstElement *buildElement(); + GstElement *buildElement() override; - QList<qreal> supportedFrameRates(const QSize &frameSize = QSize()) const; - QList<QSize> supportedResolutions(qreal frameRate = -1) const; + QList<qreal> supportedFrameRates(const QSize &frameSize = QSize()) const override; + QList<QSize> supportedResolutions(qreal frameRate = -1) const override; QByteArray device() const; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp index f0781d831..6b4dbe4b7 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp @@ -47,41 +47,17 @@ QGstreamerVideoEncode::QGstreamerVideoEncode(QGstreamerCaptureSession *session) :QVideoEncoderSettingsControl(session), m_session(session) + , m_codecs(QGstCodecsInfo::VideoEncoder) { - QList<QByteArray> codecCandidates; - codecCandidates << "video/h264" << "video/xvid" << "video/mpeg4" << "video/mpeg1" << "video/mpeg2" << "video/theora"; - - m_elementNames["video/h264"] = "x264enc"; - m_elementNames["video/xvid"] = "xvidenc"; - m_elementNames["video/mpeg4"] = "ffenc_mpeg4"; - m_elementNames["video/mpeg1"] = "ffenc_mpeg1video"; - m_elementNames["video/mpeg2"] = "ffenc_mpeg2video"; - m_elementNames["video/theora"] = "theoraenc"; - - m_codecOptions["video/h264"] = QStringList() << "quantizer"; - m_codecOptions["video/xvid"] = QStringList() << "quantizer" << "profile"; - m_codecOptions["video/mpeg4"] = QStringList() << "quantizer"; - m_codecOptions["video/mpeg1"] = QStringList() << "quantizer"; - m_codecOptions["video/mpeg2"] = QStringList() << "quantizer"; - m_codecOptions["video/theora"] = QStringList(); - - for (const QByteArray& codecName : qAsConst(codecCandidates)) { - QByteArray elementName = m_elementNames[codecName]; - GstElementFactory *factory = gst_element_factory_find(elementName.constData()); + for (const QString& codecName : supportedVideoCodecs()) { + GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData()); if (factory) { - m_codecs.append(codecName); - const gchar *descr = gst_element_factory_get_description(factory); - m_codecDescriptions.insert(codecName, QString::fromUtf8(descr)); - m_streamTypes.insert(codecName, QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC)); gst_object_unref(GST_OBJECT(factory)); } } - - //if (!m_codecs.isEmpty()) - // m_videoSettings.setCodec(m_codecs[0]); } QGstreamerVideoEncode::~QGstreamerVideoEncode() @@ -106,17 +82,17 @@ QList< qreal > QGstreamerVideoEncode::supportedFrameRates(const QVideoEncoderSet QStringList QGstreamerVideoEncode::supportedVideoCodecs() const { - return m_codecs; + return m_codecs.supportedCodecs(); } QString QGstreamerVideoEncode::videoCodecDescription(const QString &codecName) const { - return m_codecDescriptions.value(codecName); + return m_codecs.codecDescription(codecName); } QStringList QGstreamerVideoEncode::supportedEncodingOptions(const QString &codec) const { - return m_codecOptions.value(codec); + return m_codecs.codecOptions(codec); } QVariant QGstreamerVideoEncode::encodingOption(const QString &codec, const QString &name) const @@ -143,28 +119,28 @@ void QGstreamerVideoEncode::setVideoSettings(const QVideoEncoderSettings &settin GstElement *QGstreamerVideoEncode::createEncoder() { QString codec = m_videoSettings.codec(); - //qDebug() << "create encoder for video codec" << codec; - GstElement *encoderElement = gst_element_factory_make( m_elementNames.value(codec).constData(), "video-encoder"); + GstElement *encoderElement = gst_element_factory_make(m_codecs.codecElement(codec).constData(), "video-encoder"); if (!encoderElement) return 0; GstBin *encoderBin = GST_BIN(gst_bin_new("video-encoder-bin")); - GstElement *capsFilter = gst_element_factory_make("capsfilter", "capsfilter-video"); - gst_bin_add(encoderBin, capsFilter); + GstElement *sinkCapsFilter = gst_element_factory_make("capsfilter", "capsfilter-video"); + GstElement *srcCapsFilter = gst_element_factory_make("capsfilter", "capsfilter-video"); + gst_bin_add_many(encoderBin, sinkCapsFilter, srcCapsFilter, NULL); GstElement *colorspace = gst_element_factory_make(QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME, NULL); gst_bin_add(encoderBin, colorspace); gst_bin_add(encoderBin, encoderElement); - gst_element_link_many(capsFilter, colorspace, encoderElement, NULL); + gst_element_link_many(sinkCapsFilter, colorspace, encoderElement, srcCapsFilter, NULL); // add ghostpads - GstPad *pad = gst_element_get_static_pad(capsFilter, "sink"); + GstPad *pad = gst_element_get_static_pad(sinkCapsFilter, "sink"); gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("sink", pad)); gst_object_unref(GST_OBJECT(pad)); - pad = gst_element_get_static_pad(encoderElement, "src"); + pad = gst_element_get_static_pad(srcCapsFilter, "src"); gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("src", pad)); gst_object_unref(GST_OBJECT(pad)); @@ -172,7 +148,7 @@ GstElement *QGstreamerVideoEncode::createEncoder() if (m_videoSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) { QMultimedia::EncodingQuality qualityValue = m_videoSettings.quality(); - if (codec == QLatin1String("video/h264")) { + if (codec == QLatin1String("video/x-h264")) { //constant quantizer mode g_object_set(G_OBJECT(encoderElement), "pass", 4, NULL); int qualityTable[] = { @@ -183,7 +159,7 @@ GstElement *QGstreamerVideoEncode::createEncoder() 8 //VeryHigh }; g_object_set(G_OBJECT(encoderElement), "quantizer", qualityTable[qualityValue], NULL); - } else if (codec == QLatin1String("video/xvid")) { + } else if (codec == QLatin1String("video/x-xvid")) { //constant quantizer mode g_object_set(G_OBJECT(encoderElement), "pass", 3, NULL); int qualityTable[] = { @@ -195,9 +171,7 @@ GstElement *QGstreamerVideoEncode::createEncoder() }; int quant = qualityTable[qualityValue]; g_object_set(G_OBJECT(encoderElement), "quantizer", quant, NULL); - } else if (codec == QLatin1String("video/mpeg4") || - codec == QLatin1String("video/mpeg1") || - codec == QLatin1String("video/mpeg2") ) { + } else if (codec.startsWith(QLatin1String("video/mpeg"))) { //constant quantizer mode g_object_set(G_OBJECT(encoderElement), "pass", 2, NULL); //quant from 1 to 30, default ~3 @@ -210,7 +184,7 @@ GstElement *QGstreamerVideoEncode::createEncoder() }; double quant = qualityTable[qualityValue]; g_object_set(G_OBJECT(encoderElement), "quantizer", quant, NULL); - } else if (codec == QLatin1String("video/theora")) { + } else if (codec == QLatin1String("video/x-theora")) { int qualityTable[] = { 8, //VeryLow 16, //Low @@ -278,11 +252,18 @@ GstElement *QGstreamerVideoEncode::createEncoder() //qDebug() << "set video caps filter:" << gst_caps_to_string(caps); - g_object_set(G_OBJECT(capsFilter), "caps", caps, NULL); + g_object_set(G_OBJECT(sinkCapsFilter), "caps", caps, NULL); gst_caps_unref(caps); } + // Some encoders support several codecs. Setting a caps filter downstream with the desired + // codec (which is actually a string representation of the caps) will make sure we use the + // correct codec. + GstCaps *caps = gst_caps_from_string(codec.toUtf8().constData()); + g_object_set(G_OBJECT(srcCapsFilter), "caps", caps, NULL); + gst_caps_unref(caps); + return GST_ELEMENT(encoderBin); } diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h index f4134b46f..bc6636012 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h @@ -46,6 +46,8 @@ #include <QtCore/qmap.h> #include <QtCore/qset.h> +#include <private/qgstcodecsinfo_p.h> + #include <gst/gst.h> QT_BEGIN_NAMESPACE @@ -60,18 +62,18 @@ public: virtual ~QGstreamerVideoEncode(); QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), - bool *continuous = 0) const; + bool *continuous = 0) const override; QList< qreal > supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), - bool *continuous = 0) const; + bool *continuous = 0) const override; QPair<int,int> rateAsRational() const; - QStringList supportedVideoCodecs() const; - QString videoCodecDescription(const QString &codecName) const; + QStringList supportedVideoCodecs() const override; + QString videoCodecDescription(const QString &codecName) const override; - QVideoEncoderSettings videoSettings() const; - void setVideoSettings(const QVideoEncoderSettings &settings); + QVideoEncoderSettings videoSettings() const override; + void setVideoSettings(const QVideoEncoderSettings &settings) override; QStringList supportedEncodingOptions(const QString &codec) const; QVariant encodingOption(const QString &codec, const QString &name) const; @@ -84,10 +86,7 @@ public: private: QGstreamerCaptureSession *m_session; - QStringList m_codecs; - QMap<QString,QString> m_codecDescriptions; - QMap<QString,QByteArray> m_elementNames; - QMap<QString,QStringList> m_codecOptions; + QGstCodecsInfo m_codecs; QVideoEncoderSettings m_videoSettings; QMap<QString, QMap<QString, QVariant> > m_options; diff --git a/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h b/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h index 2c303f5af..78299b608 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h @@ -51,7 +51,7 @@ class QGStreamerAvailabilityControl : public QMediaAvailabilityControl Q_OBJECT public: QGStreamerAvailabilityControl(QMediaPlayerResourceSetInterface *resources, QObject *parent = 0); - QMultimedia::AvailabilityStatus availability() const; + QMultimedia::AvailabilityStatus availability() const override; private Q_SLOTS: void handleAvailabilityChanged(); diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h index 1bbc5b1a5..bf8f7e842 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h @@ -53,11 +53,11 @@ public: QGstreamerMetaDataProvider( QGstreamerPlayerSession *session, QObject *parent ); virtual ~QGstreamerMetaDataProvider(); - bool isMetaDataAvailable() const; + bool isMetaDataAvailable() const override; bool isWritable() const; - QVariant metaData(const QString &key) const; - QStringList availableMetaData() const; + QVariant metaData(const QString &key) const override; + QStringList availableMetaData() const override; private slots: void updateTags(); diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.h index 9ecf5f499..6067a68fc 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.h @@ -67,42 +67,42 @@ public: QGstreamerPlayerControl(QGstreamerPlayerSession *session, QObject *parent = 0); ~QGstreamerPlayerControl(); - QMediaPlayer::State state() const; - QMediaPlayer::MediaStatus mediaStatus() const; + QMediaPlayer::State state() const override; + QMediaPlayer::MediaStatus mediaStatus() const override; - qint64 position() const; - qint64 duration() const; + qint64 position() const override; + qint64 duration() const override; - int bufferStatus() const; + int bufferStatus() const override; - int volume() const; - bool isMuted() const; + int volume() const override; + bool isMuted() const override; - bool isAudioAvailable() const; - bool isVideoAvailable() const; + bool isAudioAvailable() const override; + bool isVideoAvailable() const override; void setVideoOutput(QObject *output); - bool isSeekable() const; - QMediaTimeRange availablePlaybackRanges() const; + bool isSeekable() const override; + QMediaTimeRange availablePlaybackRanges() const override; - qreal playbackRate() const; - void setPlaybackRate(qreal rate); + qreal playbackRate() const override; + void setPlaybackRate(qreal rate) override; - QMediaContent media() const; - const QIODevice *mediaStream() const; - void setMedia(const QMediaContent&, QIODevice *); + QMediaContent media() const override; + const QIODevice *mediaStream() const override; + void setMedia(const QMediaContent&, QIODevice *) override; QMediaPlayerResourceSetInterface* resources() const; public Q_SLOTS: - void setPosition(qint64 pos); + void setPosition(qint64 pos) override; - void play(); - void pause(); - void stop(); + void play() override; + void pause() override; + void stop() override; - void setVolume(int volume); - void setMuted(bool muted); + void setVolume(int volume) override; + void setMuted(bool muted) override; private Q_SLOTS: void updateSessionState(QMediaPlayer::State state); diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h index 423ee9173..ec0c0944b 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h @@ -69,8 +69,8 @@ public: QGstreamerPlayerService(QObject *parent = 0); ~QGstreamerPlayerService(); - QMediaControl *requestControl(const char *name); - void releaseControl(QMediaControl *control); + QMediaControl *requestControl(const char *name) override; + void releaseControl(QMediaControl *control) override; private: QGstreamerPlayerControl *m_control; diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerserviceplugin.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerserviceplugin.h index 8e3e8a2af..71eece23e 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerserviceplugin.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerserviceplugin.h @@ -58,13 +58,13 @@ class QGstreamerPlayerServicePlugin Q_INTERFACES(QMediaServiceSupportedFormatsInterface) Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "mediaplayer.json") public: - QMediaService* create(QString const& key); - void release(QMediaService *service); + QMediaService* create(const QString &key) override; + void release(QMediaService *service) override; - QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const; + QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override; - QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const; - QStringList supportedMimeTypes() const; + QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs) const override; + QStringList supportedMimeTypes() const override; private: void updateSupportedMimeTypes() const; diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp index 94e818f94..cf2ec6262 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp @@ -47,7 +47,6 @@ #include <private/gstvideoconnector_p.h> #endif #include <private/qgstutils_p.h> -#include <private/playlistfileparser_p.h> #include <private/qgstutils_p.h> #include <gst/gstvalue.h> @@ -61,59 +60,12 @@ #include <QtCore/qdebug.h> #include <QtCore/qdir.h> #include <QtCore/qstandardpaths.h> -#include <QtCore/qvector.h> -#include <QtCore/qmutex.h> //#define DEBUG_PLAYBIN //#define DEBUG_VO_BIN_DUMP QT_BEGIN_NAMESPACE -class TypefindDelegator -{ -public: - TypefindDelegator() - { - Q_ASSERT(gst_type_find_register(0, "playlist", GST_RANK_MARGINAL, notifySessions, 0, 0, 0, 0) == TRUE); - } - - void add(QGstreamerPlayerSession *session) - { - QMutexLocker locker(&m_mtx); - m_sessions.append(session); - } - - void remove(QGstreamerPlayerSession *session) - { - QMutexLocker locker(&m_mtx); - const int idx = m_sessions.indexOf(session); - if (idx != -1) - m_sessions.remove(idx); - } - -private: - static void notifySessions(GstTypeFind *find, gpointer /* unused */) - { - QMutexLocker locker(&m_mtx); - SessionList::const_iterator it = m_sessions.constBegin(); - SessionList::const_iterator end = m_sessions.constEnd(); - - while (it != end) { - (*it)->playlistTypeFindFunction(find); - ++it; - } - } - - typedef QVector<QGstreamerPlayerSession *> SessionList; - static SessionList m_sessions; - static QMutex m_mtx; -}; - -TypefindDelegator::SessionList TypefindDelegator::m_sessions; -QMutex TypefindDelegator::m_mtx; - -Q_GLOBAL_STATIC(TypefindDelegator, g_typeRegister); - static bool usePlaybinVolume() { static enum { Yes, No, Unknown } status = Unknown; @@ -191,10 +143,8 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent) m_displayPrerolledFrame(true), m_sourceType(UnknownSrc), m_everPlayed(false), - m_isLiveSource(false), - m_isPlaylist(false) + m_isLiveSource(false) { - g_typeRegister->add(this); m_playbin = gst_element_factory_make(QT_GSTREAMER_PLAYBIN_ELEMENT_NAME, NULL); if (m_playbin) { //GST_PLAY_FLAG_NATIVE_VIDEO omits configuration of ffmpegcolorspace and videoscale, @@ -295,8 +245,6 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent) QGstreamerPlayerSession::~QGstreamerPlayerSession() { - g_typeRegister->remove(this); - if (m_playbin) { stop(); @@ -347,7 +295,6 @@ void QGstreamerPlayerSession::loadFromStream(const QNetworkRequest &request, QIO m_request = request; m_duration = -1; m_lastPosition = 0; - m_isPlaylist = false; if (!m_appSrc) m_appSrc = new QGstAppSrc(this); @@ -377,7 +324,6 @@ void QGstreamerPlayerSession::loadFromUri(const QNetworkRequest &request) m_request = request; m_duration = -1; m_lastPosition = 0; - m_isPlaylist = false; #if QT_CONFIG(gstreamer_app) if (m_appSrc) { @@ -945,13 +891,9 @@ bool QGstreamerPlayerSession::play() if (m_playbin) { m_pendingState = QMediaPlayer::PlayingState; if (gst_element_set_state(m_playbin, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { - if (!m_isPlaylist) { - qWarning() << "GStreamer; Unable to play -" << m_request.url().toString(); - m_pendingState = m_state = QMediaPlayer::StoppedState; - emit stateChanged(m_state); - } else { - return true; - } + qWarning() << "GStreamer; Unable to play -" << m_request.url().toString(); + m_pendingState = m_state = QMediaPlayer::StoppedState; + emit stateChanged(m_state); } else { resumeVideoProbes(); return true; @@ -972,13 +914,9 @@ bool QGstreamerPlayerSession::pause() return true; if (gst_element_set_state(m_playbin, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE) { - if (!m_isPlaylist) { - qWarning() << "GStreamer; Unable to pause -" << m_request.url().toString(); - m_pendingState = m_state = QMediaPlayer::StoppedState; - emit stateChanged(m_state); - } else { - return true; - } + qWarning() << "GStreamer; Unable to pause -" << m_request.url().toString(); + m_pendingState = m_state = QMediaPlayer::StoppedState; + emit stateChanged(m_state); } else { resumeVideoProbes(); return true; @@ -1347,7 +1285,7 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message if (err->domain == GST_STREAM_ERROR && err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND) emit error(int(QMediaPlayer::FormatError), tr("Cannot play stream of type: <unknown>")); // GStreamer shows warning for HTTP playlists - if (!m_isPlaylist) + if (err && err->message) qWarning() << "Warning:" << QString::fromUtf8(err->message); g_error_free(err); g_free(debug); @@ -1356,10 +1294,6 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message gchar *debug; gst_message_parse_error(gm, &err, &debug); - // remember playlist value, - // it could be set to false after call to processInvalidMedia - bool isPlaylist = m_isPlaylist; - // Nearly all errors map to ResourceError QMediaPlayer::Error qerror = QMediaPlayer::ResourceError; if (err->domain == GST_STREAM_ERROR @@ -1368,7 +1302,7 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message qerror = QMediaPlayer::AccessDeniedError; } processInvalidMedia(qerror, QString::fromUtf8(err->message)); - if (!isPlaylist) + if (err && err->message) qWarning() << "Error:" << QString::fromUtf8(err->message); g_error_free(err); @@ -1804,14 +1738,9 @@ void QGstreamerPlayerSession::processInvalidMedia(QMediaPlayer::Error errorCode, #ifdef DEBUG_PLAYBIN qDebug() << Q_FUNC_INFO; #endif - if (m_isPlaylist) { - stop(); - emit error(int(QMediaPlayer::MediaIsPlaylist), tr("Media is loaded as a playlist")); - } else { - emit invalidMedia(); - stop(); - emit error(int(errorCode), errorString); - } + emit invalidMedia(); + stop(); + emit error(int(errorCode), errorString); } void QGstreamerPlayerSession::showPrerollFrames(bool enabled) @@ -1936,32 +1865,4 @@ void QGstreamerPlayerSession::resumeVideoProbes() m_videoProbe->stopFlushing(); } -void QGstreamerPlayerSession::playlistTypeFindFunction(GstTypeFind *find) -{ - gchar *strval = 0; -#if GST_CHECK_VERSION(1,0,0) - g_object_get(G_OBJECT(m_playbin), "current-uri", &strval, NULL); -#else - g_object_get(G_OBJECT(m_playbin), "uri", &strval, NULL); -#endif - const QString uri(QString::fromUtf8(strval)); - g_free(strval); - - guint64 length = gst_type_find_get_length(find); - if (!length) - length = 1024; - else - length = qMin(length, guint64(1024)); - - while (length > 0) { - const guint8 *data = gst_type_find_peek(find, 0, length); - if (data) { - m_isPlaylist = (QPlaylistFileParser::findPlaylistType(uri, 0, data, length) != QPlaylistFileParser::UNKNOWN); - return; - } - length >>= 1; // for HTTP files length is not available, - // so we have to try different buffer sizes - } -} - QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h index 90ec60bc9..7f46e8f41 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h @@ -115,7 +115,7 @@ public: int activeStream(QMediaStreamsControl::StreamType streamType) const; void setActiveStream(QMediaStreamsControl::StreamType streamType, int streamNumber); - bool processBusMessage(const QGstreamerMessage &message); + bool processBusMessage(const QGstreamerMessage &message) override; #if QT_CONFIG(gstreamer_app) QGstAppSrc *appsrc() const { return m_appSrc; } @@ -132,8 +132,6 @@ public: void endOfMediaReset(); - void playlistTypeFindFunction(GstTypeFind *find); - public slots: void loadFromUri(const QNetworkRequest &url); void loadFromStream(const QNetworkRequest &url, QIODevice *stream); @@ -256,7 +254,6 @@ private: bool m_everPlayed; bool m_isLiveSource; - bool m_isPlaylist; gulong pad_probe_id; }; diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h b/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h index ec9de39f0..6f332c160 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h @@ -53,13 +53,13 @@ public: QGstreamerStreamsControl(QGstreamerPlayerSession *session, QObject *parent); virtual ~QGstreamerStreamsControl(); - virtual int streamCount(); - virtual StreamType streamType(int streamNumber); + int streamCount() override; + StreamType streamType(int streamNumber) override; - virtual QVariant metaData(int streamNumber, const QString &key); + QVariant metaData(int streamNumber, const QString &key) override; - virtual bool isActive(int streamNumber); - virtual void setActive(int streamNumber, bool state); + bool isActive(int streamNumber) override; + void setActive(int streamNumber, bool state) override; private: QGstreamerPlayerSession *m_session; |