hisvp api参考海思半导体2017保留一切权利_第1页
hisvp api参考海思半导体2017保留一切权利_第2页
hisvp api参考海思半导体2017保留一切权利_第3页
hisvp api参考海思半导体2017保留一切权利_第4页
hisvp api参考海思半导体2017保留一切权利_第5页
已阅读5页,还剩420页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文档为使用SVP进行智能视觉算法开发的程序员而写,目的是供您在开发过程中查阅SVP支持的各种参考信息,包括API、头文件、错误码等。

员轻微或中等。

2.19小节,新增vxSvpSetObjectArrayAttribute;3vxsvpobjectarrayattribute2.22小节 2.24.15小节, nPredict和 数】和【相关】涉及修改;修改图2-6,新增图2-7~图2-142- 3章,vxsvpwkcnnmodelattributee【定义】和【成新增第6章FAQ3章,VXSCALEUNITYVXSVPWKMAXREPORTNODECNT~VXSVPTARGETNAMENNIEvxsvpwkcnnmodelattributee的【定义】及【成员】涉第2章,新增 nModel、LoadBinary和NNIE的接口描Sobel3x3Sobel5x52.25.15小节, 3vxsvpwkcnnmodelattributee、vxsvpwkcnnreportmodee、vxsvpwkcnnreportnodeinfotvxsvpdspmemtypee、vxsvpdspcoreidProc 概 概 API参 N Load NNIE(NeuralNetworkInference 数据类型和数据结 错误 HiSVP错误 Proc信息说 如何增加用户函数至OpenVX框 Cache内存的使 图1-2Context生命周期示意 图1-3Graph生命周期示意 图1-4跨度(stride)示意 图1-5VXDFIMAGEU8\VXDFIMAGESVPS8\VXDFIMAGES16\VXDFIMAGEU16\VXDFIMAGES32\VXDFIMAGEU32\VXDFIMAGESVPS64\VXDFIMAGESVPU64类型的vximage图 图1-6VXDFIMAGENV21类型的vximage图 图1-7VXDFIMAGESVPNV22类型的vximage图 图1-8VXDFIMAGESVPYUV420P类型的vximage图 图1-9VXDFIMAGESVPYUV422P类型的vximage图 图1-10VXDFIMAGESVPS8C2PACKAGE类型的vximage图 图1-11VXDFIMAGESVP NAR类型的vximage图 图1-12VXDFIMAGESVPU8C3PACKAGE类型的vximage图 图1-13VXDFIMAGESVP NAR类型的vximage图 图2-1依赖环 图2-2孤立节点 图2-3CNN输出特征向量示意 图2-4预测结果内存排布 图2-5FasterRCNN类型网络三段式执 图2-6卷积计算结果内存排布 图2- n卷积计算结果Report1(conv5)内存排布 图2- n卷积计算结果Report2(Rpnclsscore)内存排布 图2- n卷积计算结果Report3(Rpnbboxpred)内存排布 图2-10全连接输出分数值示意 图2-11全连接输出BBox示意 图2-12Roi内存排布示意 图2-13SSD类型网络四段式执 图2-14SSD卷积1计算结果内存总体排布 图2-15SSD卷积1计算结果内存详细排布 图2-16归一化结果内存排布 图2-17SSD第三段卷积计算结果内存排布 图2-18全卷积输出特征向量排布 图2- 图2- 图2- 卷积计算结果Report1(Rpnclsscore)内存排布 图2- 卷积计算结果Report2(Rpnbboxpred)内存排布 图2- 卷积计算结果Report clsscore)内存排布 图2- 卷积计算结果Report bboxpred)内存排布 图2- RPN输出候选框内存排布 图2- RoiPooling输出Score内存排布 图2- RoiPooling输出Bbox内存排布 表1-1二维广义图像类 表4-1HiSVP错误 文档版本00B05(2017-09-

SVP(SmartVision tform)是海思处理智能视觉异构加速平台。该平台基于Openvx1.1ARM,DSP,NNIE等多个处理单元,实现视觉算法的并行处理。用户可基于SVP高效的计算机视觉硬件加速平台,开发智能方案。OpenVX是一种低的软件编程框架,通过OpenVX,用户可以高效的计算机视觉硬件加速平台。OpenVX支持移动设备、嵌入式SOC、桌面系统等现代的硬件架构。OpenVX是一种将CPU,DSPs,GPUs,视觉处理等硬件平台的功能和性OpenVX定义了一组创建、校验、内存等用来协同执行图的API函数;抽象Graph的结构使开发者能够更好的使用底层加速架构。另外,OpenVX也定义了一些独立的vxu库,开发者通过vxu库,可在不创建Graph的情况下直接调用视觉函数。用户调用vxuSVPGraph,所以,通过这种方式用户就不能对Graph的结构进行优化。

所有对象继承Reference,所有对象指针可以转化为ReferenceContextObjectsObjects的申请和释放。Context中的数据是私有的,用户不可见的;整个系统中只有一个Context,不支持创建多个Context。Kernel在这里代表视觉函数,比如“SobelGradient”和“LucasKanadeFeatureTracking”;OpenVX中如果两个视觉函数使用相同的name和枚举类型,则认为它们是同一个;Parameter应Kernel有如下特征:IndexParameterKernelTypeParameterVXTYPEIMAGE,orVXTYPEARRAY等VXINPUT(输入、VXOUTPUT(输出、VXBIDIRECTIONAL(既是输入又是输出。VXPARAMETERSTATEREQUIRED(必需参数)或者VXPARAMETERSTATEOPTIONAL(可选参数。(ParameterGraphNodes组成的有向无环图。GraphNodes是根据参数建立依赖关系的,不用明确Nodes的执行顺序;但是Nodes之间的连接也是有限制的,就是Graph中任何一个参数只能被一个Node输出,否则不能建立依赖关系。假多个Nodes,每个Nodes的parameter都是输入输出型的,他们的加载顺序决定

MxNVirtualDataGraph中的nodes之间是通过DataObjects建立依赖关系的,当开发者不需要这些DataObjects的时候,可以创建VirtualDataObjects。在连接Nodes时,VirtualData不可:VirtualDataObjects不可以通过Map/Unmap或者Copy函数规格和格式:VirtualDataObjects在创建的时候,可以部分设定或者完全不设定其规格或者格式,在GraphVerify阶段,OpenVXNode输出参数的需要,VirtualDataObjectsVirtualDataObjects在创建的时GraphVerifyVirtualDataObjects时有如下约束:VirtualDataObjectsNode中其他参数得到的,在创建Image的时候,必须设定其相应的属性。没有设定规格和格式的virtualpyramid不能作为Node的输出。ObjectsVirtualParentObjectVerifyGraphParentObjectObjects的属性也会被调整(ParentObject为Node的输出参数)。VerifyGraph阶段,当子Objects为Node优化:VirtualDataObjects当前版本不支持VirtualObjectsNodeNode中的参数为原子类型数据(vxuint32,vxenum)Objects(vxscalar,vximagegraph的执行过程中,Node中的参数可以被改变,但是如果参数的reference发生改变,那么Graph则需重新校验。Node中的参数可以通过vxGetParameterByIndex函数获得,然后通过vxQueryParameter函数可以获取Node中参数的Reference。GraphGraph中也会有参数,参数从Node中提取出来后可以通过vxAddParameterToGraph函数添加到Graph中,Graph中parameter和Graph中Node的parameter是关联的;在Graph执行过程中,用户可以通过vxSetGraphParameterByIndex函数改变Graph中的parameter的reference,以达到改变Node中parameter的reference的目的。Graph中的ParameterGraphFactories(Graph模板),这样用户通过改变模板中需要改变的参数就可以直接执行Graph,免得每次都要构建Graph。Graph

阻塞执行模式(调用vxProcessGraph,直至Graph执行完成或者执行过程中出现非阻塞执行模式(vxScheduleGraphvxaitGraph,Graph的性能是由Graph的结构决定的,为了使创建后的Graph能够被执行,需要满足Graph是由一系列NodesN1…Nn和一系列数据ObjectsD1…Di组成的,边(Nx,Dy)表示数据Dy是NodeNx的输出参数,同理,边(Dx,Ny)则表示Dx为NodeNy的输入参的输入输出关系可以建立依赖关系,如果NodeNi不依赖其它任何Nodes,则称Ni为HeadNode;反之称Ni为DependentNode;输出边NxDy)DyNxOUTPUT(输出)INOUT(既是输入边NxDy)DyNxINPUT(输入)INOUT(既是输Node中既是输入又是输出参数(INOUT),则不能为VirtualNode中参数的类型一定要正确(vxtype

节点回调函数是一种保证GraphNode的执行结果,做出相应的选择;用户可以使用ThevxAssignNodeCallbackNode的回调函数。回调函数是在Graph执行过程中被调用的;如果Nodes之间没有依赖关系,它们回调函数的调用则没有先后顺序,如果Nodes之间存在依赖关系,那么回调函数的调用也是串行的。回调函数的参数可能是从Node中获取的,在回调函数被调用之前,参数一定要提取出来,其有效性。用户自定义OpenVX支持用户自定义Kernel,但是,要以Node的形式插入到Graph输出参数和输入参数的关系必须校验,例如某些算子要求输入Image和输出Image的长和宽必须相等。对于参数校验,HiSVP在OpenVx的基础上进行了改变。OpenVx1.1标准中,将参数Node应该有的输出参数属性通过MetaFormat格式传递出来,并在输出参数校验MetaFormatObjectSVP中要求用户只实现一个校验函数对Node的输入参数和输出参数进行校验。即”vx”+””+”Object类型”,例如:vximage、vxuint8。对于结构体数据,采用“vx_struct_t”的形式,即”vx结构体名字”+”t”,例如:vximagepatchaddressingt。对于枚举类型则采用“vx_enum_e”的形式,即”vx”+”枚举名字”+”e”,vxtypee用户自定义KernelSVPOpenVX,Kernel名必须包含平台名与Kernel名,且以“:”分开,例如:”openvx-kernelSVPOpenVX,Kernel编译成动态库(.dll或so),通过调用vxLoadKernels进行加载,该函数会调用动态库中的vxPublishKernels(vxcontextcotext)函数加载Kernel,vxPublishKernels会调用vxFinalizeKernel,加载顺序如图1-1所示。

OpenVx提供立即模式函数接口,立即模式的接口函数和Node的函数不同,采用vxu<Name>NodeGraph使TargetKernel的平台。SVPCPU、DSP0,DSP1,CNN等多个平台,用户可以通过vxSetNodeTarget、vxSetImmediateModeTarget以及vxtargete设定Kernel的执行平台,SVPVXTARGETANYVXTARGETSTRING两种设定

ContextvxCreateContext开始,至调用vxReleaseContext1-2用 Graph,vxCreateGraphNodes之间的依赖关Graph,通过调用vxVerifyGraphSVP会对用户设计的Graph进行执行阶段,用户通过调用vxProcessGraph或者vxScheduleGraphGraph,用户通过调用vxReleaseGraph函数释放Graph创建创建Verify执行释放Object,通过vxCreate<Object><Method>vxGet<Object><Method>从其它Objects中获取。Graph中或者立即模式中被使用。通过vxRelease<Object>释放。SVP的内存管理在OpenVX1.1OpenVX自已管理,又支持用户管理。SVP增加了一组以vxSvpCreate<Object>WithAddr格式命名的API,例如:vxCreateImagewithAddr(),通过这种方式,用户可以在创建Image的时候,就将ImageOpenVXDataObjects内存通过map,copy等接口函数(读/写),SVP不支持多线程同时DataObjects;在Graph执行的过程中,不允许通过map,copy等接口函数改变DataObjects,只有当Graph执行完,才可以改变。

图1-4跨度(stride)示意图

体见各算子API参的参数要求。VXDFIMAGEVXDFIMAGE如图1-5所示vximage中的VXDFIMAGESVP如图1-5所示vximage中的VXDFIMAGENV2YCbCr420Semi 1-6vximage中的u64PhyAddr[0]、示u64VirAddr[0](Y)VXDFIMAGESVPYcbCr422Seminnar数1-7所vximage中的u64PhyAddr[0]、u64VirAddr[0](亮度Y)和VXDFIMAGESVP式图像,如图1-8所示vximage中的u64VirAddr[0](亮度Y),u64VirAddr[1](色度U)和u64VirAddr[2](色度V);Y跨度)、U跨度)和V跨度)VXDFIMAGESVP式图像,如图1-9所示vximage中的u64VirAddr[0](亮度Y),u64VirAddr[1](色度U)和u64VirAddr[2](色度V)U跨度)和V跨度)VXDFIMAGESVPS8C2PACKAGE8bit有符号双通道且以Package格式的图像,如图1-10所示vximage中的u64PhyAddr[0]、VXDFIMAGESVPS8C2NAR8bit如图1-11所示vximage中的u64PhyAddr[0]、VXDFIMAGE像,如图1-5所示IVEIMAGESVXDFIMAGE像,如图1-5所示vximage中的u64PhyAddr[0]、VXDFIMAGESVPU8C3PACKAGE8bit无符号三通道且以Package格式的图像,如图1-12所示IVEIMAGESVXDFIMAGESVPU8C3NAR8bit如图1-13所示;vximage中的u64PhyAddr[0]、VXDFIMAGE像,如图1-5所示;vximage中的u64PhyAddr[0]、VXDFIMAGE像,如图1-5所示;IVEIMAGESVXDFIMAGESVP像,如图1-5所示;vximage中的u64PhyAddr[0]、VXDFIMAGESVP像,如图1-5所示;vximage中的u64PhyAddr[0]、图1-5VXDFIMAGEU8VXDFIMAGESVPS8VXDFIMAGES16VXDFIMAGEU16VXDFIMAGES32\VXDFIMAGEU32\VXDFIMAGESVPS64VXDFIMAGESVPU64vximage

Width*nbitnbitnbitnbitn nbitnbitnbitnbitn 图1-6VXDFIMAGENV21vximage图1-7VXDFIMAGESVPNV22vximage

Y0Y1Y2Y3Y4Y5

V0U0V2U2V4U4V6 图1-8图1-8VXDFIMAGESVPYUV420Pvximage图1-9图1-9VXDFIMAGESVPYUV422PvximageY0Y0Y1Y2Y3Y4Y5U0U1V0V1 图1-10VXDFIMAGESVPS8C2PACKAGEvximage

S8_00

S8_10 S8_20 Width以2个S8为1图1-11图1-11VXDFIMAGESVPNARvximage

图1-12VXDFIMAGESVPU8C3PACKAGEvximage注:对于RGBPACKAGE图像,是以“B0G0R0B1G1R1…”形式 ,B在最前面。对于HSVPACKAGE图像,是以“H0S0V0H1S1V1…”形 ,H在最前面对于LABPACKAGE图像,是以“L0A0B0L1A1B1…”形式,L在最前面图1-13VXDFIMAGESVP NAR类型的vximage图注:对于 NAR图像,指针数组VirAddr[3]按顺序分别H、S、V的指针,而数组分别为H、S、V对于 NAR图像,指针数组VirAddr[3]按顺序分别L、A、B的指针,而数组分别为L、A、B2API

vxQueryReference:查询Reference:释放:设置vxCreateContext:创建Context:释放:获取vxQueryContext:查询Context:设置立即模式的缺省:通用:阻塞执行:非阻塞执行

vxSetNodeAttribute:设置Nodeode:创建Node:查询:释放库:加载:卸载:添加用户:完成vxRemoveKernelKernel从ContextvxGetParameterByIndexNode中通过索引获取ParametervxSetParameterByIndex:通过索引设置NodeParameter:通过设置vxQueryParameter:查询Parameter

:查询vxGetReferenceFromDelayDalayReference:创建虚拟:释放:映射:去映射:创建常值vxSwapImageHandle:交换Handle:释放

UT:创建LutvxQueryLUTLutvxCopyLUTLutvxMapLUT:映射Lut:创建:释放vxCreateDistribution:创建DistributionvxReleaseDistribution:释放Distribution:拷贝:映射:去映射:创建:释放

vxCreateThreshold:创建Threshold:释放vxQueryThreshold:查询Threshold:创建:创建:创建虚拟:获取:查询

:创建:设置:设置vxSvpQueryMemSVPMemvxSvpMapMemSVPMem

vxSvpCoreDisable:非使能DSP]]

]]]]]]]]]

]]

