和你一起一生学习,这里是程序员 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 设计架构概览
- 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。
- 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
- 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 等信息; - 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.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;
}
原文链接:https://blog.csdn.net/TaylorP…
情谊举荐:
Android 干货分享
至此,本篇已完结,如有不对的中央,欢迎您的倡议与斧正。同时期待您的关注,感谢您的浏览,谢谢!