summaryrefslogtreecommitdiff
path: root/src/cam/event_loop.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cam/event_loop.cpp')
-rw-r--r--src/cam/event_loop.cpp34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/cam/event_loop.cpp b/src/cam/event_loop.cpp
index e8ab8617..13f2583d 100644
--- a/src/cam/event_loop.cpp
+++ b/src/cam/event_loop.cpp
@@ -5,19 +5,34 @@
* event_loop.cpp - cam - Event loop
*/
-#include <libcamera/event_dispatcher.h>
-
#include "event_loop.h"
-using namespace libcamera;
+#include <assert.h>
+#include <event2/event.h>
+#include <event2/thread.h>
+
+EventLoop *EventLoop::instance_ = nullptr;
-EventLoop::EventLoop(EventDispatcher *dispatcher)
- : dispatcher_(dispatcher)
+EventLoop::EventLoop()
{
+ assert(!instance_);
+
+ evthread_use_pthreads();
+ event_ = event_base_new();
+ instance_ = this;
}
EventLoop::~EventLoop()
{
+ instance_ = nullptr;
+
+ event_base_free(event_);
+ libevent_global_shutdown();
+}
+
+EventLoop *EventLoop::instance()
+{
+ return instance_;
}
int EventLoop::exec()
@@ -26,7 +41,7 @@ int EventLoop::exec()
exit_.store(false, std::memory_order_release);
while (!exit_.load(std::memory_order_acquire))
- dispatcher_->processEvents();
+ event_base_loop(event_, EVLOOP_NO_EXIT_ON_EMPTY);
return exitCode_;
}
@@ -35,5 +50,10 @@ void EventLoop::exit(int code)
{
exitCode_ = code;
exit_.store(true, std::memory_order_release);
- dispatcher_->interrupt();
+ interrupt();
+}
+
+void EventLoop::interrupt()
+{
+ event_base_loopbreak(event_);
}