和你一起一生学习,这里是程序员 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设计架构概览

  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

3.2 OpenCamera

3.3 ConfigureStream

3.4 Request

四. 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.cppstatic 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_DECLSstatic 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;}

原文链接:https://blog.csdn.net/TaylorP...
情谊举荐:
Android 干货分享

至此,本篇已完结,如有不对的中央,欢迎您的倡议与斧正。同时期待您的关注,感谢您的浏览,谢谢!