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