479 lines
23 KiB
C
Executable File
479 lines
23 KiB
C
Executable File
/**
|
|
@brief Header file of definition of vendor user-space net flow sample.
|
|
|
|
@file vendor_ai.h
|
|
|
|
@ingroup vendor_ai
|
|
|
|
@note Nothing.
|
|
|
|
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
|
|
*/
|
|
#ifndef _VENDOR_AI_NET_H_
|
|
#define _VENDOR_AI_NET_H_
|
|
|
|
/********************************************************************
|
|
INCLUDE FILES
|
|
********************************************************************/
|
|
#include "hd_type.h"
|
|
#include "hd_common.h"
|
|
#include "vendor_ai_dla/vendor_ai_dla.h"
|
|
|
|
/********************************************************************
|
|
MACRO CONSTANT DEFINITIONS
|
|
********************************************************************/
|
|
#ifndef VENDOR_AI_VERSION
|
|
#define VENDOR_AI_VERSION 0x020000
|
|
#endif
|
|
|
|
#define MAX_PROC_CNT 128
|
|
|
|
|
|
/* ai layer id */
|
|
#define VENDOR_AI_NET_PARAM_LAYER(layer_id) (0x80000000 | ((layer_id) & 0xffff)) ///< layer
|
|
#define VENDOR_AI_MAXLAYER 0xffff ///< max layer id (auto)
|
|
|
|
|
|
/* ai i/o buffer path_id */
|
|
#define VENDOR_AI_NET_PARAM_IN(layer_id, in_id) (0x90000000 | (((in_id) & 0xfff) << 16) | ((layer_id) & 0xffff)) ///< input buffer
|
|
#define VENDOR_AI_NET_PARAM_OUT(layer_id, out_id) (0xa0000000 | (((out_id) & 0xfff) << 16) | ((layer_id) & 0xffff)) ///< output buffer
|
|
|
|
|
|
/* ai dep buffer path_id */
|
|
#define VENDOR_AI_NET_PARAM_DEP(dep_id) (0xb0000000 | ((dep_id) & 0xffff)) ///< dependent buffer
|
|
|
|
/* ai output buffer real access size */
|
|
#define VENDOR_AI_NET_OUTBUF_SIZE(w, h, c, b, fmt) (w * h * c * b * (HD_VIDEO_PXLFMT_BITS(fmt) >> 3))
|
|
|
|
/* ai buf format */
|
|
#define HD_VIDEO_PXLFMT_AI_SINT8 0xa1080000 ///< signed int 8-bits
|
|
#define HD_VIDEO_PXLFMT_AI_UINT8 0xa2080000 ///< unsigned int 8-bits
|
|
#define HD_VIDEO_PXLFMT_AI_SINT16 0xa1100000 ///< signed int 16-bits
|
|
#define HD_VIDEO_PXLFMT_AI_UINT16 0xa2100000 ///< unsigned int 16-bits
|
|
#define HD_VIDEO_PXLFMT_AI_FLOAT16 0xa3100000 ///< float 16-bits
|
|
#define HD_VIDEO_PXLFMT_AI_SINT32 0xa1200000 ///< signed int 32-bits
|
|
#define HD_VIDEO_PXLFMT_AI_UINT32 0xa2200000 ///< unsigned int 32-bits
|
|
#define HD_VIDEO_PXLFMT_AI_FLOAT32 0xa3200000 ///< float 32-bits
|
|
|
|
#define HD_VIDEO_PXLFMT_CLASS_AI 0xa
|
|
#define HD_VIDEO_PXLFMT_TYPE_MASK 0x0f000000
|
|
#define HD_VIDEO_PXLFMT_BITS_MASK 0x00ff0000
|
|
#define HD_VIDEO_PXLFMT_INT_MASK 0x0000ff00
|
|
#define HD_VIDEO_PXLFMT_FRAC_MASK 0x000000ff
|
|
#define HD_VIDEO_PXLFMT_SIGN(pxlfmt) ((((pxlfmt) & HD_VIDEO_PXLFMT_TYPE_MASK) >> 24) & 0x01)
|
|
#define HD_VIDEO_PXLFMT_BITS(pxlfmt) (((pxlfmt) & HD_VIDEO_PXLFMT_BITS_MASK) >> 16)
|
|
#define HD_VIDEO_PXLFMT_INT(pxlfmt) (INT8)(((pxlfmt) & HD_VIDEO_PXLFMT_INT_MASK) >> 8)
|
|
#define HD_VIDEO_PXLFMT_FRAC(pxlfmt) (INT8)((pxlfmt) & HD_VIDEO_PXLFMT_FRAC_MASK)
|
|
#define HD_VIDEO_PXLFMT_FMT(pxlfmt) ((pxlfmt) & (((HD_VIDEO_PXLFMT_CLASS_AI << 28) | HD_VIDEO_PXLFMT_TYPE_MASK) | HD_VIDEO_PXLFMT_BITS_MASK))
|
|
|
|
#define HD_VIDEO_PXLFMT_AI_SFIXED8(frac_bits) (HD_VIDEO_PXLFMT_AI_SINT8 | (((8-(frac_bits)-1)&0xff) << 8) | ((frac_bits)&0xff)) ///< signed fixpoint 8-bits
|
|
#define HD_VIDEO_PXLFMT_AI_UFIXED8(frac_bits) (HD_VIDEO_PXLFMT_AI_UINT8 | (((8-(frac_bits))&0xff) << 8) | ((frac_bits)&0xff)) ///< unsigned fixpoint 8-bits
|
|
#define HD_VIDEO_PXLFMT_AI_SFIXED16(frac_bits) (HD_VIDEO_PXLFMT_AI_SINT16 | (((16-(frac_bits)-1)&0xff) << 8) | ((frac_bits)&0xff)) ///< signed fixpoint 16-bits
|
|
#define HD_VIDEO_PXLFMT_AI_UFIXED16(frac_bits) (HD_VIDEO_PXLFMT_AI_UINT16 | (((16-(frac_bits))&0xff) << 8) | ((frac_bits)&0xff)) ///< unsigned fixpoint 16-bits
|
|
#define HD_VIDEO_PXLFMT_AI_SFIXED32(frac_bits) (HD_VIDEO_PXLFMT_AI_SINT32 | (((32-(frac_bits)-1)&0xff) << 8) | ((frac_bits)&0xff)) ///< signed fixpoint 32-bits
|
|
#define HD_VIDEO_PXLFMT_AI_UFIXED32(frac_bits) (HD_VIDEO_PXLFMT_AI_UINT32 | (((32-(frac_bits))&0xff) << 8) | ((frac_bits)&0xff)) ///< unsigned fixpoint 32-bits
|
|
|
|
|
|
/* ai buf format (addiitonal) */
|
|
#define HD_VIDEO_PXLFMT_BGR888_PLANAR 0x2B180888 ///< 3 plane, pixel=B(w,h), G(w,h), R(w,h)
|
|
#define HD_VIDEO_PXLFMT_UV 0x51100044 ///< 1 plane, pixel=UV(w,h)
|
|
#define HD_VIDEO_PXLFMT_R8 0x21080800 ///< 1 plane, pixel=R(w,h)
|
|
#define HD_VIDEO_PXLFMT_G8 0x21080080 ///< 1 plane, pixel=G(w,h)
|
|
#define HD_VIDEO_PXLFMT_B8 0x21080008 ///< 1 plane, pixel=B(w,h)
|
|
|
|
/* type of AI_PXLFMT */
|
|
#define AI_PXLFMT_TYPE(pxlfmt) (((pxlfmt) & (HD_VIDEO_PXLFMT_CLASS_MASK | HD_VIDEO_PXLFMT_PLANE_MASK | HD_VIDEO_PXLFMT_BPP_MASK)))
|
|
|
|
|
|
|
|
|
|
/* ai schd parm */
|
|
#define VENDOR_AI_FAIR_CORE_ALL 0x000000ff ///< fair: all dla core
|
|
#define VENDOR_AI_FAIR_CORE(ch) ((ch) & 0xff) ///< fair: select dla core (default 0)
|
|
#define VENDOR_AI_FAIR_CPU_ALL 0x00000000 ///< cpu: all core
|
|
#define VENDOR_AI_FAIR_CPU(ch) ((((ch)+1) & 0xff)<<8) ///< cpu: select cpu core (default 0)
|
|
#define VENDOR_AI_CAPA_RATE(r) (((r) & 0xff) << 24) ///< capacity: max rate (TODO)
|
|
|
|
|
|
/********************************************************************
|
|
TYPE DEFINITION
|
|
********************************************************************/
|
|
|
|
// set/get set/get/start
|
|
// ^ | ^ |
|
|
// | v | v
|
|
// [UNINIT] -- init --> [INIT] -- open --> [OPEN] -- start --> [START]
|
|
// <-- uninit -- <-- close -- <-- stop --
|
|
//
|
|
typedef enum _VENDOR_AI_PROC_STATE {
|
|
VENDOR_AI_PROC_STATE_UNINIT = 0,
|
|
VENDOR_AI_PROC_STATE_INIT,
|
|
VENDOR_AI_PROC_STATE_OPEN,
|
|
VENDOR_AI_PROC_STATE_START,
|
|
} VENDOR_AI_PROC_STATE;
|
|
|
|
/**
|
|
@name scheduler for all proc handle
|
|
*/
|
|
|
|
typedef enum {
|
|
VENDOR_AI_PROC_SCHD_FAIR = 0, ///< overlapping with fair core (default)
|
|
VENDOR_AI_PROC_SCHD_CAPACITY = 1, ///< overlapping with max rate (TODO)
|
|
VENDOR_AI_PROC_SCHD_FIFO = 2, ///< first in first out
|
|
} VENDOR_AI_PROC_SCHD;
|
|
|
|
/**
|
|
@name proc_id max count
|
|
*/
|
|
typedef struct _VENDOR_AI_CFG_PROC_COUNT {
|
|
UINT32 max_proc_count; ///< supported max count of proc_id
|
|
} VENDOR_AI_NET_CFG_PROC_COUNT;
|
|
|
|
/**
|
|
@name ai implement version
|
|
*/
|
|
#define VENDOR_AI_IMPL_VERSION_LENGTH 32
|
|
typedef struct _VENDOR_AI_NET_CFG_IMPL_VERSION {
|
|
CHAR vendor_ai_impl_version[VENDOR_AI_IMPL_VERSION_LENGTH];
|
|
CHAR kflow_ai_impl_version[VENDOR_AI_IMPL_VERSION_LENGTH];
|
|
CHAR kdrv_ai_impl_version[VENDOR_AI_IMPL_VERSION_LENGTH];
|
|
} VENDOR_AI_NET_CFG_IMPL_VERSION;
|
|
|
|
#define CORE_MAX 16
|
|
|
|
typedef struct _VENDOR_AI_CORE_UT {
|
|
CHAR name[8]; ///< name
|
|
UINT32 time; ///< time
|
|
UINT32 util; ///< utility
|
|
} VENDOR_AI_CORE_UT;
|
|
|
|
typedef struct _VENDOR_AI_PERF_UT {
|
|
UINT32 core_count;
|
|
VENDOR_AI_CORE_UT core[CORE_MAX];
|
|
} VENDOR_AI_PERF_UT;
|
|
|
|
|
|
/**
|
|
@name ai parameter id
|
|
*/
|
|
typedef enum _VENDOR_AI_CFG_ID {
|
|
|
|
//set before init
|
|
VENDOR_AI_CFG_PLUGIN_ENGINE = 0, ///< set/get, config engine pluign
|
|
VENDOR_AI_CFG_PROC_SCHD = 1, ///< set/get, config scheduler for all proc handle
|
|
VENDOR_AI_CFG_PROC_COUNT = 2, ///< get , max proc count , using VENDOR_AI_NET_CFG_PROC_COUNT struct
|
|
VENDOR_AI_CFG_IMPL_VERSION = 3, ///< get , implement version, using VENDOR_AI_NET_CFG_IMPL_VERSION struct
|
|
VENDOR_AI_CFG_PROC_CHK_INTERVAL = 4, ///< set/get, config timeout check interval (ms) (default 100, should > 100)
|
|
VENDOR_AI_CFG_PERF_UT = 5, ///< set/get, support perf ut between set and get
|
|
VENDOR_AI_CFG_SHAREMODEL_MODE = 6, ///< set/get, share model mode, value = [0/1], default 0
|
|
VENDOR_AI_CFG_MULTI_THREAD = 7, ///< set , support init multiply times (default 0, set to 0 or 1)
|
|
VENDOR_AI_CFG_MULTI_PROCESS = 8, ///< set , support multi process (default 0, set to 0 or 1)
|
|
VENDOR_AI_CFG_LIB_IMPL_VERSION = 9, ///< get , lib implement version
|
|
VENDOR_AI_CFG_KFLOW_IMPL_VERSION = 10, ///< get , kflow implement version
|
|
VENDOR_AI_CFG_KDRV_IMPL_VERSION = 11, ///< get , kdrv implement version
|
|
VENDOR_AI_CFG_NOTCHECK_INPUT_ALIGN = 12, ///< set/get, not check input align
|
|
ENUM_DUMMY4WORD(VENDOR_AI_CFG_ID)
|
|
} VENDOR_AI_CFG_ID;
|
|
|
|
/**
|
|
@name struct of model memory
|
|
*/
|
|
typedef struct _VENDOR_AI_NET_CFG_MODEL {
|
|
UINT32 pa; ///< physical address
|
|
UINT32 va; ///< virtual address
|
|
UINT32 size; ///< buffer size
|
|
} VENDOR_AI_NET_CFG_MODEL;
|
|
|
|
/**
|
|
@name struct of work memory
|
|
*/
|
|
typedef struct _VENDOR_AI_NET_CFG_WORKBUF {
|
|
UINT32 pa; ///< physical address
|
|
UINT32 va; ///< virtual address
|
|
UINT32 size; ///< buffer size
|
|
} VENDOR_AI_NET_CFG_WORKBUF;
|
|
|
|
/**
|
|
@name struct of internal memory
|
|
*/
|
|
typedef struct _VENDOR_AI_NET_CFG_INTLBUF {
|
|
UINT32 pa; ///< physical address
|
|
UINT32 va; ///< virtual address
|
|
UINT32 size; ///< buffer size
|
|
} VENDOR_AI_NET_CFG_INTLBUF;
|
|
|
|
typedef enum {
|
|
VENDOR_AI_NET_JOB_OPT_LINEAR = 0, ///< sequential trigger jobs (default)
|
|
VENDOR_AI_NET_JOB_OPT_LINEAR_O1 = 1, ///< sequential trigger jobs, with subgraph optimize level 1
|
|
VENDOR_AI_NET_JOB_OPT_GRAPH = 10, ///< parallel trigger jobs
|
|
VENDOR_AI_NET_JOB_OPT_GRAPH_O1 = 11, ///< parallel trigger jobs, with subgraph optimize level 1
|
|
VENDOR_AI_NET_JOB_OPT_GRAPH_O2 = 12, ///< parallel trigger jobs, with subgraph optimize level 2 (TODO)
|
|
VENDOR_AI_NET_JOB_OPT_GRAPH_O3 = 13, ///< parallel trigger jobs, with subgraph optimize level 3 (TODO)
|
|
} VENDOR_AI_NET_JOB_OPT;
|
|
|
|
/**
|
|
@name parameters of job optimize
|
|
*/
|
|
typedef struct _VENDOR_AI_NET_CFG_JOB_OPT {
|
|
VENDOR_AI_NET_JOB_OPT method; ///< job optimize method
|
|
INT32 wait_ms; ///< -1: sync mode, 0: async mode, >0: async mode with timeout
|
|
UINT32 schd_parm; ///< scheduler additional parameter, if not used, should set to 0
|
|
} VENDOR_AI_NET_CFG_JOB_OPT;
|
|
|
|
|
|
typedef enum {
|
|
VENDOR_AI_NET_BUF_OPT_FULL = 0, ///< allocate each buffer
|
|
VENDOR_AI_NET_BUF_OPT_SHRINK = 1, ///< shrink buffer space (default)
|
|
VENDOR_AI_NET_BUF_OPT_SHRINK_O1 = 2, ///< shrink buffer space with buffer optimize level 1
|
|
VENDOR_AI_NET_BUF_OPT_SHRINK_O2 = 3, ///< shrink buffer space with buffer optimize level 2
|
|
VENDOR_AI_NET_BUF_OPT_SHRINK_O3 = 4, ///< shrink buffer space with buffer optimize level 3 (TODO)
|
|
VENDOR_AI_NET_BUF_OPT_NONE = -1, ///< do nothing, using buffer space already in model bin
|
|
} VENDOR_AI_NET_BUF_OPT;
|
|
|
|
/**
|
|
@name parameters of buffer optimize
|
|
*/
|
|
typedef struct _VENDOR_AI_NET_CFG_BUF_OPT {
|
|
VENDOR_AI_NET_BUF_OPT method; ///< buffer optimize method
|
|
HD_COMMON_MEM_DDR_ID ddr_id; ///< ddr id
|
|
} VENDOR_AI_NET_CFG_BUF_OPT;
|
|
|
|
/**
|
|
@name net info
|
|
*/
|
|
typedef struct _VENDOR_AI_NET_INFO {
|
|
|
|
// model job info
|
|
UINT32 model_layer_cnt; ///< model layer count
|
|
UINT32 model_bind_cnt; ///< model bind count
|
|
// model buf info
|
|
UINT32 model_buf_cnt; ///< model total io buffer count
|
|
UINT32 model_dep_cnt; ///< model total dep buffer count
|
|
// model buf size
|
|
UINT32 model_buf_size; ///< model buffer size
|
|
UINT32 model_part1_size; ///< -model part1 size (header, job-desc, io-buffer-desc, job-workload)
|
|
UINT32 model_part2_size; ///< -model part2 size (weight-buffer-desc, weight-buffer)
|
|
|
|
// open buf info
|
|
UINT32 total_buf_cnt; ///< total buffer count
|
|
UINT32 in_buf_cnt; ///< in buffer count
|
|
UINT32 out_buf_cnt; ///< out buffer count
|
|
UINT32 in_buf_type; ///< in buffer type (signature)
|
|
UINT32 out_buf_type; ///< out buffer type (signature)
|
|
// open buf size
|
|
UINT32 work_buf_size; ///< work buffer size
|
|
UINT32 in_buf_size; ///< -in buffer size
|
|
UINT32 io_buf_size; ///< -io buffer size
|
|
UINT32 out_buf_size; ///< -out buffer size
|
|
UINT32 misc_buf_size; ///< -misc buffer size
|
|
|
|
// start job info
|
|
UINT32 total_job_cnt; ///< total job count
|
|
UINT32 total_bind_cnt; ///< total bind count
|
|
UINT32 in_job_cnt; ///< in job count
|
|
UINT32 out_job_cnt; ///< out job count
|
|
|
|
} VENDOR_AI_NET_INFO;
|
|
|
|
/**
|
|
@name input buffer / output buffer
|
|
*/
|
|
typedef struct _VENDOR_AI_BUF {
|
|
UINT32 sign; ///< signature = MAKEFOURCC('A','B','U','F')
|
|
UINT32 chunk_size; ///< sizeof(this sturct) - 8;
|
|
HD_COMMON_MEM_DDR_ID ddr_id; ///< ddr id
|
|
UINT32 pa; ///< physical address
|
|
UINT32 va; ///< virtual address
|
|
UINT32 size; ///< buffer size
|
|
HD_VIDEO_PXLFMT fmt; ///< format
|
|
UINT32 width; ///< width
|
|
UINT32 height; ///< height
|
|
UINT32 channel; ///< channel
|
|
UINT32 batch_num; ///< number of batch
|
|
UINT32 time; ///< number of time
|
|
union {
|
|
UINT32 reserve; ///< reserved
|
|
FLOAT scale_ratio; ///< for fixed and float
|
|
};
|
|
UINT32 line_ofs; ///< line offset
|
|
UINT32 channel_ofs; ///< channel offset
|
|
UINT32 batch_ofs; ///< batch offset
|
|
UINT32 time_ofs; ///< time offset
|
|
CHAR layout[8]; ///< layout order of W,H,C,N
|
|
CHAR *name; ///< buffer name, eg: "mylayer.out0"
|
|
CHAR *op_name; ///< related operation name
|
|
} VENDOR_AI_BUF;
|
|
|
|
/**
|
|
@name input buffer list / output buffer list
|
|
*/
|
|
typedef struct _VENDOR_AI_BUF_LIST {
|
|
UINT32 sign; ///< signature = MAKEFOURCC('A','L','S','T')
|
|
UINT32 chunk_size; ///< sizeof(this sturct) - 8;
|
|
UINT32 buf_count; ///< buffer count
|
|
VENDOR_AI_BUF *buf_list;
|
|
} VENDOR_AI_BUF_LIST;
|
|
|
|
/**
|
|
@name struct for finding buffer path
|
|
*/
|
|
typedef struct _VENDOR_AI_BUF_NAME {
|
|
CHAR name[100]; ///< buffer name, eg: "mylayer.out0"
|
|
UINT32 path_id; ///< path_id with VENDOR_AI_NET_PARAM_OUT() value
|
|
} VENDOR_AI_BUF_NAME;
|
|
|
|
/**
|
|
@name network parameter id
|
|
*/
|
|
typedef enum _VENDOR_AI_NET_PARAM_ID {
|
|
|
|
VENDOR_AI_NET_PARAM_STATE = 0, ///< get, proc state, using VENDOR_AI_PROC_STATE type, 1=ready, 2=open, 3=start
|
|
|
|
//set before open
|
|
VENDOR_AI_NET_PARAM_CFG_MODEL = 1, ///< set/get, config model , using VENDOR_AI_NET_CFG_MODEL struct
|
|
VENDOR_AI_NET_PARAM_CFG_MODEL_RESINFO = 2, ///< set , set difference resolution model bin, using VENDOR_AI_NET_CFG_MODEL struct
|
|
VENDOR_AI_NET_PARAM_CFG_SHAREMODEL = 3, ///< set/get, config share model , using VENDOR_AI_NET_CFG_MODEL struct
|
|
VENDOR_AI_NET_PARAM_CFG_JOB_OPT = 4, ///< set/get, config job optimize , using VENDOR_AI_NET_CFG_JOB_OPT struct
|
|
VENDOR_AI_NET_PARAM_CFG_BUF_OPT = 5, ///< set/get, config buf optimize , using VENDOR_AI_NET_CFG_BUF_OPT struct
|
|
VENDOR_AI_NET_PARAM_CFG_USER_POSTPROC = 6, ///< set , config user postproc, using void* (get_user_postproc)(void) to return VENDOR_AI_ENGINE_PLUGIN struct pointer
|
|
|
|
//get after open
|
|
VENDOR_AI_NET_PARAM_INFO = 20, ///< get , get net info, using VENDOR_AI_NET_INFO struct
|
|
VENDOR_AI_NET_PARAM_IN_PATH_LIST = 21, ///< get , get path_id of multiple input buffer, using UINT32 array
|
|
VENDOR_AI_NET_PARAM_OUT_PATH_LIST = 22, ///< get , get path_id of multiple output buffer, using UINT32 array
|
|
VENDOR_AI_NET_PARAM_OUT_PATH_BY_NAME = 24, ///< get , get output path by output name, using VENDOR_AI_BUF_NAME struct
|
|
VENDOR_AI_NET_PARAM_LAST_LAYER_LABELNUM = 25, ///< get , get last layer label number
|
|
|
|
//set after open ~ before start
|
|
VENDOR_AI_NET_PARAM_CFG_WORKBUF = 41, ///< get , set work memory, using VENDOR_AI_NET_CFG_WORKBUF struct
|
|
VENDOR_AI_NET_PARAM_RES_ID = 42, ///< set/get, set resolution by id (0 means default resolution)
|
|
VENDOR_AI_NET_PARAM_RES_DIM = 43, ///< set/get, set resolution by dim, using HD_DIM struct
|
|
VENDOR_AI_NET_PARAM_CFG_INTLBUF = 44, ///< get , set work memory, using VENDOR_AI_NET_CFG_INTLBUF struct
|
|
VENDOR_AI_NET_PARAM_BATCH_ID = 45, ///< set/get, set batch number by id, using UINT32
|
|
VENDOR_AI_NET_PARAM_BATCH_N = 46, ///< set/get, set batch number, using UINT32
|
|
VENDOR_AI_NET_PARAM_RES_ID_IMM = 47, ///< set/get, set resolution by id (0 means default resolution), MUST set after START
|
|
VENDOR_AI_NET_PARAM_RES_DIM_IMM = 48, ///< set/get, set resolution by dim, using HD_DIM struct, MUST set after START
|
|
//get/set after start ~ before stop
|
|
//VENDOR_AI_NET_PARAM_IN(layer_id, in_id), ///< set , set single input buffer, using VENDOR_AI_BUF struct
|
|
///< get , get single input buffer, using VENDOR_AI_BUF struct
|
|
//VENDOR_AI_NET_PARAM_OUT(layer_id, out_id), ///< get , get single output buffer, using VENDOR_AI_BUF struct
|
|
//VENDOR_AI_NET_PARAM_DEP(dep_id), ///< get , get dependent buffer size, using UINT32
|
|
///< push_in, push_in dependent buffer for signal "ready to use"
|
|
///< push_out, push_out dependent buffer for waiting "use finished"
|
|
VENDOR_AI_NET_PARAM_IN_BUF_LIST = 51, ///< set , set multiple input buffer, using related output struct array (TODO)
|
|
///< get , get multiple input buffer, using related output struct array (TODO)
|
|
VENDOR_AI_NET_PARAM_OUT_BUF_LIST = 52, ///< get , get multiple output buffer, using related output struct array (TODO)
|
|
VENDOR_AI_NET_PARAM_CUSTOM_INFO = 53, ///< set , set user info
|
|
|
|
ENUM_DUMMY4WORD(VENDOR_AI_NET_PARAM_ID)
|
|
} VENDOR_AI_NET_PARAM_ID;
|
|
|
|
/********************************************************************
|
|
SINGLE OPERATION DEFINITION
|
|
********************************************************************/
|
|
/**
|
|
@name operator id
|
|
*/
|
|
typedef enum _VENDOR_AI_OP {
|
|
VENDOR_AI_OP_END = 0, ///< end
|
|
VENDOR_AI_OP_FC = 1, ///< fully connect (vector dot vector), (deprecated)
|
|
VENDOR_AI_OP_PREPROC = 2, ///< image transform (color convert, crop, scale, sub, crop, pad and rotate)
|
|
VENDOR_AI_OP_LIST = 0xffff, ///< op command list
|
|
ENUM_DUMMY4WORD(VENDOR_AI_OP)
|
|
} VENDOR_AI_OP;
|
|
|
|
/**
|
|
@name struct of work memory
|
|
*/
|
|
typedef struct _VENDOR_AI_OP_CFG_WORKBUF {
|
|
VENDOR_AI_OP op; ///< config op
|
|
UINT32 pa; ///< physical address
|
|
UINT32 va; ///< virtual address
|
|
UINT32 size; ///< buffer size
|
|
} VENDOR_AI_OP_CFG_WORKBUF;
|
|
|
|
typedef VENDOR_AI_OP_CFG_WORKBUF VENDOR_AI_OP_FC_CMDBUF;
|
|
|
|
/**
|
|
@name op parameter id
|
|
*/
|
|
typedef enum _VENDOR_AI_OP_PARAM_ID {
|
|
|
|
//set before open
|
|
VENDOR_AI_OP_PARAM_CFG_MAX = 1, ///< set/get, config max , using VENDOR_AI_OP_CFG_MAX struct
|
|
|
|
//get after open
|
|
//set after open ~ before start
|
|
VENDOR_AI_OP_PARAM_CFG_WORKBUF = 41, ///< get , set work memory, using VENDOR_AI_OP_CFG_WORKBUF struct
|
|
|
|
ENUM_DUMMY4WORD(VENDOR_AI_OP_PARAM_ID)
|
|
} VENDOR_AI_OP_PARAM_ID;
|
|
|
|
|
|
/**
|
|
@name struct of op config max
|
|
*/
|
|
typedef struct _VENDOR_AI_OP_CFG_MAX {
|
|
VENDOR_AI_OP op; ///< config op
|
|
UINT32 max_cnt; ///< max count of op
|
|
UINT32 max_param[4]; ///< max parameters of op
|
|
UINT32 size; ///< buffer size
|
|
} VENDOR_AI_OP_CFG_MAX;
|
|
|
|
typedef struct _VENDOR_AI_OP_PREPROC_PARAM {
|
|
HD_DIM scale_dim; ///< scale dim, set (0,0) to OFF
|
|
VENDOR_AI_BUF p_out_sub; ///< out subtract plane, packed format, set NULL to OFF
|
|
UINT32 out_sub_color[3]; ///< out subtract constant value, set [0,0,0] to OFF
|
|
HD_IRECT in_crop_win; ///< in crop window, coord is based on in_buf.dim, set (0,0,0,0) to OFF (TODO)
|
|
HD_IRECT out_crop_win; ///< out crop window, coord is based on scale dim, set (0,0,0,0) to OFF (TODO)
|
|
HD_IPOINT out_crop_pt; ///< out crop window, coord is based on out_buf.dim, set (0,0) to OFF (TODO)
|
|
HD_DIM pad_dim; ///< out padding window, coord is based on out_buf.dim, set (0,0) to OFF (TODO)
|
|
UINT32 pad_color[3]; ///< out padding constant value, set [???] to OFF (TODO)
|
|
UINT32 dir; ///< out direct: mirror-x, mirror-y, rotate, set 0 to OFF, use HD_VIDEO_DIR_XXXX flags (TODO)
|
|
} VENDOR_AI_OP_PREPROC_PARAM;
|
|
|
|
/********************************************************************
|
|
EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
|
|
********************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
extern HD_RESULT vendor_ai_init (VOID);
|
|
extern HD_RESULT vendor_ai_uninit (VOID);
|
|
|
|
extern HD_RESULT vendor_ai_get_id (UINT32* proc_id);
|
|
extern HD_RESULT vendor_ai_release_id (UINT32 proc_id);
|
|
|
|
// general config
|
|
extern HD_RESULT vendor_ai_cfg_set (VENDOR_AI_CFG_ID cfg_id, void* p_param);
|
|
extern HD_RESULT vendor_ai_cfg_get (VENDOR_AI_CFG_ID cfg_id, void* p_param);
|
|
|
|
// static network
|
|
extern HD_RESULT vendor_ai_net_set (UINT32 proc_id, VENDOR_AI_NET_PARAM_ID param_id, void* p_param);
|
|
extern HD_RESULT vendor_ai_net_get (UINT32 proc_id, VENDOR_AI_NET_PARAM_ID param_id, void* p_param);
|
|
extern HD_RESULT vendor_ai_net_open (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_net_close (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_net_start (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_net_stop (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_net_proc (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_net_proc_buf (UINT32 proc_id, VENDOR_AI_NET_PARAM_ID in_param_id, void* p_in_buf, VENDOR_AI_NET_PARAM_ID out_param_id, void* p_out_buf);
|
|
extern HD_RESULT vendor_ai_net_push_in_buf (UINT32 proc_id, VENDOR_AI_NET_PARAM_ID in_param_id, void* p_in_buf, INT32 wait_ms);
|
|
extern HD_RESULT vendor_ai_net_pull_out_buf (UINT32 proc_id, VENDOR_AI_NET_PARAM_ID out_param_id, void* p_out_buf, INT32 wait_ms);
|
|
|
|
// dynamic operator
|
|
extern HD_RESULT vendor_ai_op_set (UINT32 proc_id, VENDOR_AI_OP_PARAM_ID param_id, void* p_param);
|
|
extern HD_RESULT vendor_ai_op_get (UINT32 proc_id, VENDOR_AI_OP_PARAM_ID param_id, void* p_param);
|
|
|
|
extern HD_RESULT vendor_ai_op_open (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_op_close (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_op_start (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_op_stop (UINT32 proc_id);
|
|
extern HD_RESULT vendor_ai_op_proc (UINT32 proc_id, VENDOR_AI_OP op_id, void* p_op_param, UINT32 in_cnt, VENDOR_AI_BUF* p_in_buf, UINT32 out_cnt, VENDOR_AI_BUF* p_out_buf);
|
|
|
|
extern HD_RESULT vendor_ai_op_add (UINT32 proc_id, VENDOR_AI_OP op_id, void* p_op_param, UINT32 in_cnt, VENDOR_AI_BUF* p_in_buf, UINT32 out_cnt, VENDOR_AI_BUF* p_out_buf);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _VENDOR_AI_NET_H_ */
|