255 lines
7.5 KiB
C
255 lines
7.5 KiB
C
/*
|
|
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
|
|
*/
|
|
|
|
#ifndef OT_RUNTIME_COMM_H
|
|
#define OT_RUNTIME_COMM_H
|
|
#include "ot_type.h"
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#endif /* __cplusplus */
|
|
|
|
#define MAX_NAME_LEN 64 /* Model max name */
|
|
#define FULL_NAME_LEN 130
|
|
typedef td_void* OtMwPtr; /* Handle define for model and tasks */
|
|
|
|
#ifndef IN
|
|
#define IN
|
|
#endif
|
|
|
|
#ifndef OUT
|
|
#define OUT
|
|
#endif
|
|
|
|
#ifndef INOUT
|
|
#define INOUT
|
|
#endif
|
|
|
|
/* Blob type */
|
|
typedef enum {
|
|
OT_RUNTIME_BLOB_TYPE_S20Q12 = 0x0,
|
|
OT_RUNTIME_BLOB_TYPE_U8 = 0x1,
|
|
OT_RUNTIME_BLOB_TYPE_YVU420SP = 0x2,
|
|
OT_RUNTIME_BLOB_TYPE_YVU422SP = 0x3,
|
|
OT_RUNTIME_BLOB_TYPE_VEC_S20Q12 = 0x4,
|
|
OT_RUNTIME_BLOB_TYPE_SEQ_S20Q12 = 0x5,
|
|
OT_RUNTIME_BLOB_TYPE_BBOX_S20Q12 = 0x6,
|
|
OT_RUNTIME_BLOB_TYPE_BSI_SQ32 = 0x7,
|
|
OT_RUNTIME_BLOB_TYPE_S12Q20 = 0x8,
|
|
OT_RUNTIME_BLOB_TYPE_VEC_S12Q20 = 0x9,
|
|
OT_RUNTIME_BLOB_TYPE_S32 = 0xa,
|
|
OT_RUNTIME_BLOB_TYPE_U32 = 0xb, // not support
|
|
OT_RUNTIME_BLOB_TYPE_FP32 = 0xc, // not support
|
|
OT_RUNTIME_BLOB_TYPE_FP16 = 0xd, // not support
|
|
OT_RUNTIME_BLOB_TYPE_U16 = 0xe,
|
|
OT_RUNTIME_BLOB_TYPE_BUTT
|
|
} OT_RTBlobType;
|
|
|
|
typedef enum {
|
|
OT_RUNTIME_GROUP_PRIORITY_HIGHEST = 0x0,
|
|
OT_RUNTIME_GROUP_PRIORITY_HIGH,
|
|
OT_RUNTIME_GROUP_PRIORITY_MEDIUM,
|
|
OT_RUNTIME_GROUP_PRIORITY_LOW,
|
|
OT_RUNTIME_GROUP_PRIORITY_LOWEST,
|
|
OT_RUNTIME_GROUP_PRIORITY_BUTT
|
|
} OT_RTGroupPriority;
|
|
|
|
/****************************** Blob struct ******************************
|
|
In Caffe, the blob contain shape info as the following order:
|
|
Image\FeatureMap: N C H W
|
|
RNN\LSTM(Recurrent) vector: T N D
|
|
|
|
The relationship of the following blob struct with Caffe blob is as follows:
|
|
Image\FeatureMap: Num Chn Height With
|
|
RNN\LSTM(SEQ_S32) vector: Step Num Dim
|
|
The stride, which measuring unit is byte, is always algined by the width or
|
|
dim direction.
|
|
**************************************************************************/
|
|
typedef struct {
|
|
OT_RTBlobType blobType; /* Blob type */
|
|
td_u32 stride; /* Stride, a line bytes num */
|
|
td_u64 virtAddr; /* virtual addr */
|
|
td_u64 physAddr; /* physical addr */
|
|
td_u32 num; /* N: frame num or sequence num, correspond to caffe blob's n */
|
|
union {
|
|
struct {
|
|
td_u32 width; /* W: frame width, correspond to caffe blob's w */
|
|
td_u32 height; /* H: frame height, correspond to caffe blob's h */
|
|
td_u32 chn; /* C: frame channel, correspond to caffe blob's c */
|
|
} whc; /* AUTO: OT_RTBlobType: other; */
|
|
struct {
|
|
td_u32 dim; /* D: vecotr dimension */
|
|
td_u64 virtAddrStep; /* T: virtual adress of time steps array in each sequence */
|
|
} seq; /* AUTO: OT_RTBlobType: OT_RUNTIME_BLOB_TYPE_SEQ_S20Q12; */
|
|
} shape;
|
|
} OT_RTBlob, *OT_RTBlobPtr;
|
|
|
|
typedef struct {
|
|
td_u32 blobNum;
|
|
OT_RTBlob *blobs;
|
|
} OT_RTBlobArray, *OT_RTBlobArrayPtr;
|
|
|
|
typedef OT_RTBlobArray OT_RTSrcBlobArray;
|
|
typedef OT_RTBlobArray OT_RTDstBlobArray;
|
|
typedef OT_RTBlobArrayPtr OT_RTSrcBlobArrayPtr;
|
|
typedef OT_RTBlobArrayPtr OT_RTDstBlobArrayPtr;
|
|
|
|
typedef struct {
|
|
OT_RTBlobPtr blob;
|
|
td_char ownerName[MAX_NAME_LEN + 1];
|
|
td_char blobName[MAX_NAME_LEN + 1];
|
|
} OT_RTGroupBlob, *OT_RTGroupBlobPtr;
|
|
|
|
typedef OT_RTGroupBlob OT_RTGroupSrcBlob;
|
|
typedef OT_RTGroupBlob OT_RTGroupDstBlob;
|
|
|
|
/* Mem information */
|
|
typedef struct {
|
|
td_u64 physAddr; /* RW;The physical address of the memory */
|
|
td_u64 virtAddr; /* RW;The virtual address of the memory */
|
|
td_u32 size; /* RW;The size of memory */
|
|
} OT_RTMem, *OT_RTMemPtr;
|
|
|
|
typedef td_s32 (*OT_RTAllocMem)(INOUT OT_RTMem *memInfo);
|
|
typedef td_s32 (*OT_RTFlushCache)(OT_RTMem *memInfo);
|
|
typedef td_s32 (*OT_RTFreeMem)(OT_RTMem *memInfo);
|
|
|
|
typedef struct {
|
|
OT_RTAllocMem allocMem;
|
|
OT_RTFlushCache flushMem;
|
|
OT_RTFreeMem freeMem;
|
|
} OT_RTMemCtrl;
|
|
|
|
typedef struct {
|
|
td_s32 xLeft;
|
|
td_s32 yLeft;
|
|
td_s32 xRight;
|
|
td_s32 yRight;
|
|
} OT_RTPriorboxCoord;
|
|
|
|
typedef struct {
|
|
OT_RTPriorboxCoord priorBox;
|
|
OT_RTPriorboxCoord var;
|
|
} OT_RTPriorBoxInfo, *OT_RTPriorBoxInfoPtr;
|
|
|
|
typedef struct {
|
|
td_u32 priorBoxNum;
|
|
td_u32 varNum;
|
|
} OT_RTPriorBoxNum, *OT_RTPriorBoxNumPtr;
|
|
|
|
typedef td_s32(*OT_RTGenerateBaseAnchorCallback)(OT_RTPriorBoxNum priorBoxNumAddr[], td_u32 priorBoxNum,
|
|
OT_RTPriorBoxInfo priorBoxInfo[], td_u32 *priorBoxBlobNum);
|
|
|
|
typedef struct {
|
|
td_u32 minWidth; /* min width */
|
|
td_u32 minHeight; /* min height */
|
|
td_u32 nmsThreshold; /* nms thresh */
|
|
td_u32 scoreThreshold; /* score thresh */
|
|
} OT_RTThreshold;
|
|
|
|
typedef struct {
|
|
td_char modelName[MAX_NAME_LEN + 1];
|
|
OT_RTMem wkMemory;
|
|
OT_RTThreshold proposalThreshold;
|
|
OT_RTGenerateBaseAnchorCallback generateBaseAnchorCallback;
|
|
} OT_RTWkInfo;
|
|
|
|
typedef struct {
|
|
td_u32 wkNum;
|
|
OT_RTWkInfo *attrs;
|
|
} OT_RTWkInfoArray, *OT_RTWkInfoArrayPtr;
|
|
|
|
typedef struct {
|
|
td_char modelName[MAX_NAME_LEN + 1];
|
|
td_char copName[MAX_NAME_LEN + 1];
|
|
td_u32 constParamSize;
|
|
td_void *constParam;
|
|
} OT_RTCopAttr, *OT_RTCopAttrPtr;
|
|
|
|
typedef struct {
|
|
td_u32 copNum;
|
|
OT_RTCopAttr *attrs;
|
|
} OT_RTCopAttrArray, *OT_RTCopAttrArrayPtr;
|
|
|
|
/* Forward callback event */
|
|
typedef enum {
|
|
OT_RUNTIME_FORWARD_STATUS_SUCC = 0x0,
|
|
OT_RUNTIME_FORWARD_STATUS_FAIL,
|
|
OT_RUNTIME_FORWARD_STATUS_ABORT,
|
|
OT_RUNTIME_FORWARD_STATUS_BUTT
|
|
} OT_RTForwardStatusCallback;
|
|
|
|
typedef td_s32 (*OT_RTConnectorCompute)(OT_RTSrcBlobArray* connectorSrc, OT_RTDstBlobArray* connectorDst,
|
|
td_u64 srcId, td_void* param);
|
|
|
|
typedef struct {
|
|
td_char name[MAX_NAME_LEN + 1];
|
|
OT_RTConnectorCompute connectorFunc;
|
|
td_void *param;
|
|
} OT_RTConnectorAttr;
|
|
|
|
typedef struct {
|
|
td_u32 connectorNum;
|
|
OT_RTConnectorAttr *attrs;
|
|
} OT_RTConnectorAttrArray, *OT_RTConnectorAttrArrayPtr;
|
|
|
|
typedef struct {
|
|
OT_RTWkInfoArray wksInfo;
|
|
OT_RTCopAttrArray copsAttr;
|
|
OT_RTConnectorAttrArray connectorsAttr;
|
|
} OT_RTGroupInfo, *OT_RTGroupInfoPtr;
|
|
|
|
/* handle info after LoadModelGroup */
|
|
typedef td_void* OT_RTGroupHandle;
|
|
|
|
/* the src blobs of group, all model inputs are inside */
|
|
typedef struct {
|
|
td_u32 blobNum;
|
|
OT_RTGroupBlob* blobs;
|
|
} OT_RTGroupBlobArray, *OT_RTGroupBlobArrayPtr;
|
|
|
|
typedef OT_RTGroupBlobArray OT_RTGroupSrcBlobArray;
|
|
typedef OT_RTGroupBlobArray OT_RTGroupDstBlobArray;
|
|
typedef OT_RTGroupBlobArray* OT_RTGroupSrcBlobArrayPtr;
|
|
typedef OT_RTGroupBlobArray* OT_RTGroupDstBlobArrayPtr;
|
|
|
|
/**
|
|
\brief forward result calback function.
|
|
\attention
|
|
none.
|
|
\param[out] enEvent: Result message of forward.
|
|
\param[out] pstGroup: Group Handle
|
|
\param[out] u64SrcId: Frame ID
|
|
\param[out] pstDst: Result blob
|
|
\see \n
|
|
none.
|
|
*/
|
|
typedef td_s32 (*OT_RTForwardCallback)(OT_RTForwardStatusCallback event, OT_RTGroupHandle groupHandle, td_u64 srcId,
|
|
OT_RTGroupDstBlobArrayPtr dst);
|
|
|
|
// errno message
|
|
enum {
|
|
OT_ERR_SVP_RUNTIME_BASE = (td_s32)(0xFF000F00),
|
|
OT_ERR_SVP_RUNTIME_ILLEGAL_STATE,
|
|
OT_ERR_SVP_RUNTIME_MODEL_NOLOAD,
|
|
OT_ERR_SVP_RUNTIME_NULL_PTR,
|
|
OT_ERR_SVP_RUNTIME_INVALID_PARAM,
|
|
OT_ERR_SVP_RUNTIME_SDK_ERROR,
|
|
OT_ERR_SVP_RUNTIME_SDK_NOMEM,
|
|
};
|
|
|
|
#ifndef ot_unused
|
|
#define ot_unused(x) ((td_void)(x))
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* OT_RUNTIME_COMM_H */
|