diff options
Diffstat (limited to 'src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp')
-rw-r--r-- | src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp index c08032f66..f660cef7b 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp @@ -64,6 +64,8 @@ #endif #include "qgstreamerstreamscontrol.h" +#include "qgstreameraudioprobecontrol.h" +#include "qgstreamervideoprobecontrol.h" #include <qmediaplaylistnavigator.h> #include <qmediaplaylist.h> @@ -115,6 +117,24 @@ QMediaControl *QGstreamerPlayerService::requestControl(const char *name) if (qstrcmp(name,QMediaStreamsControl_iid) == 0) return m_streamsControl; + if (qstrcmp(name,QMediaVideoProbeControl_iid) == 0) { + if (m_session) { + QGstreamerVideoProbeControl *probe = new QGstreamerVideoProbeControl(this); + m_session->addProbe(probe); + return probe; + } + return 0; + } + + if (qstrcmp(name,QMediaAudioProbeControl_iid) == 0) { + if (m_session) { + QGstreamerAudioProbeControl *probe = new QGstreamerAudioProbeControl(this); + m_session->addProbe(probe); + return probe; + } + return 0; + } + if (!m_videoOutput) { if (qstrcmp(name, QVideoRendererControl_iid) == 0) m_videoOutput = m_videoRenderer; @@ -140,6 +160,22 @@ void QGstreamerPlayerService::releaseControl(QMediaControl *control) m_videoOutput = 0; m_control->setVideoOutput(0); } + + QGstreamerVideoProbeControl* videoProbe = qobject_cast<QGstreamerVideoProbeControl*>(control); + if (videoProbe) { + if (m_session) + m_session->removeProbe(videoProbe); + delete videoProbe; + return; + } + + QGstreamerAudioProbeControl* audioProbe = qobject_cast<QGstreamerAudioProbeControl*>(control); + if (audioProbe) { + if (m_session) + m_session->removeProbe(audioProbe); + delete audioProbe; + return; + } } QT_END_NAMESPACE |