当前位置:网站首页>【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
边栏推荐
猜你喜欢

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

bryntum Kanban Task Board 5.1.0 JS 看板

面试官:生成订单30分钟未支付,则自动取消,该怎么实现?

What is NFT? You don't know yet!

Redis transaction and locking mechanism

Layout drawing of semi customized digital inverter

Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议

工控人,你真的了解你的五险一金吗?

Send benefits again! Calendar applet source code

程序员可能还是程序员,码农可能只能是码农了
随机推荐
Let's talk about the charm of code language
Initializing, cleaning up and const decorating member functions of constructors
JS regular delete the span tag and the content in the tag
PKS的秘书&兄弟 | 温故知新
关于常见排序的稳定性
outlook客户端 outlook.com邮箱设置方法
Come on, slide to the next little sister
Strings in C language
Program environment and pretreatment
appendToFile追加失败
Since I used the hiflow scene connector, I don't have to worry about becoming a "drowned chicken" anymore
Go 并发编程基础:什么是上下文
笔试强训第21天
Web3流量聚合平台Starfish OS,给玩家元宇宙新范式体验
又发福利!日历小程序源码
RedisTemplate Pipeline 管道使用
Xiaohongshu joins hands with HMS core to enjoy HD vision and grow grass for a better life
小迪和小辉
容器监控三剑客CAdvisor收集监控数据 + InfluxDB储存数据 + Granfana展示图表数据的简介
[arxiv2022] grouptransnet: Group transformer Network for RGB - D Salient Object Detection