libcamera: signal: Support cross-thread signals

Allow signals to cross thread boundaries by posting them to the
recipient through messages instead of calling the slot directly when the
recipient lives in a different thread.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Laurent Pinchart
2019-07-10 14:47:30 +03:00
parent 01b930964a
commit cc3ae13d9e
5 changed files with 136 additions and 8 deletions
+14
View File
@@ -10,6 +10,7 @@
namespace libcamera {
class Object;
class SlotBase;
class Thread;
class Message
@@ -17,6 +18,7 @@ class Message
public:
enum Type {
None = 0,
SignalMessage = 1,
};
Message(Type type);
@@ -32,6 +34,18 @@ private:
Object *receiver_;
};
class SignalMessage : public Message
{
public:
SignalMessage(SlotBase *slot, void *pack)
: Message(Message::SignalMessage), slot_(slot), pack_(pack)
{
}
SlotBase *slot_;
void *pack_;
};
} /* namespace libcamera */
#endif /* __LIBCAMERA_MESSAGE_H__ */