connectOnFrameAvailable()为TangoImageBuffer提供了好奇的格式信息

时间:2015-01-27 08:06:32

标签: android colors google-project-tango

还试图从Tango的颜色凸轮访问颜色数据字节,我通过能够将探戈Cam连接到表面进行显示而被卡在Java API上(但实际上可以显示,不容易访问原始数据,也没有时间戳)...所以最后我在本机代码(最新的FERMAT lib和头文件)上使用C API切换,并按照我在堆栈溢出中找到的建议,将派生的示例代码注册到connectOnFrameAvailable() ......(我开始使用PointCloudActivity样本进行该测试。)

  • 我发现的第一个问题是注册到该回调的一个副作用,通常工作正常(回调定期引发),但是我也注册了另一个回调,以获得xyz云,开始无法触发。就像我提到的示例代码一样,云通过onXYZijAvailable()回调,应用程序使用TangoService_connectOnXYZijAvailable(onXYZijAvailable)进行注册。

所以没有得到xyz回调被触发的事情总是没有发生,但通常有一半的时间,在测试期间,有一个糟糕的解决方法,即通过在后台获取应用程序然后再次前景...这很奇怪,这是& #34;回收"与On-pause / On-resume低级别的东西有关?)。如果有人有线索...... 顺便说一句,在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摄像机相同的(彩色)格式作为低级别捕获? ??

1 个答案:

答案 0 :(得分:0)

1)关于来自相机的图像,我得出了相同的结论 - 只有图像数据的可用性是通过C API

2)关于图像 - 我对YUV没有任何问题,我上次遇到这些东西的时候是我写的JPEG东西 - 格式是裸的,即它是一个组织结构,没有标题信息,除了第一行像素mentioned here中的未定义元数据 - 这是一些代码的链接,可帮助您在对另一条消息的响应中解码图像here

3)关于点云返回 - 请注意这些信息是轶事,并且在某种程度上是迷信的产物 - 对我有用的东西有时会这样做,并且可能根本不适用于你

  • Tango似乎有一个非常明显的诀窍,就是停止产生点云。我认为其中很多都与内部非常灵敏的时序有关(我想知道是否有人提到Linux在首次制作时不是RTOS)
  • 我遇到的几乎所有问题都可以归结为搞乱时间
  • 一个。调试C级可能会使云停止

  • B中。原生代码或java代码中的错误导致处理回调的线程出现小问题可能导致点云停止发生

  • ℃。过多的负载可能导致系统失去同步,此时点云将停止 - 这是可检测的,您将开始看到图像的矩形区域中出现银色网格图案,并且点云将停止。很少,如果负载减少,银色模式消失,点云返回 - 系统将恢复 - 更常见的是银色模式(我认为它的3d空间化网格)增长以覆盖更多的图像 - 至少重新启动我需要应用程序,每隔3次左右重新启动一次平板电脑

总结一下,这是我的怀疑和对策,但它完全基于个人经验 -