还试图从 Tango 的颜色凸轮访问颜色数据字节,我被困在 java API 上,因为我能够将 tango Cam 连接到表面进行显示(但实际上显示就可以了,不容易访问原始数据,也时间戳)...所以最后我在本机代码(最新的 FERMAT 库和标头)上使用 C API 并遵循我在堆栈溢出中找到的建议,通过将派生示例代码注册到connectOnFrameAvailable()
...(我开始使用 PointCloudActivity 示例进行该测试)。
- 我发现的第一个问题是注册到该回调的一些副作用,通常工作正常(回调定期触发),但随后我也注册的另一个回调,以获得 xyz 云,开始无法触发。就像我提到的示例代码一样,云是通过
onXYZijAvailable()
回调获得的,应用程序使用TangoService_connectOnXYZijAvailable(onXYZijAvailable)
.
因此,未能触发 xyz 回调并不总是发生,但通常有一半的时间,在测试期间,有一个糟糕的解决方法,就是将应用程序置于后台,然后再次置于前台......这很奇怪,这是否与“恢复”相关暂停/恢复低级别的东西??)。如果有人有线索....顺便说一句,在Java API中,观察到相同的副作用,一旦连接凸轮纹理进行显示(通过Tango足够的API ...)
但这是我的第二个“问题”,回到从相机获取 YV12 颜色数据:通过注册到 TangoService_connectOnFrameAvailable(TangoCameraId::TANGO_CAMERA_COLOR, nullptr, onFrameAvailable) 并提供静态函数 onFrameAvailable 定义如下:
static void onFrameAvailable(void* ctx, TangoCameraId id, const TangoImageBuffer* buffer)
{
...
LOGI("OnFrameAvailable(): Cam frame data received");
// Check if data format of expected type : YV12 , i.e.
// TangoImageFormatType::TANGO_HAL_PIXEL_FORMAT_YV12
// i.e. = 0x32315659 // YCrCb 4:2:0 Planar
//LOGI("OnFrameAvailable(): Frame data format (%x)", buffer->format);
....
}
问题是接收到的 TangoImageBuffer 结构的宽度、高度、步幅信息似乎有效(1280x720,...),但返回的格式每次都在变化,而不是预期的幻数(这里是 0x32315659)...我在做有什么问题吗?(但其他信息还可以……)
此外,这里显然只定义了一种数据格式(YV12),但是从演示应用程序中看到鱼眼图像,似乎是灰度图像,它是否使用与 RGB cam 相同的(颜色)格式作为低级捕获?