为什么Tango彩色图像中有文物?

时间:2015-02-04 17:53:21

标签: image yuv rgba image-formats google-project-tango

我通过以下方式复制传递给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之后)。但是,在这两种情况下,我都会在图像的左上角和整个底部看到一些瑕疵。这是一个例子:

image artifacts

我是如何复制数据的?或者这是TangoService_connectOnFrameAvailable()的问题?平板电脑的相机有问题吗?

1 个答案:

答案 0 :(得分:0)

在解析图像时你没有做错,你在这里看到的工件实际上是存储在图像中的元数据,它在Tango Service的下层堆栈中使用。