我试图做TangoImageBuffer数据字段,其中,如果图像是YUV的memcpy的,据我应该是(buffer->width * buffer->height * 3 * sizeof(uint8_t))
的sizeof只是踢,我知道这是1),但是这使得段错误。 如果我只是复制height*width
字节它的工作原理,也与height*width*2
,我似乎得到有效的数据,我只是不知道哪个大小应这一领域是。
我的(相关)的代码:
void onImageCallback(void *context, TangoCameraId id, const TangoImageBuffer *buffer)
{
memcpy(img_struct->image_buffer->getBuffer(), buffer->data, buffer->width * buffer->height * 3 * sizeof(uint8_t)));
}
凡image_buffer是一个Java字节缓冲区包装类。我正在使用C ++其中,里面是通过调用新指定的大小(在这种情况下我想memcpy的相同)分配内存,并做了一个jobject参考env->NewGlobalRef(env->NewDirectByteBuffer(buffer, this->bufferSize));
,其中这- > BUFFERSIZE等于(buffer->width * buffer->height * 3 * sizeof(uint8_t))
我敢肯定它是分配的内存适量,因为我还用它在其他功能memcopying的xyzij缓冲区(用对应的大小差异,因为这些都是浮动)和它工作得很好(可是我也试着overallocating),所以我知道这个问题是不是目标太小。
在这种情况下,信息可能加入到这个问题,我使用的是普通彩色摄像机,所以高度应为1280宽度720,如果我没有记错。
编辑:在手动找我没有得到的段错误复制的最大数据量,现在看来,这顶的1384448(即作品,1384449段错误),这是在图像的像素大约1.5倍的大小,添加到我的混乱。