Merge "iwyu: //aos/vision/..."
diff --git a/aos/vision/blob/codec.cc b/aos/vision/blob/codec.cc
index be11281..d3ab72d 100644
--- a/aos/vision/blob/codec.cc
+++ b/aos/vision/blob/codec.cc
@@ -1,5 +1,10 @@
 #include "aos/vision/blob/codec.h"
 
+#include <stddef.h>
+
+#include <utility>
+#include <vector>
+
 namespace aos::vision {
 
 size_t CalculateSize(const BlobList &blob_list) {
diff --git a/aos/vision/blob/codec.h b/aos/vision/blob/codec.h
index 5872b44..1656b4a 100644
--- a/aos/vision/blob/codec.h
+++ b/aos/vision/blob/codec.h
@@ -1,6 +1,9 @@
 #ifndef _AOS_VISION_BLOB_CODEC_H_
 #define _AOS_VISION_BLOB_CODEC_H_
 
+#include <stdint.h>
+#include <string.h>
+
 #include <string>
 
 #include "aos/vision/blob/range_image.h"
diff --git a/aos/vision/blob/codec_test.cc b/aos/vision/blob/codec_test.cc
index 889dfbb..3d483a4 100644
--- a/aos/vision/blob/codec_test.cc
+++ b/aos/vision/blob/codec_test.cc
@@ -1,6 +1,10 @@
 #include "aos/vision/blob/codec.h"
 
+#include <stddef.h>
+
 #include <algorithm>
+#include <utility>
+#include <vector>
 
 #include "gtest/gtest.h"
 
diff --git a/aos/vision/blob/contour.cc b/aos/vision/blob/contour.cc
index 5e82d4c..a789b77 100644
--- a/aos/vision/blob/contour.cc
+++ b/aos/vision/blob/contour.cc
@@ -1,5 +1,7 @@
 #include "aos/vision/blob/contour.h"
 
+#include <vector>
+
 namespace aos::vision {
 
 namespace {
diff --git a/aos/vision/blob/find_blob.cc b/aos/vision/blob/find_blob.cc
index 8ee8e92..29b1640 100644
--- a/aos/vision/blob/find_blob.cc
+++ b/aos/vision/blob/find_blob.cc
@@ -1,5 +1,8 @@
 #include "aos/vision/blob/find_blob.h"
 
+#include <utility>
+#include <vector>
+
 #include "aos/vision/blob/disjoint_set.h"
 
 namespace aos::vision {
diff --git a/aos/vision/blob/hierarchical_contour_merge.cc b/aos/vision/blob/hierarchical_contour_merge.cc
index 06c34d4..c5d3eb9 100644
--- a/aos/vision/blob/hierarchical_contour_merge.cc
+++ b/aos/vision/blob/hierarchical_contour_merge.cc
@@ -1,7 +1,11 @@
 #include "aos/vision/blob/hierarchical_contour_merge.h"
 
+#include <stdint.h>
+
+#include <algorithm>
 #include <cmath>
 #include <queue>
+#include <utility>
 
 #include "aos/vision/blob/disjoint_set.h"
 
diff --git a/aos/vision/blob/move_scale.cc b/aos/vision/blob/move_scale.cc
index 45337fc..ac2c30a 100644
--- a/aos/vision/blob/move_scale.cc
+++ b/aos/vision/blob/move_scale.cc
@@ -1,5 +1,8 @@
 #include "aos/vision/blob/move_scale.h"
 
+#include <algorithm>
+#include <utility>
+
 namespace aos::vision {
 
 RangeImage MoveScale(const RangeImage &img, int dx, int dy, int scale) {
diff --git a/aos/vision/blob/move_scale.h b/aos/vision/blob/move_scale.h
index 94a9e9d..4f38bcf 100644
--- a/aos/vision/blob/move_scale.h
+++ b/aos/vision/blob/move_scale.h
@@ -1,7 +1,6 @@
 #ifndef AOS_VISION_BLOB_MOVE_SCALE_H_
 #define AOS_VISION_BLOB_MOVE_SCALE_H_
 
-#include <limits>
 #include <vector>
 
 #include "aos/vision/blob/range_image.h"
diff --git a/aos/vision/blob/range_image.cc b/aos/vision/blob/range_image.cc
index 92f77cc..ef9cc19 100644
--- a/aos/vision/blob/range_image.cc
+++ b/aos/vision/blob/range_image.cc
@@ -1,7 +1,9 @@
 #include "aos/vision/blob/range_image.h"
 
+#include <stdio.h>
+
 #include <algorithm>
-#include <cmath>
+#include <ostream>
 
 namespace aos::vision {
 namespace {
diff --git a/aos/vision/blob/range_image.h b/aos/vision/blob/range_image.h
index 10e801f..3e8c35c 100644
--- a/aos/vision/blob/range_image.h
+++ b/aos/vision/blob/range_image.h
@@ -1,6 +1,9 @@
 #ifndef _AOS_VISION_BLOB_RANGE_IMAGE_H_
 #define _AOS_VISION_BLOB_RANGE_IMAGE_H_
 
+#include <iosfwd>
+#include <string>
+#include <utility>
 #include <vector>
 
 #include "aos/vision/image/image_types.h"
diff --git a/aos/vision/blob/test_utils.cc b/aos/vision/blob/test_utils.cc
index 0e7240f..54d5fe6 100644
--- a/aos/vision/blob/test_utils.cc
+++ b/aos/vision/blob/test_utils.cc
@@ -1,5 +1,8 @@
 #include "aos/vision/blob/test_utils.h"
 
+#include <utility>
+#include <vector>
+
 namespace aos::vision {
 
 RangeImage LoadFromTestData(int mini, const char *data) {
diff --git a/aos/vision/blob/threshold.cc b/aos/vision/blob/threshold.cc
index 5403bbd..d25ab44 100644
--- a/aos/vision/blob/threshold.cc
+++ b/aos/vision/blob/threshold.cc
@@ -1,5 +1,7 @@
 #include "aos/vision/blob/threshold.h"
 
+#include <string.h>
+
 #include "aos/logging/logging.h"
 
 namespace aos::vision {
diff --git a/aos/vision/blob/threshold.h b/aos/vision/blob/threshold.h
index 95330c5..effd321 100644
--- a/aos/vision/blob/threshold.h
+++ b/aos/vision/blob/threshold.h
@@ -1,11 +1,16 @@
 #ifndef AOS_VISION_BLOB_THRESHOLD_H_
 #define AOS_VISION_BLOB_THRESHOLD_H_
 
+#include <stdint.h>
+
 #include <array>
 #include <condition_variable>
 #include <functional>
 #include <mutex>
 #include <thread>
+#include <type_traits>
+#include <utility>
+#include <vector>
 
 #include "aos/vision/blob/range_image.h"
 #include "aos/vision/image/image_types.h"
diff --git a/aos/vision/blob/threshold_test.cc b/aos/vision/blob/threshold_test.cc
index 4b23f3e..4ec519c 100644
--- a/aos/vision/blob/threshold_test.cc
+++ b/aos/vision/blob/threshold_test.cc
@@ -1,9 +1,11 @@
 #include "aos/vision/blob/threshold.h"
 
+#include <stddef.h>
+
+#include <limits>
 #include <random>
 #include <vector>
 
-#include "gmock/gmock.h"
 #include "gtest/gtest.h"
 
 #include "aos/vision/blob/range_image.h"
diff --git a/aos/vision/blob/transpose.cc b/aos/vision/blob/transpose.cc
index b59e8c5..25fd207 100644
--- a/aos/vision/blob/transpose.cc
+++ b/aos/vision/blob/transpose.cc
@@ -2,6 +2,7 @@
 
 #include <algorithm>
 #include <limits>
+#include <utility>
 
 namespace aos::vision {
 
diff --git a/aos/vision/blob/transpose.h b/aos/vision/blob/transpose.h
index d2b609e..e2ff8b4 100644
--- a/aos/vision/blob/transpose.h
+++ b/aos/vision/blob/transpose.h
@@ -1,6 +1,8 @@
 #ifndef AOS_VISION_BLOB_TRANSPOSE_H_
 #define AOS_VISION_BLOB_TRANSPOSE_H_
 
+#include <vector>
+
 #include "aos/vision/blob/range_image.h"
 
 namespace aos::vision {
diff --git a/aos/vision/blob/transpose_test.cc b/aos/vision/blob/transpose_test.cc
index a4a9705..9eb9bac 100644
--- a/aos/vision/blob/transpose_test.cc
+++ b/aos/vision/blob/transpose_test.cc
@@ -1,6 +1,5 @@
 #include "aos/vision/blob/transpose.h"
 
-#include <algorithm>
 #include <string>
 
 #include "gtest/gtest.h"
diff --git a/aos/vision/events/epoll_events.cc b/aos/vision/events/epoll_events.cc
index 1a5ad7e..ce3e5af 100644
--- a/aos/vision/events/epoll_events.cc
+++ b/aos/vision/events/epoll_events.cc
@@ -1,9 +1,6 @@
 #include "aos/vision/events/epoll_events.h"
 
-#include <fcntl.h>
 #include <sys/epoll.h>
-#include <sys/socket.h>
-#include <sys/types.h>
 
 #include <cstring>
 #include <vector>
diff --git a/aos/vision/events/epoll_events.h b/aos/vision/events/epoll_events.h
index e3eeb85..e78db53 100644
--- a/aos/vision/events/epoll_events.h
+++ b/aos/vision/events/epoll_events.h
@@ -3,9 +3,10 @@
 
 #include <sys/epoll.h>
 
+#include <chrono>
 #include <climits>
+#include <compare>
 #include <cstdint>
-#include <memory>
 #include <vector>
 
 #include "aos/scoped/scoped_fd.h"
diff --git a/aos/vision/events/tcp_client.cc b/aos/vision/events/tcp_client.cc
index 65b646c..3c64add 100644
--- a/aos/vision/events/tcp_client.cc
+++ b/aos/vision/events/tcp_client.cc
@@ -4,14 +4,11 @@
 #include <fcntl.h>
 #include <netdb.h>
 #include <netinet/in.h>
+#include <strings.h>
 #include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
 
-#include <cerrno>
 #include <cstdio>
 #include <cstdlib>
-#include <cstring>
 
 #include "aos/logging/logging.h"
 
diff --git a/aos/vision/events/tcp_client.h b/aos/vision/events/tcp_client.h
index 16d7265..e89e0fe 100644
--- a/aos/vision/events/tcp_client.h
+++ b/aos/vision/events/tcp_client.h
@@ -1,7 +1,6 @@
 #ifndef _AOS_VISION_DEBUG_TCP_CLIENT_H_
 #define _AOS_VISION_DEBUG_TCP_CLIENT_H_
 
-#include <memory>
 #include <string>
 
 #include "aos/vision/events/epoll_events.h"
diff --git a/aos/vision/events/tcp_server.cc b/aos/vision/events/tcp_server.cc
index fa2a369..38e2874 100644
--- a/aos/vision/events/tcp_server.cc
+++ b/aos/vision/events/tcp_server.cc
@@ -2,17 +2,13 @@
 
 #include <arpa/inet.h>
 #include <fcntl.h>
-#include <netdb.h>
 #include <netinet/in.h>
-#include <sys/epoll.h>
+#include <stdint.h>
+#include <strings.h>
 #include <sys/socket.h>
-#include <sys/types.h>
 #include <unistd.h>
 
 #include <cerrno>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
 
 #include "aos/logging/logging.h"
 
diff --git a/aos/vision/events/tcp_server.h b/aos/vision/events/tcp_server.h
index 49a5a8c..b901077 100644
--- a/aos/vision/events/tcp_server.h
+++ b/aos/vision/events/tcp_server.h
@@ -2,19 +2,21 @@
 #define _AOS_VISION_EVENTS_TCP_SERVER_H_
 
 #include <memory>
-#include <vector>
 
 #include "aos/vision/events/epoll_events.h"
 #include "aos/vision/events/intrusive_free_list.h"
 
 namespace aos::events {
 
+// IWYU pragma: begin_keep
 // Non-templatized base class of TCP server.
 // TCPServer implements Construct which specializes the client connection
 // based on the specific use-case.
 template <class T>
 class TCPServer;
+// IWYU pragma: end_keep
 class SocketConnection;
+
 class TCPServerBase : public EpollEvent {
  public:
   TCPServerBase(int fd) : EpollEvent(fd) {}
diff --git a/aos/vision/events/udp.cc b/aos/vision/events/udp.cc
index cf7ad23..1b1a053 100644
--- a/aos/vision/events/udp.cc
+++ b/aos/vision/events/udp.cc
@@ -1,6 +1,11 @@
 #include "aos/vision/events/udp.h"
 
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+
 #include <cstring>
+#include <ostream>
 
 #include "glog/logging.h"
 
diff --git a/aos/vision/events/udp.h b/aos/vision/events/udp.h
index 4acb04d..bbe5a54 100644
--- a/aos/vision/events/udp.h
+++ b/aos/vision/events/udp.h
@@ -1,13 +1,7 @@
 #ifndef AOS_VISION_EVENTS_UDP_H_
 #define AOS_VISION_EVENTS_UDP_H_
 
-#include <arpa/inet.h>
-#include <sys/socket.h>
-#include <unistd.h>
-
-#include <cmath>
 #include <string>
-#include <vector>
 
 #include "aos/macros.h"
 #include "aos/scoped/scoped_fd.h"
diff --git a/aos/vision/image/image_dataset.cc b/aos/vision/image/image_dataset.cc
index 82a8886..8eade2b 100644
--- a/aos/vision/image/image_dataset.cc
+++ b/aos/vision/image/image_dataset.cc
@@ -1,5 +1,8 @@
 #include "aos/vision/image/image_dataset.h"
 
+#include <stdlib.h>
+
+#include <cstdio>
 #include <fstream>
 
 #include "aos/vision/image/image_types.h"
diff --git a/aos/vision/image/image_stream.h b/aos/vision/image/image_stream.h
index 5a45c6f..797178f 100644
--- a/aos/vision/image/image_stream.h
+++ b/aos/vision/image/image_stream.h
@@ -1,10 +1,17 @@
 #ifndef AOS_VISION_IMAGE_IMAGE_STREAM_H_
 #define AOS_VISION_IMAGE_IMAGE_STREAM_H_
 
+#include <chrono>
+#include <functional>
 #include <memory>
+#include <string>
+#include <string_view>
+#include <utility>
 
+#include "aos/time/time.h"
 #include "aos/vision/events/epoll_events.h"
 #include "aos/vision/image/camera_params.pb.h"
+#include "aos/vision/image/image_types.h"
 #include "aos/vision/image/reader.h"
 
 namespace aos::vision {
diff --git a/aos/vision/image/jpeg_routines.cc b/aos/vision/image/jpeg_routines.cc
index 9d46895..1c1f738 100644
--- a/aos/vision/image/jpeg_routines.cc
+++ b/aos/vision/image/jpeg_routines.cc
@@ -1,13 +1,8 @@
 #include "aos/vision/image/jpeg_routines.h"
 
-#include <sys/mman.h>
-#include <unistd.h>
-
-#include <cerrno>
 #include <csetjmp>
 #include <cstdint>
 #include <cstdio>
-#include <cstdlib>
 #include <cstring>
 
 #include "third_party/libjpeg/jpeglib.h"
diff --git a/aos/vision/image/jpeg_routines.h b/aos/vision/image/jpeg_routines.h
index 4bac976..755a205 100644
--- a/aos/vision/image/jpeg_routines.h
+++ b/aos/vision/image/jpeg_routines.h
@@ -1,11 +1,6 @@
 #ifndef _AOS_VISION_IMAGE_JPEGROUTINES_H_
 #define _AOS_VISION_IMAGE_JPEGROUTINES_H_
 
-#include <unistd.h>
-
-#include <cstdio>
-#include <cstdlib>
-
 #include "aos/vision/image/image_types.h"
 
 namespace aos::vision {
diff --git a/aos/vision/image/reader.cc b/aos/vision/image/reader.cc
index 3fbcd1d..d216490 100644
--- a/aos/vision/image/reader.cc
+++ b/aos/vision/image/reader.cc
@@ -1,20 +1,19 @@
 #include "aos/vision/image/reader.h"
 
 #include <fcntl.h>
-#include <malloc.h>
+#include <linux/v4l2-controls.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
 
 #include <cerrno>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
+#include <utility>
 
 #include "aos/logging/logging.h"
 #include "aos/time/time.h"
+#include "aos/vision/image/V4L2.h"
 
 #define CLEAR(x) memset(&(x), 0, sizeof(x))
 
diff --git a/aos/vision/image/reader.h b/aos/vision/image/reader.h
index 8f7b6b7..8791403 100644
--- a/aos/vision/image/reader.h
+++ b/aos/vision/image/reader.h
@@ -1,12 +1,13 @@
 #ifndef AOS_VISION_IMAGE_READER_H_
 #define AOS_VISION_IMAGE_READER_H_
 
+#include <linux/videodev2.h>
+
 #include <cinttypes>
 #include <functional>
 #include <string>
 
 #include "aos/time/time.h"
-#include "aos/vision/image/V4L2.h"
 #include "aos/vision/image/camera_params.pb.h"
 #include "aos/vision/image/image_types.h"
 
@@ -52,6 +53,7 @@
   // The number of buffers currently queued in v4l2.
   uint32_t queued_;
   struct Buffer;
+
   // TODO(parker): This should be a smart pointer, but it cannot
   // because the buffers are not ummapped.
   Buffer *buffers_;
diff --git a/aos/vision/math/vector.h b/aos/vision/math/vector.h
index ce29901..04203e6 100644
--- a/aos/vision/math/vector.h
+++ b/aos/vision/math/vector.h
@@ -1,9 +1,12 @@
 #ifndef AOS_VISION_MATH_VECTOR_H_
 #define AOS_VISION_MATH_VECTOR_H_
 
+#include <algorithm>
 #include <cmath>
+#include <utility>
 
-#include "Eigen/Dense"
+#include "Eigen/Core"
+#include "Eigen/Geometry"
 
 namespace aos::vision {
 
diff --git a/aos/vision/math/vector_test.cc b/aos/vision/math/vector_test.cc
index 214a50c..d137d5e 100644
--- a/aos/vision/math/vector_test.cc
+++ b/aos/vision/math/vector_test.cc
@@ -1,5 +1,7 @@
 #include "aos/vision/math/vector.h"
 
+#include <memory>
+
 #include "gtest/gtest.h"
 
 namespace aos::vision::testing {
diff --git a/aos/vision/tools/camera_primer.cc b/aos/vision/tools/camera_primer.cc
index fcd7d0b..d409d2d 100644
--- a/aos/vision/tools/camera_primer.cc
+++ b/aos/vision/tools/camera_primer.cc
@@ -1,7 +1,13 @@
-#include "aos/logging/implementations.h"
-#include "aos/logging/logging.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <string>
+
+#include "aos/time/time.h"
 #include "aos/vision/events/epoll_events.h"
+#include "aos/vision/image/camera_params.pb.h"
 #include "aos/vision/image/image_stream.h"
+#include "aos/vision/image/image_types.h"
 
 class ImageStream : public aos::vision::ImageStreamEvent {
  public: