185 lines
5.6 KiB
C
185 lines
5.6 KiB
C
#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);
|
|
}
|
|
|
|
|