我通过以下方式复制传递给TangoService_connectOnFrameAvailable()的回调中的YV12帧:
uint8_t* dest_buffer = destination_tango_image->data;
int src_offset = buffer->stride;
int dest_offset = 0;
// copy Y channel
static const int height = buffer->height;
static const int width = buffer->width;
static const int stride = buffer->stride;
for(int i = 0; i < height; i++) {
memcpy(dest_buffer + dest_offset, buffer->data + src_offset, width);
src_offset += stride;
dest_offset += width;
}
// copy V channel
static const int half_width = width / 2;
static const int half_height = height / 2;
static const int half_stride = stride / 2;
for(int i = 0; i < half_height; i++) {
memcpy(dest_buffer + dest_offset, buffer->data + src_offset, half_width);
src_offset += half_stride;
dest_offset += half_width;
}
// copy U channel
for(int i = 0; i < half_height; i++) {
memcpy(dest_buffer + dest_offset, buffer->data + src_offset, half_width);
src_offset += half_stride;
dest_offset += half_width;
}
执行此操作后,我尝试在vooya中显示YV12图像,并且在转换为RGBA后也显示(在前一个回答here之后)。但是,在这两种情况下,我都会在图像的左上角和整个底部看到一些瑕疵。这是一个例子:
我是如何复制数据的?或者这是TangoService_connectOnFrameAvailable()的问题?平板电脑的相机有问题吗?
答案 0 :(得分:0)
在解析图像时你没有做错,你在这里看到的工件实际上是存储在图像中的元数据,它在Tango Service的下层堆栈中使用。