最近在开发USB摄像头相关的项目,在通过
camera.setFrameCallback(mIFrameCallback, UVCCamera.PIXEL_FORMAT_YUV420SP/*UVCCamera.PIXEL_FORMAT_NV21*/);获取帧数据时,发现有些分辨率正常,但是2064*1548分辨率程序运行一会儿就会退出。
奔溃日志如下:
发现这个分辨率和其它分辨率的不同之处在于,1548不能被8整除,并配合arm-linux-androideabi-addr2line工具仔细排查,发现下面的代码有问题:明眼人一看就知道什么问题,我就不再啰嗦。
之后再预览,问题不再复现。
所在文件:xxx\Libuvccamera\src\main\jni\UVCCamera\UVCPreview.cpp
static void copyFrame(const uint8_t *src, uint8_t *dest, const int width, int height, const int stride_src, const int stride_dest) {
/*const int h8 = height % 8;
for (int i = 0; i < h8; i++) {
memcpy(dest, s