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