blob: d409d2d35bf90245aa9f7ede24d6c1581415edd2 [file] [log] [blame]
Stephan Pleinescc500b92024-05-30 10:58:40 -07001#include <stdio.h>
2#include <stdlib.h>
3
4#include <string>
5
6#include "aos/time/time.h"
Parker Schuh57ba10c2017-03-04 17:46:53 -08007#include "aos/vision/events/epoll_events.h"
Stephan Pleinescc500b92024-05-30 10:58:40 -07008#include "aos/vision/image/camera_params.pb.h"
Parker Schuh57ba10c2017-03-04 17:46:53 -08009#include "aos/vision/image/image_stream.h"
Stephan Pleinescc500b92024-05-30 10:58:40 -070010#include "aos/vision/image/image_types.h"
Parker Schuh57ba10c2017-03-04 17:46:53 -080011
12class ImageStream : public aos::vision::ImageStreamEvent {
13 public:
Parker Schuh24ee58d2017-03-11 16:13:23 -080014 ImageStream(const std::string &fname, aos::vision::CameraParams params)
Parker Schuh57ba10c2017-03-04 17:46:53 -080015 : ImageStreamEvent(fname, params) {}
16 void ProcessImage(aos::vision::DataRef /*data*/,
17 aos::monotonic_clock::time_point) override {
18 if (i_ > 20) {
19 exit(0);
20 }
21 ++i_;
22 }
23
24 private:
25 int i_ = 0;
26};
27
28// camera_primer drops the first 20 frames. This is to get around issues
29// where the first N frames from the camera are garbage. Thus each year
30// you should write a startup script like so:
31//
32// camera_primer
33// target_sender
34int main(int argc, char **argv) {
Parker Schuh24ee58d2017-03-11 16:13:23 -080035 aos::vision::CameraParams params;
Parker Schuh57ba10c2017-03-04 17:46:53 -080036
37 if (argc != 2) {
38 fprintf(stderr, "usage: %s path_to_camera\n", argv[0]);
39 exit(-1);
40 }
41 ImageStream stream(argv[1], params);
42
43 aos::events::EpollLoop loop;
44 loop.Add(&stream);
45 loop.Run();
46}