/android-camera-hal

V4L2-based Android Camera HAL driver.

Primary LanguageC++

Minimal working V4L2-based Android Camera HAL driver.

HAL version: 3.0
Module version: 2.3
Camera API version: 2



LIMITATIONS
-----------

* Supports only one camera

* Tested only on Tegra K1, using one specific camera and a webcam.

* No parameter control, most of the reported specs are hardcoded.

* Resolution detection is limited up to 1920x1080. See availableResolutions()
  in V4l2Device.cpp.



WORKAROUNDS/BUILD TIME CONFIGURATION
------------------------------------

In Android.mk there are some flags which control how the driver works. Some
of them might not always work.


  LOCAL_CFLAGS += -DV4L2DEVICE_FPS_LIMIT=<NNN>

  <NNN> is positive integer. Limits framerate at the driver level. Helps when
  the kernel's V4L2 driver allows to read the buffers faster than it fills them
  with a new frames. Comment out to disable the limit.


  LOCAL_CFLAGS += -DV4L2DEVICE_BUF_COUNT=<NNN>

  <NNN> is a positive integer (4 by default) - V4L2 buffers count.


  LOCAL_CFLAGS += -DV4L2DEVICE_PIXEL_FORMAT=V4L2_PIX_FMT_UYVY
  #LOCAL_CFLAGS += -DV4L2DEVICE_PIXEL_FORMAT=V4L2_PIX_FMT_YUYV

  V4L2 source color format.


  LOCAL_CFLAGS += -DV4L2DEVICE_OPEN_ONCE

  Opens and initializes /dev/video0 during boot time. Comment out to open/close
  the device when a camera app is opened/closed.


  LOCAL_CFLAGS += -DV4L2DEVICE_USE_POLL

  Use poll() before dequeueing a buffer.



BOOT TIME CONFIGURATION
-----------------------

The "ro.camera.v4l2device.resolution" system property allows to force one single
resolution (must be supported by V4L2). The value is in the "WIDTHxHEIGHT" format.



HOW TO BUILD
------------

In your target's makefile (e.g. device/mycompany/mydevice/mydevice.mk) add:

  PRODUCT_PACKAGES += camera.$(TARGET_BOARD_PLATFORM)
  PRODUCT_PACKAGES += media_profiles.xml

and just build Android.