summaryrefslogtreecommitdiffstats
path: root/src/gsttools/qgstreamerbushelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gsttools/qgstreamerbushelper.cpp')
-rw-r--r--src/gsttools/qgstreamerbushelper.cpp216
1 files changed, 0 insertions, 216 deletions
diff --git a/src/gsttools/qgstreamerbushelper.cpp b/src/gsttools/qgstreamerbushelper.cpp
deleted file mode 100644
index 1a4034eee..000000000
--- a/src/gsttools/qgstreamerbushelper.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qmap.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qmutex.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qabstracteventdispatcher.h>
-#include <QtCore/qcoreapplication.h>
-
-#include "qgstreamerbushelper_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-class QGstreamerBusHelperPrivate : public QObject
-{
- Q_OBJECT
-public:
- QGstreamerBusHelperPrivate(QGstreamerBusHelper *parent, GstBus* bus) :
- QObject(parent),
- m_tag(0),
- m_bus(bus),
- m_helper(parent),
- m_intervalTimer(nullptr)
- {
- // glib event loop can be disabled either by env variable or QT_NO_GLIB define, so check the dispacher
- QAbstractEventDispatcher *dispatcher = QCoreApplication::eventDispatcher();
- const bool hasGlib = dispatcher && dispatcher->inherits("QEventDispatcherGlib");
- if (!hasGlib) {
- m_intervalTimer = new QTimer(this);
- m_intervalTimer->setInterval(250);
- connect(m_intervalTimer, SIGNAL(timeout()), SLOT(interval()));
- m_intervalTimer->start();
- } else {
- m_tag = gst_bus_add_watch_full(bus, G_PRIORITY_DEFAULT, busCallback, this, nullptr);
- }
- }
-
- ~QGstreamerBusHelperPrivate()
- {
- m_helper = 0;
- delete m_intervalTimer;
-
- if (m_tag)
-#if GST_CHECK_VERSION(1, 6, 0)
- gst_bus_remove_watch(m_bus);
-#else
- g_source_remove(m_tag);
-#endif
- }
-
- GstBus* bus() const { return m_bus; }
-
-private slots:
- void interval()
- {
- GstMessage* message;
- while ((message = gst_bus_poll(m_bus, GST_MESSAGE_ANY, 0)) != 0) {
- processMessage(message);
- gst_message_unref(message);
- }
- }
-
-private:
- void processMessage(GstMessage* message)
- {
- QGstreamerMessage msg(message);
- doProcessMessage(msg);
- }
-
- void queueMessage(GstMessage* message)
- {
- QGstreamerMessage msg(message);
- QMetaObject::invokeMethod(this, "doProcessMessage", Qt::QueuedConnection,
- Q_ARG(QGstreamerMessage, msg));
- }
-
- static gboolean busCallback(GstBus *bus, GstMessage *message, gpointer data)
- {
- Q_UNUSED(bus);
- reinterpret_cast<QGstreamerBusHelperPrivate*>(data)->queueMessage(message);
- return TRUE;
- }
-
- guint m_tag;
- GstBus* m_bus;
- QGstreamerBusHelper* m_helper;
- QTimer* m_intervalTimer;
-
-private slots:
- void doProcessMessage(const QGstreamerMessage& msg)
- {
- for (QGstreamerBusMessageFilter *filter : qAsConst(busFilters)) {
- if (filter->processBusMessage(msg))
- break;
- }
- emit m_helper->message(msg);
- }
-
-public:
- QMutex filterMutex;
- QList<QGstreamerSyncMessageFilter*> syncFilters;
- QList<QGstreamerBusMessageFilter*> busFilters;
-};
-
-
-static GstBusSyncReply syncGstBusFilter(GstBus* bus, GstMessage* message, QGstreamerBusHelperPrivate *d)
-{
- Q_UNUSED(bus);
- QMutexLocker lock(&d->filterMutex);
-
- for (QGstreamerSyncMessageFilter *filter : qAsConst(d->syncFilters)) {
- if (filter->processSyncMessage(QGstreamerMessage(message))) {
- gst_message_unref(message);
- return GST_BUS_DROP;
- }
- }
-
- return GST_BUS_PASS;
-}
-
-
-/*!
- \class QGstreamerBusHelper
- \internal
-*/
-
-QGstreamerBusHelper::QGstreamerBusHelper(GstBus* bus, QObject* parent):
- QObject(parent)
-{
- d = new QGstreamerBusHelperPrivate(this, bus);
-#if GST_CHECK_VERSION(1,0,0)
- gst_bus_set_sync_handler(bus, (GstBusSyncHandler)syncGstBusFilter, d, 0);
-#else
- gst_bus_set_sync_handler(bus, (GstBusSyncHandler)syncGstBusFilter, d);
-#endif
- gst_object_ref(GST_OBJECT(bus));
-}
-
-QGstreamerBusHelper::~QGstreamerBusHelper()
-{
-#if GST_CHECK_VERSION(1,0,0)
- gst_bus_set_sync_handler(d->bus(), 0, 0, 0);
-#else
- gst_bus_set_sync_handler(d->bus(),0,0);
-#endif
- gst_object_unref(GST_OBJECT(d->bus()));
-}
-
-void QGstreamerBusHelper::installMessageFilter(QObject *filter)
-{
- auto syncFilter = qobject_cast<QGstreamerSyncMessageFilter*>(filter);
- if (syncFilter) {
- QMutexLocker lock(&d->filterMutex);
- if (!d->syncFilters.contains(syncFilter))
- d->syncFilters.append(syncFilter);
- }
-
- auto busFilter = qobject_cast<QGstreamerBusMessageFilter*>(filter);
- if (busFilter && !d->busFilters.contains(busFilter))
- d->busFilters.append(busFilter);
-}
-
-void QGstreamerBusHelper::removeMessageFilter(QObject *filter)
-{
- auto syncFilter = qobject_cast<QGstreamerSyncMessageFilter*>(filter);
- if (syncFilter) {
- QMutexLocker lock(&d->filterMutex);
- d->syncFilters.removeAll(syncFilter);
- }
-
- auto busFilter = qobject_cast<QGstreamerBusMessageFilter*>(filter);
- if (busFilter)
- d->busFilters.removeAll(busFilter);
-}
-
-QT_END_NAMESPACE
-
-#include "qgstreamerbushelper.moc"