libcamera: object: Add connection type parameter to invokeMethod()

Allow specifying a different connection type than ConnectionTypeQueued
for Object::invokeMethod().

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Jacopo Mondi
2019-10-29 16:44:46 +02:00
committed by Laurent Pinchart
parent 06008b9156
commit fb1a5c0416
6 changed files with 21 additions and 16 deletions
+2 -1
View File
@@ -187,6 +187,7 @@ int CameraProxy::processCaptureRequest(camera3_capture_request_t *request)
void CameraProxy::threadRpcCall(ThreadRpc &rpcRequest)
{
cameraDevice_->invokeMethod(&CameraDevice::call, &rpcRequest);
cameraDevice_->invokeMethod(&CameraDevice::call, ConnectionTypeQueued,
&rpcRequest);
rpcRequest.waitDelivery();
}
+2 -1
View File
@@ -128,7 +128,8 @@ void EventNotifier::message(Message *msg)
if (msg->type() == Message::ThreadMoveMessage) {
if (enabled_) {
setEnabled(false);
invokeMethod(&EventNotifier::setEnabled, true);
invokeMethod(&EventNotifier::setEnabled,
ConnectionTypeQueued, true);
}
}
+5 -4
View File
@@ -139,14 +139,15 @@ void Object::message(Message *msg)
}
/**
* \fn void Object::invokeMethod(void (T::*func)(Args...), Args... args)
* \fn void Object::invokeMethod()
* \brief Invoke a method asynchronously on an Object instance
* \param[in] func The object method to invoke
* \param[in] type Connection type for method invocation
* \param[in] args The method arguments
*
* This method invokes the member method \a func when control returns to the
* event loop of the object's thread. The method is executed in the object's
* thread with arguments \a args.
* This method invokes the member method \a func with arguments \a args, based
* on the connection \a type. Depending on the type, the method will be called
* synchronously in the same thread or asynchronously in the object's thread.
*
* Arguments \a args passed by value or reference are copied, while pointers
* are passed untouched. The caller shall ensure that any pointer argument
+2 -1
View File
@@ -170,7 +170,8 @@ void Timer::message(Message *msg)
if (msg->type() == Message::ThreadMoveMessage) {
if (isRunning()) {
unregisterTimer();
invokeMethod(&Timer::registerTimer);
invokeMethod(&Timer::registerTimer,
ConnectionTypeQueued);
}
}