/* * Copyright (C) 2024–2025 Amlogic, Inc. 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 _NN_SDK_H #define _NN_SDK_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*============================================================= Macro Definitions ==============================================================*/ #define AML_NN_SDK_VERSION "2.8.5" #define MAX_NAME_LENGTH 64 #define INPUT_MAX_NUM 64 #define OUTPUT_MAX_NUM 64 #define INPUT_CHANNEL 3 #define MAX_DETECT_NUM 230 #define SUPPORT_NET_NUM 60 #define ADDRESS_MAX_NUM 64 #define MAX_TENSOR_NUM_DIMS 6 #define INPUT_META_NUM 1 #define DELEGATE_MAX_INPUT_NUM 128 #define DELEGATE_MAX_OUTPUT_NUM 128 /*===================================================== the common type for sdk api ======================================================*/ typedef enum { AML_IN_PICTURE = 0, AML_IN_VIDEO = 1, AML_IN_CAMERA = 2 } amlnn_input_mode_t; typedef enum _amlnn_model_ { CAFFE = 0, TENSORFLOW, TENSORFLOWLITE, DARKNET, ONNX, KERAS, PYTORCH, ADLA_LOADABLE, MEDEL_MAX } amlnn_model_type; /*================================================================================= load adla type ==================================================================================*/ typedef enum _amlnn_nbg_type_ { NN_NBG_FILE = 0, NN_NBG_MEMORY = 1, NN_RUNTIME_FILE = 2, NN_RUNTIME_MEMORY = 3, NN_ADLA_FILE = 4, NN_ADLA_MEMORY = 5 } amlnn_nbg_type; typedef enum _amlnn_input_ { RGB24_RAW_DATA = 0, TENSOR_RAW_DATA, QTENSOR_RAW_DATA, BINARY_RAW_DATA, INPUT_DMA_DATA, INPUT_DMA_SECURE_DATA, NV12_RAW_DATA, RAW_DATA_MAX } amlnn_input_type; typedef enum _nn_buffer_format_e { /*! \brief A float type of buffer data */ NN_BUFFER_FORMAT_FP32 = 0, /*! \brief A half float type of buffer data */ NN_BUFFER_FORMAT_FP16 = 1, /*! \brief A 8 bit unsigned integer type of buffer data */ NN_BUFFER_FORMAT_UINT8 = 2, /*! \brief A 8 bit signed integer type of buffer data */ NN_BUFFER_FORMAT_INT8 = 3, /*! \brief A 16 bit unsigned integer type of buffer data */ NN_BUFFER_FORMAT_UINT16 = 4, /*! \brief A 16 signed integer type of buffer data */ NN_BUFFER_FORMAT_INT16 = 5, /*! \brief A 32 signed integer type of buffer data */ NN_BUFFER_FORMAT_INT32 = 8, /*! \brief A 64 signed integer type of buffer data */ NN_BUFFER_FORMAT_INT64 = 10, /*! \brief A bool type of buffer data */ NN_BUFFER_FORMAT_BOOL = 11, } nn_buffer_format_e; typedef enum _nn_buffer_quantize_format_e { /*! \brief Not quantized format */ NN_BUFFER_QUANTIZE_NONE = 0, /*! \brief The data is quantized with dynamic fixed point */ NN_BUFFER_QUANTIZE_DYNAMIC_FIXED_POINT = 1, /*! \brief The data is quantized with TF asymmetric format */ NN_BUFFER_QUANTIZE_TF_ASYMM = 2 } nn_buffer_quantize_format_e; typedef enum { IMAGE_CLASSIFY = 0, OBJECT_DETECT = 1, /// object_detection FACE_DETECTION = 2, /// FACE_LANDMARK_5 = 3, /// landmark 5 points FACE_LANDMARK_68 = 4, ///< Face Landmark (68 KeyPoints) FACE_RECOGNIZE = 5, ///< Face Recognition FACE_COMPARISON = 6, ///< Face compare,whether same person FACE_AGE = 7, ///< Face age FACE_GENDER = 8, ///< Face gender FACE_EMOTION = 9, ///< Face emotion BODY_POSE = 10, ///< Body Pose FINGER_POSE = 11, ///< Finger Landmark(21 KeyPoint) HEAD_DETECTION = 12, ///< Head Detection CARPLATE_DETECTION = 13, ///< Car Plate Detection CARPLATE_RECOG = 14, ///< Car Plate Recognition TEXT_DETECTION = 15, ///< text region detect IMAGE_SR = 16, ///< image SR IMAGE_SEGMENTATION = 17, ///< image segment, based on icnet PERSON_DETECT = 18, ///< person detect YOLOFACE_V2 = 19, YOLO_V2 = 20, YOLO_V3 = 21, FACE_NET = 22, FACE_RECOG_U = 23, FACE_RFB_DETECTION = 24, AML_PERSON_DETECT = 25, AML_BODY_POSE = 26, mobilenetv2 = 30, centerface = 31, ALPD = 32, ALPR = 33, face_blur_v2 = 34, face_recog_small = 35, face_reid_v2 = 36, landmark2d_106 = 37, new_car = 38, old_person = 39, CUSTOM_NETWORK = 99, ///< custom network, for user development MODEL_MAX = 100 ///< max model number } aml_module_t; typedef enum { AML_OUTDATA_FLOAT32 = 0, AML_OUTDATA_RAW = 1, AML_OUTDATA_DMA = 2, AML_OUTDATA_DMA_SECURE = 3 } aml_output_format_t; typedef enum { AML_NO_PERF = 0, AML_PERF_INFERENCE = 1, AML_PERF_OUTPUT_GET = 2, AML_PERF_OUTPUT_SET = 3, AML_PERF_RESET_TRANSFORMER = 4, AML_PERF_BREAK_TRANSFORMER = 5 } aml_perf_mode_t; typedef enum { AML_PROFILE_NONE = 0, AML_PROFILE_PERFORMANCE = 1, AML_PROFILE_BANDWIDTH = 2, AML_PROFILE_MEMORY = 3, AML_PERLAYER_RUNTIME = 4, AML_PERLAYER_BANDWIDTH = 5, AML_PERLAYER_OUTPUT = 6, AML_PERLAYER_INPUT = 7 } aml_profile_type_t; typedef enum { AML_PERFORMANCE_MODE = 1, AML_POWER_SAVE_MODE = 2, AML_MINIMUM_POWER_MODE = 3 } aml_policy_type_t; typedef enum { AML_IO_VIRTUAL = 0, AML_IO_PHYS = 1, AML_IO_VIRTUAL_SECURE = 2, AML_IO_PHYS_SECURE = 3 } aml_io_format_t; typedef enum { AML_OUTPUT_ORDER_DEFAULT = 0, //output format: nhwc for adla, nchw for galcore AML_OUTPUT_ORDER_NHWC = 1, //output format: nhwc AML_OUTPUT_ORDER_NCHW = 2, //output format: nchw } aml_output_order_t; typedef struct __aml_kvcache_dynamic_val_t { int32_t current_mask; } aml_kvcache_dynamic_val_t; typedef struct __kvCacheDynamicInfo_t { bool update_kvcache_info_flag; aml_kvcache_dynamic_val_t kvcache_dynamic_val; } kvCacheDynamicInfo_t; typedef struct __aml_transformer_model_info { uint64_t eos_token; int32_t max_sequence_length; } aml_transformer_model_info; typedef struct __aml_invoke_info_t { int typeSize; int invoke_type; // 1: invoke_no_wait, 2: waitwithid int32_t timeout; //ms int64_t invoke_id; kvCacheDynamicInfo_t kvcache_dynamic_info; } aml_invoke_info_t; typedef struct __amlnn_module_out_data_t { int typeSize; aml_module_t mdType; aml_perf_mode_t perfMode; aml_output_format_t format; aml_output_order_t order; aml_invoke_info_t invoke; } aml_output_config_t; typedef struct _nn_buffer_create_params_t { unsigned int num_of_dims; /*!< \brief The number of dimensions specified in *sizes*/ unsigned int sizes[4]; /*!< \brief The pointer to an array of dimension */ nn_buffer_format_e data_format; /*!< \brief Data format for the tensor, see \ref nn_buffer_format_e */ nn_buffer_quantize_format_e quant_format; /*!< \brief Quantized format see \ref nn_buffer_quantize_format_e . */ union { struct { unsigned char fixed_point_pos; /*!< \brief Specifies the fixed point position when the input element type is int16, if 0 calculations are performed in integer math */ } dfp; struct { float scale; /*!< \brief Scale value for the quantized value */ unsigned int zeroPoint; /*!< \brief A 32 bit integer, in range [0, 255] */ } affine; } quant_data; /*