【OPENVX】对象基本使用之vx_context

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhy29563

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值