(ContinuousShot)长按相机连拍,没有达到最大的连拍数量

[DESCRIPTION]

长按相机连拍,没有达到最大的连拍数量时,自动停止;

[ANALYSE]

拍照的jpeg data会从底层callback回app,而因为连拍速度比较快,所以若app保存速度不够快,也就是T卡performance不好,jpeg data堆积很容易就让camera的memory爆掉。所以我们在app中会根据当前使用的memory情况去做不同的处理:

Case 1:当camera app的剩余memory小于44M时,会告诉底层降低拍照速度为最多3张/秒;

Case 2:当camera app的剩余memory小于10M时,会自动停止连拍。

从流程上说,连拍时底层每callback回来一张jpeg data,app除了保存这个jpeg data之外,会先判断是否剩余的memory是否小于10M,若小于则会停止连拍。若不小于10M,则继续判断是否小于44M,若是,则会降低拍照速度为最高3张/秒。

注意:我们这里说的memory是dvm的heap。

正常的流程log如下:

Step1. 开始长按拍照键log关键词为“onShutterButtonLongPressed”):

例如:

01-07 11:28:17.139  4718  4718 V ModeActor: onShutterButtonLongPressed!

 

Step2. Camera App会在每一张图片从底层callback回来后,先判断是否需要停止连拍(log关键词为“isNeedStopCapture”):正常时isNeedStopCapture返回值为false,表示不需要停止连拍

例如:

01-07 11:28:17.888  4718  4718 V ModeActor: isNeedStopCapture() mMaxMemory=134217728, total=24436704, free=1594200, real free=111375224, mUsedStorage=2644983, mLeftStorage=2569375616, return false

这里的real free=111375224表示剩余的dvm heap size,

 

Step3. 判断下一次的拍照是否需要减速(log关键词为“isNeedSlowDown”):正常时isNeedSlowDown的返回值为false,表示不需要减速。

例如:

01-07 11:28:23.067  4718  4718 V ModeActor: isNeedSlowDown(44499404) return false

 

然而针对此问题,通常是因为T卡performance不好,app的jpeg data很容易堆积,所以一般来说会先降速,若降速还是不行,就会停止连拍。

可通过下面的这些log查看是否是属于此问题:

1.在log中搜索ModeActor: isNeedSlowDown”,若返回值为true表示app告诉底层要需要降速为3张/秒了。

例如:

01-07 11:28:23.338  4718  4718 V ModeActor: isNeedSlowDown(46608579) return true

并且此时Hal层会打印出现面这样的log(关键字可以搜“{ContinuousShot}[capture] (mu4CurrentCount, usSleep, usMinContinuousShotToShotTime)”),

例如:
01-07 11:28:23.736   107  4767 D mHalCam : {ContinuousShot}[capture] (mu4CurrentCount, usSleep, usMinContinuousShotToShotTime)=(25, 10227, 333000)

只要这句log(红色部分)有打印出来,就表示Hal层已经在跑降速的流程了。

 

2.降速后还是不行,camera app会自动通知Hal层停止连拍,可以搜关键词“isNeedStopCapture”,当return true时,表示要停止连拍(这个log是判断该问题的关键。)。

例如:

01-07 11:28:33.188  4718  4718 V ModeActor: isNeedStopCapture() mMaxMemory=134217728, total=129949664, free=6204312, real free=10472376, mUsedStorage=116209397, mLeftStorage=2569375616, return true

另外“real free=10472376”=9.987 MB < 10M,表示剩余dvm memory不足10M.

3.同时log中可以搜索” Camera-JNI: Couldn't allocate byte array for JPEG data” ,表示JNI层也会报出已经无法为jpeg data分配内存。

例如:

01-07 11:28:33.517  4718  4811 E Camera-JNI: Couldn't allocate byte array for JPEG data

  

[SOLUTION]

通常这种问题是T卡performance太差,写数据太慢导致,建议更换一张正常的T卡进行测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值