Files
TAIXIN/sdk/lib/video/dual/dual_org_dev.c

185 lines
5.6 KiB
C
Raw Normal View History

#include "sys_config.h"
#include "tx_platform.h"
#include "list.h"
#include "dev.h"
#include "typesdef.h"
#include "lib/video/dvp/cmos_sensor/csi.h"
#include "lib/video/mipi_csi/mipi_csi.h"
#include "lib/video/vpp/vpp_dev.h"
#include "lib/video/h264/h264_drv.h"
#include "devid.h"
#include "osal/irq.h"
#include "osal/string.h"
#include "lib/video/dvp/jpeg/jpg.h"
#include "hal/dual_org.h"
#include "dev/scale/hgscale.h"
#include "dev/dual/hgdual_org.h"
#include "hal/gpio.h"
#include "hal/jpeg.h"
#include "lib/heap/av_psram_heap.h"
volatile uint32_t dual_arg[4];
void dual_org0_done_isr(uint32 irq,uint32 dev,uint32 param){
struct jpg_device *jpeg_dev;
uint32_t *dl_dev;
dl_dev = (uint32_t *)dev;
_os_printf("{0}");
video_msg.video_type_last = video_msg.video_type_cur;
video_msg.video_type_cur = ISP_VIDEO_0;
jpeg_dev = (struct jpg_device *)dl_dev[1];//dev_get(HG_JPG0_DEVID);
jpg_set_oe_state(jpeg_dev,1);
// if (param == 1) dual_save_addr_cfg((void *)dl_dev[0]);
}
void dual_org1_done_isr(uint32 irq,uint32 dev,uint32 param){
uint32 org1_num;
static int32_t org_select = 0;
struct jpg_device *jpeg_dev;
struct dual_device *dual_dev;
struct isp_device *isp_dev;
uint32_t *dl_dev;
dl_dev = (uint32_t *)dev;
dual_dev = (struct dual_device *)dl_dev[0];//dev_get(HG_DUALORG_DEVID);
jpeg_dev = (struct jpg_device *)dl_dev[1];//dev_get(HG_JPG0_DEVID);
isp_dev = (struct isp_device *)dl_dev[2];//dev_get(HG_ISP_DEVID);
org1_num = dl_dev[3];
_os_printf("{1}");
if(org1_num == 2){
org_select = isp_sensor_slave_index(isp_dev);
if (org_select == 1)
{
dual_input_type(dual_dev,1,IN_MIPI_CSI0);
video_msg.video_type_last = video_msg.video_type_cur;
video_msg.video_type_cur = ISP_VIDEO_2;
} else if (org_select == 2) {
dual_input_type(dual_dev,1,IN_MIPI_CSI1);
video_msg.video_type_last = video_msg.video_type_cur;
video_msg.video_type_cur = ISP_VIDEO_1;
} else {
os_printf("sensor slave index : %d err\r\n", org_select);
}
}else{
video_msg.video_type_last = video_msg.video_type_cur;
video_msg.video_type_cur = ISP_VIDEO_1;
}
jpg_set_oe_state(jpeg_dev,0);
// if (param == 2) dual_save_addr_cfg((void *)dual_dev);
}
void dual_org_rd_done_isr(uint32 irq,uint32 dev,uint32 param){
//_os_printf("(rd)");
}
void dual_org_rd_slow_isr(uint32 irq,uint32 dev,uint32 param){
_os_printf("(rd slow)");
}
void dorg_double_sensor(uint32 src0_w,uint32 src0_h,uint32 src1_w,uint32 src1_h,uint32 src0_raw_num,uint32 src1_raw_num,uint8_t dvp_type,uint8_t csi0_type,uint8_t csi1_type){
struct dual_device *dual_dev;
struct jpg_device *jpeg_dev;
struct isp_device *isp_dev;
uint8_t *psram_photo_buf;
uint8_t *psram_photo_buf1;
uint8_t raw_dw;
uint8_t type_master = 0;
uint8_t type_slave = 0;
isp_dev = (struct isp_device *)dev_get(HG_ISP_DEVID);
dual_dev = (struct dual_device *)dev_get(HG_DUALORG_DEVID);
jpeg_dev = (struct jpg_device *)dev_get(HG_JPG0_DEVID);
raw_dw = 8+(src0_raw_num-1)*2;
psram_photo_buf = (uint8_t *)av_psram_malloc((src0_w*src0_h*raw_dw)/8);
raw_dw = 8+(src1_raw_num-1)*2;
psram_photo_buf1 = (uint8_t *)av_psram_malloc((src1_w*src1_h*raw_dw)/8);
_os_printf("psram:%08x %08x size:%d\r\n",psram_photo_buf,psram_photo_buf1,(src1_w*src1_h*raw_dw)/8);
if(video_msg.dvp_type == 1){
video_msg.dvp_type = dvp_type;
}
if(video_msg.csi0_type == 1){
video_msg.csi0_type = csi0_type;
}else if(video_msg.csi1_type == 1){
video_msg.csi1_type = csi0_type;
}
if(video_msg.csi1_type == 1){
video_msg.csi1_type = csi1_type;
}
if(video_msg.dvp_type == 1){
type_master = IN_DVP0;
}else if(video_msg.csi0_type == 1){
type_master = IN_MIPI_CSI0;
}else{
type_master = IN_MIPI_CSI1;
}
if(video_msg.dvp_type == 2){
type_slave = IN_DVP0;
}else if(video_msg.csi0_type == 2){
type_slave = IN_MIPI_CSI0;
}else{
type_slave = IN_MIPI_CSI1;
}
dual_init(dual_dev);
dual_input_type(dual_dev,0,type_master); //主 dvp
dual_input_type(dual_dev,1,type_slave);
// dual_input_type(dual_dev,1,IN_DVP0); //副 mipi
dual_work_mode(dual_dev,0);
//dual_input_src_num(dual_dev,2);
dual_input_src_num(dual_dev,(video_msg.video_num>1)?2:1);
dual_open_hdr(dual_dev,0);
dual_size_cfg(dual_dev,src0_w,src1_w,src0_raw_num,src1_raw_num);
#if 0 //master:gc1084, slave:gc1084
dual_timer_cfg(dual_dev,32,2,512);
dual_fs_trig(dual_dev,420);
dual_rd_trig(dual_dev,422,425);
#elif 0 //master:2336p, slave:gc1084
dual_timer_cfg(dual_dev,32,1,256);
dual_fs_trig(dual_dev,400);
dual_rd_trig(dual_dev,330,540);
#else //master:sc1346, slave:gc1084
#if ISP_TUNNING_EN
dual_timer_cfg(dual_dev,16,2,256);
dual_fs_trig(dual_dev,460);
dual_rd_trig(dual_dev,10,452);
#else
//master:gc2053, slave:jxv03
dual_timer_cfg(dual_dev,32,1,256);
dual_fs_trig(dual_dev,734);
dual_rd_trig(dual_dev,300,400);
#endif
//dual_timer_cfg(dual_dev,16,20,500);
//dual_rd_trig(dual_dev,16,336);
#endif
dual_wr_cnt_cfg(dual_dev,src0_w,src0_h,src1_w,src1_h,src0_raw_num,src1_raw_num);
dual_set_addr(dual_dev,(uint32_t)psram_photo_buf,(uint32_t)psram_photo_buf1);
//dual_set_addr(dual_dev,0x28000000,0x28151800);
dual_arg[0] = (uint32_t)dual_dev;
dual_arg[1] = (uint32_t)jpeg_dev;
dual_arg[2] = (uint32_t)isp_dev;
//dual_arg[3] = 2;
dual_arg[3] = (video_msg.video_num>2)?2:1;
dual_request_irq(dual_dev,ORG0_SD_ISR,(dual_irq_hdl )&dual_org0_done_isr,(uint32_t)dual_arg);
dual_request_irq(dual_dev,ORG1_SD_ISR,(dual_irq_hdl )&dual_org1_done_isr,(uint32_t)dual_arg);
dual_request_irq(dual_dev,ORG_RD_DONE_IE,(dual_irq_hdl )&dual_org_rd_done_isr,(uint32_t)dual_arg);
dual_request_irq(dual_dev,ORG_RD_SLOW_IE,(dual_irq_hdl )&dual_org_rd_slow_isr,(uint32_t)dual_arg);
dual_open(dual_dev);
}