summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer/mediaplayer
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/gstreamer/mediaplayer')
-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
8 files changed, 51 insertions, 153 deletions
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;