EasyAR数据与内存

EasyAR的数据流

EasyAR的组件基本上是互相独立的。所以在EasyAR可以工作之前需要连接这些组件。为了建立完整的EasyAR场景,一个CameraDevice需要attachedImageTracker,然后Augmenter需要周期性地从ImageTracker获取新的FrameattachnewFrame操作让整个AR链条开始工作,而数据则在这个链条上流动。

CameraDevice产生的Image会在每帧进入ImageTracker并推动tracker运行。这些Image将跟随Frame进入Augmenter

Target从图像和json文件中构造出来,可以被加载进ImageTracker。当它被tracker检测或跟踪到,将会跟随Frame进入Augmenter。最终移动到AugmentedTarget

EasyAR的内存模型

EasyAR的C++对象与C++的std::shared_ptr行为类似,它是一个对真实对象的非常薄的封装。对于一个继承自RefBase的类C,你可以像std::shared_ptr<_c\_internal_\>一样使用。C 所引用的内存是引用计数的,并且以类似于std::shared_ptr的方式管理。同时,C 的线程安全性与std::shared_ptr相同。EasyAR的对象通常是延迟初始化的,也就是说在特定方法被调用之前,对象是无效的(operator bool()返回false)。

如果从camera获取的ImagenewFrame所捕获,它将会在Frame被释放之前一直驻留在内存中。

ImageTracker会保持加载到自身的target的引用。这个引用可以通过从tracker卸载或销毁tracker来移除。FrameAugmentedTarget也会保持被跟踪到的target的引用。加载之后的Target在这些引用被移除之前将不会被释放。

results matching ""

    No results matching ""