[RK3288][Android6.0] Camera HAL流程小结

Platform: RK3288
OS: Android 6.0

Kernel: 3.10.92


虽然是Android6.0, 但是rockchip用的是Camera HAL 1.0的架构,没有更新到3.x.

开机:(MediaServer会调用)
camera_get_number_of_cameras ->        CameraHal_Module.cpp
    camera_board_profiles::getInstance ->
        createInstance ->
            new camera_board_profiles
            fopen    //打开/etc/cam_board.xml
            XML_ParserCreate
            fread
            XML_ParseBuffer    //解析文件
    LoadSensor ->
        OpenAndRegistALLSensor    //第一次会去尝试注册所有cam_board.xml里的sensor.
            OpenAndRegistOneSensor ->
                RegisterSensorDevice    //通过ioctl来执行sensor的初始化过程。
        ReadDevNameFromXML ->    //如果已经初始化过,那么直接读取/data/camera/media_profiles.xml里被第一次初始化添加进去的sensor.
            OpenAndRegistOneSensor //注册只在cam_board.xml中存在的sensor,uvc camera除外。
    open    //打开/dev/videox
    ioctl    //cmd VIDIOC_QUERYCAP, 获取driver name, front/back, orientation, capabilityies(capture, streming等), version.
        v4l_querycap    ->     v4l2-ioctl.c
        ops->vidioc_querycap ->
            soc_camera_querycap     ->    soc_camera.c
                ici->ops->querycap ->
                    rk29_camera_querycap ->    rk30_camera_oneframe.c
    ioctl -> CameraHal_module.cpp    //cmd: VIDIOC_TRY_FMT type:V4L2_BUF_TYPE_VIDEO_CAPTURE
        v4l_try_fmt ->    v4l2-ioctl.c
            ops->vidioc_try_fmt_vid_cap ->    //type: V4L2_BUF_TYPE_VIDEO_CAPTURE
                soc_camera_try_fmt_vid_cap ->     soc_camera.c
                    soc_camera_try_fmt ->
                        ici->ops->try_fmt ->
                            rk_camera_try_fmt ->    rk30_camera_oneframe.c
                                v4l2_subdev_call -> //args: try_mbus_fmt
                                    generic_sensor_try_fmt    //generic_sensor.c    
    new rk_cam_total_info    //所有sensor的信息都放在里面。
    new rk_DV_info     //每个分辨率都会new一个出来。
    ioctl ->     //cmd VIDIOC_ENUM_FRAMEINTERVALS    获取一个sensor各个分辨率对应的fps。
    ProduceNewXml    //重新生成 media_profiles.xml
                       
APP打开Camera:                        
camera_device_open -> CameraHal_Module.cpp    //提供上层ops,
    new android::CameraHal ->    //HAL层和上层的处理都用这个类实现了。
        commandThreadCommandQ //创建commandCmdQ的message queue.
        new IonMemManager    //申请ion内存
        new PreviewBufferProvider    //preview buffer
        new BufferProvider        //video buffer
        new BufferProvider        //Raw buffer
        new BufferProvider    //jpeg buffer
        new CameraSOCAdapter    //一般的isp camera, uvc camera是new CameraUSBAdapter
            Ca

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值