Make v4l2_reader use epoll
It no longer needs to be polled in a loop
and sends images directly to the channel
Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: I8fc3efc3fd2cd67836294d9dc47d5342cd7d5de4
diff --git a/y2023/vision/camera_reader.cc b/y2023/vision/camera_reader.cc
index 965296f..0e86c32 100644
--- a/y2023/vision/camera_reader.cc
+++ b/y2023/vision/camera_reader.cc
@@ -13,34 +13,6 @@
using namespace frc971::vision;
-class CameraReader {
- public:
- CameraReader(aos::EventLoop *event_loop, V4L2ReaderBase *reader)
- : event_loop_(event_loop),
- reader_(reader),
- read_image_timer_(event_loop->AddTimer([this]() { ReadImage(); })) {
- event_loop->OnRun(
- [this]() { read_image_timer_->Setup(event_loop_->monotonic_now()); });
- }
-
- void ReadImage() {
- if (!reader_->ReadLatestImage()) {
- read_image_timer_->Setup(event_loop_->monotonic_now() +
- std::chrono::milliseconds(10));
- return;
- }
- reader_->SendLatestImage();
-
- read_image_timer_->Setup(event_loop_->monotonic_now());
- }
-
- private:
- aos::EventLoop *event_loop_;
- V4L2ReaderBase *reader_;
-
- aos::TimerHandler *const read_image_timer_;
-};
-
void CameraReaderMain() {
std::optional<MediaDevice> media_device = FindMediaDevice("platform:rkisp1");
@@ -105,7 +77,8 @@
event_loop.SetRuntimeRealtimePriority(55);
- RockchipV4L2Reader v4l2_reader(&event_loop, rkisp1_selfpath->device());
+ RockchipV4L2Reader v4l2_reader(&event_loop, event_loop.epoll(),
+ rkisp1_selfpath->device());
// TODO(austin): Figure out exposure and stuff.
/*
@@ -122,8 +95,6 @@
}
*/
- CameraReader camera_reader(&event_loop, &v4l2_reader);
-
event_loop.Run();
}