1. 首页
  2. IT资讯

Mtk Camera MtkCam3架构学习

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

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一. MtkCam3的代码结构及学习资料
二. MtkCam3设计架构概览
三. MtkCam3代码跟读
四. MtkCam3 Debug

一.MtkCam3的代码结构及学习资料

mtk online里搜Camera 可以搜到很全面的Mtk Hal3的学习文档,Mtk整理的文档很棒,简单到位!
https://online.mediatek.com/Q…

下述的代码结构只是列出了mtk平台的camera路径,Android Camera相关路径并未记录

APP
MTK Camera

vendor/mediatek/proprietary/packages/apps/

HAL
MTK Camera Hal,目前最新Android Camera Api2下用的都是HAL3的内存,HAL3主要代码在mtkcam3中,有些工具类复用了mtkcam中

vendor/mediatek/proprietary/hardware/mtkcam/
vendor/mediatek/proprietary/hardware/mtkcam3/

以下是和camera强相关

vendor/mediatek/proprietary/hardware/jpeg/
vendor/mediatek/proprietary/hardware/bwc/
vendor/mediatek/proprietary/hardware/m4u/

Kernel

kernel-x.xx/drivers/misc/mediatek/imgsensor/

二.MtkCam3设计架构概览

Mtk Camera MtkCam3架构学习

  1. MtkCam3实现了Android定义的几个HAL3的接口:ICameraProvider, ICameraDevice, ICameraDeviceSession, ICameraDeviceCallback;ICameraProvider 的实现类CameraProviderImpl包在 camera device manager 外围,只是一个 adapter, 适配不同版本的 camera device interface。 Camera Service(指的是camera android层的进程: cameraserver ) 可以通过 ICameraProvider 去拿到 ICameraDevice 。ICameraDevice 和 ICameraDeviceSession 的实现类 CameraDevice3Impl, CameraDevice3SessionImpl 。用于Camera Service 去操作每一个 camera。 比如: open, close, configureStreams, processCaptureRequest 。
  2. AppStreamManager位于framework与pipeline之间,主要职责有如下三条:
  • Callback result to Android framework according to the returning rules which are defined in camera3.h
  • Update vendor defined gralloc usage
  • Android/ MTK streamInfo conversion
  1. IPipelineModel的角色
    在open/close stage,Power on/off sensor;在config stage,根据APP的createCaptureSession里面带下来的surface list,推测Output以及按照Topological推测Pipeline各个Node是否需要创建以及各个Node的I/O buffer,建立整条PipelineModel;在Request Stage,接到上层queue下来的request,转化为Pipleline统一的IPipelineFrame,决定这个request的I/O buffer、Topological、sub frame、dummy frame、feature set等信息;
  2. HWNode是大Node,三方算法的挂载在这些node里面,作为小node.
    P1Node负责输出raw图,P2CaptureNode主要负责拍照的frame的处理,P2StreamingNode主要负责录像预览的数据处理,JpegNode的输入时main YUV、Thumbnail YUV及metadata,输出是Jpeg及App metadata。

三. MtkCam3代码跟读

3.1 Camera HAL3 init

Mtk Camera MtkCam3架构学习

3.2 OpenCamera

Mtk Camera MtkCam3架构学习

3.3 ConfigureStream

Mtk Camera MtkCam3架构学习

3.4 Request

Mtk Camera MtkCam3架构学习

四. MtkCam3 Debug

1.Mtk日志开关

设置log level,cameraHalserver重启生效

persist.vendor.mtk.camera.log_level 控制代码如下:

#define CAM_ULOGMD(fmt, arg...)        ALOGD(fmt, ##arg)

mtkcam/include/mtkcam/utils/std/Log.h
#define CAM_LOGD(fmt, arg...)   do{ if(0!=mtkcam_testLog(LOG_TAG, 'D')) ALOGD(fmt, ##arg); } while(0)

mtkcam/utils/std/Misc.cpp
static int32_t determinePersistLogLevel()
{
    int32_t level = ::property_get_int32("persist.vendor.mtk.camera.log_level", -1);
    CAM_ULOGMD("###### get camera log property =%d", level);
    if  (-1 == level) {
        level = MTKCAM_LOG_LEVEL_DEFAULT;
    }
    return level;
}

__BEGIN_DECLS
static int32_t gLogLevel = determinePersistLogLevel();
int mtkcam_testLog(char const* /*tag*/, int prio)
{
    switch (prio)
    {
        case 'V':       return (gLogLevel>=4);
        case 'D':       return (gLogLevel>=3);
        case 'I':       return (gLogLevel>=2);
        case 'W':       return (gLogLevel>=1);
        case 'E':       return (1);
        default:        break;
    }
    return 0;
}

本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/203321.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code