1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 3/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2019, Google Inc. * * libcamera V4L2 device format handling test */ #include <iostream> #include <limits.h> #include "libcamera/internal/utils.h" #include "libcamera/internal/v4l2_videodevice.h" #include "v4l2_videodevice_test.h" using namespace std; using namespace libcamera; class Format : public V4L2VideoDeviceTest { pu/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2019, Google Inc. * * event_loop.h - cam - Event loop */ #pragma once #include <chrono> #include <functional> #include <list> #include <memory> #include <mutex> #include <event2/util.h> struct event_base; class EventLoop { public: enum EventType { Read = 1, Write = 2, }; EventLoop(); ~EventLoop(); static EventLoop *instance(); int exec(); void exit(int code = 0); void callLater(const std::function<void()> &func); void addFdEvent(int fd, EventType type, const std::function<void()> &handler); using duration = std::chrono::steady_clock::duration; void addTimerEvent(const std::chrono::microseconds period, const std::function<void()> &handler); private: struct Event { Event(const std::function<void()> &callback); ~Event(); static void dispatch(int fd, short events, void *arg); std::function<void()> callback_; struct event *event_; }; static EventLoop *instance_; struct event_base *base_; int exitCode_; std::list<std::function<void()>> calls_; std::list<std::unique_ptr<Event>> events_; std::mutex lock_; static void dispatchCallback(evutil_socket_t fd, short flags, void *param); void dispatchCall(); };