[i.MX] [已解决]Camera Preview Callback内存溢出

[复制链接]
 楼主| kris_fei 发表于 2015-8-13 13:34 | 显示全部楼层 |阅读模式
本帖最后由 kris_fei 于 2015-12-29 10:26 编辑

平台是imx6, Android 4.4
使用Camera preview callback来获取preview实时帧,发现内存会一点点减少,请问该如何调试呢?

下面是用top看到Preview callback线程一点点在吃内存:
User 22%, System 6%, IOW 0%, IRQ 0%
User 227 + Nice 0 + Sys 68 + Idle 724 + IOW 0 + IRQ 0 + SIRQ 0 = 1019

  PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc
2123  3018  1   6% S 291608K  52728K  fg media    C2-0-CallbkProc /system/bin/mediaserver
2987  2987  0   3% S 892792K  55948K  fg u0_a20   android.camera2 com.android.camera2
2123  2751  0   2% S 291608K  52728K  fg media    Binder_2        /system/bin/mediaserver
2123  2489  0   2% S 291608K  52728K  fg media    Binder_1        /system/bin/mediaserver
2123  3010  0   1% S 291608K  52728K  fg media    Binder_3        /system/bin/mediaserver
2123  2123  1   1% S 291608K  52728K  fg media    mediaserver     /system/bin/mediaserver
2987  2999  0   1% S 892792K  55948K  fg u0_a20   Binder_2        com.android.camera2
2987  2998  0   1% S 892792K  55948K  fg u0_a20   Binder_1        com.android.camera2
2987  3036  0   1% S 892792K  55948K  fg u0_a20   Binder_3        com.android.camera2
2987  3037  0   1% S 892792K  55948K  fg u0_a20   Binder_4        com.android.camera2
3080  3080  1   0% R   1400K    488K     root     top             top
2120  2120  1   0% S 216940K   6048K  fg system   surfaceflinger  /system/bin/surfaceflinger
2987  3005  0   0% S 892792K  55948K  fg u0_a20   Camera Handler  com.android.camera2
2120  2264  0   0% S 216940K   6048K  fg system   EventThread     /system/bin/surfaceflinger
2123  3034  0   0% S 291608K  52728K  fg media    RequestHandle   /system/bin/mediaserver
1214  1214  0   0% S      0K      0K     root     kinteractiveup  
1230  1230  0   0% S      0K      0K     root     galcore daemon  
2120  2265  1   0% S 216940K   6048K  fg system   EventThread     /system/bin/surfaceflinger
2123  3014  0   0% S 291608K  52728K  fg media    C2-0-FrameProc  /system/bin/mediaserver
2123  3033  1   0% S 291608K  52728K  fg media    RequestHandle   /system/bin/mediaserver



User 23%, System 7%, IOW 0%, IRQ 0%
User 237 + Nice 0 + Sys 78 + Idle 711 + IOW 0 + IRQ 0 + SIRQ 0 = 1026

  PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc
2123  3018  1   6% S 291916K  52992K  fg media    C2-0-CallbkProc /system/bin/mediaserver
2123  3032  0   3% S 291916K  52992K  fg media    RequestHandle   /system/bin/mediaserver
2987  2987  0   3% S 892792K  55948K  fg u0_a20   android.camera2 com.android.camera2
2123  2489  0   1% S 291916K  52992K  fg media    Binder_1        /system/bin/mediaserver
2987  2999  0   1% S 892792K  55948K  fg u0_a20   Binder_2        com.android.camera2
2123  3010  1   1% S 291916K  52992K  fg media    Binder_3        /system/bin/mediaserver
2987  2998  0   1% S 892792K  55948K  fg u0_a20   Binder_1        com.android.camera2
2987  3037  1   1% S 892792K  55948K  fg u0_a20   Binder_4        com.android.camera2
2987  3036  0   1% S 892792K  55948K  fg u0_a20   Binder_3        com.android.camera2
2123  2751  1   1% S 291916K  52992K  fg media    Binder_2        /system/bin/mediaserver
3080  3080  1   1% R   1400K    488K     root     top             top
2120  2120  0   0% S 216940K   6048K  fg system   surfaceflinger  /system/bin/surfaceflinger
2123  2123  0   0% S 291916K  52992K  fg media    mediaserver     /system/bin/mediaserver
2594  2697  0   0% S 691868K  23756K  fg u0_a5    MtpServer       android.process.media
2987  3005  1   0% S 892792K  55948K  fg u0_a20   Camera Handler  com.android.camera2
2123  3033  0   0% S 291916K  52992K  fg media    RequestHandle   /system/bin/mediaserver
2120  2265  1   0% S 216940K   6048K  fg system   EventThread     /system/bin/surfaceflinger
2120  2164  0   0% S 216940K   6048K  fg system   DispSync        /system/bin/surfaceflinger
2464  2480  0   0% S 951468K  40068K  bg system   android.bg      system_server
1230  1230  0   0% S      0K      0K     root     galcore daemon  
^C

cowboy2014 发表于 2015-8-13 20:28 | 显示全部楼层
感觉这个好复杂啊,希望楼主早日解决问题
mini1986 发表于 2015-8-19 11:04 | 显示全部楼层
关注一下,期待高手帮你解决......到时候学习学习......

评分

参与人数 1威望 +1 收起 理由
kris_fei + 1

查看全部评分

 楼主| kris_fei 发表于 2015-12-23 16:04 | 显示全部楼层
各位,已经解决了。
Android上使用相机的的Preview的时候,如果不使用Buffer,相机程序会反复创建销毁Byte数组,造成系统频繁垃圾回收,非常影响体验,这时可以用Buffer来进行处理。

首先,在调用相机的回调时,用如下代码:

for (int i = 0; i < 3; i++) {
                                camera.addCallbackBuffer(new byte[((previewWidth * previewHeight) * bitsPerPixel) / 8 ]);
                        }
camera.setPreviewCallbackWithBuffer(this);



在Callback中加了3个Buffer,一般2个应该够用,保险起见加3个。

在OnPreviewFrame处理完毕后,再把Buffer加回去。

public void onPreviewFrame(byte[] data, Camera camera) {
camera.addCallbackBuffer(data);
mini1986 发表于 2015-12-28 09:24 | 显示全部楼层
学习了,正在搞gstreamer,摄像头显示......
wojiademao 发表于 2019-3-18 15:18 | 显示全部楼层
kris_fei 发表于 2015-12-23 16:04
各位,已经解决了。
Android上使用相机的的Preview的时候,如果不使用Buffer,相机程序会反复创建销毁Byte ...

楼主,你好,我用该方法,还是会内存溢出,是跟系统有关系吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

175

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部