summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/gstreamer')
-rw-r--r--src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodercontrol.h26
-rw-r--r--src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderservice.h4
-rw-r--r--src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.h8
-rw-r--r--src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinaudioencoder.h10
-rw-r--r--src/plugins/gstreamer/camerabin/camerabincapturebufferformat.h6
-rw-r--r--src/plugins/gstreamer/camerabin/camerabincapturedestination.h6
-rw-r--r--src/plugins/gstreamer/camerabin/camerabincontainer.cpp36
-rw-r--r--src/plugins/gstreamer/camerabin/camerabincontainer.h11
-rw-r--r--src/plugins/gstreamer/camerabin/camerabincontrol.h14
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinexposure.h10
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinflash.h8
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinfocus.h22
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinimagecapture.h20
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinimageencoder.h10
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinimageprocessing.h8
-rw-r--r--src/plugins/gstreamer/camerabin/camerabininfocontrol.h4
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinlocks.h10
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinmetadata.h10
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinrecorder.h22
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinservice.h4
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinserviceplugin.h16
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.h4
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.h8
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinvideoencoder.h12
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h6
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinviewfindersettings2.h6
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinzoom.h14
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp75
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h16
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.h14
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.h12
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h4
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.h16
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h6
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.h10
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamerimageencode.h10
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp47
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h19
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h22
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamerv4l2input.h6
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp69
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h19
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h2
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h6
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.h44
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h4
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerserviceplugin.h10
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp123
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h5
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h10
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;