blob: dc52bd5a5619ffdf44297f856c99dccc1add2c46 [file] [log] [blame]
Brian Silverman58899fd2019-03-24 11:03:11 -07001#ifndef Y2019_JEVOIS_CAMERA_IMAGE_STREAM_H_
2#define Y2019_JEVOIS_CAMERA_IMAGE_STREAM_H_
Parker Schuh58b39e82019-02-22 22:32:46 -08003
4#include "aos/vision/events/epoll_events.h"
5#include "aos/vision/image/camera_params.pb.h"
6#include "y2019/jevois/camera/reader.h"
7
8#include <memory>
9
10namespace y2019 {
11namespace camera {
12
13// Converts a camera reader into a virtual base class that calls ProcessImage
14// on each new image.
15class ImageStreamEvent : public ::aos::events::EpollEvent {
16 public:
17 static std::unique_ptr<Reader> GetCamera(const std::string &fname,
18 ImageStreamEvent *obj,
19 aos::vision::CameraParams params) {
20 using namespace std::placeholders;
21 std::unique_ptr<Reader> camread(new Reader(
22 fname, std::bind(&ImageStreamEvent::ProcessHelper, obj, _1, _2),
23 params));
24 camread->StartAsync();
25 return camread;
26 }
27
28 explicit ImageStreamEvent(std::unique_ptr<Reader> reader)
29 : ::aos::events::EpollEvent(reader->fd()), reader_(std::move(reader)) {}
30
31 explicit ImageStreamEvent(const std::string &fname,
32 aos::vision::CameraParams params)
33 : ImageStreamEvent(GetCamera(fname, this, params)) {}
34
35 void ProcessHelper(aos::vision::DataRef data,
Brian Silverman58899fd2019-03-24 11:03:11 -070036 aos::monotonic_clock::time_point timestamp);
Parker Schuh58b39e82019-02-22 22:32:46 -080037 virtual void ProcessImage(aos::vision::DataRef data,
38 aos::monotonic_clock::time_point timestamp) = 0;
39
40 void ReadEvent() override { reader_->HandleFrame(); }
41
Alex Perry5b1e8e32019-04-07 13:25:31 -070042 bool SetExposure(int abs_exp) {
43 return reader_->SetCameraControl(V4L2_CID_EXPOSURE_ABSOLUTE,
44 "V4L2_CID_EXPOSURE_ABSOLUTE", abs_exp);
45 }
46
Parker Schuh58b39e82019-02-22 22:32:46 -080047 private:
48 std::unique_ptr<Reader> reader_;
49};
50
Brian Silverman58899fd2019-03-24 11:03:11 -070051} // namespace camera
52} // namespace y2019
Parker Schuh58b39e82019-02-22 22:32:46 -080053
Brian Silverman58899fd2019-03-24 11:03:11 -070054#endif // Y2019_JEVOIS_CAMERA_IMAGE_STREAM_H_