MTK camera打开流程介绍

3bbc07abde1e2ea029ecb39e4d54a5ba.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、整体介绍
1、MiddleWare(MW)层介绍
2、Pipeline介绍
二、Camera Open流程

一、整体介绍

首先看下mtkcam的整体框架图如下包含了很多的内容,其中camera的打开流程也贯穿在其中,从Camera APK 一层层的系统调用到driver再到Hardware层,这篇文章主要从Pipeline开始介绍打开camera的流程,JAVA/Cameraservice/MiddleWare层后续再进行介绍:

1、MiddleWare(MW)层介绍

ICameraProvider: 向上暴露的接口调用,实现是在CameraProverideer中;
Device@3.2ICameraDevice: 用于Camera Service去操作各个Camera device的操作,实现在CameraDevice3中;
Device@3.2ICameraDeviceSession: Camera会话的接口;
ICameraDeviceCallBack: 底层对上层的CallBack接口;
CameraDeviceManager: 用于管理CameraDevice,包括查找,打开,关闭等。

2、Pipeline介绍

PipelineModelHAL3核心架构,对上需要开放对Pipeline创建 & 操作的API,对下需要建立Pipeline & 管理Pipeline的生命周期。PipelineModel会针对不同的场景创建不同的PipelineHWNodeHWNode向下传输APP层的命令,向上传递图形数据:
P1Node: pipelineroot nodeinput app

### MTK 平台摄像头初始化和启动过程 在MTK平台上,摄像头模块的初始化和启动涉及多个层次的操作,从硬件抽象层到应用框架。具体来说: #### 1. 硬件驱动加载 当设备开机并完成基本引导程序后,Linux内核会负责加载必要的硬件驱动程序。对于摄像头而言,这通常涉及到V4L2 (Video4Linux2) 驱动[^3]。 ```c static int __init mtk_vcodec_drv_init(void) { pr_info("Media controller driver init\n"); v4l2_device_register(&pdev->dev, &v4l2_dev); } module_init(mtk_vcodec_drv_init); ``` 这段代码展示了如何注册一个视频设备给V4L2子系统,这是摄像头工作所必需的第一步。 #### 2. HAL 层初始化 一旦底层驱动准备就绪,上层的应用处理器就需要通过HAL(Hardware Abstraction Layer)来访问这些资源。Camera HAL服务会在Android系统的早期阶段被创建,并等待来自应用程序层面的请求。 ```java public class CameraService extends IInterface { public static final String SERVICE_NAME = "media.camera"; @Override protected void onCreate() { super.onCreate(); Log.d(TAG, "Creating Camera Service..."); // Initialize camera hardware here. } } ``` 此Java类代表了相机服务的一部分,在这里可以执行具体的初始化逻辑[^2]。 #### 3. 应用级调用 最后一步是由应用程序发起实际的打开/配置命令。比如拍照APP可能会这样做: ```java private void openCamera(int width, int height){ try { manager.openCamera(cameraId, stateCallback, null); setupTransform(width, height); } catch (Exception e) { Log.e(TAG, "Failed to open camera.", e); } } ``` 上述方法尝试获取指定ID的摄像机实例,并设置预览窗口大小等参数[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员Android

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

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

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

打赏作者

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

抵扣说明:

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

余额充值