【HAL】Framework入口函数简介(3):initialize

结构体

initialize()是一次性的初始化,将Framework的回调函数指针传递给HAL。在对camera3_device_ops结构体中任何其他函数调用之前,且成功调用open()之后,其将被调用一次。

性能要求:需要是非阻塞调用。HAL应该在5ms内且必须在10ms内返回此调用。

int (*initialize)(const struct camera3_device *,
            const camera3_callback_ops_t *callback_ops);
            
typedef struct camera3_callback_ops {
    void (*process_capture_result)(const struct camera3_callback_ops *,
            const camera3_capture_result_t *result);
            
    void (*notify)(const struct camera3_callback_ops *,
            const camera3_notify_msg_t *msg);
            
    camera3_buffer_request_status_t (*request_stream_buffers)(
            const struct camera3_callback_ops *,
            uint32_t num_buffer_reqs,
            const camera3_buffer_request_t *buffer_reqs,
            /*out*/uint32_t *num_returned_buf_reqs,
            /*out*/camera3_stream_buffer_ret_t *returned_buf_reqs);
            
    void (*return_stream_buffers)(
            const struct camera3_callback_ops *,
            uint32_t num_buffers,
            const camera3_stream_buffer_t* const* buffers);
} camera3_callback_ops_t;

Framework到HAL的调用流程

  • 遍历内部链表保存的数据,与入参camera3_device进行比较,判断是否对该device已经进行了数据保存。链表中没有数据的话,则创建新的链表node,保存camera3_device,并在同一结构体中保存hal3entry实现的cbOps回调,以及Framework的入参回调pCamera3CbOpsAPI
  • 接下来调用hal3的initialize接口。获取入参camera3_device保存的HALDevice实例,调用设置函数接口保存cbOps回调。
  • 前面文章写到open()的时候设置了一些回调函数给chi层调用,chi层调用的这些函数会调用到上面保存的cbOps回调,然后将cbOps转换为整个结构体地址,访问到pCamera3CbOpsAPI传入hal3,再调用pCamera3CbOpsAPI到Framework层的回调函数。这便是chi层调用Framework层回调的过程。
    initialize
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值