当前位置: 首页 > news >正文

相机Camera日志分析之三十六:相机Camera常见日志注释

【关注我,后续持续新增专题博文,谢谢!!!】

上一篇我们讲了

        这一篇我们开始讲 

目录

一、背景

二、:Camera相机APP常见日志详解

三、:Camera相机Framework CameraServer常见日志详解

四、:Camera相机高通Camx HAL常见日志详解

五、:Camera相机MTK HAL常见日志详解


一、背景

1:【效率决定成长空间】无论什么开发,分析日志是解决问题的法宝。且是最有效最常用的调试工具,特别是在Android或Linux领域下,log分析是开发必备技能,然而log分析效率参差不齐,你分析一份日志要一天,别人分析只需要一个小时,作何感想?别人一年的学习成果可能是你几年才能学会。

2:【巨量日志降低了开发效率】接触过Android日志,就清楚日志量非常大。几十个进程几百个线程同时并行打印日志。而Camera领域日志量极大,因为预览一般是每秒30帧的日志量,录屏一般是每秒60帧的日志量,少则几万行日志,多则几十万行日志,更多则多个日志总量几百万行日志。

3:【日志梯度分级来提效】开发追求效率,如何快速有效挖掘出问题,并如何解决问题变得尤为重要。此专题将以梯度分级日志来分析日志,让日志流程变得简单化,提高解决问题的效率。

4:【举一反三】当前以高通CamX架构为例讲解Camera日志,方式通用,其他领域模块均可效仿借鉴。

5:【开发思维决定成长高度】当前讲述的是Camera领域log分析梯度分级讲解,讲究的是一种分析技巧,分析思维,一种感悟。技术路线的提升空间,需要更多开发技巧和开发学习能力去提升。技术大拿分析问题,可以从日志快速定位问题并解决问题,有充分的时间去学习更多知识,成长速度极快。同一起跑线,学习能力,开发效率等等都决定了程序员的成长提升空间。记得我毕业三年,同学之间的差距无限拉大,一些人还在几千块薪水,你已经是他的四五倍了,人与人的差距就是短短几年就拉开了。

二、Camera相机APP常见日志详解

1.点击拍照和模式切换相关

相册点击删除:D Gallery.PhotoPage: onItemSelected

点击模式按钮:onModeTypeChanged

切换Mode:checkToSwitchMode, lastModeName:

切换前后置:onSwitchCameraButtonClick 或 onShutterButtonClick, switch_camera_button

点击拍照:onShutterButtonClick, ShutterButton.id

app下发请求:takePicture before

app日志:OneCameraImpl

拍照模式:ModeManager: onBeforePreview, capMode: 

相机拍照按钮点击:CameraManager: CameraTest Shutter Respond Start   

相机点击缩图:CameraManager: CameraTest Camera View Picture Start, onThumbNailClick zhen

显示缩略图:

从快门响应->缩略图显示完成时间:CapturePerformance: onEnd

相机下发拍照:OneCameraImpl: burstCapture, pictureNum:

shutterCallback:OneCameraImpl: mPictureCallback, onCaptureStarted, mCameraRole:

画幅:OCAM_RatioPresenter: updateFeatureValue

app接收到算法回调的预览决策结果:postEventFromNative

拍照对应的决策:capture, decisionResult:

看quick图时间戳:onPreviewReceived, refTimestamp

看log开关系统属性:initLog, autoTestLogOn

触发算法内存限制:decisionResult not allow to capture

相机退出时间点和堆积的待处理图片:Camera: on|FinishProcessPicture

丢图问题:OCAM_CaptureFailInfoUtil

进相机对应测试场景后,查看真实刷新率:adb shell "dumpsys SurfaceFlinger | grep activeMode"   

错峰状态:executeDeferJob in this scene

看应用拉起时间:ActivityController:

错峰堆积张数:getJobType, isFromOtherApp

2.收集meta和image送算法处理

收集图片: addImage, timeStamp:

收集 addMetaInfo

