首页 文章详情

补充 | 美颜相机卡顿trace分析

程序员Android | 536 2022-04-18 11:12 0 0 0
UniSMS (合一短信)

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、美颜相机录制视频 trace 分析概览
二、Camera FWK 与 camera HAL 录像交互
三、美颜相机app 与SurfaceFlinger 交互
四、美颜相机卡顿丢帧trace 分析

一、美颜相机录制视频 trace 分析概览

美颜相机录制视频 trace 分析概览

截取1s 内 美颜相机帧率为30fps, 对应的Camera HAL 、Camera FWK 、美颜相机 App 的帧率如上

二、Camera FWK 与 camera HAL 录像交互

Camera FWK 与 camera HAL 录像交互

Camera FWK 与 camera HAL 录像交互
  1. Camera FWK 通过dequeueBuffer 申请有给buffer,处理一帧请求。

  2. Camera FWK
    通过HIDL进行一阵请求processCaptureRequest_3_4处理,关键字:HIDL::ICameraDeviceSession::processCaptureRequest_3_4::client

  3. Camera HAL 处理FWK 的processCaptureRequest_3_4请求,关键字:
    HIDL::ICameraDeviceSession::processCaptureRequest_3_4::server

  4. Camera HAL 处理完后,通过HIDL callback 通知FWK 处理完成 关键字: HIDL::ICameraDeviceCallback::notify::client

  5. Camera FWK 通过 HIDL::ICameraDeviceCallback::notify::server 获取通知。

  6. Camera HAL 通过HIDL::ICameraDeviceCallback::processCaptureResult_3_4::client 将一帧的处理结果callback 给FWK

  7. Camera FWK 通过HIDL::ICameraDeviceCallback::processCaptureResult_3_4::server 接受 Camera HAL callback 帧

  8. Camera FWK 处理完成后 通过queuebuffer 将buffer 送到SurfaceTexture 中.

  9. queuebuffer 后美颜相机对应的surfaceTexture buffer +1

三、美颜相机app 与SurfaceFlinger 交互

美颜相机app 与SurfaceFlinger 交互

美颜相机app 与SurfaceFlinger 交互流程如下:
  1. Camera FWK 通过queuebuffer callback 给app 一帧 buffer 给SurfaceTexture

  2. 美颜相机app 对应的 SurfaceTexture buffer +1

  3. 美颜相机app 从Camera FWK callback 的帧 取帧处理后,通过queueBuffer 将buffer 送给SF 的BufferQueue中

  4. SurfaceView对应的buffer +1

  5. Vsync-sf 到来后, SF 从 SurfaceView 的buffer 中取出一帧率进行消费并送显, 同时 surface 的 buffer -1

四、美颜相机卡顿丢帧trace 分析

4.1 美颜相机视频录制卡顿trace 分析图

美颜相机视频录制卡顿trace 分析图

美颜相机视频录制卡顿问题分析步骤

  1. Camera HAL 底层出图

  2. Camera FWK callback 并queuebuffer 给app ,对应的SurfaceTexture buffer +1

  3. 美颜相机app 获取FWK callback 的帧进行美颜等处理,处理完成后通过queuebuffer 给SF 的BufferQueue 中, 同时对应的SurfaceView 的buffer +1

  4. 从trace 中看,app 取帧后由于美颜相机app的一些原因,导致没法及时处理帧,并queuebuffer 给SF,进而导致丢帧卡顿。查看此时美颜相机MTRenderEglEngi 渲染引擎一直在不停的Running 状态,同时查看CPU loading 为90%。

  5. SF 在Vsync-sf 到来后,会从bufferQueue中acquriebuffer,但是此时app并没有合成buffer 到BufferQueue,SF没有buffer用来刷新,这时候给用户的感觉就是上一帧显示了2次,进而导致人眼感觉卡顿。

4.2 美颜相机录制视频卡顿1s 内CPU loading 为90%

美颜相机录制视频卡顿1s 内CPU loading 为90%

友情推荐:

Android 开发干货集锦

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

点击阅读原文,为大佬点赞!

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter