236 lines
9.1 KiB
C
236 lines
9.1 KiB
C
/****************************************************************************
|
|
*
|
|
* Copyright (c) 2020-2023 Vivante Corporation
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef _NBG_PARSER_H
|
|
#define _NBG_PARSER_H
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C"{
|
|
#endif
|
|
|
|
#ifndef NBG_NULL
|
|
#define NBG_NULL 0
|
|
#endif
|
|
|
|
typedef struct nbg_parser_data_t *nbg_parser_data;
|
|
|
|
typedef unsigned char nbg_uint8_t;
|
|
typedef unsigned short nbg_uint16_t;
|
|
typedef unsigned int nbg_uint32_t;
|
|
typedef unsigned long long nbg_uint64_t;
|
|
typedef signed char nbg_int8_t;
|
|
typedef signed short nbg_int16_t;
|
|
typedef signed int nbg_int32_t;
|
|
typedef signed long long nbg_int64_t;
|
|
typedef char nbg_char_t;
|
|
typedef float nbg_float_t;
|
|
typedef unsigned long long nbg_address_t;
|
|
|
|
typedef enum _nbg_status
|
|
{
|
|
NBG_ERROR_OUT_OF_MEMORY = -5,
|
|
NBG_ERROR_NOT_SUPPORT = -4,
|
|
NBG_ERROR_INVALID_ARGUMENTS = -3,
|
|
NBG_ERROR_FORMAT = -2,
|
|
NBG_ERROR_FAILURE = -1,
|
|
NBG_SUCCESS = 0,
|
|
} nbg_status_e;
|
|
|
|
typedef enum _nbg_buffer_quantize_format_e
|
|
{
|
|
/*! \brief Not quantized format */
|
|
NBG_BUFFER_QUANTIZE_NONE = 0,
|
|
/*! \brief The data is quantized with dynamic fixed point */
|
|
NBG_BUFFER_QUANTIZE_DYNAMIC_FIXED_POINT = 1,
|
|
/*! \brief The data is quantized with TF asymmetric format */
|
|
NBG_BUFFER_QUANTIZE_AFFINE_ASYMMETRIC = 2
|
|
} nbg_buffer_quantize_format_e;
|
|
|
|
typedef enum _nbg_buffer_format_e
|
|
{
|
|
/*! \brief A float type of buffer data */
|
|
NBG_BUFFER_FORMAT_FP32 = 0,
|
|
/*! \brief A half float type of buffer data */
|
|
NBG_BUFFER_FORMAT_FP16 = 1,
|
|
/*! \brief A 8 bit unsigned integer type of buffer data */
|
|
NBG_BUFFER_FORMAT_UINT8 = 2,
|
|
/*! \brief A 8 bit signed integer type of buffer data */
|
|
NBG_BUFFER_FORMAT_INT8 = 3,
|
|
/*! \brief A 16 bit unsigned integer type of buffer data */
|
|
NBG_BUFFER_FORMAT_UINT16 = 4,
|
|
/*! \brief A 16 signed integer type of buffer data */
|
|
NBG_BUFFER_FORMAT_INT16 = 5,
|
|
/*! \brief A char type of data */
|
|
NBG_BUFFER_FORMAT_CHAR = 6,
|
|
/*! \brief A bfloat 16 type of data */
|
|
NBG_BUFFER_FORMAT_BFP16 = 7,
|
|
/*! \brief A 32 bit integer type of data */
|
|
NBG_BUFFER_FORMAT_INT32 = 8,
|
|
/*! \brief A 32 bit unsigned signed integer type of buffer */
|
|
NBG_BUFFER_FORMAT_UINT32 = 9,
|
|
/*! \brief A 64 bit signed integer type of data */
|
|
NBG_BUFFER_FORMAT_INT64 = 10,
|
|
/*! \brief A 64 bit unsigned integer type of data */
|
|
NBG_BUFFER_FORMAT_UINT64 = 11,
|
|
/*! \brief A 64 bit float type of buffer data */
|
|
NBG_BUFFER_FORMAT_FP64 = 12,
|
|
} nbg_buffer_format_e;
|
|
|
|
typedef enum _nbg_buffer_type_e
|
|
{
|
|
/*! \brief A tensor type of buffer data */
|
|
NBG_BUFFER_TYPE_TENSOR = 0,
|
|
/*! \brief A image type of buffer data */
|
|
NBG_BUFFER_TYPE_IMAGE = 1,
|
|
/*! \brief A array type of buffer data */
|
|
NBG_BUFFER_TYPE_ARRAY = 2,
|
|
/*! \brief A scalar type of buffer data */
|
|
NBG_BUFFER_TYPE_SCALAR = 3,
|
|
} nbg_buffer_type_e;
|
|
|
|
typedef enum _nbg_buffer_property
|
|
{
|
|
/*!< \brief The quantization format, the returned value is nbg_buffer_quantize_format_e */
|
|
NBG_PARSER_BUFFER_PROP_QUANT_FORMAT = 0,
|
|
/*!< \brief The number of dimension for this input, the returned value is nbg_uint32_t*/
|
|
NBG_PARSER_BUFFER_PROP_NUM_OF_DIMENSION = 1,
|
|
/*!< \brief The size of each dimension for this input,
|
|
the returned value is nbg_uint32_t * num_of_dimension */
|
|
NBG_PARSER_BUFFER_PROP_DIMENSIONS = 2,
|
|
/*!< \brief The data format for this input, the returned value is nbg_buffer_format_e */
|
|
NBG_PARSER_BUFFER_PROP_DATA_FORMAT = 3,
|
|
/*!< \brief The position of fixed point for dynamic fixed point, the returned value is nbg_uint32_t */
|
|
NBG_PARSER_BUFFER_PROP_FIXED_POINT_POS = 4,
|
|
/*!< \brief The scale value for TF quantization format, the returned value is nbg_float_t */
|
|
NBG_PARSER_BUFFER_PROP_SCALE = 5,
|
|
/*!< \brief The zero point for TF quantization format, the returned value is nbg_uint32_t */
|
|
NBG_PARSER_BUFFER_PROP_ZERO_POINT = 6,
|
|
/*!< \brief The name for network's inputs and outputs,
|
|
the returned value size is queried by NBG_PARSER_BUFFER_PROP_NAME_SIZE */
|
|
NBG_PARSER_BUFFER_PROP_NAME = 7,
|
|
/*!< \brief The data type for input/output buffer, the returned value is nbg_buffer_type_e */
|
|
NBG_PARSER_BUFFER_PROP_DATA_TYPE = 8,
|
|
|
|
/*!< \brief The size of input/output name. the returned value is nbg_uint32_t */
|
|
NBG_PARSER_BUFFER_PROP_NAME_SIZE = 128 + NBG_PARSER_BUFFER_PROP_NAME,
|
|
} nbg_buffer_property_e;
|
|
|
|
typedef enum _nbg_network_property_e
|
|
{
|
|
/* !< \brief The name of network, the returned value size is queried by NBG_PARSET_NETWORK_SIZE_OF_NAME */
|
|
NBG_PARSER_NETWORK_NAME = 0,
|
|
/* !< \brief The number of network input, the returned value is nbg_uint32_t */
|
|
NBG_PARSER_NETWORK_INPUT_COUNT = 1,
|
|
/* !< \brief The number of network output, the returned value is nbg_uint32_t */
|
|
NBG_PARSER_NETWORK_OUTPUT_COUNT = 2,
|
|
/* !< \brief The CID of this NBG, the returned value is nbg_uint32_t */
|
|
NBG_PARSER_NETWORK_CID = 3,
|
|
|
|
/*!< \brief The size of network name. the returned value is nbg_uint32_t */
|
|
NBG_PARSER_NETWORK_NAME_SIZE = 128 + NBG_PARSER_NETWORK_NAME,
|
|
} nbg_network_property_e;
|
|
|
|
/*
|
|
@brief, Query NBG parser library version
|
|
*/
|
|
nbg_uint32_t nbg_parser_version(void);
|
|
|
|
/*
|
|
@brief, Initialize NBG parser. use NBG data to initialize nbg parser library.
|
|
@param IN buffer, NBG data in memory.
|
|
@param IN size, the size of NBG data.
|
|
@param OUT nbg, the NBG parser object which created by nbg_parser_init().
|
|
*/
|
|
nbg_status_e nbg_parser_init(
|
|
void *buffer,
|
|
nbg_uint32_t size,
|
|
nbg_parser_data *nbg
|
|
);
|
|
|
|
/*
|
|
@brief, query the input info of network.
|
|
@param IN nbg, the NBG parser object created by nbg_parser_init().
|
|
@param IN index, the index of network input.
|
|
@param IN property, property being queried.
|
|
Quant format, dimension count, shape, data format and so on. see nbg_buffer_property_e enumeration.
|
|
@param IN size, the size of value buffer.
|
|
@param OUT value, The return value data.
|
|
please refer nbg_buffer_property_e to know the size of returned value data.
|
|
*/
|
|
nbg_status_e nbg_parser_query_input(
|
|
nbg_parser_data nbg,
|
|
nbg_uint32_t index,
|
|
nbg_uint32_t property,
|
|
void *value,
|
|
nbg_uint32_t size
|
|
);
|
|
|
|
/*
|
|
@brief, query the output info of network.
|
|
@param IN nbg, the NBG parser object created by nbg_parser_init().
|
|
@param IN index, the index of network input.
|
|
@param IN property, property being queried.
|
|
Quant format, dimension count, shape, data format and so on.
|
|
see nbg_buffer_property_e enumeration.
|
|
@param IN size, the size of value buffer.
|
|
@param OUT value, The return value data.
|
|
please refer nbg_buffer_property_e to know the size of returned value data.
|
|
*/
|
|
nbg_status_e nbg_parser_query_output(
|
|
nbg_parser_data nbg,
|
|
nbg_uint32_t index,
|
|
nbg_uint32_t property,
|
|
void *value,
|
|
nbg_uint32_t size
|
|
);
|
|
|
|
/*
|
|
@brief, query the network info.
|
|
@param IN nbg, the NBG parser object created by nbg_parser_init().
|
|
@param IN property, The property of the network is queried.
|
|
network name, input count, output count and so on. see nbg_network_propery_e enumeration.
|
|
@param IN size, the size of value buffer.
|
|
@param OUT value, The return value data.
|
|
please refer nbg_network_propery_e to know the size of returned value data.
|
|
*/
|
|
nbg_status_e nbg_parser_query_network(
|
|
nbg_parser_data nbg,
|
|
nbg_uint32_t property,
|
|
void *value,
|
|
nbg_uint32_t size
|
|
);
|
|
|
|
/*
|
|
@brief, destroy nbg parser.
|
|
@param, IN nbg, the NBG parser object created by nbg_parser_init().
|
|
*/
|
|
nbg_status_e nbg_parser_destroy(
|
|
nbg_parser_data nbg
|
|
);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
#endif
|