FeiGeChuanShu/ncnn-android-yolov8崩溃问题解决
玩了下,过程真是蜿蜒曲折啊,先是我的小米手机不支持camera2 api,飞哥的项目用的camera2 的api,我先是用camera1来试着修改,但是由于camera1是nv21数据,不能直接调用飞哥写了api,我就用nv21转bitmap再转成opencv mat来操作最后通过imageView.setBitmap展示,发现性能太差了,然后就尝试将手机刷机然后修改属性支持了camera2,这样
·
FeiGeChuanShu/ncnn-android-yolov8崩溃问题解决
最近在玩yolov8目标检测算法,clone飞哥的项目玩了下,过程真是蜿蜒曲折啊,先是我的小米手机不支持camera2 api,飞哥的项目用的camera2 的api,我先是用camera1来试着修改,但是由于camera1是nv21数据,不能直接调用飞哥写了api,我就用nv21转bitmap再转成opencv mat来操作最后通过imageView.setBitmap展示,发现性能太差了,然后就尝试将手机刷机然后修改属性支持了camera2,这样我想应该没问题了,结果发生了崩溃,然后进行崩溃分析解决,然后就有了这篇记录文章。
崩溃日志
2023-06-20 23:12:57.519 13400-13400 DEBUG pid-13400 A pid: 13317, tid: 13343, name: ImageReader-640 >>> com.wy.detect <<<
2023-06-20 23:12:57.552 13400-13400 DEBUG pid-13400 A #01 pc 000000000040b048 /data/app/com.wy.detect-F2gICGxjfcotWL4V39qrsw==/base.apk (offset 0x1992000)
2023-06-20 23:12:57.552 13400-13400 DEBUG pid-13400 A #02 pc 000000000040a228 /data/app/com.wy.detect-F2gICGxjfcotWL4V39qrsw==/base.apk (offset 0x1992000)
---------------------------- PROCESS ENDED (13317) for package com.wy.detect ----------------------------
2023-06-20 23:12:59.429 507-507 SurfaceFlinger surfaceflinger E Failed to find layer (SurfaceView - com.wy.detect/com.wy.detect.ThirdActivity#0) in layer parent (no-parent).
2023-06-20 23:12:59.429 507-507 SurfaceFlinger surfaceflinger E Failed to find layer (Background for - SurfaceView - com.wy.detect/com.wy.detect.ThirdActivity#0) in layer parent (no-parent).
分析了日志,感觉没有有用的信息,就一行代码一行代码的查了,然后发现了关键信息在void NdkCameraWindow::on_image方法中发现调用ANativeWindow的方法就崩溃,显然是surface还没有被赋值就被拉来用了,然后就可以愉快的解决了
解决
在ndkcamera.cpp文件的void NdkCameraWindow::on_image方法最前面添加以下代码,判断持有的ANativeWindow是否为空即可解决该崩溃问题。
if(win == 0){
__android_log_print(ANDROID_LOG_WARN,"NdkCameraWindow", "win is null");
return;
}
更多推荐
已为社区贡献1条内容
所有评论(0)