doubao_chat/include_lib/server/video_engine_server.h

116 lines
2.5 KiB
C

#ifndef __VIDEO_ENGINE_SERVER_H__
#define __VIDEO_ENGINE_SERVER_H__
#include "typedef.h"
#include "list.h"
typedef enum VE_MODULE_TYPE {
VE_MODULE_MOTION_DETECT,
VE_MODULE_LANE_DETECT,
VE_MODULE_CUSTOM,
VE_MODULE_MAX,
} ve_module_type_t;
#define VE_MODULE_MOTION_DETECT_MASK (1<<VE_MODULE_MOTION_DETECT)
#define VE_MODULE_LANE_DETECT_MASK (1<<VE_MODULE_LANE_DETECT)
typedef enum {
VE_REQ_MODULE_OPEN,
VE_REQ_MODULE_CLOSE,
VE_REQ_MODULE_START,
VE_REQ_MODULE_STOP,
VE_REQ_MODULE_SET_PARAM,
VE_REQ_MODULE_GET_PARAM,
VE_REQ_MODULE_IOCTL,
VE_REQ_MODULE_GET_STATUS,
VE_REQ_GET_STATUS,
VE_REQ_GET_CAPABILITY,
VE_REQ_SET_HINT,
} ve_req_type_t;
typedef enum {
VE_MSG_MOTION_DETECT_STILL = 1,
VE_MSG_MOTION_DETECT_MOVING,
VE_MSG_LANE_DETECT_WARNING,
VE_MSG_VEHICLE_DETECT_WARNING,
VE_MSG_LANE_DETCET_LEFT,
VE_MSG_LANE_DETCET_RIGHT,
VE_MSG_CUSTOM_MODULE,
} ve_msg_type_t;
typedef enum {
VE_STATUS_IDLE,
VE_STATUS_STOP,
VE_STATUS_RUNNING,
VE_STATUS_ERROR,
} ve_status_t;
typedef enum {
VE_MOTION_DETECT_MODE_NORMAL,
VE_MOTION_DETECT_MODE_ISP,
} ve_motion_detect_mode_t;
typedef struct {
u32 hint;
u32 mode_hint0;
u32 mode_hint1;
} ve_hint_info_t;
typedef struct {
u16 x;
u16 y;
u16 w;
u16 h;
} ve_roi_t;
typedef struct {
u8 level; //0-4
u32 move_delay_ms; //ms
u32 still_delay_ms; //ms
ve_roi_t roi; //Range Of Interest.
//defalut:x=0,y=0,w=640,h=480, must 8 bytes aligned
} ve_motion_detect_params_t;
typedef struct {
u16 car_head_y;
u16 vanish_y;
u16 len_factor;
} ve_lane_detect_params_t;
typedef struct video_engine_req {
u8 module;
u32 cmd;
union {
u8 param[0];
ve_motion_detect_mode_t md_mode;
ve_motion_detect_params_t md_params;
ve_lane_detect_params_t lane_detect_params;
ve_hint_info_t hint_info;
ve_status_t status;
u32 capabilities;
};
} video_engine_req_t;
//vehicle detect open or not
//flag = 1: vehicle detect open
//flag = 0: vehicle detect close
extern void vehicle_detect_open_close(int flag);
extern void set_lane_params(int ANGLE_LOW, int ANGLE_HIGH, int LANE_DISTANCE, int RATIO_HW);
/*custom module api*/
typedef struct ve_custom_module_api {
void *(*init)(int w, int h);
int (*free)(void *h);
int (*process)(void *h, unsigned char *inputFrame, int width, int height);
} ve_custom_module_api_t;
int ve_custom_module_register(ve_custom_module_api_t *api);
#endif