Camera HAL3接口

Camera提出的HAL3接口,其中包括一系列操作主体的结构体以及具体操作函数。
1)核心结构体
HAL3主要定义camera_module_t、camera3_device_t、camera3_stream_configuration、camera_stream以及camera3_stream_buffer这几个主要结构体.
camera_module_t:主要用于表示Camera模块
camera_device_t:主要用来表示Camera设备,其中定义了Camera3_device_ops操作集合,用来实现正常获取图像数据以及控制Camera的功能。
camera3_stream_configuration:该结构体主要用来代表配置的数据流列表,内部装有上层需要进行配置的数据流的指针。
camera3_stream_t:主要用来代表具体的数据流实体。在整个配置过程中,需要在上层进行填充,当下发到HAL中后,HAL会针对其中的各项属性进行配置。
camera3_stream_buffer_t:主要用来代表具体的buffer对象
2)核心接口函数
HAL3的核心接口都是在camera3_device_ops中被定义。
camera3_device_ops结构体定义了一系列的函数指针,用来指向平台厂商实际的实现方法。------>此一系列方法是上层直接对下层控制Camera Hal
1.initialize
何时被调用:在camera_modul_t中的open方法之后,其他camera3_device_ops方法之前被调用。
主要作用:将上层实现的回调方法注册到HAL中,并根据需要在该方法中加入自定义的一些初始化操作。
返回时间:在5ms内返回,最长不能超过10ms。
2.configure_streams
何时被调用:在Initialize方法完成之后,在调用process_capture_request方法之前被调用
主要作用:重设当前正在运行的Pipeline以及设执行的输入输出流,其中它回见stream_list中的新的数据流替换之前配置的数据流。
返回时间:500ms内返回,最长不能超过1000ms。
3.construct_default_request_settings
主要作用:构建一系列默认的Camera Usecase的capture设置项。通过camera_medata_t来进行描述,其中返回值是一个camera_metadata_t指针,其指向的内存地址是有HAL来进行维护。
返回时间:1ms内返回,最长不超过5ms
4.process_capture_request
主要作用:下发单次新的capture request到HAL中,上层必须保证该方法的调用都是在一个线程中完成,而且该方法是异步的,其结果是通过HAL调用另一个接口process-capture_result()来返回结果给上层,在使用过程中,通过
in-flight机制,保证短时间内下发足够多的requst,从而满足帧率要求。
5.dump
主要作用:打印当前Camera设备的状态
原理:上层通过dumosys工具输出debug dump信息或主动抓取bugreport的时候被调用,该方法必须是非阻塞实现。
返回时间:保证1ms内返回,最长不能超过10ms。
6.flush
何时调用:上层执行新的configure_strams的时候,且调用该方法时需清除当前已经在处理的或者即将处理的任务,为配置数据流提供相对稳定的环境。
主要作用:所有的还在流转derequest会尽快返回;并未开始进行流转的request会直接返回,并携带错误信息;任何可以打断的硬件操作会立即被停止;任何无法进行打断的硬件操作在当前状态下进行休眠
什么时候返回:flush会在所有buffer都得已释放,所有request都返回成功才真正返回。
返回时间:在100ms内返回,最长不超过1000ms。
camera3_callback_ops结构体中定义的回调方法将数据或者事件返回至上层。
1.process_capture_result
主要作用:返回HAL部分产生的metadata和image buffers。
返回时间:在5ms内返回。
2,notify
主要作用:异步返回HAL事件到上层,必须非阻塞实现
返回时间:要在5ms内返回

你可能感兴趣的:(camera)