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

和你一起终身学 习,这里是程序员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 流程,此问题后续压测不复现。

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

点个在看,为大佬点赞!

相关推荐
Hi2024021715 小时前
Apollo中三种相机外参的可视化分析
数码相机
一碗白开水一15 小时前
【第6话:相机模型2】相机标定在自动驾驶中的作用、相机标定方法详解及代码说明
人工智能·数码相机·自动驾驶
LetsonH17 小时前
⭐CVPR2025 AKiRa:让视频生成玩转相机光学的黑科技[特殊字符]
人工智能·python·科技·深度学习·数码相机·计算机视觉
格林威1 天前
Baumer相机如何通过YoloV8深度学习模型实现工厂自动化产线牛奶瓶盖实时装配的检测识别(C#代码UI界面版)
人工智能·深度学习·数码相机·yolo·机器学习·计算机视觉·c#
格林威2 天前
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现路口车辆速度的追踪识别(C#代码UI界面版)
人工智能·深度学习·数码相机·yolo·计算机视觉·c#·视觉检测
中达瑞和-高光谱·多光谱4 天前
推扫式和凝视型高光谱相机分别采用哪些分光方式?
数码相机
爱凤的小光4 天前
图漾AGV行业常用相机使用文档
数码相机
-dzk-4 天前
【论文精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering
数码相机·opencv·计算机视觉·3d·三维重建·3dgs·高斯
格林威4 天前
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各种食物的类型检测识别(C#代码UI界面版)
人工智能·深度学习·数码相机·yolo·计算机视觉
爱凤的小光4 天前
图漾相机-ROS1_SDK_ubuntu 4.X.X版本编译
linux·数码相机·ubuntu