hal层camera设备打开流程
int camera_device_open(const hw_module_t* module, const char* name, k\hardware\rockchip\camera\CameraHal\CameraHal_Module.cpp
if (name != NULL) { //获取camera的id
cameraid = atoi(name);
camera = new android::CameraHal(cameraid);
CameraHal::CameraHal(int cameraId)-> \hardware\rockchip\camera\CameraHal\CameraHal.cpp
mCameraAdapter = new CameraUSBAdapter(cameraId);
int CameraAdapter::initialize() \hardware\rockchip\camera\CameraHal\CameraAdapter.cpp
int CameraAdapter::initialize()
{
int ret = -1;
//create focus thread
LOG_FUNCTION_NAME
if((ret = cameraCreate(mCamId)) < 0)
return ret;
initDefaultParameters(mCamId);
LOG_FUNCTION_NAME_EXIT
return ret;
}
int CameraAdapter::cameraCreate(int cameraId)
cameraDevicePathCur = (char*)&gCamInfos[cameraId].device_path[0];
iCamFd = open(cameraDevicePathCur, O_RDWR);
mCamFd = iCamFd;
hal层camera预览流程梳理
int camera_start_preview(struct camera_device * device) \sdk\hardware\rockchip\camera\CameraHal\CameraHal_Module.cpp
->int CameraHal::startPreview() \sdk\hardware\rockchip\camera\CameraHal\CameraHal.cpp
if ((mCommandThread != NULL)) {
msg.command = CMD_PREVIEW_START;
msg.arg1 = NULL;
setCamStatus(CMD_PREVIEW_START_PREPARE, 1);
commandThreadCommandQ.put(&msg);
-> void CameraHal::commandThread()
case CMD_PREVIEW_START:
err=mCameraAdapter->startPreview(app_previw_w,app_preview_h,drv_w, drv_h, 0, false);调用cameraAdapter来显示
status_t CameraAdapter::startPreview(int preview_w,int preview_h,int w, int h, int fmt,bool

本文详细介绍了Android硬件抽象层(HAL)中相机设备的打开流程,从`camera_device_open`开始,经过`CameraHal`实例化,到`CameraAdapter`初始化并打开相机设备。接着,阐述了相机预览的启动过程,包括`startPreview`调用,`CameraAdapter`的`startPreview`方法,以及`CameraPreviewThread`的创建和运行。在预览流程中,`DisplayAdapter`接收并处理来自相机的帧数据,并通过`ANativeWindow`将帧数据送至显示。整个流程涉及到了硬件接口、线程同步和显示逻辑等多个关键环节。
最低0.47元/天 解锁文章
2325

被折叠的 条评论
为什么被折叠?



