11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef __HI_COMM_SVP_H__
171bd4fe43Sopenharmony_ci#define __HI_COMM_SVP_H__
181bd4fe43Sopenharmony_ci
191bd4fe43Sopenharmony_ci#include "hi_type.h"
201bd4fe43Sopenharmony_ci#include "hi_errno.h"
211bd4fe43Sopenharmony_ci
221bd4fe43Sopenharmony_ci#ifdef __cplusplus
231bd4fe43Sopenharmony_ci#if __cplusplus
241bd4fe43Sopenharmony_ciextern "C" {
251bd4fe43Sopenharmony_ci#endif
261bd4fe43Sopenharmony_ci#endif /* __cplusplus */
271bd4fe43Sopenharmony_ci
281bd4fe43Sopenharmony_ci#define HI_SVP_IMG_ADDR_NUM 3
291bd4fe43Sopenharmony_ci#define HI_SVP_IMG_STRIDE_NUM 3
301bd4fe43Sopenharmony_ci
311bd4fe43Sopenharmony_ci/* Blob type */
321bd4fe43Sopenharmony_citypedef enum hiSVP_BLOB_TYPE_E {
331bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_S32       =  0x0,
341bd4fe43Sopenharmony_ci
351bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_U8        =  0x1,
361bd4fe43Sopenharmony_ci
371bd4fe43Sopenharmony_ci    /* channel is 3 */
381bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_YVU420SP  =  0x2,
391bd4fe43Sopenharmony_ci
401bd4fe43Sopenharmony_ci    /* channel is 3 */
411bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_YVU422SP  =  0x3,
421bd4fe43Sopenharmony_ci
431bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_VEC_S32   =  0x4,
441bd4fe43Sopenharmony_ci
451bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_SEQ_S32   =  0x5,
461bd4fe43Sopenharmony_ci
471bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_BUTT
481bd4fe43Sopenharmony_ci} SVP_BLOB_TYPE_E;
491bd4fe43Sopenharmony_ci
501bd4fe43Sopenharmony_ci/*
511bd4fe43Sopenharmony_ci * Blob struct
521bd4fe43Sopenharmony_ci * In Caffe, the blob contain shape info as the following order:
531bd4fe43Sopenharmony_ci * Image\FeatureMap:               N       C       H       W
541bd4fe43Sopenharmony_ci * FC(normal vector):              N       C
551bd4fe43Sopenharmony_ci * RNN\LSTM(Recurrent) vector:     T       N       D
561bd4fe43Sopenharmony_ci *
571bd4fe43Sopenharmony_ci * The relationship of the following blob struct with Caffe blob is as follows:
581bd4fe43Sopenharmony_ci * Image\FeatureMap:               Num    Chn    Height   With
591bd4fe43Sopenharmony_ci * FC(VEC_S32):                    Num    Width
601bd4fe43Sopenharmony_ci * RNN\LSTM(SEQ_S32) vector:       Step   Num     Dim
611bd4fe43Sopenharmony_ci * The stride, which measuring unit is byte, is always algined by the width or
621bd4fe43Sopenharmony_ci * dim direction.
631bd4fe43Sopenharmony_ci */
641bd4fe43Sopenharmony_citypedef struct hiSVP_BLOB_S {
651bd4fe43Sopenharmony_ci    SVP_BLOB_TYPE_E enType;     /* Blob type */
661bd4fe43Sopenharmony_ci    HI_U32 u32Stride;           /* Stride, a line bytes num */
671bd4fe43Sopenharmony_ci
681bd4fe43Sopenharmony_ci    HI_U64 u64VirAddr;          /* virtual addr */
691bd4fe43Sopenharmony_ci    HI_U64 u64PhyAddr;          /* physical addr */
701bd4fe43Sopenharmony_ci
711bd4fe43Sopenharmony_ci    HI_U32 u32Num;             /* N: frame num or sequence num, correspond to caffe blob's n */
721bd4fe43Sopenharmony_ci    union {
731bd4fe43Sopenharmony_ci        struct {
741bd4fe43Sopenharmony_ci            HI_U32 u32Width;    /* W: frame width, correspond to caffe blob's w */
751bd4fe43Sopenharmony_ci            HI_U32 u32Height;   /* H: frame height, correspond to caffe blob's h */
761bd4fe43Sopenharmony_ci            HI_U32 u32Chn;      /* C: frame channel, correspond to caffe blob's c */
771bd4fe43Sopenharmony_ci        } stWhc;
781bd4fe43Sopenharmony_ci        struct {
791bd4fe43Sopenharmony_ci            HI_U32 u32Dim;          /* D: vecotr dimension */
801bd4fe43Sopenharmony_ci            HI_U64 u64VirAddrStep;  /* T: virtual adress of time steps array in each sequence */
811bd4fe43Sopenharmony_ci        } stSeq;
821bd4fe43Sopenharmony_ci    } unShape;
831bd4fe43Sopenharmony_ci} SVP_BLOB_S;
841bd4fe43Sopenharmony_ci
851bd4fe43Sopenharmony_citypedef SVP_BLOB_S  SVP_SRC_BLOB_S;
861bd4fe43Sopenharmony_citypedef SVP_BLOB_S  SVP_DST_BLOB_S;
871bd4fe43Sopenharmony_ci
881bd4fe43Sopenharmony_ci/* Mem information */
891bd4fe43Sopenharmony_citypedef struct hiSVP_MEM_INFO_S {
901bd4fe43Sopenharmony_ci    HI_U64  u64PhyAddr; /* RW;The physical address of the memory */
911bd4fe43Sopenharmony_ci    HI_U64  u64VirAddr; /* RW;The virtual address of the memory */
921bd4fe43Sopenharmony_ci    HI_U32  u32Size;    /* RW;The size of memory */
931bd4fe43Sopenharmony_ci} SVP_MEM_INFO_S;
941bd4fe43Sopenharmony_ci
951bd4fe43Sopenharmony_citypedef SVP_MEM_INFO_S SVP_SRC_MEM_INFO_S;
961bd4fe43Sopenharmony_citypedef SVP_MEM_INFO_S SVP_DST_MEM_INFO_S;
971bd4fe43Sopenharmony_ci
981bd4fe43Sopenharmony_ci/* Image type */
991bd4fe43Sopenharmony_citypedef enum hiSVP_IMAGE_TYPE_E {
1001bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_U8C1           =  0x0,
1011bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_S8C1           =  0x1,
1021bd4fe43Sopenharmony_ci
1031bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_YUV420SP       =  0x2,       /* YUV420 SemiPlanar */
1041bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_YUV422SP       =  0x3,       /* YUV422 SemiPlanar */
1051bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_YUV420P        =  0x4,       /* YUV420 Planar */
1061bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_YUV422P        =  0x5,       /* YUV422 planar */
1071bd4fe43Sopenharmony_ci
1081bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_S8C2_PACKAGE   =  0x6,
1091bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_S8C2_PLANAR    =  0x7,
1101bd4fe43Sopenharmony_ci
1111bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_S16C1          =  0x8,
1121bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_U16C1          =  0x9,
1131bd4fe43Sopenharmony_ci
1141bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_U8C3_PACKAGE   =  0xa,
1151bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_U8C3_PLANAR    =  0xb,
1161bd4fe43Sopenharmony_ci
1171bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_S32C1          =  0xc,
1181bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_U32C1          =  0xd,
1191bd4fe43Sopenharmony_ci
1201bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_S64C1          =  0xe,
1211bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_U64C1          =  0xf,
1221bd4fe43Sopenharmony_ci
1231bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_BUTT
1241bd4fe43Sopenharmony_ci} SVP_IMAGE_TYPE_E;
1251bd4fe43Sopenharmony_ci
1261bd4fe43Sopenharmony_ci/* Image */
1271bd4fe43Sopenharmony_citypedef struct hiSVP_IMAGE_S {
1281bd4fe43Sopenharmony_ci    HI_U64  au64PhyAddr[HI_SVP_IMG_ADDR_NUM]; /* RW;The physical address of the image */
1291bd4fe43Sopenharmony_ci    HI_U64  au64VirAddr[HI_SVP_IMG_ADDR_NUM]; /* RW;The virtual address of the image */
1301bd4fe43Sopenharmony_ci    HI_U32  au32Stride[HI_SVP_IMG_STRIDE_NUM];  /* RW;The stride of the image */
1311bd4fe43Sopenharmony_ci    HI_U32  u32Width;       /* RW;The width of the image */
1321bd4fe43Sopenharmony_ci    HI_U32  u32Height;      /* RW;The height of the image */
1331bd4fe43Sopenharmony_ci    SVP_IMAGE_TYPE_E  enType; /* RW;The type of the image */
1341bd4fe43Sopenharmony_ci} SVP_IMAGE_S;
1351bd4fe43Sopenharmony_ci
1361bd4fe43Sopenharmony_citypedef SVP_IMAGE_S SVP_SRC_IMAGE_S;
1371bd4fe43Sopenharmony_citypedef SVP_IMAGE_S SVP_DST_IMAGE_S;
1381bd4fe43Sopenharmony_ci
1391bd4fe43Sopenharmony_ci#ifdef __cplusplus
1401bd4fe43Sopenharmony_ci#if __cplusplus
1411bd4fe43Sopenharmony_ci}
1421bd4fe43Sopenharmony_ci#endif
1431bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1441bd4fe43Sopenharmony_ci
1451bd4fe43Sopenharmony_ci#endif /* __HI_COMM_SVP_H__ */
146