我使用OnFrameAvailable回调来将rgb与深度数据同步。如果我只是渲染rgb点云一切都很好。
但如果我进行一些图像处理,相机会抛出以下异常:
E/camera-metadata: /home/ubuntu/jobs/redwood_internal/RedwoodInternal/Redwood/common/player-engine/src/camera-metadata.cc:56 RAW failed to match frame
或
E/camera-metadata: /home/ubuntu/jobs/redwood_internal/RedwoodInternal/Redwood/common/player-engine/src/camera-metadata.cc:56 YUV failed to match frame
TangoImageBuffer具有完整的垃圾值。有时是黑色像素,或者是缓冲区半旧和新像素数据。
我试图通过线程来解决它。每当我得到一个新的点云时,额外的图像处理线程需要大约1秒的CPU时间。它有点帮助。几秒钟后,同样的行为发生了。
问题是我无法正确调试本地代码。 android studio的监控显示正常的cpu和gpu使用情况。
我已经看到用户guppy有problem with the Leipniz tango version,但没有发布解决方案。所以我希望也许其他人已经解决了这个问题?或者有任何建议吗?
修改
使用tango_support库复制xyz和yuv缓冲区后,行为消失了。
答案 0 :(得分:0)
“YUV无法匹配帧”很可能是由于回调线程花费了太多时间来执行。简而言之,您不应该在OnFrameAvailable
回调中进行繁重的处理。这也适用于所有其他Tango回调,即姿势或深度回调。
对此的解决方案是复制字节缓冲区数据并在另一个线程(可能是渲染线程)中处理它。在tango-example-c video-overlay-jni-example中,应用程序执行memcpy将数据从回调线程复制到渲染线程,因此数据处理不会阻止回调继续进行。见line。