nGetTopNNode:[非阻塞]CNNPredictSoftmax运算来预测每个样本图像的类别,并输出置信度最高为N的类别以及对应的置信度。 nGetTopN:[阻塞]CNNPredictSoftmax运算来预N的类别(Rank-1)以及对应的置信nConv:[阻塞RCNNnFc:[阻塞RCNNnGetResultNode:[非阻塞]RcnnFc结果,执行运算,ROI nGetResult:[阻塞]RcnnFcSoftmax运算,输出分数值和ROI区域。vxSvpWkSSDConv1Node:[非阻塞]SSDvxuSvpWkSSDConv1:[阻塞SSDvxSvpWkSSDNormNode:[非阻塞SSD操作第二段,L2-NormvxuSvpWkSSDNorm:[阻塞SSD操作第二段,L2-NormvxSvpWkSSDConv2Node:[非阻塞SSDvxuSvpWkSSDConv2:[阻塞SSDvxSvpWkSSDGetResultNode:[非阻塞SSD操作第四段,执行Softmax运算,输出分数值和ROI区域。vxuSvpWkSSDGetResult:[阻塞SSDSoftmax运算,输出分数值和ROI区域。]] RPN操作 RPN操作 RoiPooling操作

GetResultNode:[非阻塞]接 RoiPooling结果,执Softmax运算,ROI GetResult:[阻塞]接收 RoiPooling结果,执行Softmax运算,输出分数值和ROI区域。VXAPIENTRYvxstatusVXAPICALLvxQueryReference(vxreferenceref,vxenumattribute,void*ptr,vxsizesize);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseReference(vx*refref0库文件:libsvp.a(PC上模拟用hisvpsimObjectRelease函数(例如:vxReleaseNode等,该函VXAPIENTRYvxstatusVXAPICALLvxRetainReference(vxreference0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetReferenceName(vxreferenceref,constvxchar*name);以’\0’结尾的字符串指针长度不VXMAXREFERENCE可以为NULL0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxcontextVXAPICALLvx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseContext(vxcontext0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxcontextVXAPICALLvxGetContext(vxreferencevx库文件:libsvp.a(PC上模拟用hisvpsimreferenceVXTYPECONTEXTreferencereferenceContextVXAPIENTRYvxstatusVXAPICALLvxQueryContext(vxcontextcontext,vxenumattribute,void*ptr,vxsizesize);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetContextAttribute(vxcontextcontext,vxenumattribute,constvoid*ptr,vxsizesize);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetImmediateModeTarget(vxcontextcontext,vxenumtargetenum,constchar*targetstring);targetvxtargetetarget0库文件:libsvp.a(PChisvpsimVXTARGETSTRING模式下,target_string不能为空通用VXAPIENTRYvxstatusVXAPICALLvxHint(vxreferencereference,vxenumhint,constvoid*data,vxsizedatasize);vxhintedata0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxDirective(vxreferencereference,vxenumdirective);vxdirectivee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxgraphVXAPICALLvxCreateGraph(vxcontextvx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseGraph(vxgraph0库文件:libsvp.a(PC上模拟用hisvpsimgraph被回收后,graph中包含的所有node都会被释放。VXAPIENTRYvxstatusVXAPICALLvxVerifyGraph(vxgraph0库文件:libsvp.a(PC上模拟用hisvpsimGraphNodeNode没有依赖关系,2-2所示。VXAPIENTRYvxstatusVXAPICALLvxProcessGraph(vxgraph0库文件:libsvp.a(PC上模拟用hisvpsim该函数会对Graph进行校验。VXAPIENTRYvxstatusVXAPICALLvxScheduleGraph(vxgraphgraph0

库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxWaitGraph(vxgraph0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxQueryGraph(vxgraphgraph,vxenumattribute,void*ptr,vxsizesize);vxgraphattributee库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetGraphAttribute(vxgraphgraph,vxenumattribute,constvoid*ptr,vxsizesize);vxgraphattribute0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxboolVXAPICALLvxIsGraphVerified(vxgraphvxtruevxfalse库文件:libsvp.a(PC上模拟用hisvpsimvxProcessGraphvxScheduleGraph自动增长DelayVXAPIENTRYvxstatusVXAPICALLvxRegisutoAging(vxgraphgraph,vxdelaydelay);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxAddParameterToGraph(vxgraphgraph,vxparameterparameter);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetGraphParameterByIndex(vxgraphgraph,vxuint32index,vxreferencevalue);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxparameterVXAPICALLvxGetGraphParameterByIndex(vxgraphgraph,vxuint32index);vx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxQueryNode(vxnodenode,vxenumattribute,void*ptr,vxsizesize);vxnodeattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetNodeAttribute(vxnodenode,vxenumattribute,constvoid*ptr,vxsizesize);vxnodeattribute0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseNode(vxnode0库文件:libsvp.a(PC上模拟用hisvpsim该函数会减少Node的次数,当Node的次数为0的时候,Node才会被“回VXAPIENTRYvxstatusVXAPICALLvxRemoveNode(vxnode0库文件:libsvp.a(PC上模拟用hisvpsimNodeGraph中移除并“回收”,nodeNULLVXAPIENTRYvxstatusVXAPICALLvxSetNodeTarget(vxnodenode,vxenumtargetenum,constchar*targetstring);vxtarget0库文件:libsvp.a(PC上模拟用hisvpsimtargetenum中,VXTARGETANYtargetVXTARGETSTRING是根据传入的target名称来确定执行平台,所以当target为VXTARGETSTRING时,targetstring不能为NULL创建重复的NodeVXAPIENTRYvxstatusVXAPICALLvxReplicateNode(vxgraphvxnodefirstnode,vxboolreplicate[],vxuint32numberoffirst一个长度等于node中元素为vxtruee表明vxobjectarray中提取的)应该numberof数组中parameters0库文件:libsvp.a(PC上模拟用hisvpsimvxinputvxobjectarrayvxtrueparameterVXAPIENTRYvxnodeVXAPICALL ode(vxgraphgraph,vxkernelkernel);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxAssignNodeCallback(vxnodenode, pletefcallback);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvx pletefVXAPICALLvxRetrieveNodeCallback(vxnodenode);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxkernelVXAPICALLvxGetKernelByEnum(vxcontextvxenumvxkernelevx库文件:libsvp.a(PC上模拟用hisvpsimkernel的枚举ID来获取用户kernel。VXAPIENTRYvxkernelVXAPICALLvxGetKernelByName(vxcontextcontext,constvxchar*name);Kernelvxkerenlvx库文件:libsvp.a(PChisvpsimnameVXMAXKERNELNAMEVXAPIENTRYvxstatusVXAPICALLvxQueryKernel(vxkernelkernel,vxenumattribute,void*ptr,vxsizesize);vxkernelattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseKernel(vxkernel*0库文件:libsvp.a(PC上模拟用hisvpsim该函数减少Kernel的一次次数,当Kernel的次数为0的时候,Kernel才会分配用户KernelIDVXAPIENTRYvxstatusVXAPICALLvxAllocateUserKernelId(vxcontextcontext,vxenum*pKernelEnumId);指向分配KernelId的空间0库文件:libsvp.a(PChisvpsim系统会从VXKERNELBASE(VXIDUSER,0)开始分配,用户在Kernel的时候,也可以不调用该函数,自定义Kernel的枚举值。KernelIDVXAPIENTRYvxstatusVXAPIvxAllocateUserKernelLibraryId(vxcontextcontext,vxenum*指向分配Kernel库Id的空0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxLoadKernels(vxcontextcontext,constvxchar*module);0库文件:libsvp.a(PC上模拟用hisvpsim输入动态库的名称时,要去掉后缀名,用户可以输入的最大module名长度为:来加载用户kernel。VXAPIENTRYvxstatusVXAPICALLvxUnloadKernels(vxcontextcontext,constvxchar*module);0库文件:libsvp.a(PC上模拟用hisvpsim来释放通过module加载的用户kernel。VXAPIENTRYvxkernelVXAPICALLvxAddUserKernel(vxcontextcontext,constvxcharname[VXMAXKERNELNAME],vxenumenumeration,vxkernelffuncptr,vxuint32numParams,vxkernelvalidatefvalidate,vxkernelinitializefinit,vxkerneldeinitializeffuncvx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxFinalizeKernel(vxkernel0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxAddParameterToKernel(vxkernelkernel,vxuint32index,vxenumdir,vxenumdatatype,vxenumstate);vxdirectionedatavxtypeevxparameterstatee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxRemoveKernel(vxkernel0库文件:libsvp.a(PC上模拟用hisvpsim创建的VXAPIENTRYvxstatusVXAPICALLvxSetKernelAttribute(vxkernelkernel,vxenumattribute,constvoid*ptr,vxsizesize);vxkernelattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxparameterVXAPICALLvxGetKernelParameterByIndex(vxkernelkernel,vxuint32index);Parametervx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxparameterVXAPICALLvxGetParameterByIndex(vxnodenode,vxuint32index);Parametervx库文件:libsvp.a(PC上模拟用hisvpsim释放ParameterVXAPIENTRYvxstatusVXAPICALLvxReleaseParameter(vx0库文件:libsvp.a(PC上模拟用hisvpsim该函数减少param的一次次数,当param的次数为0的时候,param才会被VXAPIENTRYvxstatusVXAPICALLvxSetParameterByIndex(vxnodenode,vxuint32index,vxreferencevalue);Parameter0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetParameterByReference(vxparameterparameter,vxreferencevalue);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxQueryParameter(vxparameterparam,vxenumattribute,void*ptr,vxsizesize);vxparameterattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxQueryDelay(vxdelaydelay,vxenumattribute,void*ptr,vxsizesize);vxdelayattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseDelay(vxdelay0库文件:libsvp.a(PC上模拟用hisvpsim该函数减少Delay的一次次数,当Delay的次数为0的时候,Delay才会被VXAPIENTRYvxdelayVXAPICALLvxCreateDelay(vxcontextcontext,vxreferenceexemr,vxsizeslots);vx库文件:libsvp.a(PC上模拟用hisvpsim1.x.lib)vxVXAPIENTRYvxreferenceVXAPICALLvxGetReferenceFromDelay(vxdelaydelay,vxint32index);vx

库文件:libsvp.a(PC上模拟用hisvpsim1.x.lib)VXAPIENTRYvxstatusVXAPICALLvxAgeDelay(vxdelay0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvoidVXAPICALLvxAddLogEntry(vxreferenceref,vxstatusstatus,constchar*message,...);…库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvoidVXAPICALLvxRegisterLogCallback(vxcontextcontext,vxlogcallbackfcallback,vxboolreentrant);库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxarrayVXAPICALLvxCreateArray(vxcontextcontext,vxenumitemtype,vxsizecapacity);itemvx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxarrayVXAPICALLvxCreateVirtualArray(vxgraphgraph,vxenumitemtype,vxsizecapacity);itemArrayvx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxReleaseArray(vxarray0库文件:libsvp.a(PC上模拟用hisvpsim该函数将Array的次数减1,直到Array的次数为0的时候,Array才会被VXAPIENTRYvxstatusVXAPICALLvxQueryArray(vxarrayarr,vxenumattribute,void*ptr,vxsizesize);vxarrayattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxAddArrayItems(vxarrayarr,vxsizecount,constvoid*ptr,vxsizestride);0库文件:libsvp.a(PC上模拟用hisvpsim从尾端截断ArrayVXAPIENTRYvxstatusVXAPICALLvxTruncateArray(vxarrayarr,vxsizenewnumitems);newnum0库文件:libsvp.a(PC上模拟用hisvpsim将数组中的元素从尾部删除,删除个数Array的元素个数newnumitemsVXAPIENTRYvxstatusVXAPICALLvxCopyArrayRange(vxarrayarray,vxsizerangestart,vxsizerangeend,vxsizeuserstride,void*userptr,vxenumusage,vxenumusermemrangerangeuseruser指向从Array中拷贝出数据Array中数据的地址(输入)。vxaccessore,该函数只支持VXREADONLY和VXWRITEONLYusermemvxmemorytype0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxMapArrayRange(vxarrayarray,vxsizerangestart,vxsizerangeend,vxmapid*mapid,vxsize*stride,void**ptr,vxenumusage,vxenummemtype,vxuint32rangerangemapMapId,用于vxaccessorememvxmemorytypee0库文件:libsvp.a(PC上模拟用hisvpsimusageVXREADONLYVXREADANDWRITEVXAPIENTRYvxstatusVXAPICALLvxUnmapArrayRange(vxarrayarray,vxmapidmapid);map0库文件:libsvp.a(PC上模拟用hisvpsim数组的元素经vxMapArrayRange函数后,可以被用户。用户可以拷贝或者改变获取的数据,然后调用vxUnmapArrayRange函数后,可以将改变后的数据赋值mapid由vxMapArrayRangeVXAPIENTRYvxenumVXAPICALLvxRegisterUserStruct(vxcontextcontext,vxsizesize);VXTYPEUSERSTRUCTSTART库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxarrayVXAPICALLvxSvpCreateArrayWithAddr(vxcontextcontext,vxenumitemtype,vxsizecapacity,vxsvpaddrt*addr,vxuint32itemArrayvx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvximageVXAPICALLvxCreateImage(vxcontextcontext,vxuint32width,vxuint32height,vxdfimagecolor);Imagevxdfimagevxsvpdfimageevx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvximageVXAPICALLvxCreateImageFromROI(vximageimg,constvxrectanglet*rect);ImageRoivx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvximageVXAPICALLvxCreateUniformImage(vxcontextcontext,vxuint32width,vxuint32height,vxdfimagecolor,constvxpixelvaluet*value);vx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvximageVXAPICALLvxCreateVirtualImage(vxgraphgraph,vxuint32width,vxuint32height,vxdfimagecolor);vx库文件:libsvp.a(PC上模拟用hisvpsim虚拟Image是用户不可的,而且虚拟Image只能在当前Graph中使用,不可以被Graph所使用,创建虚拟Image时,用户可以不完全设定Image的规格和类型,vxcontextcontext vxgraphgraph vximagevirt[] vxCreateVirtualImage(graph,0,0,VXDFIMAGEU8),//nospecifiedvxCreateVirtualImage(graph,320,240,VXDFIMAGEVIRT),//nospecifiedformatvxCreateVirtualImage(graph,640,480,VXDFIMAGEU8),//nouserVXAPIENTRYvximageVXAPICALLvxCreateImageFromHandle(vxcontextcontext,vxdfimagecolor,constvximagepatchaddressingtaddrs[],void*constptrs[],vxenummemorytype);Imagevxdfimagevxsvpdfimageeptrsvxmemorytypeevx库文件:libsvp.a(PC上模拟用hisvpsimaddrsvximagepatchaddressingtdimx,dimystridexandstridey就可以,其它参数在这个函数中用不到;内存分布一定是按行分布的,所以要求strideystridex*dimx。即使Image是通过vxCreateImageFromHandle函数创建的,在Image的像释放vxCreateImageFromHandle创建的Image时,应该先使用vxSwapImageHandle函数将Image中的内存地址替换掉。VXAPIENTRYvxstatusVXAPICALLvxSwapImageHandle(vximageimage,void*constnewptrs[],void*prevptrs[],vxsizenumnes);newprevnumImage的ne个数0库文件:libsvp.a(PC上模拟用hisvpsim该函数主要是用于设置Image的新handle(image各ne的地址信息),获取Image取其中的数据或者释放它。由于Image的各个属性都没有发生变化,所以Image新的地址信息一定要和Image匹配。注意new_ptrs和prev_ptrs的成员个数一定要大于或者等于numnes的VXAPIENTRYvxstatusVXAPICALLvxQueryImage(vximageimage,vxenumattribute,void*ptr,vxsizesize);vximageattributee0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetImageAttribute(vximageimage,vxenumattribute,constvoid*ptr,vxsizesize);vximageattributee0库文件:libsvp.a(PChisvpsimVXIMAGESPACEVXAPIENTRYvxstatusVXAPICALLvxReleaseImage(vximage0库文件:libsvp.a(PC上模拟用hisvpsim该函数会减少Image的次数,只有当image的次数减少为0的时候,才VXAPIENTRYvxsizeVXAPICALL puteImagePatchSize(vximageimage,constvxrectangletrect,vxuint32neindex);输入区域块vxrectanglet。ne非0库文件:libsvp.a(PC上模拟用hisvpsimrect的起始坐标应满足条件:0startxendximage的宽,0startyendy<=image的高。neindex应满足0<=neindex<image的ne个数(ne个数可通过查询文VXAPIENTRYvoid*VXAPICALLvxFormatImagePatchAddress1d(void*ptr,vxuint32index,constvximagepatchaddressingt*addr);pixel在图像块中的索引值,1,index要保证在图像块中。非库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvoid*VXAPICALLvxFormatImagePatchAddress2d(void*ptr,vxuint32x,vxuint32y,constvximagepatchaddressingt*addr);xXyY非库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxGetValidRegionImage(vximageimage,vxrectanglet*rect);0库文件:libsvp.a(PC上模拟用hisvpsim当前版本不支持ROI,所以调用该函数返回的区域信息是ImageVXAPIENTRYvxstatusVXAPICALLvxCopyImagePatch(vximageimage,constvxrectanglet*imagerect,vxuint32imageneindex,vximagepatchaddressingt*useraddr,void*userptr,vxenumusage,vxenumusermemtype);image区域块vxrectanglet。useruser用来指向需要写入的数据,模式时,用imagevxaccessore。本函数中支持VXREADONLY和VXWRITEONLYusermemvxmemorytypee0库文件:libsvp.a(PC上模拟用hisvpsimrect的起始坐标应满足条件:0startxendximage的宽,0startyendy<=image的高。imageneindex应满足0<=imageneindex<image的ne个数(ne个VXAPIENTRYvxstatusVXAPICALLvxMapImagePatch(vximageimage,constvxrectanglet*rect,vxuint32neindex,vxmapid*mapid,vximagepatchaddressingt*addr,void**ptr,vxenumusage,vxenummemtype,vxuint32flags);ne输入的imagene索引mapMapId用于vxUnmapImagePatch该image由建,则ptr指向创建Image时所vxaccessorememvxmemorytypee0库文件:libsvp.a(PC上模拟用hisvpsimusageVXREADONLY,VXREADANDWRITE,VXWRITEuniformimageVXREADONLY与VXAPIENTRYvxstatusVXAPICALLvxUnmapImagePatch(vximageimage,vxmapidmapid);map0库文件:libsvp.a(PC上模拟用hisvpsimImage中的像素经vxMapImagePatch函数后,可以被用户。用户可以拷贝或赋值给Image中的像素及释放资源。与VXAPIENTRYvximageVXAPICALLvxCreateImageFromChannel(vximageimg,vxenumchannel);vx库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxSetImageValidRectangle(vximageimage,constvxrectanglet*rect);0库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvximageVXAPICALLvxSvpCreateImageWithAddr(vxcontextcontext,vxuint32width,vxuint32height,vxdfimagecolor,vxsvpaddrtaddr[3],vxuint32Imagevxdfimagevxsvpdfimageevx库文件:libsvp.a(PC上模拟用hisvpsim

VXAPIENTRYvxlutVXAPICALLvxCreaUT(vxcontextcontext,vxenumdatatype,vxsizecount);datavx库文件:libsvp.a(PC上模拟用hisvpsimdatatype只支持VXTYPEUINT8和VXTYPEINT16两种类型,并且data_typeVXTYPEUINT8时,count256;data_type为VXTYPEINT16时,count必须小于等于65536。VXAPIENTRYvxstatusVXAPICALLvxReleaseLUT(vxlut0

库文件:libsvp.a(PC上模拟用hisvpsim该函数减少Lut的一次次数,当Lut的次数为0的时候,Lut才会被回收VXAPIENTRYvxstatusVXAPICALLvxQueryLUT(vxlutlut,vxenumattribute,void*ptr,vxsizesize);Lut指针。vxlutattributee0

库文件:libsvp.a(PC上模拟用hisvpsimVXAPIENTRYvxstatusVXAPICALLvxCopyLUT(vxlutlut,void*userptr,vxenumusage,vxenumusermemtype);Lut指针。uservxaccessoreusermemvxmemorytypee0

库文件:libsvp.a(PC上模拟用hisvpsimusageVXREADONLYVXWRITEONLYVXAPIENTRYvxstatusVXAPICALLvxMapLUT(vxlutlut,vxmap*mapid,void**ptr,vxenumusage,vxenummemtype,vxbitfieldLut指针。mapvxaccessorememvxmemorytypee0库文件:libsvp.a(PC上模拟用hisvpsimusageVXREADONLY,VXREADANDWRITE,VXWRITEONLYVXAPIENTRYvxstatusVXAPICALLvxUnmapLUT(vxlutlut,vxmapidmapid);mapmapid0库文件:libsvp.a(PC上模拟用hisvpsimLut中的元素经vxMapLUT函数后,可以被用户。用户可以拷贝或者改变获取的数据,然后调用vxUnmapLUTLut中的VXAPIENTRYvxlutVXAPICALLvxSvpCreaUT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论