Gst player backend: removed fifo based stream playback fallback
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Thu, 19 Jul 2012 05:40:42 +0000 (15:40 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 19 Jul 2012 07:08:50 +0000 (09:08 +0200)
It was used on systems without appsrc element support,
but since the appsrc is part of base elements for a long,
thre is a very little value in fifo based fallback.

Change-Id: I162233cbb55821443c892f00ebd29c0498ae7152
Reviewed-by: Ling Hu <ling.hu@nokia.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.h
src/plugins/gstreamer/mediaplayer/qgstreamerplayerserviceplugin.cpp

index 0e18625..9e581d8 100644 (file)
@@ -72,14 +72,7 @@ QGstreamerPlayerControl::QGstreamerPlayerControl(QGstreamerPlayerSession *sessio
     , m_pendingSeekPosition(-1)
     , m_setMediaPending(false)
     , m_stream(0)
-    , m_fifoNotifier(0)
-    , m_fifoCanWrite(false)
-    , m_bufferSize(0)
-    , m_bufferOffset(0)
 {
-    m_fifoFd[0] = -1;
-    m_fifoFd[1] = -1;
-
     m_resources = QMediaResourcePolicy::createResourceSet<QMediaPlayerResourceSetInterface>();
     Q_ASSERT(m_resources);
 
@@ -123,13 +116,6 @@ QGstreamerPlayerControl::QGstreamerPlayerControl(QGstreamerPlayerSession *sessio
 QGstreamerPlayerControl::~QGstreamerPlayerControl()
 {
     QMediaResourcePolicy::destroyResourceSet(m_resources);
-
-    if (m_fifoFd[0] >= 0) {
-        ::close(m_fifoFd[0]);
-        ::close(m_fifoFd[1]);
-        m_fifoFd[0] = -1;
-        m_fifoFd[1] = -1;
-    }
 }
 
 QMediaPlayerResourceSetInterface* QGstreamerPlayerControl::resources() const
@@ -386,12 +372,6 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
     }
 
     if (m_stream) {
-#if !defined(HAVE_GST_APPSRC)
-        closeFifo();
-
-        disconnect(m_stream, SIGNAL(readyRead()), this, SLOT(writeFifo()));
-#endif
-
         if (m_ownStream)
             delete m_stream;
         m_stream = 0;
@@ -423,14 +403,8 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
     QNetworkRequest request;
 
     if (m_stream) {
-#if !defined(HAVE_GST_APPSRC)
-        if (m_stream->isReadable() && openFifo()) {
-            request = QNetworkRequest(QUrl(QString(QLatin1String("fd://%1")).arg(m_fifoFd[0])));
-        }
-#else
         userStreamValid = stream->isOpen() && m_stream->isReadable();
         request = content.canonicalRequest();
-#endif
     } else if (!content.isNull()) {
         request = content.canonicalRequest();
     }
@@ -453,13 +427,6 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
         m_session->loadFromUri(request);
 #endif
 
-#if !defined(HAVE_GST_APPSRC)
-    if (m_fifoFd[1] >= 0) {
-        m_fifoCanWrite = true;
-
-        writeFifo();
-    }
-#endif
 
 #if defined(HAVE_GST_APPSRC)
     if (!request.url().isEmpty() || userStreamValid) {
@@ -590,98 +557,6 @@ void QGstreamerPlayerControl::setBufferProgress(int progress)
     emit bufferStatusChanged(m_bufferProgress);
 }
 
-void QGstreamerPlayerControl::writeFifo()
-{
-    if (m_fifoCanWrite) {
-        qint64 bytesToRead = qMin<qint64>(
-                m_stream->bytesAvailable(), PIPE_BUF - m_bufferSize);
-
-        if (bytesToRead > 0) {
-            int bytesRead = m_stream->read(&m_buffer[m_bufferOffset + m_bufferSize], bytesToRead);
-
-            if (bytesRead > 0)
-                m_bufferSize += bytesRead;
-        }
-
-        if (m_bufferSize > 0) {
-            int bytesWritten = ::write(m_fifoFd[1], &m_buffer[m_bufferOffset], size_t(m_bufferSize));
-
-            if (bytesWritten > 0) {
-                m_bufferOffset += bytesWritten;
-                m_bufferSize -= bytesWritten;
-
-                if (m_bufferSize == 0)
-                    m_bufferOffset = 0;
-            } else if (errno == EAGAIN) {
-                m_fifoCanWrite = false;
-            } else {
-                closeFifo();
-            }
-        }
-    }
-
-    m_fifoNotifier->setEnabled(m_stream->bytesAvailable() > 0);
-}
-
-void QGstreamerPlayerControl::fifoReadyWrite(int socket)
-{
-    if (socket == m_fifoFd[1]) {
-        m_fifoCanWrite = true;
-
-        writeFifo();
-    }
-}
-
-bool QGstreamerPlayerControl::openFifo()
-{
-    Q_ASSERT(m_fifoFd[0] < 0);
-    Q_ASSERT(m_fifoFd[1] < 0);
-
-    if (::pipe(m_fifoFd) == 0) {
-        int flags = ::fcntl(m_fifoFd[1], F_GETFD);
-
-        if (::fcntl(m_fifoFd[1], F_SETFD, flags | O_NONBLOCK) >= 0) {
-            m_fifoNotifier = new QSocketNotifier(m_fifoFd[1], QSocketNotifier::Write);
-
-            connect(m_fifoNotifier, SIGNAL(activated(int)), this, SLOT(fifoReadyWrite(int)));
-
-            return true;
-        } else {
-            qWarning("Failed to make pipe non blocking %d", errno);
-
-            ::close(m_fifoFd[0]);
-            ::close(m_fifoFd[1]);
-
-            m_fifoFd[0] = -1;
-            m_fifoFd[1] = -1;
-
-            return false;
-        }
-    } else {
-        qWarning("Failed to create pipe %d", errno);
-
-        return false;
-    }
-}
-
-void QGstreamerPlayerControl::closeFifo()
-{
-    if (m_fifoFd[0] >= 0) {
-        delete m_fifoNotifier;
-        m_fifoNotifier = 0;
-
-        ::close(m_fifoFd[0]);
-        ::close(m_fifoFd[1]);
-        m_fifoFd[0] = -1;
-        m_fifoFd[1] = -1;
-
-        m_fifoCanWrite = false;
-
-        m_bufferSize = 0;
-        m_bufferOffset = 0;
-    }
-}
-
 void QGstreamerPlayerControl::applyPendingSeek(bool isSeekable)
 {
     if (isSeekable && m_pendingSeekPosition != -1)
index c09d577..8fefae0 100644 (file)
@@ -111,9 +111,6 @@ public Q_SLOTS:
     void setMuted(bool muted);
 
 private Q_SLOTS:
-    void writeFifo();
-    void fifoReadyWrite(int socket);
-
     void updateSessionState(QMediaPlayer::State state);
     void updateMediaStatus();
     void processEOS();
@@ -128,8 +125,6 @@ private Q_SLOTS:
     void handleResourcesDenied();
 
 private:
-    bool openFifo();
-    void closeFifo();
     void playOrPause(QMediaPlayer::State state);
 
     void pushState();
@@ -149,12 +144,6 @@ private:
     bool m_setMediaPending;
     QMediaContent m_currentResource;
     QIODevice *m_stream;
-    QSocketNotifier *m_fifoNotifier;
-    int m_fifoFd[2];
-    bool m_fifoCanWrite;
-    int m_bufferSize;
-    int m_bufferOffset;
-    char m_buffer[PIPE_BUF];
 
     QMediaPlayerResourceSetInterface *m_resources;
 };
index 59a039f..da2878a 100644 (file)
@@ -85,7 +85,11 @@ QMediaServiceProviderHint::Features QGstreamerPlayerServicePlugin::supportedFeat
         const QByteArray &service) const
 {
     if (service == Q_MEDIASERVICE_MEDIAPLAYER)
-        return QMediaServiceProviderHint::StreamPlayback | QMediaServiceProviderHint::VideoSurface;
+        return
+#ifdef HAVE_GST_APPSRC
+                QMediaServiceProviderHint::StreamPlayback |
+#endif
+                QMediaServiceProviderHint::VideoSurface;
     else
         return QMediaServiceProviderHint::Features();
 }