SVN commit 762639 by jbache: This fixes hasVideoChanged not beeing emitted correctly for multiple media objects in the same process. M +7 -7 mediaobject.cpp M +1 -0 mediaobject.h --- trunk/kdereview/phonon/gstreamer/mediaobject.cpp #762638:762639 @@ -62,6 +62,7 @@ , m_totalTime(-1) , m_bufferPercent(0) , m_hasVideo(false) + , m_videoStreamFound(false) , m_hasAudio(false) , m_seekable(false) , m_error(Phonon::NoError) @@ -222,7 +223,7 @@ if (addToPipeline(m_videoGraph)) { GstPad *videopad = gst_element_get_pad (m_videoGraph, "sink"); if (!GST_PAD_IS_LINKED (videopad) && (gst_pad_link (pad, videopad) == GST_PAD_LINK_OK)) { - m_hasVideo = true; + m_videoStreamFound = true; m_backend->logMessage("Video track connected"); // Note that the notify::caps _must_ be installed after linking to work with Dapper m_capsHandler = g_signal_connect(pad, "notify::caps", G_CALLBACK(notifyVideoCaps), this); @@ -678,7 +679,7 @@ m_aboutToFinishEmitted = false; m_source = source; m_hasAudio = false; - m_hasVideo = false; + m_videoStreamFound = false; setTotalTime(-1); // Clear exising meta tags @@ -740,7 +741,7 @@ // Called when we are ready to leave the loading state void MediaObject::loadingComplete() { - if (m_hasVideo) { + if (m_videoStreamFound) { MediaNodeEvent event(MediaNodeEvent::VideoAvailable); notify(&event); } @@ -754,9 +755,8 @@ updateSeekable(); updateTotalTime(); - static bool hasVideo = false; - if (hasVideo != m_hasVideo) { - hasVideo = m_hasVideo; + if (m_videoStreamFound != m_hasVideo) { + m_hasVideo = m_videoStreamFound; emit hasVideoChanged(m_hasVideo); } } @@ -985,7 +985,7 @@ if (state() == Phonon::LoadingState) { // If we have video, wait for setVideoCaps // otherwise we are already done. - if (!m_hasVideo) { + if (!m_videoStreamFound) { loadingComplete(); } --- trunk/kdereview/phonon/gstreamer/mediaobject.h #762638:762639 @@ -222,6 +222,7 @@ qint64 m_totalTime; int m_bufferPercent; bool m_hasVideo; + bool m_videoStreamFound; bool m_hasAudio; bool m_seekable; Phonon::ErrorType m_error;