shiyinghan / UVCAndroid

Apache License 2.0
188 stars 51 forks source link

摄像头预览时出现闪退的问题 setFrameCallback #17

Open dananmao opened 1 year ago

dananmao commented 1 year ago

backtrace:

00 pc 000000000000f814 /data/app/~~Cr51kyzRcyiwE5Gn0aqukg==/app_ct-4OeTWS8A57lSqDUmbFPi1A==/lib/arm64/libuvc.so (uvc_yuyv2nv21+272)

#01 pc 0000000000015600  /data/app/~~Cr51kyzRcyiwE5Gn0aqukg==/app_ct-4OeTWS8A57lSqDUmbFPi1A==/lib/arm64/libUVCCamera.so (_ZN10UVCPreview19do_capture_callbackEP7_JNIEnvP9uvc_frame+96)
#02 pc 000000000001537c  /data/app/~~Cr51kyzRcyiwE5Gn0aqukg==/app_ct-4OeTWS8A57lSqDUmbFPi1A==/lib/arm64/libUVCCamera.so (_ZN10UVCPreview10do_captureEP7_JNIEnv+180)
#03 pc 0000000000014eb0  /data/app/~~Cr51kyzRcyiwE5Gn0aqukg==/app_ct-4OeTWS8A57lSqDUmbFPi1A==/lib/arm64/libUVCCamera.so (_ZN10UVCPreview19capture_thread_funcEPv+64)
#04 pc 00000000000af884  /apex/com.android.runtime/lib64/bionic/libc.so
#05 pc 00000000000500d4  /apex/com.android.runtime/lib64/bionic/libc.so
#06 pc 0000000000000000  <unknown>
shiyinghan commented 1 year ago

你是使用setFrameCallback了吗

dananmao commented 1 year ago

你是使用setFrameCallback了吗

是的,使用setFrameCallback了。时不时的报这个错误,现在发现和拍照没有关系。 4路usb摄像头,2路人脸识别用到了setFrameCallback NV21格式数据返回,还有2路不预览,做拍照使用

另外,大佬有没有关于这个库的微信交流群?

setFrameCallback这么处理的 byte[] nv21 = new byte[460800]; mCameraHelper.setFrameCallback(new IFrameCallback() { @Override public void onFrame(ByteBuffer frame) { if (frame.remaining() == nv21.length) { frame.get(nv21, 0, frame.remaining()); if (listener != null) { listener.onFramCallback(nv21, 640, 480, rotation, isHorizontalMirror); } } } }, UVCCamera.PIXEL_FORMAT_NV21);

还有经常 有这个信息 allocate new frame ,预览的数据一帧应该是 460800 字节才对 I/libUVCCamera: [12051UVCPreview.cpp:293:callbackPixelFormatChanged]:PIXEL_FORMAT_NV21: I/libUVCCamera: [12050UVCPreview.cpp:115:get_frame]:allocate new frame I/libUVCCamera: [12049UVCPreview.cpp:115:get_frame]:allocate new frame I/libUVCCamera: [12050UVCPreview.cpp:115:get_frame]:allocate new frame

dananmao commented 1 year ago

预览一段时间报错,目前定位是是 frame.c:1431 uvc_yuyv2nv21 数据转换报错,请问如何修改? C:\Users\l\AppData\Local\Android\Sdk\ndk\21.4.7075529\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin>aarch64-linux-android-addr2line -f -e libuvc.so 000000000000fc24 uvc_yuyv2nv21 D://workspace/app_ct/lib_uvc_camera/src/main/jni/libuvc/android/jni/../../src/frame.c:1431

shiyinghan commented 1 year ago

有没有更详细的错误信息,现在提供的信息页看不出什么,而且frame.c:1431这个位置也不对。 frame.c文件总共只有1363行

dananmao commented 1 year ago

有没有更详细的错误信息,现在提供的信息页看不出什么,而且frame.c:1431这个位置也不对。 frame.c文件总共只有1363行

不好意思,行数有点问题,因为下载了源码,加了两个数据格式转换方法 具体的报错不清楚,对图像格式和c/c++这块不了解 具体是这行代码,uvc_yuyv2nv21 用uvc_yuyv2nv12 也是 *(y1++) = yuv[src_step + 0]; // y on next row 这行报错

image

q84256948 commented 7 months ago

同上问题,用uvc_yuyv2nv12 也是 *(y1++) = yuv[src_step + 0]; // y on next row 这行报错。作者问题解决了吗?求指教