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

news/2024/10/31 3:20:58/

20a4a5925048731cadd7ed61d9554ca7.gif

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

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

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

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

e660dc3fce3a478fb95b8c8822cb0f87.png

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

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

二、Camera FWK 与 camera HAL 录像交互

6b517ef42b5061977c895f4046d89a79.png

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 交互

22224ab10dd67f8321511ce89b39a11f.png

美颜相机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 分析图

65ac89a0b251ed8bc1d17c26ed53cfe1.png

美颜相机视频录制卡顿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%

d0d081b0c528b32afaad63bf5ab05ad4.png

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

友情推荐:

Android 开发干货集锦

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

afd5beaa1dd6a0862d6eaccf9da5b048.png

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


http://www.ppmy.cn/news/437091.html

相关文章

Java程序结构模板——美颜相机案例

我们以美颜相机举例,分析一个程序都需要什么。 1、UI界面:大部分需要交互的程序都需要UI界面来实现交流互动。 2、监听器:人们在UI中的操作需要监听器来捕捉和执行相应的命令。 3、工具类:将执行命令的方法单独封装成工具类&#…

P8美颜相机的实现

美颜相机 一. 基础知识二. 图片处理将一个图片转化为一个二维数组并封装 三.写一个界面并添加画板和按钮四. 添加监听器并将图片信息传递给监听器中五.马赛克六.灰度七.素描美白油画轮廓检测 一. 基础知识 一幅图就是无数个像素点组成,可以看成宽w高h的二维数组图像…

大疆口袋相机美颜怎么设置_大疆(DJI)Pocket2 | 深度测评口袋相机:超多配件随心搭,自带美颜的拍摄助手!-极果...

写在前面 你真的需要一台DJI Pocket 2吗?嘿,大家好~我是抖音博主无情剪辑狗,作为一名摄影教学类博主很高兴能体验到DJI Pocket 2,经过自己一个星期的体验,来和大家分享一下这款产品我的心得体会以及什么样的人适合入手这样一台设备。 下面通过这则视频可以先简单的了解一…

基于OpenCV和OpenGL 的简易美颜相机

版本信息 AndroidStudio 3.5.2 OpenCV 4.1.2 OpenGL 2 OpenCV是什么 维基百科 在本Demo中,OpenCV实现面部识别功能 OpenGL是什么 维基百科 在本Demo中,OpenGL实现美颜功能 配置OpenCV环境 在AndroidStudio中新建C项目 下载OpenCV Android版 …

美颜相机的设计与实现

美颜相机的实现(利用Webcam) 如何实现美颜相机? 首先,需要导入三个外部jar包来调用摄像头 美颜相机是要调用我们的电脑摄像头实时获取我们的视频数据,视频就是由一帧一帧的图片组成的,所以我们需要先将一…

java简易美颜相机

一、图片处理的原理 首先我们知道数码照片只要是存储在计算机上的内容都是二进制码组成,而图片RGB值是由三组byte组成的( 255.0.0(红色)),所以它可以看成一个整数,红色即为:1671168…

NDK 开发实战 - 实现相机美颜功能

在 《图形图像处理 - 实现图片的美容效果》 一文中提到了图片的美容,采用双边滤波算法来实现,具体的算法流程和实现思路,大家可以在上篇文章中了解,这篇文章就在不再反复啰嗦了。这里我们再次来看下处理效果: 上面的效…

iOS-美颜相机 by GPUImage

之前网上有个段子说:日本女人靠化妆,韩国女人靠整容,中国女人靠美颜 足以证明相机美颜功能在中国地位是多么高,关于美颜相机的 App 在中国是那么的火 其实美颜相机的实现原理很简单,就是给采集到的图像通过添加滤镜进…