[RK3399][Android7.1] Camera HAL打开流程

Platform: rk3399
OS: Android 7.1
Kernel: v4.4.83

以ov13850为例:

camera_device_open -> CameraHal_Module.cpp
   camera_device = malloc(sizeof(*camera_device)); //分配一个struct rk_camera_device, 包含标准HAL camera_device_t结构以及camera id
   camera_ops = malloc(sizeof(*camera_ops)); //分配camera_device_ops_t,和上层的交互都在这里了。
   new android::CameraHal  -> CamerHal.cpp //根据您当前不同的sensor type来选择不同的对象,这里用的是mipi csi sensor: ov13850
     new GrallocDrmMemManager //使用的是drm机制来分配camera内存
     new PreviewBufferProvider //分配preview buffer
     new BufferProvider //分配video, jpeg, raw buffer
     new CameraIspAdapter //创建mipi sensor对应的hal
     new DisplayAdapter //和display模块绑定起来
     new AppMsgNotifier -> //事件,命令队列,编码等处理都在这里了,是核心处理部分
       new CameraAppMsgThread //创建消息处理线程
       new EncProcessThread //创建编码处理线程
       new CameraAppFaceDetThread //脸部侦测线程
       new CameraAppCallbackThread //消息处理回调线程
     mCameraAdapter->initialize ->
       CameraAdapter::initialize> //调用CameraIspAdapter父类CameraAdapter
         cameraCreate -> //注意这里是调用isp adapter的方法
           CameraIspAdapter::cameraCreate -> CameraIspAdapter.cpp
             new CameraAfThread //创建audio focus线程
         initDefaultParameters ->
           CameraIspAdapter::initDefaultParameters -> //获取sensor支持的preivew/picture/video size, ae,af等参数
             m_camDevice->getSensorCaps //获取sensor支持的分辨率以及对应的fps,此api位于不开源的isp库libisp_silicomimageisp_api_7x_32bit.so中
             cameraConfig //white balance, zoom, exposure设置
     new CommandThread //此thread用于执行各种命令,如preview start,stop等,命令集位于enum CommandThreadCommands中。

你可能感兴趣的:(RK3399,子类__Camera)