相机预览闪花屏条纹问题处理方法

和你一起终身学 习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:

一、问题描述

测试同事报了一个拍照后预览闪绿条纹问题

现象大概如下图:

image.png

二、问题分析

1. 复现问题 dump 图分析查看是哪个阶段导致的预览花屏问题

1.1 整个P2S I/O buffer 的 dump 方法

go 复制代码
adb root
adb remount
adb shell setenforce 0
adb shell setprop persist.vendor.mtk.camera.log_level 3
::P1 dump
::adb shell setprop vendor.debug.camera.dump.en 1
::adb shell setprop vendor.debug.feature.forceEnableIMGO 1
::adb shell setprop vendor.debug.camera.dump.p1.imgo 1

:: 预览魔法数字开启
adb shell setprop debug.cam.drawid 1
::enable img3o
adb shell setprop vendor.debug.fpipe.force.img3o 1
adb shell rm -rf /data/vendor/camera_dump/*
adb shell setprop vendor.debug.p2f.dump.enable 1
adb shell setprop vendor.debug.p2f.dump.mode 1
adb shell setprop vendor.debug.camera.preview.dump 1
::adb shell setprop vendor.debug.camera.preview.dump 0 复现问题后请关闭dump
adb shell pkill camera*
pause

1.2 camera_dump文件夹下的文件名称命令格式

UniqueKey-RequestNo-FrameNo-SensorDev-Port-BufferWidth-BufferHeight-BufferStride_ImageWidthxImageHeight_xxx.Format

在/data/vendor/camera_dump 下会dump 不同阶段的内容

image.png

  • sub P1 rrzo buffer

    142407049-109-137-sub-rrzo-PW1280-PH960-BW2400__1280x960_10_3.packed_word

  • img3o buffer (P2Anode 下过了ISP 但是还没过MDP 的buffer,供3DNR用)

    142407049-109-137-sub-img3o-PW1280-PH960-BW1280__1280x960_8_s0.yv12

  • sub 的P1 lcso buffer

    142407049-109-137-sub-PW384-PH384-BW768__326x244_12_s0.lcso ---> sub sensor 的P1 lcso buffer

  • previewCallback ,也就是P2S 最终输出的sub sensor 的previewCallback buffer

    142407049-109-137-sub-undef-PW960-PH720-BW960__960x720_8_s0.nv21

  • wdmao 代表判断为 display output buffer,也就是P2S 最终输出的sub sensor的display buffer

    142407049-109-137-sub-wdmao-PW960-PH720-BW960__960x720_8_s0.nv21

通过 dump 查看 经过P2Anode 输出的yv12 图就有条纹问题,然后需要查看有条纹问题那一帧附近的log。

1.3 dump 异常图Android log 分析

出现问题帧时间点: 14:25:21.430129 附近

image.png

1.4 查看14:25:21.430129 附件对应的 kernel log

go 复制代码
kernel log时间 +8 H +10ms 即kernel 时间 295 附近  = android 异常帧时间: 14:25:21.430129 
  异常条纹帧是,sensor driver 有调用set_max_framerate 更新 framelength =3008 导致预览坏帧发生。
go 复制代码
[  285.672406][T603753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     [  285.726555][T603753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
      // +8 H +10ms 即kernel 时间 295 附近  = android 异常帧时间: 14:25:21.430129
    [  285.823289][T500109] wdtk-5: [thread:109] 2025-03-10 06:25:11.875381 UTC;android time 2025-03-10 06:25:11.875381
     [  285.832074][ T3753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     [  285.876262][ T3753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     ... ...
     [  294.567745][T703753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     [  294.594359][T703753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     [  295.217019][T203753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     //+8 H +10ms 即kernel 时间 295 附近  = android 异常帧时间: 14:25:21.430129 
     // 异常条纹帧是,sensor driver 有调用set_max_framerate 更新 framelength =3008 导致预览坏帧发生
     [  295.268061][ T3753] 3AEventThd: xxx_SensroDriver[set_max_framerate] xxx_SensroDriver set_max_framerate():framerate = 300, min framelength should enable = 1
     [  295.269492][ T3753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3008,mini_framelegth=2506
     [  295.308503][T403753] 3AEventThd: xxx_SensroDriver[set_max_framerate] xxx_SensroDriver set_max_framerate():framerate = 240, min framelength should enable = 1
     [  295.309832][T403753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     [  295.341744][T403753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133
     [  295.396582][ T3753] 3AEventThd: xxx_SensroDriver[set_shutter] CST_004:xxx_SensroDriver set_shutter(): ratio = 64, real_shutter =6016, framelength =3133,mini_framelegth=3133

三、问题解决

发现Camera sensor驱动文件的流程存在少许问题,错误调节了framelength,导致预览出现概率性坏帧发生, 找到问题点后,修改framelength update 流程,此问题后续压测不复现。

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点个在看,为大佬点赞!

相关推荐
weixin_466485112 天前
halcon标定助手的使用
数码相机
诸葛务农4 天前
ToF(飞行时间)相机在人形机器人非接触式传感领域内的应用
数码相机·机器人
塞北山巅4 天前
相机自动曝光(AE)核心算法——从参数调节到亮度标定
数码相机·算法
美摄科技5 天前
相机sdk是什么意思?
数码相机
phyit5 天前
全景相机领域,影石何以杀出重围?
数码相机
鄃鳕5 天前
装饰器【Python】
开发语言·python·数码相机
聪明不喝牛奶5 天前
【已解决】海康威视相机如何升级固件
数码相机
PAQQ5 天前
1站--视觉搬运工业机器人工作站 -- 相机部分
数码相机·机器人
诸葛务农5 天前
人形机器人基于视觉的非接触式触觉传感技术
数码相机·机器人
moonsims6 天前
被动式热成像摄像机也称前视红外 (FLIR) 摄像机-Sierra-Olympia Technologies 中波红外摄像机
数码相机