GenTL
Gentl定义了5种对象类型,按父/子关系组织:
- 系统模块
- 接口模块
- 设备模块
- 数据流模块
- 缓冲模块
每个模块:
- 对应于系统的特定元件;
- 定义可以查询的相关信息(信息命令)(使用get info函数);
- 允许行使该模块的功能(使用特定函数)。
此外,除缓冲模块外的所有模块,都充当允许读/写操作的端口。GenApi使用这些端口函数加载该模块的描述文件,并使用其GenApi功能。
系统模块
系统模块(也称为TLSystem)代表Gentl发生器(coaxlink.cti库)。此模块位于父/子树的顶部。
系统模块提供关于Gentl发生器的基本信息:例如完整的coaxlink.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
库。