收集图片张数(meta和对应image): countAddFrame, identity:

app送完算法之前: processImages, objInfo:

app送完算法后: addFrameAndProcessImage, processImages result:

3.缩略图

Storage : newImage, jpeg

Storage : newImage, uri //更新_temp图

Storage : newImageForGallery

Storage : updateImage

Storage : updateQuickJpeg //存在快图逻辑更新为_quick

Thumbnail: createThumbnail

4.算法回图以及存图

 savePicture,

: savePicture, End

: onJpegReceived //相机中拍照在算法合成后大图从算法返回

: deleteThumbnailAndCache, thumbnailItem: //算法处理异常 app删除cache

ProcessQueueThread: afterAddFrame, mCaptureSize: //送完算法后等待算法送回图的张数

ProcessQueueThread: onPicReceiveFrom, mCaptureSize: //回大图后算法还需要处理的大图的张数

ImageSaverThread: handlePicture, picture.jpeg

ImageSaverThread: CameraTest Picture Save End //大图保存完成

quick图做大图:updateQuickToFinal

相机拍摄完整log流程

点击拍照:onShutterButtonClick, ShutterButton

快门响应:Shutter Respond Start

生成临时 temp:Storage : newImage

原图保存:Picture Save End

照片保存后相册收到多媒体库通知:Gallery.MediaSyncManager: mamMediaObserver.onChange

点击左下角跳转到相册:Camera View Picture Start, onThumbNailClick

有快拍流程的:

生成后相机插入临时记录到相册:Gallery.FastCaptureHelper: insert

原图生成后更新:Gallery.FastCaptureHelper: update

拍照后照片加载显示:Camera View Picture End

图片保存后相册解析 exif 并且更新 datetaken:

Gallery.MediaSyncActionStatistic: onSyncDateTaken:ParseDetail

一次完整的拍照的log分析

需要拆解出总时间、出帧耗时、各算法处理时间、具体算法的耗时、编码时间

过滤关键字:

burstCapture, pictureNum|onShutterButtonClick,|CameraManager: LocalImageAvailableListener,|AlgoInterface::process start|AlgoInterface::process end|sw_jpeg_enc|CameraTest Picture Save End|CameraTest Camera View Picture|codecProcess(.*)start|onJpegReceived, result|ActivityTaskManager: START u0|process_time|CameraUnit, : onFinishAddFrame|CameraManager: onFinishAddFrame|AddFrameBuff(.*)frameId:|addFrameBuff|MediaProvider: Moving

三、:Camera相机Framework CameraServer常见日志详解

Camera3-Device|CameraService:|Camera3-Stream:|CameraDeviceClient:|CameraCaptureSession|Camera2ClientBase:

四、Camera相机高通Camx HAL常见日志详解

ConfigureStreams:configure_streams

查看ExtensionMode选用的UseCase:

CHIUSECASE.*GetMatchingUsecase

CHIUSECASE.*feature2

CHIUSECASE.*advancedcamerausecase

request到达hal:process_capture_request.*num_output_buffers

result即将从hal向上传递:process_capture_result.*num_output_buffers

第一帧在CHI中处理流程:

创建的pipeline及对应的连接信息:topology:|GetXmlUsecaseByname

人脸检测:FDSWOnlyExecution

hal返回帧(预览和拍照通过size区分):Returning framework result Frame

打开关闭相机:CameraService::connect|camxhal3.*open|camxhal3.*close

hal所有的日志:CamX    :|CHIUSECASE

查看sensormode:sensor modelist

五、Camera相机MTK HAL常见日志详解

拍照request 请求:CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE
预览request 请求:CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW

六、相册常见日志详解

ThumbnailLoader:

相机操作相册数据库的helper类:FastCaptureHelper

插入:insert

更新:update

相册的大图页面onCreate执行:PhotoPage: onCreate

相册的大图页面onResume执行:PhotoPage: onResume

相相大图页面数据加载 线程:PhotoDataAdapter: ReloadTask

