blob: 0e86c32585bead7e3f19801a30d35dcecccfbebd [file] [log] [blame]
Austin Schuhdb2ed9d2022-12-26 14:02:26 -08001#include "absl/strings/str_cat.h"
2#include "absl/strings/str_split.h"
3#include "aos/events/shm_event_loop.h"
4#include "aos/init.h"
5#include "frc971/vision/media_device.h"
6#include "frc971/vision/v4l2_reader.h"
7
8DEFINE_string(config, "aos_config.json", "Path to the config file to use.");
9
10namespace y2022 {
11namespace vision {
12namespace {
13
14using namespace frc971::vision;
15
Austin Schuhdb2ed9d2022-12-26 14:02:26 -080016void CameraReaderMain() {
17 std::optional<MediaDevice> media_device = FindMediaDevice("platform:rkisp1");
18
19 if (VLOG_IS_ON(1)) {
20 media_device->Log();
21 }
22
23 media_device->Reset();
24
25 media_device->Enable(
26 media_device->FindLink("ov5647 4-0036", 0, "rkisp1_csi", 0));
27 media_device->Enable(
28 media_device->FindLink("rkisp1_csi", 1, "rkisp1_isp", 0));
29 media_device->Enable(
30 media_device->FindLink("rkisp1_isp", 2, "rkisp1_resizer_selfpath", 0));
31 media_device->Enable(
32 media_device->FindLink("rkisp1_isp", 2, "rkisp1_resizer_mainpath", 0));
33
34 media_device->FindEntity("ov5647 4-0036")
35 ->pads()[0]
36 ->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10);
37
38 Entity *rkisp1_csi = media_device->FindEntity("rkisp1_csi");
39 rkisp1_csi->pads()[0]->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10);
40 rkisp1_csi->pads()[1]->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10);
41
42 // TODO(austin): Should we set this on the link?
43 // TODO(austin): Need to update crop too.
44 Entity *rkisp1_isp = media_device->FindEntity("rkisp1_isp");
45 rkisp1_isp->pads(0)->SetSubdevCrop(1296, 972);
46 rkisp1_isp->pads(0)->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10);
47
48 rkisp1_isp->pads(2)->SetSubdevCrop(1296, 972);
49 rkisp1_isp->pads(2)->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_YUYV8_2X8);
50
51 Entity *rkisp1_resizer_selfpath =
52 media_device->FindEntity("rkisp1_resizer_selfpath");
53 rkisp1_resizer_selfpath->pads(0)->SetSubdevFormat(1296, 972,
54 MEDIA_BUS_FMT_YUYV8_2X8);
55 rkisp1_resizer_selfpath->pads(1)->SetSubdevFormat(1296, 972,
56 MEDIA_BUS_FMT_YUYV8_2X8);
57 rkisp1_resizer_selfpath->pads(0)->SetSubdevCrop(1296, 972);
58
59 Entity *rkisp1_resizer_mainpath =
60 media_device->FindEntity("rkisp1_resizer_mainpath");
61 rkisp1_resizer_mainpath->pads(0)->SetSubdevFormat(1296, 972,
62 MEDIA_BUS_FMT_YUYV8_2X8);
63 rkisp1_resizer_mainpath->pads(1)->SetSubdevFormat(1296 / 2, 972 / 2,
64 MEDIA_BUS_FMT_YUYV8_2X8);
65 rkisp1_resizer_mainpath->pads(0)->SetSubdevCrop(1296 / 2, 972 / 2);
66
67 Entity *rkisp1_mainpath = media_device->FindEntity("rkisp1_mainpath");
68 rkisp1_mainpath->SetFormat(1296 / 2, 972 / 2, V4L2_PIX_FMT_YUV422P);
69
70 Entity *rkisp1_selfpath = media_device->FindEntity("rkisp1_selfpath");
71 rkisp1_selfpath->SetFormat(1296, 972, V4L2_PIX_FMT_YUYV);
72
73 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
74 aos::configuration::ReadConfig(FLAGS_config);
75
76 aos::ShmEventLoop event_loop(&config.message());
77
78 event_loop.SetRuntimeRealtimePriority(55);
79
Ravago Jonesdc524752022-12-27 01:15:13 -080080 RockchipV4L2Reader v4l2_reader(&event_loop, event_loop.epoll(),
81 rkisp1_selfpath->device());
Austin Schuhdb2ed9d2022-12-26 14:02:26 -080082
83 // TODO(austin): Figure out exposure and stuff.
84 /*
85 const uint32_t exposure =
86 (FLAGS_use_outdoors ? FLAGS_outdoors_exposure : FLAGS_exposure);
87 if (exposure > 0) {
88 LOG(INFO) << "Setting camera to Manual Exposure mode with exposure = "
89 << exposure << " or " << static_cast<double>(exposure) / 10.0
90 << " ms";
91 v4l2_reader.SetExposure(exposure);
92 } else {
93 LOG(INFO) << "Setting camera to use Auto Exposure";
94 v4l2_reader.UseAutoExposure();
95 }
96 */
97
Austin Schuhdb2ed9d2022-12-26 14:02:26 -080098 event_loop.Run();
99}
100
101} // namespace
102} // namespace vision
103} // namespace y2022
104
105int main(int argc, char **argv) {
106 aos::InitGoogle(&argc, &argv);
107 y2022::vision::CameraReaderMain();
108}