这篇主要整理了常见的几个对象,官方文档说明更详细,建议直接去看原文;
1 Object
openvx中的基本对象,所有对象都可以从vx_reference派生,能够在同一个context中使用;
1.1 vx_reference
引用对象,openvx中的所有对象都可以安全的转回reference类型;
每个reference对应的有一个枚举,可以获得引用计数、引用的类型及名字:
enum vx_reference_attribute_e {
VX_REFERENCE_COUNT = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_REFERENCE) + 0x0,
VX_REFERENCE_TYPE = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_REFERENCE) + 0x1,
VX_REFERENCE_NAME = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_REFERENCE) + 0x2,
};
和reference关联的函数有:
vx_status vxGetStatus( vx_reference reference) | 判断是否有效 |
vx_context vxGetContext( vx_reference reference) | 获得ref的context |
vx_status vxQueryReference(vx_reference ref, vx_enum attribute, void* ptr, vx_size size); |
查询ref的属性 attribute:要查的属性 ptr:结果存放的位置 size: ptr所表示结果的大小 |
vx_status vxReleaseReference(vx_reference* ref_ptr); | release ref |
vx_status vxRetainReference(vx_reference ref); | 增加ref的引用计数 |
vx_status vxSetReferenceName(vx_reference ref, const vx_char* name); |
设置ref的name |
1.2 Context
context是所有openvx对象的对象域。所有数据对象以及所有的框架对象都存在与上下文中。openvx context中保持对所有对象的引用计数,在析构的时候要释放对应的引用;openvx中的数据对象都是私有的,只能在同一个context中被访问;
和context相关的枚举有:
-
vx_accessor_e:内存访问模式,用于框架本身使用,用作系统关于缓存操作或编组操作中的提示;
enum vx_accessor_e { VX_READ_ONLY = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_ACCESSOR) + 0x1, VX_WRITE_ONLY = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_ACCESSOR) + 0x2, VX_READ_AND_WRITE = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_ACCESSOR) + 0x3, };
-
vx_context_attribute_e:
enum vx_context_attribute_e { //供应商的ID VX_CONTEXT_VENDOR_ID = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x0, //Openvx的版本号 VX_CONTEXT_VERSION = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x1, //唯一内核的数量 VX_CONTEXT_UNIQUE_KERNELS = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x2, //注册过的模块数量 VX_CONTEXT_MODULES = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x3, //注册过的reference的数量 VX_CONTEXT_REFERENCES = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x4, //实现的名称 VX_CONTEXT_IMPLEMENTATION = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x5, //查询扩展中字符串的长度 VX_CONTEXT_EXTENSIONS_SIZE = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x6, //拓展中的字符串 VX_CONTEXT_EXTENSIONS = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x7, //卷积的最大宽度和高度 VX_CONTEXT_CONVOLUTION_MAX_DIMENSION = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x8, //金字塔核的最大尺寸 VX_CONTEXT_OPTICAL_FLOW_MAX_WINDOW_DIMENSION = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0x9, //立即模式 VX_CONTEXT_IMMEDIATE_BORDER = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0xA, //存放所有kernel的表 VX_CONTEXT_UNIQUE_KERNEL_TABLE = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0xB, //不受支持的运行策略 VX_CONTEXT_IMMEDIATE_BORDER_POLICY = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0xC, //非线性滤波器的最大维度 VX_CONTEXT_NONLINEAR_MAX_DIMENSION = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0xd, //tensor的最大维度 VX_CONTEXT_MAX_TENSOR_DIMS = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0xE, };
- vx_memory_type_e:内存导入的类型
enum vx_memory_type_e {
//opencv 自己分的内存
VX_MEMORY_TYPE_NONE = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_MEMORY_TYPE) + 0x0,
//主机分配的内存(系统malloc)
VX_MEMORY_TYPE_HOST = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_MEMORY_TYPE) + 0x1,
};
- vx_termination_criteria_e: 终止条件
enum vx_termination_criteria_e {
//在设定的迭代次数之后终止
VX_TERM_CRITERIA_ITERATIONS = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_TERM_CRITERIA) + 0x0,
//与提供给函数的eplison值匹配后终止
VX_TERM_CRITERIA_EPSILON = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_TERM_CRITERIA) + 0x1,
//同时采用1 2 两种方法
VX_TERM_CRITERIA_BOTH = VX_ENUM_BASE(VX_ID_KHRONOS, VX_ENUM_TERM_CRITERIA) + 0x2,
};
和context相关的函数:
vx_context vxCreateContext(void); | 创建 |
vx_status vxQueryContext( vx_context context, vx_enum attribute, void* ptr, vx_size size); |
查询属性,可以查询内容见attribute枚举 |
vx_status vxReleaseContext(vx_context* context); | release |
vx_status vxSetContextAttribute( vx_context context, vx_enum attribute, const void* ptr, vx_size size); |
设置属性,见attribute中可配置的属性 |
vx_status vxSetImmediateModeTarget( vx_context context, vx_enum target_enum, const char* target_string); |
设置立即运行模式的target,对于此context的后续运行将在其target |
1.3 Graph
图是以有向无环的方式连接的一组节点,下图显示了graph状态转换图:
涉及的枚举:
- vx_graph_attributes:
-
enum vx_graph_attribute_e { //图中的节点数 VX_GRAPH_NUMNODES = VX_ATTRIBUTE_
-