Deliver GStreamer signals through Qt event loop
Emitting a Qt signal directly from GLib callback causes issues to clients. Queue the GStreamer signal and forward it to as a Qt signal from a handler that is invoked via the Qt event loop. Task-number: QTBUG-24927 Change-Id: I3c91efcce1261caf7b643fbff10663e1b093f2a8 Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
aa291c55b4
commit
13025c05c7
@@ -98,17 +98,20 @@ private:
|
||||
void processMessage(GstMessage* message)
|
||||
{
|
||||
QGstreamerMessage msg(message);
|
||||
foreach (QGstreamerBusMessageFilter *filter, busFilters) {
|
||||
if (filter->processBusMessage(msg))
|
||||
break;
|
||||
}
|
||||
emit m_helper->message(msg);
|
||||
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)->processMessage(message);
|
||||
reinterpret_cast<QGstreamerBusHelperPrivate*>(data)->queueMessage(message);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -117,6 +120,16 @@ private:
|
||||
QGstreamerBusHelper* m_helper;
|
||||
QTimer* m_intervalTimer;
|
||||
|
||||
private slots:
|
||||
void doProcessMessage(const QGstreamerMessage& msg)
|
||||
{
|
||||
foreach (QGstreamerBusMessageFilter *filter, busFilters) {
|
||||
if (filter->processBusMessage(msg))
|
||||
break;
|
||||
}
|
||||
emit m_helper->message(msg);
|
||||
}
|
||||
|
||||
public:
|
||||
QMutex filterMutex;
|
||||
QList<QGstreamerSyncMessageFilter*> syncFilters;
|
||||
|
||||
Reference in New Issue
Block a user