DART-MX8M Android Camera: Difference between revisions

From Variscite Wiki
Line 47: Line 47:
[[File:IMX8_Image_Processing_Chain.png]]
[[File:IMX8_Image_Processing_Chain.png]]


Note: {{#var:HARDWARE_NAME}} platform doesn't have the SOC based Image Signal Processing (ISP) unit to convert bayer data to RGB and YUV.<br>
Note:
{{#var:HARDWARE_NAME}} platform relies on MIPI camera to convert the Bayer data to YUV format.
* {{#var:HARDWARE_NAME}} platform doesn't have the SOC based Image Signal Processing (ISP) unit to convert bayer data to RGB and YUV.
* {{#var:HARDWARE_NAME}} platform relies on MIPI camera to convert the Bayer data to YUV format.


=Software Setup=
=Software Setup=

Revision as of 03:42, 27 December 2019

DART-MX8M - Android Oreo Android O8.1.0_r14 Developer Guide

Overview

DART-MX8M is capable of driving video input via MIPI CSI-2 cameras.

The CSI-2 Host Controller is a digital core that implements all protocol functions defined in
the MIPI CSI-2 specification, providing an interface between the system and the MIPI D-PHY,
allowing communication with an MIPI CSI-2 compliant camera sensor.
Key features include:

  • Module provides Two four-lane MIPI camera serial interfaces
  • MIPI D-PHY specification V1.2 (Board Approved)
  • Compliant to MIPI CSI2 Specification V1.3 except for C-PHY feature (Board Approved)
  • Support primary and secondary Image format
    • YUV420, YUV420 (Legacy), YUV420 (CSPS), YUV422 of 8-bits and 10-bits
    • RGB565, RGB666, RGB888
    • RAW6, RAW7, RAW8, RAW10, RAW12, RAW14
    • All of User defined Byte-based Data packet
  • Support up to 4 lanes of D-PHY, which operates up to a maximum bit rate of 1.5 Gbps/lane.
  • Interfaces
    • Compatible to PPI (Protocol-to-PHY Interface) in MIPI D-PHY Specification
    • AMBA3.0 APB Slave for Register configuration.
    • Image output data bus width: 32 bits
  • Image memory
    • Size of SRAM is 4KB
  • Pixel clock can be gated when no PPI data is coming

Note:

  • At present OV5640 supports only YUV 422 image format.

MIPI-CSI2

The DART-MX8M exposes two MIPI-CSI input ports of the SOC.
Refer to : https://www.variscite.com/wp-content/uploads/2018/03/DART-MX8M-datasheet.pdf for more details.

Hardware Availability and Setup

Connect the relevant camera accessories to the right connector.

  • DART-MX8M Development Kit:
    • CSI1 - MIPI Clock + 4 Data lanes are accessible via Carrier board header.
    • J11: MIPI - 4 Lane + CLK + I2C + GPIOs

For more details refer to: https://www.variscite.com/wp-content/uploads/2018/03/VAR-DT8MCustomBoard-Schematics.pdf

For maximum, supported resolution and combinations refer to https://www.nxp.com/docs/en/data-sheet/IMX8MDQLQIEC.pdf

File:IMX8 Image Processing Chain.png

Note:

  • DART-MX8M platform doesn't have the SOC based Image Signal Processing (ISP) unit to convert bayer data to RGB and YUV.
  • DART-MX8M platform relies on MIPI camera to convert the Bayer data to YUV format.

Software Setup

Make sure you have the required hardware as per above.

MIPI Cameras

By default, MIPI cameras are supported out of the box.
Android System / Vendor images contain Camera HAL already support for OV5640 5MP support available.
You don't need to do any special build/addition below HAL if you are using the standard camera. Unless you wish to modify for your custom camera type,

  • For Android Oreo:

Source Path: <android_build>/vendor/nxp-opensource/imx/libcamera3/

Note:

  • Android 8.0 and above Camera2 APIs are standard and are supported.
  • Auto Focus, Manual Focus, Auto Exposure and Manual exposure are not supported at present.

UVC Camera Setup

Change android_build/device/variscite/var_mx6/init.rc

setprop back_camera_name uvc

Change android_build/device/variscite/var_mx6/BoardConfig.mk

BOARD_HAVE_USB_CAMERA := true

Make sure your kernel have

$ CONFIG_USB_VIDEO_CLASS=y

For that add CONFIG_USB_VIDEO_CLASS=y to arch/arm64/configs/imx8m_var_dart_android_defconfig and make sure you have UVC / USB WebCam driver enabled.
Refer to: Customizing the Linux kernel for detailed steps about kernel customization.
You may be able to find the UVC class USB drivers here:https://github.com/varigit//tree/o8.1.0_1.3.0_8m-ga_var01/drivers/media/usb

Build your new boot-<setup-name>.img

Refer to: Customizing the Linux kernel for detailed steps about building kernel.

Flash your new boot-<setup-name>.img via fastboot and reboot device

Connect the target with host PC at fastboot mode:

  1. Connect a USB OTG cable from the target board OTG port to a your host machine USB HOST port.
  2. Power up the board and hit return/space to stop the boot at U-Boot.
  3. type fastboot usb0 in the U-Boot command line.

On the Host PC:

$ sudo `which fastboot` flash boot out/target/product/var_mx6/boot-SETUP_NAME.img
$ sudo `which fastboot` flash recovery out/target/product/var_mx6/recovery-SETUP_NAME.img
$ sudo `which fastboot` flash system out/target/product/var_mx6/system.img
$ sudo `which fastboot` reboot

Replace SETUP_NAME with the actual desired setup name accrding to the second table in the "images created" section.

Testing Camera

If the camera is connected/configured correctly. Once you click the Android Camera Application mentioned blow.

Camera App.png


The camera preview should start, like below

Camera Preview.png

Click on the Camera icon, it will take JPEG snapshot.

If you wish to record/video, click on the leftmost side of the preview screen you will see moving UI.
Camera Recording opts.png