MC3302_SDK_V1.1.9_202507281.../media/mpp/include/fhhcp/base.h

248 lines
7.0 KiB
C
Raw Normal View History

2025-11-11 04:08:31 +00:00
#ifndef TY_BASE_H_
#define TY_BASE_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* 版本信息 */
#define TY_NPU_MAJOR_VERSION 1
#define TY_NPU_MINOR_VERSION 1
#define TY_NPU_PATCH_VERSION 10
#define TY_NPU_FUNC_VISIBILITY __attribute__((visibility("default")))
#define TY_NPU_MAX_TENSOR_NAME_LEN 128
#define TY_NPU_MAX_TENSOR_DIM_CNT 5
#define TY_NPU_MODLE_BLOB_MAX_INPUT_NUM 128
#define TY_NPU_MODLE_BLOB_MAX_OUTPUT_NUM 128
#define TY_NPU_MEM_MAX_SEGMENT_NUM 8
#define TY_NPU_OPTYPE_STRING_MAX_LEN 256U /* optype 字符串最大长度, byte为单位 */
typedef enum TY_BOOL_TYPE{
E_TY_FALSE = 0x0,
E_TY_TRUE
}E_TY_Bool;
typedef enum TY_EngineType{
E_TY_AI_CPU = 0x0,
E_TY_AI_NPU,
E_TY_AI_ARM_CPU,
E_TY_AI_RISCV_CPU,
E_TY_AI_DSP,
E_TY_AI_TYPE_BUTT
}E_TY_EngineType;
typedef enum TY_NpuID {
E_TY_NPU_ID_0 = 0,
E_TY_NPU_ID_1,
E_TY_NPU_ID_2,
E_TY_NPU_ID_3,
E_TY_NPU_ID_4,
E_TY_NPU_ID_5,
E_TY_NPU_ID_6,
E_TY_NPU_ID_7,
E_TY_NPU_ID_8,
E_TY_NPU_ID_9,
E_TY_NPU_ID_10,
E_TY_NPU_ID_11,
E_TY_NPU_ID_12,
E_TY_NPU_ID_13,
E_TY_NPU_ID_14,
E_TY_NPU_ID_15,
E_TY_NPU_ID_BUTT
}E_TY_NpuID;
typedef struct TY_Mem {
uint64_t phyAddr; /* 内存物理地址 */
uint64_t virAddr; /* 内存虚拟地址 */
uint32_t size; /* 内存大小 */
}T_TY_Mem;
typedef enum TY_MemAllocType {
E_TY_MEM_VMM_NO_CACHED = 0,/* vmm管理的物理地址连续、非cached属性内存*/
E_TY_MEM_VMM_CACHED, /* vmm管理的物理地址连续、cached属性内存*/
E_TY_MEM_MALLOC, /* 非vmm管理的内存*/
E_TY_MEM_ALLOC_TYPE_BUTT
}E_TY_MemAllocType;
typedef enum TY_MemShareType {
E_MEM_SHARED = 0, /* 模型共享内存NPU不使用期间应用可读可写*/
E_MEM_EXCLUSIVED, /* 模型独享内存,应用只读*/
E_MEM_SHARE_TYPE_BUTT
}E_TY_MemShareType;
typedef struct TY_MemAllocInfo{
int32_t size;
E_TY_MemAllocType allocType;
E_TY_MemShareType shareType;
uint32_t alignByteSize;
}T_TY_MemAllocInfo;
typedef struct TY_MemInfo{
T_TY_MemAllocInfo allocInfo;
T_TY_Mem mem;
}T_TY_MemInfo;
typedef struct TY_MemSegmentInfo{
int32_t segNum;
T_TY_MemInfo memInfo[TY_NPU_MEM_MAX_SEGMENT_NUM];
}T_TY_MemSegmentInfo;
typedef enum {
E_TY_DT_UNDEFINED = -1,
E_TY_FLOAT = 0,
E_TY_FLOAT16 = 1,
E_TY_INT8 = 2,
E_TY_INT32 = 3,
E_TY_UINT8 = 4,
E_TY_INT16 = 6,
E_TY_UINT16 = 7,
E_TY_UINT32 = 8,
E_TY_INT64 = 9,
E_TY_UINT64 = 10,
E_TY_DOUBLE = 11,
E_TY_BOOL = 12,
E_TY_INT4 = 13,
E_TY_UINT4 = 14
}E_TY_DataType;
typedef enum {
E_TY_FORMAT_UNDEFINED = -1,
E_TY_FORMAT_NCHW = 0,
E_TY_FORMAT_NHWC = 1,
E_TY_FORMAT_ND = 2,
E_TY_FORMAT_NCDHW = 3, /* D表示depth */
E_TY_FORMAT_NDHWC = 4
}E_TY_LayoutFormat;
typedef enum {
E_TY_PIXEL_FORMAT_YUV_400 = 0,
E_TY_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1,
E_TY_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,
E_TY_PIXEL_FORMAT_YUYV_PACKED_422 = 7,
E_TY_PIXEL_FORMAT_UYVY_PACKED_422 = 8,
E_TY_PIXEL_FORMAT_RGB_888_PACKED = 12,
E_TY_PIXEL_FORMAT_BGR_888_PACKED = 13,
E_TY_PIXEL_FORMAT_RGB_888_PLANAR = 70,
E_TY_PIXEL_FORMAT_BGR_888_PLANAR,
E_TY_PIXEL_FORMAT_S8C1 = 76, /* ive */
E_TY_PIXEL_FORMAT_S8C2_PACKAGE,
E_TY_PIXEL_FORMAT_S8C2_PLANAR,
E_TY_PIXEL_FORMAT_S16C1,
E_TY_PIXEL_FORMAT_U8C1,
E_TY_PIXEL_FORMAT_U16C1,
E_TY_PIXEL_FORMAT_S32C1,
E_TY_PIXEL_FORMAT_U32C1,
E_TY_PIXEL_FORMAT_U64C1,
E_TY_PIXEL_FORMAT_S64C1,
E_TY_PIXEL_FORMAT_YVU_PLANAR_444=22,
E_TY_PIXEL_FORMAT_YUV_PLANAR_444=1002,
E_TY_PIXEL_FORMAT_BUTT = 1004
}E_TY_PixelFormat;
typedef struct TY_Rect{
int32_t x;
int32_t y;
int32_t width;
int32_t height;
}T_TY_Rect;
typedef enum {
E_TY_BLOB_DATA = 0,
E_TY_BLOB_IMAGE,
E_TY_BLOB_IMAGE_WITH_PRE_PROC,// 指示此BLOB位置需要进行预处理仅支持基于IMAGE进行预处理预处理的输入T_ImageDesc来自用户
E_TY_BLOB_TYPE_TY_BUTT
}E_TY_BLOB_TYPE;
typedef struct TY_TensorDesc {
char name[TY_NPU_MAX_TENSOR_NAME_LEN];
E_TY_DataType dataType;
E_TY_LayoutFormat format;
int32_t numDims;
int64_t dims[TY_NPU_MAX_TENSOR_DIM_CNT];
}T_TY_TensorDesc;
typedef struct TY_ImgDesc{
E_TY_PixelFormat picFormat;
int32_t picWidth; /*以像素为单位*/
int32_t picHeight; /*以像素为单位*/
int32_t picWidthStride; /*以像素为单位*/
int32_t picHeightStride; /*以图像高像素为单位*/
T_TY_Rect roi; /*整图时可设置为{0,0,picWidth,picHeight}或{0,0,0,0}*/
}T_TY_ImgDesc;
typedef struct {
E_TY_BLOB_TYPE type;
union{
T_TY_TensorDesc tensor; //对应type==E_TY_BLOB_DATA
T_TY_ImgDesc img; //对应type==E_TY_BLOB_IMAGE模型输入为image
int32_t reserved; //对应type==E_TY_BLOB_IMAGE_WITH_PRE_PROC,模型输入需要预处理image由用户输入
};
}T_TY_BlobDesc;
typedef struct TY_Image{
T_TY_ImgDesc desc;
T_TY_Mem mem;
}T_TY_Image;
typedef uint32_t TY_Error;
/************************************************IVE error code ***********************************/
typedef enum{
TY_IVE_SUCCESS = 0,
TY_ERR_IVE_UNINITIALIZE = 0xA01D8001,
TY_ERR_IVE_REPEAT_INITIALIZE = 0xA01D8002,
TY_ERR_IVE_ILLEGAL_PARAM = 0xA01D8003,
TY_ERR_IVE_NULL_PTR = 0xA01D8004,
TY_ERR_IVE_NOT_SUPPORT = 0xA01D8005,
TY_ERR_IVE_EXEC_FAIL = 0xA01D8006,
TY_ERROR_REPEAT_EXIT = 0xA01D8007
}E_TY_IVE_Error;
/************************************************CV error code ***********************************/
typedef enum{
TY_CV_SUCCESS = 0,
TY_ERR_CV_UNINITIALIZE = 0xA01D8001,
TY_ERR_CV_REPEAT_INITIALIZE = 0xA01D8002,
TY_ERR_CV_ILLEGAL_PARAM = 0xA01D8003,
TY_ERR_CV_NULL_PTR = 0xA01D8004,
TY_ERR_CV_NOT_SUPPORT = 0xA01D8005,
TY_ERR_CV_EXEC_FAIL = 0xA01D8006,
TY_ERR_CV_REPEAT_EXIT = 0xA01D8007
}E_TY_CV_Error;
/************************************************NPU error code ***********************************/
typedef enum{
TY_NPU_SUCCESS = 0,
TY_ERR_NPU_INVALID_PARAM = 100000,
TY_ERR_NPU_UNINITIALIZE = 100001,
TY_ERR_NPU_REPEAT_INITIALIZE = 100002,
TY_ERR_NPU_INVALID_FILE = 100003,
TY_ERR_NPU_WRITE_FILE = 100004,
TY_ERR_NPU_INVALID_FILE_SIZE = 100005,
TY_ERR_NPU_PARSE_FILE = 100006,
TY_ERR_NPU_INVALID_MODEL = 100011,
TY_ERR_NPU_INVALID_TASK = 100012,
TY_ERR_NPU_PARSE_MODEL = 100013,
TY_ERR_NPU_MODEL_SIZE_INVALID = 100015,
TY_ERR_NPU_MODEL_INPUT_NOT_MATCH = 100017,
TY_ERR_NPU_MODEL_OUTPUT_NOT_MATCH = 100018,
TY_ERR_NPU_UNSUPPORTED_DATA_TYPE = 100026,
TY_ERR_NPU_FORMAT_NOT_MATCH = 100027,
TY_ERR_NPU_REPEAT_FINALIZE = 100037,
TY_ERR_NPU_API_NOT_SUPPORT = 200001,
TY_ERR_NPU_INVALID_DEVICE = 200002,
TY_ERR_NPU_MEMORY_ADDRESS_UNALIGNED = 200003,
TY_ERR_NPU_RESOURCE_NOT_MATCH = 200004,
TY_ERR_NPU_INVALID_RESOURCE_HANDLE = 200005,
TY_ERR_NPU_FEATURE_UNSUPPORTED = 200006
}E_TY_NPU_Error;
#ifdef __cplusplus
}
#endif
#endif