打印
[i.MX]

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

[复制链接]
4227|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);

使用特权

评论回复
5
mini1986| | 2015-12-28 09:24 | 只看该作者
学习了,正在搞gstreamer,摄像头显示......

使用特权

评论回复
6
wojiademao| | 2019-3-18 15:18 | 只看该作者
kris_fei 发表于 2015-12-23 16:04
各位,已经解决了。
Android上使用相机的的Preview的时候,如果不使用Buffer,相机程序会反复创建销毁Byte ...

楼主,你好,我用该方法,还是会内存溢出,是跟系统有关系吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

175

帖子

3

粉丝