Camera code is layed out in the following fashion. Note that some code does not obey this layout; this represents the planned organization.
camera ├── camera_manager ├── drivers │ ├── camera_controller <- Provides a camera driver interface for the ISP and other hw │ ├── common <- for drivers that are related to cameras, like mipi │ ├── hw_accel <- For all hardware accelerators, scalars, etc. │ ├── isp <- For code relating to the actual isp block │ │ ├── <isp_name> <- Each ISP has a folder for device specific code │ │ └── modules <- shared ISP logic blocks go in modules │ ├── sensors <- For image sensors │ ├── virtual <- For virtual cameras, other mock devices │ └── usb <- For usb cameras implementing UVC ├── examples <- Any examples of camera usages └── e2e_tests <- End to end tests of the camera stack ---- ## Tests ###Organization With the exception of end-to-end tests, all camera tests shall be located in a ```test``` folder next to the code it tests. The test source shall be named ```<object-of-test>-test.cc```. The ```meta``` folder for the test is located in the ```test``` directory. Example:
bar ├── BUILD.gn ├── foo.cc └── foo.h └── test ├── foo_test.cc ├── BUILD.gn └── meta └── foo_test.cmx
### Automation Tests shall be automated in one of 3 ways: * **Unit Tests** and **Integration Tests** shall be made into components that are part of the ```camera_full_test``` test package, defined in ```camera/BUILD.gn```. These tests should be able to be run in Qemu. * **Driver Unit Tests** are built into drivers, and will be tested by <TBD>. * **Debug interfaces** shall provide fidl interfaces, which will be connected to by test programs. These programs shall be included in the ```camera_full_on_device_test``` test package, defined in ```camera/BUILD.gn```. All such tests shall operate on any Fuchsia platform, and shall only run tests on appropriate devices. Tests should be written using the [gtest](https://fuchsia.googlesource.com/third_party/googletest/+/refs/heads/master/googletest/docs/primer.md) framework.