我遇到了同样的问题。我使用点云示例作为编程的基础。在最初的几秒钟内没有姿势,此外,如果您尝试将视图更改为“前视图”,应用程序将崩溃(因为没有姿势,他可以将视图和位置更改为,我猜)。
你一个月前问过你的问题,所以我很好奇你是否能够捕捉到相机数据。我使用此代码从 NV12 转换为 RGB:
int size = (int)(buffer->width * buffer->height);
for (int i = 0; i < buffer->height; i++)
{
for (int j = 0; j < buffer->width; j++)
{
float y = buffer->data[i * buffer->stride + j];
float u = buffer->data[size+2*((i / 2) * (buffer->stride / 2) + (j / 2))];
float v = buffer->data[size+2*((i / 2) * (buffer->stride / 2) + (j / 2))+1];
TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)]=y;
TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)+1]=u;
TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)+2]=v;;
}
}
在宽度 x 高度中保存 Y 数据,然后是交替的 UV 数据。转换是在着色器中完成的(比在 FrameAvailable 方法中更快)使用已知的转换(Android YUV 格式):
attribute vec4 vertex;
attribute vec3 color;
uniform mat4 mvp;
varying vec4 v_color;
void main() {
gl_PointSize = 7.0;
gl_Position = mvp*vertex;
float r=color.x + (1.370705f * (color.z-128.0f));
float g=color.x - (0.698001f * (color.z-128.0f)) - (0.377633f * (color.y-128.0f));
float b=color.x + (1.732446f * (color.y-128.0f));
v_color = vec4(r/255.0f,g/255.0f,b/255.0f,1.0);
此代码不能完全工作。
- 如果我尝试只捕获 Y 数据(亮度,因此我应该得到一个灰色图像),那么只有灰点,没有意义。此外,没有黑白点,只有对比度很小的灰点。
- 如果我添加紫外线,我只会得到红色和黄色的颜色。如果我改变紫外线的位置,它都是很蓝的。我无法检测到任何物体或轮廓。
几帧后,相机崩溃并出现以下异常(第一次出现异常时,它显示“RAW”而不是“YUV”):
E/camera-metadata﹕ /home/ubuntu/jobs/redwood_internal/RedwoodInternal/Redwood/common/player-engine/src/camera-metadata.cc:56 YUV failed to match frame 1545.014677
-应用程序很慢,需要很多时间。我使用了互斥锁,但这并没有改变任何东西。有没有人解决过这个问题或者现在正在解决这个问题?
我稍微更改了配置,因为据说需要启用彩色相机。但我找不到任何关于这是如何完成的解释。我希望以下代码是正确的,它没有给我任何错误消息:
bool TangoData::SetConfig() {
[...]
if (TangoConfig_setBool(config_, "config_enable_color_camera", true) !=
TANGO_SUCCESS) {
LOGE("config_enable_color_camera Failed");
return false;
}
if (TangoConfig_setInt32(config_, "config_color_exp", 300) !=
TANGO_SUCCESS) {
LOGE("config_color_exp Failed");
return false;
}
[...]
return true;
}
希望这对您有所帮助,或者您已经在 Leibniz 版本中使用相机取得了良好的效果!