#ifndef _VPP_DEV_H_ #define _VPP_DEV_H_ #include "hal/vpp.h" #define VPP_INPUT_FORMAT 0 //0:YUV422 //1:RGB888/RAW #define IN_DVP0 0 #define IN_DVP1 1 #define IN_MIPI_CSI0 2 #define IN_MIPI_CSI1 3 #define IN_ISP 4 #define IN_GEN422 5 #define IN_PARA_IN 6 #ifndef VPP_INPUT_FROM #define VPP_INPUT_FROM IN_ISP #endif enum { ISP_VIDEO_0, ISP_VIDEO_1, ISP_VIDEO_2, }; typedef enum { SCALER3_DONE = 0, JPG0_DONE, JPG1_DONE, SCALE1_JPG_ENCODE, VPP_IFP_EN_CTRL, VPP_FUNC_DONE_NUM, }VPP_FUNC_DONE; typedef int32_t (*scale3_kick_fn)(); //ret :0 --->keep running 1 --->run one time typedef int32_t (*func_done_fn)(uint32 irq_data); struct video_cfg_t { uint8_t video_num; uint8_t video_type_cur; //cur frame is ISP_VIDEO_0/1/2 uint8_t video_type_last; //last frame is ISP_VIDEO_0/1/2 uint8_t video_type_vpp; //vpp runing which frame ,app maybe use uint8_t resv; uint16_t dvp_iw; uint16_t dvp_ih; uint16_t dvp_ow; uint16_t dvp_oh; uint16_t dvp_type; //0:no device 1:master 2:slave0 3:slave1 uint16_t csi0_iw; uint16_t csi0_ih; uint16_t csi0_ow; uint16_t csi0_oh; uint16_t csi0_type; //0:master 1:slave0 2:slave1 uint16_t csi1_iw; uint16_t csi1_ih; uint16_t csi1_ow; uint16_t csi1_oh; uint16_t csi1_type; //0:master 1:slave0 2:slave1 }; struct mdt_coord_msg { uint16_t x0,x1; uint16_t y0,y1; uint16_t x,y; uint8_t blkmv_cnt; }; enum { VPP_MODE_2N_ADD_16 = 0, //[16,32] 2N+16 VPP_MODE_2N, //[0,16] 2N }; #ifndef SCALE1_FROM_VPPBF #define SCALE1_FROM_VPPBF 0//0:VPP BUF0 1:VPP BUF1 #endif #ifndef SCALE3_FROM_VPPBF #define SCALE3_FROM_VPPBF 0//0:VPP BUF0 1:VPP BUF1 #endif #ifndef VPP_BUF0_MODE #define VPP_BUF0_MODE VPP_MODE_2N_ADD_16 #endif #ifndef VPP_BUF1_MODE #define VPP_BUF1_MODE VPP_MODE_2N_ADD_16 #endif //注意这里配置的N,所以实际根据MODE决定申请空间 #ifndef VPP_BUF0_LINEBUF_NUM #define VPP_BUF0_LINEBUF_NUM 8 #endif #ifndef VPP_BUF1_LINEBUF_NUM #define VPP_BUF1_LINEBUF_NUM 6 #endif extern struct video_cfg_t video_msg; bool vpp_cfg(uint32_t w,uint32_t h,uint8_t input_from); void vpp_itp_save_only(struct vpp_device *p_vpp,uint16_t w,uint16_t h,uint32_t psram_adr); uint8_t vpp_video_type_map(uint8_t stype); int32 vppdone_func_register(uint8_t id,func_done_fn func,uint32 arg); int32 vppdone_func_unregister(uint8_t id); uint8_t get_vpp_w_h(uint16_t *w, uint16_t *h); void set_vpp_scale_w_h(uint8_t en, uint16_t w, uint16_t h); uint8_t get_vpp1_w_h(uint16_t *w, uint16_t *h); void *get_vpp_buf(uint8_t which); int8_t vpp_dev_open(); int32 vpp_is_closed(struct vpp_device *p_vpp); #endif