Patch Detail
Show a patch.
GET /api/patches/2237/?format=api
{ "id": 2237, "url": "https://patchwork.libcamera.org/api/patches/2237/?format=api", "web_url": "https://patchwork.libcamera.org/patch/2237/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20191027203335.26888-7-jacopo@jmondi.org>", "date": "2019-10-27T20:33:35", "name": "[libcamera-devel,6/6] android: Replace ThreadRPC with blocking method call", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "57a9c6e34dc0850c975cda155e918a6a024b7819", "submitter": { "id": 3, "url": "https://patchwork.libcamera.org/api/people/3/?format=api", "name": "Jacopo Mondi", "email": "jacopo@jmondi.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/2237/mbox/", "series": [ { "id": 558, "url": "https://patchwork.libcamera.org/api/series/558/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=558", "date": "2019-10-27T20:33:29", "name": "Add support for blocking method invocation", "version": 1, "mbox": "https://patchwork.libcamera.org/series/558/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/2237/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/2237/checks/", "tags": {}, "headers": { "Return-Path": "<jacopo@jmondi.org>", "Received": [ "from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net\n\t[217.70.183.198])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D3AF16150A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 27 Oct 2019 21:31:50 +0100 (CET)", "from uno.localdomain (143.121.2.93.rev.sfr.net [93.2.121.143])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 84EB1C0007;\n\tSun, 27 Oct 2019 20:31:50 +0000 (UTC)" ], "X-Originating-IP": "93.2.121.143", "From": "Jacopo Mondi <jacopo@jmondi.org>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Sun, 27 Oct 2019 21:33:35 +0100", "Message-Id": "<20191027203335.26888-7-jacopo@jmondi.org>", "X-Mailer": "git-send-email 2.23.0", "In-Reply-To": "<20191027203335.26888-1-jacopo@jmondi.org>", "References": "<20191027203335.26888-1-jacopo@jmondi.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH 6/6] android: Replace ThreadRPC with\n\tblocking method call", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "X-List-Received-Date": "Sun, 27 Oct 2019 20:31:51 -0000" }, "content": "Use the newly introduced InvocationTypeBlocking message type to replace\nthe blocking message delivery implemented with the ThreadRPC class in the\nAndroid camera HAL.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/android/camera_device.cpp | 34 ++++++------------------------\n src/android/camera_device.h | 5 +----\n src/android/camera_proxy.cpp | 21 ++++---------------\n src/android/camera_proxy.h | 3 ---\n src/android/meson.build | 1 -\n src/android/thread_rpc.cpp | 26 -----------------------\n src/android/thread_rpc.h | 39 -----------------------------------\n 7 files changed, 11 insertions(+), 118 deletions(-)\n delete mode 100644 src/android/thread_rpc.cpp\n delete mode 100644 src/android/thread_rpc.h", "diff": "diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex c7c9b3fd1724..897f545864a9 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -11,7 +11,6 @@\n #include \"utils.h\"\n \n #include \"camera_metadata.h\"\n-#include \"thread_rpc.h\"\n \n using namespace libcamera;\n \n@@ -64,25 +63,6 @@ CameraDevice::~CameraDevice()\n \t\tdelete it.second;\n }\n \n-/*\n- * Handle RPC request received from the associated proxy.\n- */\n-void CameraDevice::call(ThreadRpc *rpc)\n-{\n-\tswitch (rpc->tag) {\n-\tcase ThreadRpc::ProcessCaptureRequest:\n-\t\tprocessCaptureRequest(rpc->request);\n-\t\tbreak;\n-\tcase ThreadRpc::Close:\n-\t\tclose();\n-\t\tbreak;\n-\tdefault:\n-\t\tLOG(HAL, Error) << \"Unknown RPC operation: \" << rpc->tag;\n-\t}\n-\n-\trpc->notifyReception();\n-}\n-\n int CameraDevice::open()\n {\n \tint ret = camera_->acquire();\n@@ -698,7 +678,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n \treturn 0;\n }\n \n-int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Request)\n+void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Request)\n {\n \tStreamConfiguration *streamConfiguration = &config_->at(0);\n \tStream *stream = streamConfiguration->stream();\n@@ -706,7 +686,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n \tif (camera3Request->num_output_buffers != 1) {\n \t\tLOG(HAL, Error) << \"Invalid number of output buffers: \"\n \t\t\t\t<< camera3Request->num_output_buffers;\n-\t\treturn -EINVAL;\n+\t\treturn;\n \t}\n \n \t/* Start the camera if that's the first request we handle. */\n@@ -714,14 +694,14 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n \t\tint ret = camera_->allocateBuffers();\n \t\tif (ret) {\n \t\t\tLOG(HAL, Error) << \"Failed to allocate buffers\";\n-\t\t\treturn ret;\n+\t\t\treturn;\n \t\t}\n \n \t\tret = camera_->start();\n \t\tif (ret) {\n \t\t\tLOG(HAL, Error) << \"Failed to start camera\";\n \t\t\tcamera_->freeBuffers();\n-\t\t\treturn ret;\n+\t\t\treturn;\n \t\t}\n \n \t\trunning_ = true;\n@@ -769,7 +749,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n \tif (!buffer) {\n \t\tLOG(HAL, Error) << \"Failed to create buffer\";\n \t\tdelete descriptor;\n-\t\treturn -EINVAL;\n+\t\treturn;\n \t}\n \n \tRequest *request =\n@@ -782,13 +762,11 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n \t\tgoto error;\n \t}\n \n-\treturn 0;\n+\treturn;\n \n error:\n \tdelete request;\n \tdelete descriptor;\n-\n-\treturn ret;\n }\n \n void CameraDevice::requestComplete(Request *request,\ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex d5d136a74f4a..2105b5b9a1e7 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -20,7 +20,6 @@\n #include \"message.h\"\n \n class CameraMetadata;\n-class ThreadRpc;\n \n class CameraDevice : public libcamera::Object\n {\n@@ -28,15 +27,13 @@ public:\n \tCameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);\n \t~CameraDevice();\n \n-\tvoid call(ThreadRpc *rpc);\n-\n \tint open();\n \tvoid close();\n \tvoid setCallbacks(const camera3_callback_ops_t *callbacks);\n \tcamera_metadata_t *getStaticMetadata();\n \tconst camera_metadata_t *constructDefaultRequestSettings(int type);\n \tint configureStreams(camera3_stream_configuration_t *stream_list);\n-\tint processCaptureRequest(camera3_capture_request_t *request);\n+\tvoid processCaptureRequest(camera3_capture_request_t *request);\n \tvoid requestComplete(libcamera::Request *request,\n \t\t\t const std::map<libcamera::Stream *, libcamera::Buffer *> &buffers);\n \ndiff --git a/src/android/camera_proxy.cpp b/src/android/camera_proxy.cpp\nindex 5f8428cfddfb..a48d8d265328 100644\n--- a/src/android/camera_proxy.cpp\n+++ b/src/android/camera_proxy.cpp\n@@ -16,7 +16,6 @@\n #include \"utils.h\"\n \n #include \"camera_device.h\"\n-#include \"thread_rpc.h\"\n \n using namespace libcamera;\n \n@@ -148,10 +147,8 @@ int CameraProxy::open(const hw_module_t *hardwareModule)\n \n void CameraProxy::close()\n {\n-\tThreadRpc rpcRequest;\n-\trpcRequest.tag = ThreadRpc::Close;\n-\n-\tthreadRpcCall(rpcRequest);\n+\tcameraDevice_->invokeMethod(&CameraDevice::close,\n+\t\t\t\t InvocationTypeBlocking);\n }\n \n void CameraProxy::initialize(const camera3_callback_ops_t *callbacks)\n@@ -176,18 +173,8 @@ int CameraProxy::configureStreams(camera3_stream_configuration_t *stream_list)\n \n int CameraProxy::processCaptureRequest(camera3_capture_request_t *request)\n {\n-\tThreadRpc rpcRequest;\n-\trpcRequest.tag = ThreadRpc::ProcessCaptureRequest;\n-\trpcRequest.request = request;\n-\n-\tthreadRpcCall(rpcRequest);\n+\tcameraDevice_->invokeMethod(&CameraDevice::processCaptureRequest,\n+\t\t\t\t InvocationTypeBlocking, request);\n \n \treturn 0;\n }\n-\n-void CameraProxy::threadRpcCall(ThreadRpc &rpcRequest)\n-{\n-\tcameraDevice_->invokeMethod(&CameraDevice::call, InvocationTypeQueued,\n-\t\t\t\t &rpcRequest);\n-\trpcRequest.waitDelivery();\n-}\ndiff --git a/src/android/camera_proxy.h b/src/android/camera_proxy.h\nindex 7940eac4e376..e8cfbc9dd526 100644\n--- a/src/android/camera_proxy.h\n+++ b/src/android/camera_proxy.h\n@@ -14,7 +14,6 @@\n #include <libcamera/camera.h>\n \n class CameraDevice;\n-class ThreadRpc;\n \n class CameraProxy\n {\n@@ -35,8 +34,6 @@ public:\n \tcamera3_device_t *camera3Device() { return &camera3Device_; }\n \n private:\n-\tvoid threadRpcCall(ThreadRpc &rpcRequest);\n-\n \tunsigned int id_;\n \tCameraDevice *cameraDevice_;\n \tcamera3_device_t camera3Device_;\ndiff --git a/src/android/meson.build b/src/android/meson.build\nindex b5e4eeeb73a8..70dfcc1df27a 100644\n--- a/src/android/meson.build\n+++ b/src/android/meson.build\n@@ -4,7 +4,6 @@ android_hal_sources = files([\n 'camera_device.cpp',\n 'camera_metadata.cpp',\n 'camera_proxy.cpp',\n- 'thread_rpc.cpp'\n ])\n \n android_camera_metadata_sources = files([\ndiff --git a/src/android/thread_rpc.cpp b/src/android/thread_rpc.cpp\ndeleted file mode 100644\nindex f57891ff56bf..000000000000\n--- a/src/android/thread_rpc.cpp\n+++ /dev/null\n@@ -1,26 +0,0 @@\n-/* SPDX-License-Identifier: LGPL-2.1-or-later */\n-/*\n- * Copyright (C) 2019, Google Inc.\n- *\n- * thread_rpc.cpp - Inter-thread procedure call\n- */\n-\n-#include \"thread.h\"\n-#include \"thread_rpc.h\"\n-\n-using namespace libcamera;\n-\n-void ThreadRpc::notifyReception()\n-{\n-\t{\n-\t\tlibcamera::MutexLocker locker(mutex_);\n-\t\tdelivered_ = true;\n-\t}\n-\tcv_.notify_one();\n-}\n-\n-void ThreadRpc::waitDelivery()\n-{\n-\tlibcamera::MutexLocker locker(mutex_);\n-\tcv_.wait(locker, [&] { return delivered_; });\n-}\ndiff --git a/src/android/thread_rpc.h b/src/android/thread_rpc.h\ndeleted file mode 100644\nindex f577a5d9fb32..000000000000\n--- a/src/android/thread_rpc.h\n+++ /dev/null\n@@ -1,39 +0,0 @@\n-/* SPDX-License-Identifier: LGPL-2.1-or-later */\n-/*\n- * Copyright (C) 2019, Google Inc.\n- *\n- * thread_rpc.h - Inter-thread procedure call\n- */\n-#ifndef __ANDROID_THREAD_RPC_H__\n-#define __ANDROID_THREAD_RPC_H__\n-\n-#include <condition_variable>\n-#include <mutex>\n-\n-#include <hardware/camera3.h>\n-\n-class ThreadRpc\n-{\n-public:\n-\tenum RpcTag {\n-\t\tProcessCaptureRequest,\n-\t\tClose,\n-\t};\n-\n-\tThreadRpc()\n-\t\t: delivered_(false) {}\n-\n-\tvoid notifyReception();\n-\tvoid waitDelivery();\n-\n-\tRpcTag tag;\n-\n-\tcamera3_capture_request_t *request;\n-\n-private:\n-\tbool delivered_;\n-\tstd::mutex mutex_;\n-\tstd::condition_variable cv_;\n-};\n-\n-#endif /* __ANDROID_THREAD_RPC_H__ */\n", "prefixes": [ "libcamera-devel", "6/6" ] }