summaryrefslogtreecommitdiff
path: root/src/qcam/qt_event_dispatcher.h
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-03-23 03:24:25 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-03-29 17:09:46 +0200
commit97e8b3a2eb321884fe1e15fb584f41a38cc33d51 (patch)
tree3ed93b2504e4fcdc3511bcf956f43ad84a558d0f /src/qcam/qt_event_dispatcher.h
parentffef90a1c1f1990581d8fbc22193bfc766d23d3b (diff)
qcam: Add Qt-based GUI application
qcam is a sample camera GUI application based on Qt. It demonstrates integration of the Qt event loop with libcamera. The application lets the user select a camera through the GUI, and then captures a single stream from the camera and displays it in a window. Only streams in YUYV formats are supported for now. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/qcam/qt_event_dispatcher.h')
-rw-r--r--src/qcam/qt_event_dispatcher.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/qcam/qt_event_dispatcher.h b/src/qcam/qt_event_dispatcher.h
new file mode 100644
index 00000000..b0f123e5
--- /dev/null
+++ b/src/qcam/qt_event_dispatcher.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * qt_event_dispatcher.h - qcam - Qt-based event dispatcher
+ */
+#ifndef __QCAM_QT_EVENT_DISPATCHER_H__
+#define __QCAM_QT_EVENT_DISPATCHER_H__
+
+#include <map>
+
+#include <libcamera/event_dispatcher.h>
+
+using namespace libcamera;
+
+class QSocketNotifier;
+
+class QtEventDispatcher final : public EventDispatcher, public QObject
+{
+public:
+ QtEventDispatcher();
+ ~QtEventDispatcher();
+
+ void registerEventNotifier(EventNotifier *notifier);
+ void unregisterEventNotifier(EventNotifier *notifier);
+
+ void registerTimer(Timer *timer);
+ void unregisterTimer(Timer *timer);
+
+ void processEvents();
+
+ void interrupt();
+
+protected:
+ void timerEvent(QTimerEvent *event);
+
+private:
+ void readNotifierActivated(int socket);
+ void writeNotifierActivated(int socket);
+ void exceptionNotifierActivated(int socket);
+
+ struct NotifierPair {
+ NotifierPair()
+ : notifier(nullptr), qnotifier(nullptr)
+ {
+ }
+ EventNotifier *notifier;
+ QSocketNotifier *qnotifier;
+ };
+
+ struct NotifierSet {
+ NotifierPair read;
+ NotifierPair write;
+ NotifierPair exception;
+ };
+
+ std::map<int, NotifierSet> notifiers_;
+ std::map<int, Timer *> timers_;
+ std::map<Timer *, int> timerIds_;
+};
+
+#endif /* __QCAM_QT_EVENT_DISPATCHER_H__ */