summaryrefslogtreecommitdiff
path: root/src/android/thread_rpc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/thread_rpc.cpp')
-rw-r--r--src/android/thread_rpc.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/android/thread_rpc.cpp b/src/android/thread_rpc.cpp
new file mode 100644
index 00000000..295a05d7
--- /dev/null
+++ b/src/android/thread_rpc.cpp
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * thread_rpc.cpp - Inter-thread procedure call
+ */
+
+#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()
+{
+ {
+ libcamera::MutexLocker locker(mutex_);
+ delivered_ = true;
+ }
+ cv_.notify_one();
+}
+
+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_;
+}