提供指向HAL模块的回调函数指针,以将异步相机模块事件通知到框架。在初始的camera HAL模块加载之后,在get_number_of_cameras()方法第一次被调用之后,以及在任何其他模块调用之前,框架都会调用这个函数。
函数及结构体
typedef struct camera_module_callbacks {
void (*camera_device_status_change)(const struct camera_module_callbacks*,
int camera_id,
int new_status);
void (*torch_mode_status_change)(const struct camera_module_callbacks*,
const char* camera_id,
int new_status);
} camera_module_callbacks_t;
int (*set_callbacks)(const camera_module_callbacks_t *callbacks);
Framework到HAL的调用流程
// Intercept callbacks
struct CameraModuleCbsRedirect
{
camera_module_callbacks_t moduleCbs; ///< The module callback functions defined in the entry implementation
/// and passed down to the HAL3Module instance
const camera_module_callbacks_t* pModuleCbsAPI; ///< The module callback functions defined by the application framework
};
指针转换过程:
cast a pointer to the first field back to the entire structure
根据结构体首个成员moduleCbs的地址,转换得到整个结构体g_cameraModuleCb的首地址,再通过结构体首地址调用第二个成员pModuleCbsAPI,即调用Framework传入的回调函数。
总结:moduleCbs实现的作用是为了调用pModuleCbsAPI。