相机拍照无响应问题分析一:【MEMORY_NOT_ENOUGH导致】持续快拍,一会儿无法拍照了

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

上一篇我们讲了:

这一篇我们开始讲: 相机拍照无响应问题分析一:【MEMORY_NOT_ENOUGH导致】持续快拍,一会儿无法拍照了

目录

一、问题背景

二、问题分析过程

2.1:基于原理分析

[2.2 :分析拍照是否失败](#2.2 :分析拍照是否失败)

[2.3 :查看内存状态](#2.3 :查看内存状态)

[2.4 :继续查看拍照状态](#2.4 :继续查看拍照状态)

[2.5 :解决方案](#2.5 :解决方案)


一、问题背景

使用快拍模式,持续快拍一段时间后,无法继续拍照,拍照无响应了

二、问题分析过程

2.1:基于原理分析

从现象看,拍照流程出现了问题,我们需要分析整个拍照过程流程,而无法拍照,是相机APP上层的一种表现,我们可以先从相机APP角度分析日志,看流程哪里出现问题。

2.2 :分析拍照是否失败

1:参考HAL3一级日志关键字:相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

2:我们搜索CaptureFailed关键字,看看是否拍照失败

cpp 复制代码
	行 9988: 08-02 17:00:51.731  7484  7712 E CameraAutoLogHelper: tryCatchCaptureFailedLog, reason: CF_MEMORY_IS_NOT_ENOUGH, reasonIndex: 2
	行 9989: 08-02 17:00:51.731  7484  7712 E CameraAutoLogHelper: tryCatchCaptureFailedLog inner, reason: CF_MEMORY_IS_NOT_ENOUGH
	行 9998: 08-02 17:00:51.744  7484  7712 E CameraService: onCaptureFailed
	行 10001: 08-02 17:00:51.745  7484  7484 E CameraCaptureProcessor: onCaptureFailed, capture: 20

从日志看,确实拍照失败,且是内存不足,我们进一步看拍照场景情况。

2.3 :查看内存状态

从日志看,进入低内存LMK状态,available memory:1038,有效内存为1G左右,而当前机型是12G,因此内存极度匮乏。

cpp 复制代码
10065 08-02 17:00:51.808   961   961 E lowmemorykiller: device memory 258676 free 56992 file 247714
10103 08-02 17:00:51.864   961   961 E lowmemorykiller: device memory 261903 free 58109 file 248987
10133 08-02 17:00:51.927  2645  4214 W : AthenaLocalService: requestId:904, type:force-speed, [available{1037, 1600, 69, 500, 99, 1037, true}]
10136 08-02 17:00:51.928  2645  4654 I : MemoryGuardAction: [START] clear_type=392[4012], available memory:1038, fast=true, [available{1037, 1600, 69, 500, 99, 1037, true}]

2.4 :继续查看拍照状态

从日志看:

  1. 拍照前只有不到1G内存:available memory:1008MB,
  2. 拍照失败这次之前已经拍照12张:Shutter Respond Start, count: 12
  3. 此次拍照为快拍状态,快拍6张:capture, burstCapture with picture count: 6
  4. 此次拍照提示拍照内存不足:isAllowedToTakePicture, MEMORY_NOT_ENOUGH。
  5. 返回拍照失败:onCaptureFailed
  6. 提示无法继续拍照:takePicture, not allow take picture。
cpp 复制代码
 08-02 17:00:51.183  2645  4654 I   : MemoryGuardAction: [FINISH] clear_type: 392[4012], available memory:1008MB, reclaimMem:3MB, fast:true, 44ms, [available{1005, 1600, 69, 500, 99, 1005, true}]
08-02 17:00:51.663  7484  7484 E Camera_CameraControlUI: onShutterButtonClick, ShutterButton.id: 2131297623
08-02 17:00:51.663  7484  7484 W Camera_CommonCapMode: onCameraShutterButtonClick
08-02 17:00:51.666  7484  7712 E Camera_y1_BaseMode: CameraTest Shutter Respond Start, count: 12
08-02 17:00:51.666  7484  7712 E Camera_y1_BaseMode: CameraTest Shutter Respond Start
08-02 17:00:51.669  7484  7712 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 1
08-02 17:00:51.669  7484  7712 W Camera_CaptureProcessor: capture, ID: 20, request burst-shot: false, supportEv: false, zslFrameCount: 0
08-02 17:00:51.671  7484  7712 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 2
08-02 17:00:51.707   961   961 E lowmemorykiller: device memory 262445 free 56294 file 246765
08-02 17:00:51.724  7484  7712 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 3
08-02 17:00:51.728  7484  7712 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 4
08-02 17:00:51.729  7484  7712 W Camera_CaptureProcessor: capture, burstCapture with picture count: 6
08-02 17:00:51.729  7484  7712 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 5
08-02 17:00:51.730  7484  7712 E Camera_TRACE: traceBeginSection, msg: CameraPerformance.MEMORY_NOT_ENOUGH
08-02 17:00:51.730  7484  7712 E Camera_TRACE: traceEndSection, msg: CameraPerformance.MEMORY_NOT_ENOUGH
08-02 17:00:51.730  7484  7712 W Camera, BaseMode: isAllowedToTakePicture, MEMORY_NOT_ENOUGH
08-02 17:00:51.731  7484  7712 E Camera, ProducerImpl: onCameraCaptureFailError, error result: CF_MEMORY_IS_NOT_ENOUGH
08-02 17:00:51.731  7484  7712 E Camera_OneCameraImpl: onCameraCaptureFailError, error: CF_MEMORY_IS_NOT_ENOUGH
08-02 17:00:51.731  7484  7712 E Camera_AutoLogHelper: tryCatchCaptureFailedLog, reason: CF_MEMORY_IS_NOT_ENOUGH, reasonIndex: 2
08-02 17:00:51.731  7484  7712 E Camera_AutoLogHelper: tryCatchCaptureFailedLog inner, reason: CF_MEMORY_IS_NOT_ENOUGH
08-02 17:00:51.744  7484  7712 E Camera_Service: onCaptureFailed
08-02 17:00:51.745  7484  7712 E Camera, ProducerImpl: takePicture, not allow take picture, mbFinishAddFrame: true, isCaptureAlgoInitializing: false, checkResult: 2, isCShot: false
08-02 17:00:51.745  7484  7484 E Camera_CaptureProcessor: onCaptureFailed, capture: 20
10001 08-02 17:00:51.745  7484  7484 E Camera_CaptureProcessor: onCaptureFailed, capture: 20
10002 08-02 17:00:51.745  7484  7712 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 6
10005 08-02 17:00:51.748  7484  7712 W Camera_y1_BaseMode: capture, ID: 20
10006 08-02 17:00:51.752  7484  7484 E Camera_y1_BaseMode: resetCaptureDecisionCaptureState, isResetDecision: true
10026 08-02 17:00:51.780  7484  8083 E Camera_LogCatcher: doCatch, request: Request{requestReason='CF_MEMORY_IS_NOT_ENOUGH', mLux=-1, mExceptionID=268505089, mMemoryAvailable=-1.0, mRunningMemoryAvailable=-1.0, mTemperature=-1.0, mCaptureModeName='common', mTimeStamp=1754125251731'}
10029 08-02 17:00:51.783  7484  7484 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: -1
10030 08-02 17:00:51.784  7484  7484 W Camera_CaptureProcessor: completeCapture, capture: 20, success: false, mForegroundCaptureId: 20
10031 08-02 17:00:51.784  7484  7484 E Camera_y1_BaseMode: resetCaptureDecisionCaptureState, isResetDecision: true
10033 08-02 17:00:51.785  7484  7484 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 20
10035 08-02 17:00:51.786  7484  7484 E Camera_LivePhotoPresenter: onCaptureStageChanged,  at least one of [mediaCodec audioRecorder audioEncoder] is not prepare, stage: 100

2.5 :解决方案

解决方案:

  1. 分析是否存在内存泄漏,并解决内存泄漏。
  2. 进行内存占用峰值优化。
  3. 在拍照逻辑上调整策略,如果处于低内存状态下,拍照从多帧切为单帧拍照,当内存充足的情况下,再切为多帧拍照。
  4. 调整查杀策略,是否内存。
  5. 调整算法不允许拍照的阀值。
  6. 低内存状态下切换算法,或减少算法处理。

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

下一篇讲解:

相关推荐
王老师青少年编程12 小时前
2025年【江苏“信息与未来”编程思维】真题及题解(T2:坐标变换)
c++·题解·真题·坐标变换·编程思维·江苏·信息与未来
私人珍藏库12 小时前
[Android] PeakFinder AR v4.8.89 (山峰全景识别+增强现实山峰查看器)
android·人工智能·智能手机·ar·工具·软件
researcher-Jiang13 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
alexhilton13 小时前
Kotlin DSL深度解析:从Gradle脚本到构建你自己的DSL
android·kotlin·android jetpack
烽火聊员14 小时前
查看Android Studio错误日志
android·ide·android studio
2023自学中15 小时前
C++ 内存追踪器
linux·c++
星空语19 小时前
音频001_Android+Linux车载/手机音频全链路分层架构图
android·linux·音视频
CyL_Cly20 小时前
解决官网下载慢!Android Studio 最新版网盘下载
android·ide·android studio
智塑未来20 小时前
鸿蒙系统对比安卓、iOS,核心优势是什么?
android·ios·harmonyos
DogDaoDao20 小时前
【GitHub】 LLVM Project 深度解析:现代编译器基础设施的基石
java·c++·python·程序员·github·编译器·llvm