hal层之camera显示处理流程分析

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术求索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值