提交相册大图页面次高清图片任务线程:PhotoDataAdapter: submitScreenNailTask

PhotoDataAdapter: ScreenNailJob

PhotoDataAdapter: ScreenNailListener, onFutureDone

相册大图页面次高清图片任务执行完成:PhotoPage: CameraTest Camera View Picture End

【关注我,后续持续新增专题博文,谢谢!!!】

下一篇讲解:


文章转载自:

http://ENa5qHPj.hsgxj.cn
http://sAzmAo9c.hsgxj.cn
http://xAU2DpvG.hsgxj.cn
http://YiXpT8bL.hsgxj.cn
http://nCKbbrMc.hsgxj.cn
http://IVzojQns.hsgxj.cn
http://kKsiU2YV.hsgxj.cn
http://dXeyFxle.hsgxj.cn
http://7RF6YkPI.hsgxj.cn
http://dXbQ9cNB.hsgxj.cn
http://q40AUjVk.hsgxj.cn
http://BNJUE12Q.hsgxj.cn
http://hPRJGfIe.hsgxj.cn
http://8JnChZzp.hsgxj.cn
http://gamGZ02h.hsgxj.cn
http://7BmtNaNH.hsgxj.cn
http://Y6NzGpdG.hsgxj.cn
http://tFFla8kO.hsgxj.cn
http://mPYcSYPV.hsgxj.cn
http://oej2q5x4.hsgxj.cn
http://AVFGcFDY.hsgxj.cn
http://Wu7BTLNF.hsgxj.cn
http://Sve4x6Pv.hsgxj.cn
http://LlkfjGSk.hsgxj.cn
http://2qtIydEM.hsgxj.cn
http://iGUFkNBP.hsgxj.cn
http://XnI0Bnvm.hsgxj.cn
http://8MzJVW64.hsgxj.cn
http://fdWaDQoU.hsgxj.cn
http://0ADPULTD.hsgxj.cn
http://www.dtcms.com/a/378313.html

相关文章:

  • 250911算法练习:递归
  • 双目相机原理
  • AI教育白皮书解读 | 医学教育数智化转型新机遇,“人工智能+”行动实践正当时
  • vue3自定义无缝轮播组件
  • 【每日算法】合并两个有序链表 LeetCode
  • 瑞萨RA家族新成员RA4C1,符合DLMS SUITE2表计安全规范、超低功耗、支持段码显示,专为智能表计应用开发
  • 【maxscript】矩阵对齐-武器残影
  • Java 黑马程序员学习笔记(进阶篇4)
  • XR 和 AI 在 Siggraph 2025 上主导图形的未来,获取gltf/glb格式
  • TikTok矩阵有哪些运营支撑方案?
  • 《基于深度学习的近红外条纹投影三维测量》-论文总结
  • 优选算法 100 题 —— 2 滑动窗口
  • MongoDB 在线安装-一键安装脚本(CentOS 7.9)
  • DeepSeek辅助编写的利用quick_xml把xml转为csv的rust程序
  • Rider中的Run/Debug配置对应的本地文件
  • 综合项目实践:基于基础语法核心的Python项目
  • 开始 ComfyUI 的 AI 绘图之旅-Flux.1图生图(八)
  • 供应商管理系统包含哪些模块?
  • MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
  • Apache服务——搭建实验
  • “一半是火焰,一半是海水”,金融大模型的爆发与困局
  • 开源 C++ QT Widget 开发(十六)程序发布
  • MPC控制器C语言实现:基于一阶RL系统
  • C++版单例模式-现代化简洁写法
  • 强大的开源文档问答工具-Kotaemon
  • 音视频学习(六十三):AVCC和HVCC
  • 深度解析强化学习(RL):原理、算法与金融应用
  • 独立显卡和集成显卡切换电脑卡住了怎么办?
  • 加固笔记本是什么意思?加固笔记本图片
  • 光子精密3D线激光轮廓测量仪:赋能手机生产全流程质量与效率升级