blob: ca2d8be00e2eea14eba9ce05cd5f6134579cdf50 [file] [log] [blame]
Parker Schuh44f86922017-01-03 23:59:50 -08001#ifndef _AOS_VISION_IMAGE_IMAGE_STREAM_H_
2#define _AOS_VISION_IMAGE_IMAGE_STREAM_H_
3
4#include "aos/vision/events/epoll_events.h"
5#include "aos/vision/image/reader.h"
6
7#include <memory>
8
9namespace aos {
10namespace vision {
11
12class ImageStreamEvent : public ::aos::events::EpollEvent {
13 public:
14 static std::unique_ptr<::camera::Reader> GetCamera(
15 const std::string &fname, ImageStreamEvent *obj,
16 camera::CameraParams params) {
17 using namespace std::placeholders;
18 std::unique_ptr<::camera::Reader> camread(new ::camera::Reader(
19 fname,
20 std::bind(&ImageStreamEvent::ProcessHelper, obj, _1, _2), params);
21 camread->StartAsync();
22 return camread;
23 }
24
25 explicit ImageStreamEvent(std::unique_ptr<::camera::Reader> reader)
26 : ::aos::events::EpollEvent(reader->fd()), reader_(reader) {}
27
28 explicit ImageStreamEvent(const std::string &fname,
29 camera::CameraParams params)
30 : ImageStreamEvent(GetCamera(fname, this, params)) {}
31
32 void ProcessHelper(DataRef data, uint64_t timestamp) {
33 if (data.size() < 300) {
34 LOG(INFO, "got bad img: %d of size(%lu)\n", (int)timestamp, data.size());
35 return;
36 }
37 ProcessImage(data, timestamp);
38 }
39 virtual void ProcessImage(DataRef data, uint64_t timestamp) = 0;
40
41 void ReadEvent(Context /*ctx*/) override { reader_->HandleFrame(); }
42
43 private:
44 std::unique_ptr<::camera::Reader> reader_;
45};
46
47} // namespace vision
48} // namespace aos
49
50#endif // _AOS_VISION_DEBUG_IMAGE_STREAM_H_