Android's camera HAL connects the higher level
camera framework APIs in android.hardware to your underlying camera driver and hardware.
The figure and list describe the components involved and where to find the source for each:
- Application framework
- At the application framework level is the app's code, which utilizes the android.hardware.Camera API to interact with the camera hardware. Internally, this code calls a corresponding JNI glue class to access the native code that interacts with the camera.
- JNI
- The JNI code associated with android.hardware.Camera is located in
frameworks/base/core/jni/android_hardware_Camera.cpp
. This code calls the lower level native code to obtain access to the physical camera and returns data that is used to create the android.hardware.Camera object at the framework level. - Native framework
- The native framework defined in
frameworks/av/camera/Camera.cpp
provides a native equivalent to the android.hardware.Camera class. This class calls the IPC binder proxies to obtain access to the camera service. - Binder IPC proxies
- The IPC binder proxies facilitate communication over process boundaries. There are three camera binder
classes that are located in the
frameworks/av/camera
directory that calls into camera service. ICameraService is the interface to the camera service, ICamera is the interface to a specific opened camera device, and ICameraClient is the device's interface back to the application framework. - Camera service
- The camera service, located in
frameworks/av/services/camera/libcameraservice/CameraService.cpp
, is the actual code that interacts with the HAL. - HAL
- The hardware abstraction layer defines the standard interface that the camera service calls into and that you must implement to have your camera hardware function correctly.
- Kernel driver
- The camera's driver interacts with the actual camera hardware and your implementation of the HAL. The camera and driver must support YV12 and NV21 image formats to provide support for previewing the camera image on the display and video recording.
Implementing the HAL
The HAL sits between the camera driver and the higher level Android framework and defines an interface that you must implement so that apps can correctly operate the camera hardware. The HAL interface is defined in the
hardware/libhardware/include/hardware/camera.h
and
hardware/libhardware/include/hardware/camera_common.h
header files.
camera_common.h
defines an important struct, camera_module
, which defines a standard
structure to obtain general information about the camera, such as its ID and properties
that are common to all cameras such as whether or not it is a front or back-facing camera.
camera.h
contains the code that corresponds mainly with
android.hardware.Camera. This header file declares a camera_device
struct that contains a camera_device_ops
struct with function pointers
that point to functions that implement the HAL interface. For documentation on the
different types of camera parameters that a developer can set,
see the frameworks/av/include/camera/CameraParameters.h
file.
These parameters are set with the function pointed to by
int (*set_parameters)(struct camera_device *, const char *parms)
in the HAL.
For an example of a HAL implementation, see the implementation for the Galaxy Nexus HAL in
hardware/ti/omap4xxx/camera
.Configuring the Shared Library
You need to set up the Android build system to correctly package the HAL implementation into a shared library and copy it to the appropriate location by creating an
Android.mk
file:
- Create a
device/<company_name>/<device_name>/camera
directory to contain your library's source files. - Create an
Android.mk
file to build the shared library. Ensure that the Makefile contains the following lines:LOCAL_MODULE := camera.<device_name> LOCAL_MODULE_RELATIVE_PATH := hw
camera.<device_name>
(.so
is appended automatically), so that Android can correctly load the library. For an example, see the Makefile for the Galaxy Nexus camera located inhardware/ti/omap4xxx/Android.mk
.
- Specify that your device has camera features by copying the necessary feature XML files in the
frameworks/native/data/etc
directory with your device's Makefile. For example, to specify that your device has a camera flash and can autofocus, add the following lines in your device's<device>/<company_name>/<device_name>/device.mk
Makefile:PRODUCT_COPY_FILES := \ ... PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \
device/samsung/tuna/device.mk
.
- Declare your camera’s media codec, format, and resolution capabilities in
device/<company_name>/<device_name>/media_profiles.xml
anddevice/<company_name>/<device_name>/media_codecs.xml
XML files. For more information, see Exposing Codecs and Profiles to the Framework for information on how to do this. - Add the following lines in your device's
device/<company_name>/<device_name>/device.mk
Makefile to copy themedia_profiles.xml
andmedia_codecs.xml
files to the appropriate location:# media config xml file PRODUCT_COPY_FILES += \ <device>/<company_name>/<device_name>/media_profiles.xml:system/etc/media_profiles.xml # media codec config xml file PRODUCT_COPY_FILES += \ <device>/<company_name>/<device_name>/media_codecs.xml:system/etc/media_codecs.xml
-
Declare that you want to include the Camera app in your device's system image by
specifying it in the
PRODUCT_PACKAGES
variable in your device'sdevice/<company_name>/<device_name>/device.mk
Makefile:PRODUCT_PACKAGES := \ Gallery2 \ ...
Read more...
Great article,thank you for sharing this awesome article with us.
ReplyDeleteThank you..
android app development course
On-Demand Content:
ReplyDeleteYou missed an episode of your preferred program. You can catch up on your favorite TV series and movies whenever it's convenient with the help of the large on-demand video collection provided by the Spectrum TV App PC.
Hik Connect App For PC, Windows 11/10 Free Download hikconnectforpc.com visit site
ReplyDeleteRamma Foundation Repair offers expert Foundation Repair Edmonton, ensuring your home’s stability and safety. Trust us for reliable solutions that stand the test of time.
ReplyDelete