# Apply Custom Format In Video This example demonstrates how to initialize the video system using a custom format description. There are three steps to implement this feature: 1. The camera sensor can only work properly when the developer provides the correct register configuration. Therefore, the correct initializer list needs to be provided: ```c const sc2336_reginfo_t init_reglist_custom_MIPI_2lane_800x800_raw8_30fps[] = { {0x0103, 0x01}, {0x0100, 0x00}, // sleep en ... }; ``` 2. To use a custom register configuration, the corresponding description information needs to be provided so that the system can get the correct initialization parameters: ```c const esp_cam_sensor_format_t custom_format_info = { .name = "MIPI_2lane_24Minput_RAW8_800x800_30fps", .format = ESP_CAM_SENSOR_PIXFORMAT_RAW8, .port = ESP_CAM_SENSOR_MIPI_CSI, .xclk = 24000000, .width = 800, .height = 800, .regs = init_reglist_custom_MIPI_2lane_800x800_raw8_30fps, .regs_size = ARRAY_SIZE(init_reglist_custom_MIPI_2lane_800x800_raw8_30fps), .fps = 30, .isp_info = &custom_fmt_isp_info, .mipi_info = { .mipi_clk = 336000000, .lane_num = 2, .line_sync_en = false, }, .reserved = NULL, }; ``` Note that if the camera sensor does not need to use the ISP module provided by the development board, then there is no need to provide ISP-related data. 3. The `ioctl()` is used to set a custom format for the sensor: ```c if (ioctl(fd, VIDIOC_S_SENSOR_FMT, &custom_format_info) != 0) { ret = ESP_FAIL; goto exit_0; } ``` Note that after executing the `VIDIOC_STREAMON` command, reconfiguring the output format is not allowed. ## How to use example ### Hardware Required #### 1. MIPI-CSI Development Kit * A ESP32-P4 development board with MIPI-CSI interface * A SC2336 camera sensor * A USB Type-C cable for power supply and programming ### 2. DVP Development Kit * A ESP32-P4 development board with DVP interface * A OV2640 camera sensor * A USB Type-C cable for power supply and programming ### Build and Flash Configure camera hardware data interface based on development kit: #### MIPI-CSI Development Kit ``` Example Configuration ---> [*] Enable MIPI CSI Camera Sensor [ ] Enable DVP Camera Sensor Component config ---> Espressif Camera Sensors Configurations ---> [ ] OV2640 ---> [*] SC2336 ---- ``` #### DVP Development Kit ``` Example Configuration ---> [ ] Enable MIPI CSI Camera Sensor [*] Enable DVP Camera Sensor Component config ---> Espressif Camera Sensors Configurations ---> [*] OV2640 ---> [ ] SC2336 ---- ``` Build the project and flash it to the board, then run monitor tool to view serial output: ``` idf.py -p PORT flash monitor ``` (To exit the serial monitor, type ``Ctrl-]``.) See the [ESP-IDF Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32p4/get-started/index.html) for full steps to configure and use ESP-IDF to build projects. ## Example Output Running this example, you will see the following log output on the serial monitor: ### MIPI-CSI Development Kit ``` ... I (1627) main_task: Calling app_main() I (1627) gpio: GPIO[22]| InputEn: 1| OutputEn: 1| OpenDrain: 1| Pullup: 1| Pulldown: 0| Intr:0 I (1637) gpio: GPIO[23]| InputEn: 1| OutputEn: 1| OpenDrain: 1| Pullup: 1| Pulldown: 0| Intr:0 I (1647) sc2336: Detected Camera sensor PID=0xcb3a I (1727) example: version: 0.5.1 I (1727) example: driver: MIPI-CSI I (1727) example: card: MIPI-CSI I (1727) example: bus: esp32p4:MIPI-CSI I (1727) example: capabilities: I (1737) example: VIDEO_CAPTURE I (1737) example: STREAMING I (1747) example: device capabilities: I (1747) example: VIDEO_CAPTURE I (1747) example: STREAMING I (1827) example: Capture format frames for 3 seconds: I (4847) example: width: 800 I (4847) example: height: 800 I (4847) example: size: 1280000 I (4857) example: FPS: 30 I (4857) main_task: Returned from app_main() ```
To create a project from this example, run:
idf.py create-project-from-example "espressif/esp_video=0.6.0~1:video_custom_format"