camera HAL的实现流程
我们接着来介绍camera HAL的实现流程,为了实现一个具体功能的Camera,在HAL层需要一个硬件相关的Camera库(例如通过调用video for linux驱动程序和Jpeg编码程序实现或者直接用各个chip厂商实现的私有库来实现(本例使用后者),比如Qualcomm实现的libcamera.so和libqcamera.so),实现CameraHardwareInterface规定的接口,来调用相关的库,驱动相关的driver,实现对camera硬件的操作。这个库将被Camera的服务库libcameraservice.so调用。
具体实现文档如下图表所示:
HAL代码:
vendor/nvidia/tegra/hal/libnvomxcamera:
custcamerasettingsdefinition.cpp
nvomxcameracallbacks.h
nvomxcamera.cpp
nvomxcamera.h
nvomxcamerasettingsdefinition.h
nvomxcamerasettingsparser.cpp
nvomxcamerasettingsparser.h
在tegra2平台中特有的:nvomxcamera.cpp,libcamera.so,实现CameraHardwareInterface接口,openCameraHardware()在该库中实现。
- extern "C" sp<CameraHardwareInterface> HAL_openCameraHardware(int cameraId)
- {
- LOGVV("HAL_openCameraHardware ++\n");
- return NvOmxCamera::createInstance(cameraId);
- }
vendor/nvidia/tegra/core/drivers/openmax/il,libnvomx.so:OMX core 库,libnvodm_imager.so:odm image 的hal库,这部分默认情况下NV只提供了binary,在full build时会将此库copy到system目录下,继而集成到system.img中去。libnvodm_query.so:odm 的查询库,对GPIO,供电,i2c等其他相关硬件配置在本库完成。
对于pad的前后camera的问题,个人看法是上层告诉底层使用哪一个camera,然后每次OMX会重新构建OMX Graph,并在最后enable port的时候使用不同的camera硬件。上层处理基本保持一致。