summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
diff options
context:
space:
mode:
authorLev Zelenskiy <lev.zelenskiy@nokia.com>2012-03-28 15:12:04 +1000
committerQt by Nokia <qt-info@nokia.com>2012-03-28 08:09:58 +0200
commitd8b688f8af218b0135cf19986729f1f237e821f3 (patch)
tree47baaa4aa933688fe34d963958567720dc83b385 /src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
parentff3595f07fc388dcc2dcadab313451752bf7a122 (diff)
Fixed: Streams information is not updated properly for RTSP streams.
Changes to QGstreamerPlayerSession: Handle video-changed, audio-changed, and text-changed signals. Call getStreamsInfo() to update streams information. Change-Id: I8bfead3268771245635424b5f1debff624bbe038 Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com> Reviewed-by: Ling Hu <ling.hu@nokia.com> Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Diffstat (limited to 'src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp')
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index 785de969a..cb8f6f227 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -189,6 +189,10 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
g_signal_connect(G_OBJECT(m_playbin), "notify::volume", G_CALLBACK(handleVolumeChange), this);
if (m_usePlaybin2)
g_signal_connect(G_OBJECT(m_playbin), "notify::mute", G_CALLBACK(handleMutedChange), this);
+
+ g_signal_connect(G_OBJECT(m_playbin), "video-changed", G_CALLBACK(handleStreamsChange), this);
+ g_signal_connect(G_OBJECT(m_playbin), "audio-changed", G_CALLBACK(handleStreamsChange), this);
+ g_signal_connect(G_OBJECT(m_playbin), "text-changed", G_CALLBACK(handleStreamsChange), this);
}
}
@@ -1248,11 +1252,16 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
void QGstreamerPlayerSession::getStreamsInfo()
{
+ QList< QMap<QString,QVariant> > oldProperties = m_streamProperties;
+ QList<QMediaStreamsControl::StreamType> oldTypes = m_streamTypes;
+ QMap<QMediaStreamsControl::StreamType, int> oldOffset = m_playbin2StreamOffset;
+
//check if video is available:
bool haveAudio = false;
bool haveVideo = false;
m_streamProperties.clear();
m_streamTypes.clear();
+ m_playbin2StreamOffset.clear();
if (m_usePlaybin2) {
gint audioStreamsCount = 0;
@@ -1383,7 +1392,8 @@ void QGstreamerPlayerSession::getStreamsInfo()
emit videoAvailableChanged(m_videoAvailable);
}
- emit streamsChanged();
+ if (oldProperties != m_streamProperties || oldTypes != m_streamTypes || oldOffset != m_playbin2StreamOffset)
+ emit streamsChanged();
}
void QGstreamerPlayerSession::updateVideoResolutionTag()
@@ -1656,6 +1666,14 @@ void QGstreamerPlayerSession::handleElementAdded(GstBin *bin, GstElement *elemen
g_free(elementName);
}
+void QGstreamerPlayerSession::handleStreamsChange(GstBin *bin, gpointer user_data)
+{
+ Q_UNUSED(bin);
+
+ QGstreamerPlayerSession* session = reinterpret_cast<QGstreamerPlayerSession*>(user_data);
+ QMetaObject::invokeMethod(session, "getStreamsInfo", Qt::QueuedConnection);
+}
+
//doing proper operations when detecting an invalidMedia: change media status before signal the erorr
void QGstreamerPlayerSession::processInvalidMedia(QMediaPlayer::Error errorCode, const QString& errorString)
{