From patchwork Mon Aug 12 15:02:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1798 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EFD9F6161B for ; Mon, 12 Aug 2019 17:02:38 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 5A729327 for ; Mon, 12 Aug 2019 17:02:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1565622158; bh=nsEYxgUZcKHmEuMpI1yMgZhSeBgQxqO/fdfkFolYraI=; h=From:To:Subject:Date:From; b=U7CpCEuVJNywV9emjRh0Z+WjbA7W0xhTKl2frTTseIs1hxPrlNbGxo4sYatMw/NmN 4yybdgF7JjNNT4jw97hzi3HX8d8x3EKhOxdQ5cbplLTGeMKD8Y06bVof+yerJhYgib vp/h2r3npZZITnFGLcaysCrWSAW2UPKKgA20bA+c= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Mon, 12 Aug 2019 18:02:32 +0300 Message-Id: <20190812150232.1088-1-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] hal: Simplify thread RPC with Object::invokeMethod() X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Aug 2019 15:02:39 -0000 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 --- This patch applies on top of the "[PATCH 00/18] Object & Thread enhancements" series. 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(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index e2c1f2a246c8..999c51e6ba4a 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 ac5b95c95104..4d834ceb08a5 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 f0cacac8025b..3eb2f9fbcffb 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 295a05d7c676..f57891ff56bf 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 6d8992839d0b..f577a5d9fb32 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__ */