GenTL
GenTL定义了5种对象类型,按父/子关系组织:
1. | 系统模块 |
2. | 接口模块 |
3. | 设备模块 |
4. | 数据流模块 |
5. | 缓冲模块 |
每个模块:
□ | 对应于系统的特定元件; |
□ | 定义可以查询的相关信息 (info命令)(使用get info函数); |
□ | 允许行使该模块的功能(使用特定函数)。 |
此外,除缓冲模块外的所有模块,都充当允许读/写操作的端口。GenApi使用这些端口函数加载该模块的描述文件,并使用其GenApi功能。
系统模块
系统模块(也称为TLSystem)代表GenTL发生器(例如coaxlink.cti库)。此模块位于父/子树的顶部。
系统模块提供关于GenTL发生器的基本信息:例如CTI文件的完整路径和供应商名称(Euresys)。
系统模块的真正目的,是列出系统中存在的接口(或采集卡)。系统模块最重要的功能是TLGetNumInterfaces(检索系统中的采集卡数量)和TLOpenInterface(访问其中一个采集卡)。
GenTL标准调用帧抓取器接口。系统模块为每个采集卡提供一个子接口:如果计算机中有两个Coaxlink 卡,系统模块将提供两个子接口。
每个接口代表一个采集卡。接口模块中有全局帧捕获功能,如数字I/O线。这意味着控制I/O线的GenApi功能连接到接口。
每个接口还充当一个或多个设备的父接口。接口模块最重要的功能是IFGetNumDevices(检索可连接到接口的相机数量)和IFOpenDevice(访问其中一个设备)。
GenTL标准使用术语设备和远程设备来表示两个相关但不同的概念。远程设备是一个真正的相机,实际地连接到一个采集卡。这与我们在这里描述的设备模块不同。
设备模块是包含与相机相关的采集卡设置的模块。这包括触发器和频闪器之类的东西。
设备模块还充当一个或几个 数据流的父级,并且可以被视为的 远程设备的同级。设备模块最重要的功能是 DevOpenDataStream (访问数据流)和 DevGetPort (访问远程设备)。
数据流模块处理缓冲区。在采集运行期间,图像从相机发送到采集卡,然后将其传输到主机上分配的内存缓冲区。数据流模块是图像采集发生的地方。这是大多数功能所在的地方。
缓冲处理非常灵活。可以使用任意数量的缓冲区。缓冲区要么在输入队列中,要么在输出队列中,要么暂时取消。应用程序决定空缓冲区何时排队(到输入FIFO ),以及填充的缓冲区何时弹出(从输出FIFO )。
缓冲模块简单地表示给父数据流的存储器缓冲区。有用的元数据与缓冲区关联。这包括图像宽度、高度、像素格式、时间戳…这些是通过 info命令 检索的(请参见 BUFFER_INFO_CMD_LIST ,在标准 GenTL 头文件中)。
缓冲模块是唯一没有读/写端口功能的模块;它没有GenApi功能。
GenTL API
GenTL可以检测、控制和使用所有相机和图像采集卡功能,但其使用非常繁琐:
□ | cti 文件必须动态加载,并且必须通过指针访问它们导出的函数。 |
□ | 函数返回必须由应用程序检查的错误代码。 |
□ | 大多数函数从非类型缓冲区读取/向非类型缓冲区写入:应用程序必须确定所需的缓冲区大小,分配临时缓冲区,将数据转换到此缓冲区/从此缓冲区转换数据,最后释放缓冲区内存。 |
我们不建议直接使用GenTL API,而是建议使用以下两种方法之一:
□ | 处理这些复杂问题的Euresys::EGenTL 库,以便用户不必这样做; |
□ | 或者提供高级、易用界面的Euresys::EGrabber 库。 |