Avoid string-based, dynamic lookup of signals
Qt5 has a new function QMetaMethod::fromSignal() for obtaining the meta-method that corresponds to a particular signal (member function). This also avoids calling the virtual metaObject() function to resolve the meta-method every time the signal is emitted; it is known at compile-time which class the signals are defined in, so it's safe to retain the meta-methods across calls. Change-Id: I47328ec2dfc335c570fb18bcd304a2ee405bfd6e Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
This commit is contained in:
@@ -774,16 +774,16 @@ bool CameraBinSession::processSyncMessage(const QGstreamerMessage &message)
|
||||
}
|
||||
gst_caps_unref(caps);
|
||||
|
||||
static int exposedSignalIndex = metaObject()->indexOfSignal("imageExposed(int)");
|
||||
metaObject()->method(exposedSignalIndex).invoke(this,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,m_requestId));
|
||||
static QMetaMethod exposedSignal = QMetaMethod::fromSignal(&CameraBinSession::imageExposed);
|
||||
exposedSignal.invoke(this,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,m_requestId));
|
||||
|
||||
static int signalIndex = metaObject()->indexOfSignal("imageCaptured(int,QImage)");
|
||||
metaObject()->method(signalIndex).invoke(this,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,m_requestId),
|
||||
Q_ARG(QImage,img));
|
||||
static QMetaMethod capturedSignal = QMetaMethod::fromSignal(&CameraBinSession::imageCaptured);
|
||||
capturedSignal.invoke(this,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,m_requestId),
|
||||
Q_ARG(QImage,img));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -443,16 +443,16 @@ static gboolean passImageFilter(GstElement *element,
|
||||
gst_caps_unref(caps);
|
||||
}
|
||||
|
||||
static int exposedSignalIndex = session->metaObject()->indexOfSignal("imageExposed(int)");
|
||||
session->metaObject()->method(exposedSignalIndex).invoke(session,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,session->m_imageRequestId));
|
||||
static QMetaMethod exposedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageExposed);
|
||||
exposedSignal.invoke(session,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,session->m_imageRequestId));
|
||||
|
||||
static int capturedSignalIndex = session->metaObject()->indexOfSignal("imageCaptured(int,QImage)");
|
||||
session->metaObject()->method(capturedSignalIndex).invoke(session,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,session->m_imageRequestId),
|
||||
Q_ARG(QImage,img));
|
||||
static QMetaMethod capturedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageCaptured);
|
||||
capturedSignal.invoke(session,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,session->m_imageRequestId),
|
||||
Q_ARG(QImage,img));
|
||||
|
||||
return TRUE;
|
||||
} else {
|
||||
@@ -477,11 +477,11 @@ static gboolean saveImageFilter(GstElement *element,
|
||||
f.write((const char *)buffer->data, buffer->size);
|
||||
f.close();
|
||||
|
||||
static int signalIndex = session->metaObject()->indexOfSignal("imageSaved(int,QString)");
|
||||
session->metaObject()->method(signalIndex).invoke(session,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,session->m_imageRequestId),
|
||||
Q_ARG(QString,fileName));
|
||||
static QMetaMethod savedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageSaved);
|
||||
savedSignal.invoke(session,
|
||||
Qt::QueuedConnection,
|
||||
Q_ARG(int,session->m_imageRequestId),
|
||||
Q_ARG(QString,fileName));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user