From 0c32433d8c742d2a52d44264c64faec2c7ac28f2 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 12 Aug 2019 05:30:06 +0300 Subject: android: Simplify thread RPC with Object::invokeMethod() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Niklas Söderlund Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 8 +------- src/android/camera_device.h | 4 +++- src/android/camera_proxy.cpp | 8 +++----- src/android/thread_rpc.cpp | 18 +----------------- src/android/thread_rpc.h | 15 --------------- 5 files changed, 8 insertions(+), 45 deletions(-) (limited to 'src/android') 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(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 &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 +#include + #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 message = - utils::make_unique(); - 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 -#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__ */ -- cgit v1.2.1