还试图从Tango的颜色凸轮访问颜色数据字节,我通过能够将探戈Cam连接到表面进行显示而被卡在Java API上(但实际上可以显示,不容易访问原始数据,也没有时间戳)...所以最后我在本机代码(最新的FERMAT lib和头文件)上使用C API切换,并按照我在堆栈溢出中找到的建议,将派生的示例代码注册到connectOnFrameAvailable()
......(我开始使用PointCloudActivity样本进行该测试。)
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摄像机相同的(彩色)格式作为低级别捕获? ??
答案 0 :(得分:0)
1)关于来自相机的图像,我得出了相同的结论 - 只有图像数据的可用性是通过C API
2)关于图像 - 我对YUV没有任何问题,我上次遇到这些东西的时候是我写的JPEG东西 - 格式是裸的,即它是一个组织结构,没有标题信息,除了第一行像素mentioned here中的未定义元数据 - 这是一些代码的链接,可帮助您在对另一条消息的响应中解码图像here
3)关于点云返回 - 请注意这些信息是轶事,并且在某种程度上是迷信的产物 - 对我有用的东西有时会这样做,并且可能根本不适用于你
一个。调试C级可能会使云停止
B中。原生代码或java代码中的错误导致处理回调的线程出现小问题可能导致点云停止发生
总结一下,这是我的怀疑和对策,但它完全基于个人经验 -