215 lines
6.1 KiB
C++
215 lines
6.1 KiB
C++
/*
|
|
* Copyright (c) 2020.Huawei Technologies Co., Ltd. All rights reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef COMMONDATATYPE_H
|
|
#define COMMONDATATYPE_H
|
|
|
|
#include <stdio.h>
|
|
#include <iostream>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#ifdef ASCEND
|
|
#include "acl/acl.h"
|
|
#include "acl/ops/acl_dvpp.h"
|
|
|
|
#define DVPP_ALIGN_UP(x, align) ((((x) + ((align)-1)) / (align)) * (align))
|
|
#else
|
|
#include "nvidia_acl_datatype.h"
|
|
|
|
#define ALIGN_UP(x, align) ((((x) + ((align)-1)) / (align)) * (align))
|
|
#endif
|
|
|
|
|
|
const uint32_t VIDEO_H264 = 0;
|
|
const uint32_t VIDEO_H265 = 1;
|
|
|
|
const float SEC2MS = 1000.0;
|
|
const int YUV_BGR_SIZE_CONVERT_3 = 3;
|
|
const int YUV_BGR_SIZE_CONVERT_2 = 2;
|
|
const int DVPP_JPEG_OFFSET = 8;
|
|
const int VPC_WIDTH_ALIGN = 16;
|
|
const int VPC_HEIGHT_ALIGN = 2;
|
|
const int JPEG_WIDTH_ALIGN = 128;
|
|
const int JPEG_HEIGHT_ALIGN = 16;
|
|
const int VPC_OFFSET_ALIGN = 2;
|
|
|
|
#ifdef _WIN32
|
|
const int W_OK = 2;
|
|
const int R_OK = 4;
|
|
#endif
|
|
|
|
|
|
// Tensor Descriptor
|
|
struct Tensor {
|
|
#ifdef ASCEND
|
|
aclDataType dataType; // Tensor data type
|
|
aclFormat format; // Format of tensor, e.g. ND, NCHW, NC1HWC0
|
|
#else
|
|
nvidia_aclDataType dataType; // Tensor data type
|
|
nvidia_aclFormat format; // Format of tensor, e.g. ND, NCHW, NC1HWC0
|
|
#endif
|
|
int numDim; // Number of dimensions of Tensor
|
|
std::vector<int64_t> dims; // Dimension vector
|
|
std::string name; // Name of tensor
|
|
};
|
|
|
|
|
|
// Data type of tensor
|
|
enum OpAttrType {
|
|
BOOL_TYPE = 0,
|
|
INT_TYPE = 1,
|
|
FLOAT_TYPE = 2,
|
|
STRING_TYPE = 3,
|
|
LIST_BOOL_TYPE = 4,
|
|
LIST_INT_TYPE = 6,
|
|
LIST_FLOAT_TYPE = 7,
|
|
LIST_STRING_TYPE = 8,
|
|
LIST_LIST_INT_TYPE = 9,
|
|
};
|
|
|
|
// operator attribution describe
|
|
// type decide whether the other attribute needed to set a value
|
|
struct OpAttr {
|
|
std::string name;
|
|
OpAttrType type;
|
|
int num; // LIST_BOOL/INT/FLOAT/STRING/LIST_LIST_INT need
|
|
uint8_t numBool; // BOOL need
|
|
int64_t numInt; // INT need
|
|
float numFloat; // FLOAT need
|
|
std::string numString; // STRING need
|
|
std::vector<uint8_t> valuesBool; // LIST_BOOL need
|
|
std::vector<int64_t> valuesInt; // LIST_INT need
|
|
std::vector<float> valuesFloat; // LIST_FLOAT need
|
|
std::vector<std::string> valuesString; // LIST_STRING need
|
|
std::vector<int> numLists; // LIST_LIST_INT need
|
|
std::vector<std::vector<int64_t>> valuesListList; // LIST_LIST_INT need
|
|
};
|
|
|
|
|
|
// Description of image data
|
|
struct ImageInfo {
|
|
uint32_t width; // Image width
|
|
uint32_t height; // Image height
|
|
uint32_t lenOfByte; // Size of image data, bytes
|
|
std::shared_ptr<uint8_t> data; // Smart pointer of image data
|
|
};
|
|
|
|
// Description of data in device
|
|
struct RawData {
|
|
size_t lenOfByte; // Size of memory, bytes
|
|
std::shared_ptr<void> data; // Smart pointer of data
|
|
};
|
|
|
|
// Description of data in device
|
|
struct StreamData {
|
|
size_t size; // Size of memory, bytes
|
|
std::shared_ptr<void> data; // Smart pointer of data
|
|
};
|
|
|
|
// Description of stream data
|
|
struct StreamInfo {
|
|
std::string format;
|
|
uint32_t height;
|
|
uint32_t width;
|
|
uint32_t channelId;
|
|
std::string streamPath;
|
|
};
|
|
|
|
|
|
// define the structure of an rectangle
|
|
struct Rectangle {
|
|
uint32_t leftTopX;
|
|
uint32_t leftTopY;
|
|
uint32_t rightBottomX;
|
|
uint32_t rightBottomY;
|
|
};
|
|
|
|
struct ObjectDetectInfo {
|
|
int32_t classId;
|
|
float confidence;
|
|
struct Rectangle location;
|
|
};
|
|
|
|
enum VpcProcessType {
|
|
VPC_PT_DEFAULT = 0,
|
|
VPC_PT_PADDING, // Resize with locked ratio and paste on upper left corner
|
|
VPC_PT_FIT, // Resize with locked ratio and paste on middle location
|
|
VPC_PT_FILL, // Resize with locked ratio and paste on whole locatin, the input image may be cropped
|
|
};
|
|
|
|
struct CropRoiConfig {
|
|
uint32_t left;
|
|
uint32_t right;
|
|
uint32_t down;
|
|
uint32_t up;
|
|
};
|
|
|
|
struct DvppDataInfo {
|
|
uint32_t width = 0; // Width of image
|
|
uint32_t height = 0; // Height of image
|
|
uint32_t widthStride = 0; // Width after align up
|
|
uint32_t heightStride = 0; // Height after align up
|
|
#ifdef ASCEND
|
|
acldvppPixelFormat format = PIXEL_FORMAT_YUV_SEMIPLANAR_420; // Format of image
|
|
#else
|
|
nvidia_acldvppPixelFormat format = PIXEL_FORMAT_YUV_SEMIPLANAR_420; // Format of image
|
|
#endif
|
|
uint32_t frameId = 0; // Needed by video
|
|
uint32_t dataSize = 0; // Size of data in byte
|
|
uint8_t *data = nullptr; // Image data
|
|
uint64_t timestamp;
|
|
};
|
|
|
|
struct DvppCropInputInfo {
|
|
DvppDataInfo dataInfo;
|
|
CropRoiConfig roi;
|
|
};
|
|
|
|
// Description of matrix info
|
|
struct MatrixInfo {
|
|
uint32_t row = 0; // row of matrix
|
|
uint32_t col = 0; // col of matrix
|
|
uint32_t dataSize = 0; // size of memory, bytes
|
|
std::shared_ptr<void> data = nullptr; // data of matrix
|
|
#ifdef ASCEND
|
|
aclDataType dataType = ACL_FLOAT16; // data Type of matrix
|
|
#else
|
|
nvidia_aclDataType dataType = ACL_FLOAT16; // data Type of matrix
|
|
#endif
|
|
};
|
|
|
|
// Description of coefficient info
|
|
struct CoefficientInfo {
|
|
std::shared_ptr<void> data = nullptr; // data of coefficient
|
|
#ifdef ASCEND
|
|
aclDataType dataType = ACL_FLOAT16; // dataType
|
|
#else
|
|
nvidia_aclDataType dataType = ACL_FLOAT16; // dataType
|
|
#endif
|
|
};
|
|
|
|
// define the input of BLAS operator such as producing:
|
|
// C = alpha * A * B + beta * C
|
|
struct BlasInput {
|
|
MatrixInfo A;
|
|
MatrixInfo B;
|
|
MatrixInfo C;
|
|
CoefficientInfo alpha;
|
|
CoefficientInfo beta;
|
|
};
|
|
|
|
#endif
|