Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 1 | #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" |
Austin Schuh | 9f164e9 | 2022-12-29 16:15:28 -0800 | [diff] [blame] | 5 | #include "aos/realtime.h" |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 6 | #include "frc971/vision/media_device.h" |
| 7 | #include "frc971/vision/v4l2_reader.h" |
| 8 | |
| 9 | DEFINE_string(config, "aos_config.json", "Path to the config file to use."); |
| 10 | |
Maxwell Henderson | ad31234 | 2023-01-10 12:07:47 -0800 | [diff] [blame] | 11 | namespace y2023 { |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 12 | namespace vision { |
| 13 | namespace { |
| 14 | |
| 15 | using namespace frc971::vision; |
| 16 | |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 17 | void CameraReaderMain() { |
| 18 | std::optional<MediaDevice> media_device = FindMediaDevice("platform:rkisp1"); |
| 19 | |
| 20 | if (VLOG_IS_ON(1)) { |
| 21 | media_device->Log(); |
| 22 | } |
| 23 | |
| 24 | media_device->Reset(); |
| 25 | |
Ravago Jones | 65469be | 2023-01-13 21:28:23 -0800 | [diff] [blame] | 26 | Entity *ov5647 = media_device->FindEntity("ov5647 4-0036"); |
| 27 | ov5647->pads()[0]->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 28 | |
| 29 | Entity *rkisp1_csi = media_device->FindEntity("rkisp1_csi"); |
| 30 | rkisp1_csi->pads()[0]->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10); |
| 31 | rkisp1_csi->pads()[1]->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10); |
| 32 | |
| 33 | // TODO(austin): Should we set this on the link? |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 34 | Entity *rkisp1_isp = media_device->FindEntity("rkisp1_isp"); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 35 | rkisp1_isp->pads(0)->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_SBGGR10_1X10); |
Ravago Jones | 65469be | 2023-01-13 21:28:23 -0800 | [diff] [blame] | 36 | rkisp1_isp->pads(0)->SetSubdevCrop(1296, 972); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 37 | |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 38 | rkisp1_isp->pads(2)->SetSubdevFormat(1296, 972, MEDIA_BUS_FMT_YUYV8_2X8); |
Ravago Jones | 65469be | 2023-01-13 21:28:23 -0800 | [diff] [blame] | 39 | rkisp1_isp->pads(2)->SetSubdevCrop(1296, 972); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 40 | |
| 41 | Entity *rkisp1_resizer_selfpath = |
| 42 | media_device->FindEntity("rkisp1_resizer_selfpath"); |
| 43 | rkisp1_resizer_selfpath->pads(0)->SetSubdevFormat(1296, 972, |
| 44 | MEDIA_BUS_FMT_YUYV8_2X8); |
| 45 | rkisp1_resizer_selfpath->pads(1)->SetSubdevFormat(1296, 972, |
| 46 | MEDIA_BUS_FMT_YUYV8_2X8); |
| 47 | rkisp1_resizer_selfpath->pads(0)->SetSubdevCrop(1296, 972); |
| 48 | |
| 49 | Entity *rkisp1_resizer_mainpath = |
| 50 | media_device->FindEntity("rkisp1_resizer_mainpath"); |
| 51 | rkisp1_resizer_mainpath->pads(0)->SetSubdevFormat(1296, 972, |
| 52 | MEDIA_BUS_FMT_YUYV8_2X8); |
Ravago Jones | 65469be | 2023-01-13 21:28:23 -0800 | [diff] [blame] | 53 | rkisp1_resizer_mainpath->pads(0)->SetSubdevCrop(1296, 972); |
| 54 | |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 55 | rkisp1_resizer_mainpath->pads(1)->SetSubdevFormat(1296 / 2, 972 / 2, |
| 56 | MEDIA_BUS_FMT_YUYV8_2X8); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 57 | |
| 58 | Entity *rkisp1_mainpath = media_device->FindEntity("rkisp1_mainpath"); |
| 59 | rkisp1_mainpath->SetFormat(1296 / 2, 972 / 2, V4L2_PIX_FMT_YUV422P); |
| 60 | |
| 61 | Entity *rkisp1_selfpath = media_device->FindEntity("rkisp1_selfpath"); |
| 62 | rkisp1_selfpath->SetFormat(1296, 972, V4L2_PIX_FMT_YUYV); |
| 63 | |
Ravago Jones | 65469be | 2023-01-13 21:28:23 -0800 | [diff] [blame] | 64 | media_device->Enable( |
| 65 | media_device->FindLink("ov5647 4-0036", 0, "rkisp1_csi", 0)); |
| 66 | media_device->Enable( |
| 67 | media_device->FindLink("rkisp1_csi", 1, "rkisp1_isp", 0)); |
| 68 | media_device->Enable( |
| 69 | media_device->FindLink("rkisp1_isp", 2, "rkisp1_resizer_selfpath", 0)); |
| 70 | media_device->Enable( |
| 71 | media_device->FindLink("rkisp1_isp", 2, "rkisp1_resizer_mainpath", 0)); |
| 72 | |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 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); |
Austin Schuh | 9f164e9 | 2022-12-29 16:15:28 -0800 | [diff] [blame] | 79 | event_loop.SetRuntimeAffinity(aos::MakeCpusetFromCpus({2})); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 80 | |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 81 | |
Ravago Jones | 65469be | 2023-01-13 21:28:23 -0800 | [diff] [blame] | 82 | RockchipV4L2Reader v4l2_reader(&event_loop, event_loop.epoll(), |
| 83 | rkisp1_selfpath->device(), ov5647->device()); |
| 84 | |
| 85 | v4l2_reader.SetGain(1000); |
| 86 | v4l2_reader.SetExposure(1000); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 87 | |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 88 | event_loop.Run(); |
| 89 | } |
| 90 | |
| 91 | } // namespace |
| 92 | } // namespace vision |
Maxwell Henderson | ad31234 | 2023-01-10 12:07:47 -0800 | [diff] [blame] | 93 | } // namespace y2023 |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 94 | |
| 95 | int main(int argc, char **argv) { |
| 96 | aos::InitGoogle(&argc, &argv); |
Maxwell Henderson | ad31234 | 2023-01-10 12:07:47 -0800 | [diff] [blame] | 97 | y2023::vision::CameraReaderMain(); |
Austin Schuh | db2ed9d | 2022-12-26 14:02:26 -0800 | [diff] [blame] | 98 | } |