127 lines
5.4 KiB
C
Executable File
Vendored
127 lines
5.4 KiB
C
Executable File
Vendored
/* SigmaStar trade secret */
|
|
/* Copyright (c) [2019~2020] SigmaStar Technology.
|
|
All rights reserved.
|
|
|
|
Unless otherwise stipulated in writing, any and all information contained
|
|
herein regardless in any format shall remain the sole proprietary of
|
|
SigmaStar and be kept in strict confidence
|
|
(SigmaStar Confidential Information) by the recipient.
|
|
Any unauthorized act including without limitation unauthorized disclosure,
|
|
copying, use, reproduction, sale, distribution, modification, disassembling,
|
|
reverse engineering and compiling of the contents of SigmaStar Confidential
|
|
Information is unlawful and strictly prohibited. SigmaStar hereby reserves the
|
|
rights to any and all damages, losses, costs and expenses resulting therefrom.
|
|
*/
|
|
|
|
#ifndef _MI_IPU_H_
|
|
#define _MI_IPU_H_
|
|
#include "mi_common.h"
|
|
#include "mi_common_datatype.h"
|
|
|
|
#define MI_IPU_MAX_TENSOR_DIM 8
|
|
#define MI_IPU_CHN_MAX 64
|
|
#define MI_IPU_MAX_INPUT_TENSOR_CNT 16
|
|
#define MI_IPU_MAX_OUTPUT_TENSOR_CNT 16
|
|
#define MI_IPU_MAX_TENSOR_CNT \
|
|
((MI_IPU_MAX_INPUT_TENSOR_CNT>MI_IPU_MAX_OUTPUT_TENSOR_CNT)? \
|
|
MI_IPU_MAX_INPUT_TENSOR_CNT:MI_IPU_MAX_OUTPUT_TENSOR_CNT)
|
|
|
|
#define MAX_TENSOR_NAME_LEN 256
|
|
#define MAX_IPU_INPUT_OUTPUT_BUF_DEPTH 3
|
|
#define MI_IPU_MAX_TIMEOUT (10*60*1000) //10 minutes
|
|
#define MI_IPU_BOOT_MAX_TIMEOUT (30*1000) //30 seconds
|
|
|
|
#define YUV420_W_PITCH_ALIGNMENT 16
|
|
#define YUV420_H_PITCH_ALIGNMENT 2
|
|
#define XRGB_W_PITCH_ALIGNMENT 16
|
|
|
|
#if defined(__linux__)
|
|
//#define PERFORMANCE_DEBUG
|
|
#endif
|
|
|
|
//#define IPU_DEBUG
|
|
#define ipu_err(fmt, args...) CamOsPrintf(fmt, ##args)
|
|
|
|
#ifdef IPU_DEBUG
|
|
#define ipu_info(fmt, args...) CamOsPrintf(fmt,##args)
|
|
#else
|
|
#define ipu_info(fmt, args...)
|
|
#endif
|
|
|
|
typedef MI_U32 MI_IPU_CHN;
|
|
typedef int (*SerializedReadFunc)(void *dst_buf,int offset, int size, char *ctx);
|
|
|
|
typedef enum
|
|
{
|
|
//MI_IPU_FORMAT_BGR,
|
|
//MI_IPU_FORMAT_ARGB,
|
|
//MI_IPU_FORMAT_ABGR,
|
|
MI_IPU_FORMAT_U8,
|
|
MI_IPU_FORMAT_NV12,
|
|
MI_IPU_FORMAT_INT16,
|
|
MI_IPU_FORMAT_INT32,
|
|
MI_IPU_FORMAT_INT8,
|
|
MI_IPU_FORMAT_FP32,
|
|
MI_IPU_FORMAT_UNKNOWN,
|
|
} MI_IPU_ELEMENT_FORMAT;
|
|
|
|
typedef enum
|
|
{
|
|
E_IPU_ERR_INVALID_CHNID = 1, /* invalid channel ID */
|
|
E_IPU_ERR_CHNID_EXIST, /* channel exists */
|
|
E_IPU_ERR_CHNID_UNEXIST, /* channel unexists */
|
|
E_IPU_ERR_NOMEM, /* failure caused by malloc memory */
|
|
E_IPU_ERR_NOBUF, /* failure caused by malloc buffer */
|
|
E_IPU_ERR_BADADDR, /* bad address, buffer address doesn't get from IPU buffer allocator */
|
|
E_IPU_ERR_SYS_TIMEOUT, /* system timeout*/
|
|
E_IPU_ERR_FILE_OPERATION, /* file cannot be open or read or write */
|
|
E_IPU_ERR_ILLEGAL_TENSOR_BUFFER_SIZE, /* tensor buffer size cannot meet the requirement, usually less than requirement*/
|
|
E_IPU_ERR_ILLEGAL_BUFFER_DEPTH, /* input or output buffer depth quantum is more than maximum number */
|
|
E_IPU_ERR_ILLEGAL_INPUT_OUTPUT_DESC, /* network description is illegal, usually mean input or output buffer quantum is wrong */
|
|
E_IPU_ERR_ILLEGAL_INPUT_OUTPUT_PARAM, /* user's input or output buffer quantum isn't match network description */
|
|
E_IPU_ERR_MAP, /* address mapping error */
|
|
E_IPU_ERR_INIT_FIRMWARE, /* fail to init ipu firmware */
|
|
E_IPU_ERR_CREATE_CHANNEL, /* fail to create channel */
|
|
E_IPU_ERR_DESTROY_CHANNEL, /* fail to destroy channel */
|
|
E_IPU_ERR_INVOKE, /* fail to invoke */
|
|
E_IPU_ERR_SET_MALLOC_REGION, /* fail to set malloc region for freertos */
|
|
E_IPU_ERR_SET_IPU_PARAMETER, /* fail to set IPU parameter */
|
|
E_IPU_ERR_INVALID_PITCH_ALIGNMENT, /* invalid pitch alignment */
|
|
E_IPU_ERR_NO_CREATED_IPU_DEVICE, /* there is no created IPU device */
|
|
E_IPU_ERR_FAILED, /* unexpected error */
|
|
E_IPU_ERR_NO_AVAILABLE_CHNID = 1<<8, /* there is no available channel */
|
|
}IPU_ErrCode_e;
|
|
|
|
#include "mi_ipu_datatype.h"
|
|
|
|
#define IPU_MAJOR_VERSION 1
|
|
#define IPU_SUB_VERSION 0
|
|
#define MACRO_TO_STR(macro) #macro
|
|
#define IPU_VERSION_STR(major_version,sub_version) ({char *tmp = sub_version/100 ? \
|
|
"mi_ipu_version_" MACRO_TO_STR(major_version)"." MACRO_TO_STR(sub_version) : sub_version/10 ? \
|
|
"mi_ipu_version_" MACRO_TO_STR(major_version)".0" MACRO_TO_STR(sub_version) : \
|
|
"mi_ipu_version_" MACRO_TO_STR(major_version)".00" MACRO_TO_STR(sub_version);tmp;})
|
|
#define MI_IPU_API_VERSION IPU_VERSION_STR(IPU_MAJOR_VERSION,IPU_SUB_VERSION)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
MI_S32 MI_IPU_CreateDevice(MI_IPU_DevAttr_t *pstIPUDevAttr, SerializedReadFunc pReadFunc, char *pReadCtx, MI_U32 FWSize);
|
|
MI_S32 MI_IPU_DestroyDevice(void);
|
|
MI_S32 MI_IPU_CreateCHN(MI_IPU_CHN *ptChnId, MI_IPUChnAttr_t *pstIPUChnAttr,SerializedReadFunc pReadFunc, char *pReadCtx);
|
|
MI_S32 MI_IPU_DestroyCHN(MI_IPU_CHN u32ChnId);
|
|
MI_S32 MI_IPU_GetInOutTensorDesc(MI_IPU_CHN u32ChnId, MI_IPU_SubNet_InputOutputDesc_t *pstDesc);
|
|
MI_S32 MI_IPU_GetInputTensors(MI_IPU_CHN u32ChnId, MI_IPU_TensorVector_t *pstInputTensorVector);
|
|
MI_S32 MI_IPU_PutInputTensors(MI_IPU_CHN u32ChnId, MI_IPU_TensorVector_t *pstInputTensorVector);
|
|
MI_S32 MI_IPU_GetOutputTensors(MI_IPU_CHN u32ChnId, MI_IPU_TensorVector_t *pstInputTensorVector);
|
|
MI_S32 MI_IPU_PutOutputTensors(MI_IPU_CHN u32ChnId, MI_IPU_TensorVector_t *pstInputTensorVector);
|
|
MI_S32 MI_IPU_Invoke(MI_IPU_CHN u32ChnId, MI_IPU_TensorVector_t *pstInputTensorVector, MI_IPU_TensorVector_t *pstOuputTensorVector);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|