summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-08-12 05:30:06 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-08-19 18:07:28 +0300
commit0c32433d8c742d2a52d44264c64faec2c7ac28f2 (patch)
tree2d38c176392f38b9e31f7d48a5ad1be26f628a79
parent778f6b1d7070ddc5b920764d5233e318b15ccf12 (diff)
android: Simplify thread RPC with Object::invokeMethod()
Replace the manual implementation of asynchronous method invocation through a custom message with Object::invokeMethod(). This simplifies the thread RPC implementation. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--src/android/camera_device.cpp8
-rw-r--r--src/android/camera_device.h4
-rw-r--r--src/android/camera_proxy.cpp8
-rw-r--r--src/android/thread_rpc.cpp18
-rw-r--r--src/android/thread_rpc.h15
5 files changed, 8 insertions, 45 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index e2c1f2a2..999c51e6 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -70,14 +70,8 @@ CameraDevice::~CameraDevice()
/*
* Handle RPC request received from the associated proxy.
*/
-void CameraDevice::message(Message *message)
+void CameraDevice::call(ThreadRpc *rpc)
{
- if (message->type() != ThreadRpcMessage::type())
- return Object::message(message);
-
- ThreadRpcMessage *rpcMessage = static_cast<ThreadRpcMessage *>(message);
- ThreadRpc *rpc = rpcMessage->rpc;
-
switch (rpc->tag) {
case ThreadRpc::ProcessCaptureRequest:
processCaptureRequest(rpc->request);
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index ac5b95c9..4d834ceb 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -26,13 +26,15 @@
return nullptr; \
} while(0);
+class ThreadRpc;
+
class CameraDevice : public libcamera::Object
{
public:
CameraDevice(unsigned int id, std::shared_ptr<libcamera::Camera> &camera);
~CameraDevice();
- void message(libcamera::Message *message);
+ void call(ThreadRpc *rpc);
int open();
void close();
diff --git a/src/android/camera_proxy.cpp b/src/android/camera_proxy.cpp
index f0cacac8..3eb2f9fb 100644
--- a/src/android/camera_proxy.cpp
+++ b/src/android/camera_proxy.cpp
@@ -9,6 +9,8 @@
#include <system/camera_metadata.h>
+#include <libcamera/object.h>
+
#include "log.h"
#include "message.h"
#include "utils.h"
@@ -185,10 +187,6 @@ int CameraProxy::processCaptureRequest(camera3_capture_request_t *request)
void CameraProxy::threadRpcCall(ThreadRpc &rpcRequest)
{
- std::unique_ptr<ThreadRpcMessage> message =
- utils::make_unique<ThreadRpcMessage>();
- message->rpc = &rpcRequest;
-
- cameraDevice_->postMessage(std::move(message));
+ cameraDevice_->invokeMethod(&CameraDevice::call, &rpcRequest);
rpcRequest.waitDelivery();
}
diff --git a/src/android/thread_rpc.cpp b/src/android/thread_rpc.cpp
index 295a05d7..f57891ff 100644
--- a/src/android/thread_rpc.cpp
+++ b/src/android/thread_rpc.cpp
@@ -5,19 +5,11 @@
* thread_rpc.cpp - Inter-thread procedure call
*/
+#include "thread.h"
#include "thread_rpc.h"
-#include "message.h"
-
using namespace libcamera;
-libcamera::Message::Type ThreadRpcMessage::rpcType_ = Message::Type::None;
-
-ThreadRpcMessage::ThreadRpcMessage()
- : Message(type())
-{
-}
-
void ThreadRpc::notifyReception()
{
{
@@ -32,11 +24,3 @@ void ThreadRpc::waitDelivery()
libcamera::MutexLocker locker(mutex_);
cv_.wait(locker, [&] { return delivered_; });
}
-
-Message::Type ThreadRpcMessage::type()
-{
- if (ThreadRpcMessage::rpcType_ == Message::Type::None)
- rpcType_ = Message::registerMessageType();
-
- return rpcType_;
-}
diff --git a/src/android/thread_rpc.h b/src/android/thread_rpc.h
index 6d899283..f577a5d9 100644
--- a/src/android/thread_rpc.h
+++ b/src/android/thread_rpc.h
@@ -12,9 +12,6 @@
#include <hardware/camera3.h>
-#include "message.h"
-#include "thread.h"
-
class ThreadRpc
{
public:
@@ -39,16 +36,4 @@ private:
std::condition_variable cv_;
};
-class ThreadRpcMessage : public libcamera::Message
-{
-public:
- ThreadRpcMessage();
- ThreadRpc *rpc;
-
- static Message::Type type();
-
-private:
- static libcamera::Message::Type rpcType_;
-};
-
#endif /* __ANDROID_THREAD_RPC_H__ */