【Qcom Camera】照片模式连拍定屏分析

问题描述:

打开照片模式,设置长按音量键进行连拍,概率出现拍照定屏的情况

1.Log初步分析:

  //stuck on req 53, wait for buffer timeout.


 CHIUSECASE: [INFO ] chxusecasemc.cpp:9270 OfflineRequestProcess() Send offline request:53, inputFrame:53,snapshotReqId:3 featureMask = 0 SnapshotMask = 2

 CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:2795 WaitForBufferMetaRe

2.通过添加log发现,在执行FlushRDIQueue 方法前后ReadyBufferIndex发生了变化。

继续追踪log,将可疑点定位到下面的If判断条件中。

举个例子就是:有一个BufferIndex 2 已经获得了 meta/buffer ready, isBufferReady 和isMetadataReady 会被设置为 TRUE就会不满足判断条件,而BufferIndex 3 没有获得meta/buffer ready则会进入if判断。       

 if ((FALSE == pTargetBuffer->bufferQueue[lastReadyBufferIndex].isBufferReady) ||

      (FALSE == pTargetBuffer->bufferQueue[lastReadyBufferIndex].isMetadataReady))

{

         pTargetBuffer->lastReadySequenceID  = INVALIDSEQUENCEID;

         CHX_LOG_INFO("testlog-FlushRDIQueue 3: framenumber:%d, pipeline:%d, lastReady:%d,firstValid:%d,bufferIndex :%d",frameNumber, pipelineIndex,pTargetBuffer->lastReadySequenceID,pTargetBuffer->firstReadySequenceID,bufferIndex);
 }

我们需要关心是这些BufferIndex 是在哪里赋值并使用的,通过排查代码发现:

//BufferIndex 2 是通过frameNumber%RDIBufferQueueDepth得到

bufferIndex = frameNumber % RDIBufferQueueDepth;

//而BufferIndex 3是pTargetBuffer->lastReadySequenceID % BufferQueueDepth得到

lastReadyBufferIndex = pTargetBuffer->lastReadySequenceID % BufferQueueDepth;

firstReadyBufferIndex = pTargetBuffer->firstReadySequenceID % BufferQueueDepth;

这里我们就非常明白了,由于使用了两个不同长度的BufferQueueDepth,导致BufferIndex索引错乱,从而找不到正确的buffer,通过以下修改,问题解决。

-- UINT32 lastReadyBufferIndex = pTargetBuffer->lastReadySequenceID % BufferQueueDepth;

-- UINT32 firstReadyBufferIndex = pTargetBuffer->firstReadySequenceID % BufferQueueDepth;

+ UINT32 lastReadyBufferIndex = pTargetBuffer->lastReadySequenceID % RDIBufferQueueDepth;

+ UINT32 firstReadyBufferIndex = pTargetBuffer->firstReadySequenceID % RDIBufferQueueDepth; 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cam_Rxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值