gf_ai_box/include/common/extend_intf.h
2026-04-12 17:47:54 +08:00

164 lines
4.2 KiB
C

#ifndef __EXTEND_INTERFACE_H__
#define __EXTEND_INTERFACE_H__
/******************************************************
This is the IPC interface to support extended features without NPU involvement.
Such as: IE operation, auxiliary computation, etc.
******************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "stdint.h"
#ifndef BOOLEAN_DEFINED
#ifndef boolean
typedef char boolean;
#endif
#define BOOLEAN_DEFINED
#endif
#define MAX_INT_FOR_ALIGN 0x10000000
/*************************************************************************
IE interfaces
**************************************************************************/
#define CFG_IE_MESH_POINTS_ONLINE (DISABLE)
typedef enum {
OPERATION_FAILED = -1, /* Failure in doing operation */
OPERATION_SUCCESS = 1, /* Operation Succeded */
OPERATION_INVALID_PARM, /* Inavlid parameter provided */
OPERATION_NOT_SUPPORTED, /* Parameter/operation not supported */
OPERATION_ALIGN_32 = MAX_INT_FOR_ALIGN
} ext_oper_sts_t;
typedef enum {
IE_OPS_MODE_ROTATION = 0x1,
IE_OPS_MODE_DEWARP = 0x2,
IE_OPS_MODE_AFFINE = 0x4,
IE_OPS_MODE_ALIGN_32 = MAX_INT_FOR_ALIGN
} ie_ops_mode_t;
typedef enum {
IE_ANGLE_OF_ROTATION_0 = 0,
IE_ANGLE_OF_ROTATION_90 = 1,
IE_ANGLE_OF_ROTATION_180 = 2,
IE_ANGLE_OF_ROTATION_270 = 3,
IE_ANGEL_OF_ROTATE_ALIGN_32 = MAX_INT_FOR_ALIGN
} ie_angle_of_rotation_t;
struct ie_control_points_info {
uint8_t x;
uint8_t y;
};
struct ie_control_points {
uint8_t cols;
uint8_t rows;
struct ie_control_points_info infos[64];
};
struct ie_affine_matrix {
float val[2][3];
};
typedef struct ie_input_img_cfg {
uint32_t imgfmt;
uint32_t pad_mode;
int width;
int height;
int stride;
/* Crop parameters or other purposes */
int crop_top;
int crop_bottom;
int crop_left;
int crop_right;
/* Pad parameters or other purposes */
int pad_top;
int pad_bottom;
int pad_left;
int pad_right;
int flip_face;
} ie_input_img_cfg_t;
typedef struct ie_output_img_cfg {
uint32_t imgfmt;
int width;
int height;
int stride;
} ie_output_img_cfg_t;
typedef struct ie_ops_params {
ie_ops_mode_t ops_mode __attribute__((aligned (4)));
union {
ie_angle_of_rotation_t angle_of_rotation __attribute__((aligned (4)));
struct ie_affine_matrix affine;
#if CFG_IE_MESH_POINTS_ONLINE == ENABLE
struct ie_control_points ctrlps;
#endif
} u;
} ie_ops_params_t;
typedef struct ie_config {
ie_ops_params_t ops_params;
ie_input_img_cfg_t input_cfg;
ie_output_img_cfg_t output_cfg;
} ie_config_t;
typedef struct {
int frame_seq;
ie_config_t ie_cfg;
uint32_t in_buf_addr;
uint32_t in_buf_len;
uint32_t out_buf_addr;
uint32_t out_buf_len;
} ie_oper_params_t;
typedef struct {
int rslt_type;
ext_oper_sts_t sts;
/* output buf */
uint32_t out_buf_addr;
uint32_t out_filled_len;
int32_t seq_num;
} ie_oper_result_t;
/*************************************************************************
Auxilary Computation Interfaces
**************************************************************************/
typedef struct aux_compute_s {
int compute_type;
} aux_compute_config_t;
typedef struct {
int frame_seq;
aux_compute_config_t aux_compute_cfg;
uint32_t in_buf_addr;
uint32_t in_buf_len;
uint32_t out_buf_addr;
uint32_t out_buf_len;
} aux_compute_params_t;
typedef struct {
int rslt_type;
ext_oper_sts_t sts;
/* output buf */
uint32_t out_buf_addr;
uint32_t out_filled_len;
int32_t seq_num;
} aux_compute_result_t;
#endif