当前位置:网站首页>【OPENVX】对象基本使用之vx_context
【OPENVX】对象基本使用之vx_context
2022-07-22 23:11:00 【zhy29563】
1. 程序
#include <iostream>
#include <iomanip>
#include <VX/vx.h>
// 在OpenVX中,就概念上而言,所有的对象都是继承自 vx_reference,因此所有的对象都能转换为vx_reference
// 除 vx_context 之外,所有的对象都包含一个指向 vx_context 的reference
void get_properties(vx_context context)
{
// 获取属性(VX_CONTEXT_VENDOR_ID)
vx_uint16 vendor_id;
vxQueryContext(context, (vx_enum)VX_CONTEXT_VENDOR_ID, &vendor_id, sizeof(vx_uint16));
std::cout << "vendor_id : " << vendor_id << std::endl;
// 获取属性(VX_CONTEXT_VERSION)
vx_uint16 version;
vxQueryContext(context, (vx_enum)VX_CONTEXT_VERSION, &version, sizeof(vx_uint16));
std::cout << "version : " << version << std::endl;
// 获取属性(VX_CONTEXT_UNIQUE_KERNELS),当前实现的 kernel 数量
vx_uint32 unique_kernels;
vxQueryContext(context, (vx_enum)VX_CONTEXT_UNIQUE_KERNELS, &unique_kernels, sizeof(vx_uint32));
std::cout << "unique_kernels : " << unique_kernels << std::endl;
// 获取属性(VX_CONTEXT_MODULES), 激活模块的数量
vx_uint32 modules;
vxQueryContext(context, (vx_enum)VX_CONTEXT_MODULES, &modules, sizeof(vx_uint32));
std::cout << "modules : " << modules << std::endl;
// 获取属性(VX_CONTEXT_REFERENCES),激活的引用数量
vx_uint32 references;
vxQueryContext(context, (vx_enum)VX_CONTEXT_REFERENCES, &references, sizeof(vx_uint32));
std::cout << "references : " << references << std::endl;
// 获取属性(VX_CONTEXT_IMPLEMENTATION),查询实现的名称,该名称的长度(包含结果的\0)不能超过 VX_MAX_IMPLEMENTATION_NAME
vx_char implementation[VX_MAX_IMPLEMENTATION_NAME];
vxQueryContext(context, (vx_enum)VX_CONTEXT_IMPLEMENTATION, &implementation, sizeof(vx_uint32));
std::cout << "implementation : " << implementation << std::endl;
// 获取属性(VX_CONTEXT_EXTENSIONS_SIZE),扩展字符串的长度,包含结尾的\0
vx_size extension_size;
vxQueryContext(context, (vx_enum)VX_CONTEXT_EXTENSIONS_SIZE, &extension_size, sizeof(vx_size));
std::cout << "extension_size : " << extension_size << std::endl;
// 获取属性(VX_CONTEXT_EXTENSIONS), 扩展字符串
vx_char *extensions = new vx_char[extension_size];
vxQueryContext(context, (vx_enum)VX_CONTEXT_EXTENSIONS, extensions, extension_size);
for (size_t i = 0; i < extension_size; i++)
{
std::cout << "extensions : " << (int)extensions[i] << std::endl;
}
delete[] extensions;
// 获取属性(VX_CONTEXT_CONVOLUTION_MAX_DIMENSION), 卷积的最大尺寸
vx_size convolution_max_dimension;
vxQueryContext(context, (vx_enum)VX_CONTEXT_CONVOLUTION_MAX_DIMENSION, &convolution_max_dimension, sizeof(vx_size));
std::cout << "convolution_max_dimension : " << convolution_max_dimension << std::endl;
// 获取属性(VX_CONTEXT_OPTICAL_FLOW_MAX_WINDOW_DIMENSION),光流操作核 OpticalFlowPyrLK kernel 支持的最大窗口尺寸
vx_size optical_flow_max_window_dimension;
vxQueryContext(context, (vx_enum)VX_CONTEXT_OPTICAL_FLOW_MAX_WINDOW_DIMENSION, &optical_flow_max_window_dimension, sizeof(vx_size));
std::cout << "optical_flow_max_window_dimension : " << optical_flow_max_window_dimension << std::endl;
// 获取属性(VX_CONTEXT_IMMEDIATE_BORDER),立即模式中的边界模式。图模式不受此参数的影响
vx_border_t immediate_border;
vxQueryContext(context, (vx_enum)VX_CONTEXT_IMMEDIATE_BORDER, &immediate_border, sizeof(vx_border_t));
std::cout << "immediate_border : " << immediate_border.constant_value.S32 << std::endl;
std::cout << "immediate_border : " << immediate_border.mode << std::endl;
// 获取属性(VX_CONTEXT_UNIQUE_KERNEL_TABLE), 当前上下文中存在的所有 Kernel 组成的表
vx_kernel_info_t *unique_kernel_table = new vx_kernel_info_t[unique_kernels];
vxQueryContext(context, (vx_enum)VX_CONTEXT_UNIQUE_KERNEL_TABLE, &unique_kernel_table, sizeof(vx_kernel_info_t));
for (int i = 0; i < unique_kernels; ++i) {
std::cout << "unique_kernel_table - kernel enum : " << unique_kernel_table[i].enumeration << std::endl;
std::cout << "unique_kernel_table - kernel name : " << unique_kernel_table[i].name << std::endl;
}
free(unique_kernel_table);
// 获取属性(VX_CONTEXT_IMMEDIATE_BORDER_POLICY), 立即模式中不支持的边界模式。图模式不受影响
vx_border_policy_e immediate_border_policy;
vxQueryContext(context, (vx_enum)VX_CONTEXT_IMMEDIATE_BORDER_POLICY, &immediate_border_policy, sizeof(vx_border_policy_e));
std::cout << "immediate_border_policy : " << immediate_border_policy << std::endl;
// 获取属性(VX_CONTEXT_NONLINEAR_MAX_DIMENSION),非线性滤波支持的最大尺寸
vx_size nonlinear_max_dimension;
vxQueryContext(context, (vx_enum)VX_CONTEXT_NONLINEAR_MAX_DIMENSION, &nonlinear_max_dimension, sizeof(vx_size));
std::cout << "nonlinear_max_dimension : " << nonlinear_max_dimension << std::endl;
// 获取属性(VX_CONTEXT_MAX_TENSOR_DIMS)
vx_size max_tensor_dims;
vxQueryContext(context, (vx_enum)VX_CONTEXT_MAX_TENSOR_DIMS, &max_tensor_dims, sizeof(vx_size));
std::cout << "max_tensor_dims : " << max_tensor_dims << std::endl;
}
void set_properties(vx_context context)
{
vx_status status = VX_SUCCESS;
// 获取属性(VX_CONTEXT_IMMEDIATE_BORDER)
vx_pixel_value_t pixel_value{
.U8 = 128u};
vx_border_t immediate_border{
.mode = VX_BORDER_UNDEFINED, .constant_value = pixel_value};
status = vxSetContextAttribute(context, (vx_enum)VX_CONTEXT_IMMEDIATE_BORDER, &immediate_border, sizeof(vx_border_t));
std::cout << "status : " << status << std::endl;
std::cout << "mode : " << immediate_border.mode << std::endl;
std::cout << "constant_value : " << immediate_border.constant_value.S32 << std::endl;
// 获取属性(VX_CONTEXT_IMMEDIATE_BORDER_POLICY), 立即模式中不支持的边界模式。图模式不受影响
vx_border_policy_e immediate_border_policy = VX_BORDER_POLICY_DEFAULT_TO_UNDEFINED;
status = vxSetContextAttribute(context, (vx_enum)VX_CONTEXT_IMMEDIATE_BORDER_POLICY, &immediate_border_policy, sizeof(vx_border_policy_e));
std::cout << "status : " << status << std::endl;
std::cout << "immediate_border_policy : " << immediate_border_policy << std::endl;
}
int main(int argc, char *argv[])
{
vx_context context = vxCreateContext();
printf("The address of context is %p\n", context);
get_properties(context);
set_properties(context);
vxReleaseContext(&context);
return EXIT_SUCCESS;
}
2. 运行结果
vendor_id : 0
version : 259
unique_kernels : 72
modules : 0
references : 100
implementation : khronos.sample
extension_size : 2
extensions : 32
extensions : 0
convolution_max_dimension : 15
optical_flow_max_window_dimension : 9
immediate_border : 0
immediate_border : 49152
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
unique_kernel_table - kernel enum : 0
unique_kernel_table - kernel name :
immediate_border_policy : 81920
nonlinear_max_dimension : 9
max_tensor_dims : 6
status : 0
mode : 49152
constant_value : 128
status : -3
immediate_border_policy : 81920
边栏推荐
猜你喜欢

Redis persistence operation (RDB, AOF)

Typora set the title to automatically add sequence number

Data types in redis

EMQX v4.4.5 发布:新增排他订阅及 MQTT 5.0 发布属性支持

论文阅读:The Perfect Match: 3D Point Cloud Matching with Smoothed Densities

动作捕捉在自动化控制领域的应用

What if Alibaba cloud international forgets its member name or login password?

Redis profile

编写代码,多个字符从两端移动,向中间汇聚

Typora设置标题自动添加序号
随机推荐
Omnipotent link (1): Comprehensive
笔试强训第21天
“蔚来杯“2022牛客暑期多校训练营1
Vue组件切换时缓存组件状态即动态组件keep-alive 动态组件与异步组件
用户登录程序C语言实现
What's the use of volatile
I can't be angry with "voluntary salary reduction". I'm naked. I'm three times in four days. How can it end like this?
Let's talk about the charm of code language
"Weilai Cup" 2022 Niuke summer multi school training camp 1
oh-my-zsh
阿里云国际版忘记会员名或登录密码,怎么办?
跳转语句break 和continue
RPC-BDY(5)-服务自动注销、负载均衡
volatile有什么用
When to use usercf and itemcf?
Send benefits again! Calendar applet source code
QgrapicsView实现画板
Since I used the hiflow scene connector, I don't have to worry about becoming a "drowned chicken" anymore
flink通过ProcessFunction和定时器onTimer实现一个窗口累加的功能
Typescript对象扩展之对象原型__proto__与prototype