📄 isp_cct_if.c
字号:
kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_IDLE_EVENT,KAL_OR_CONSUME,
&event_group,KAL_SUSPEND);
}
switch_cap_en = KAL_FALSE;
}
DISABLE_VIEW_FINDER_MODE;
kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
// start capture
#if (defined(MT6219))
ENABLE_GMC_DEBUG_OUTPUT;
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
for(i=0;i<test_loop;i++);//delay to prevent memory corrupted
if (test_loop>0)
test_loop = 0;
ENABLE_CAMERA_OUTPUT_TO_MEM;
#endif
#if (!defined(MT6219))
if(isp_cct_data->flash_mode == CAM_FLASH_ON)
{
if(sensor_config_data.enable_flashlight_tansfer == KAL_TRUE)
flash_config(device_support_info.autoflash.offset,device_support_info.autoflash.duty);
/* FlashLight Trigger & Enable Pin Config */
ENABLE_FLASH_LIGHT;
if(image_sensor_func->set_flashlight!=0)
image_sensor_func->set_flashlight(KAL_TRUE);
}
#endif
ENABLE_VIEW_FINDER_MODE;
isp_operation_state=ISP_CAPTURE_JPEG_STATE;
kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_IDLE_EVENT,KAL_OR_CONSUME,
&event_group,KAL_SUSPEND);
/* add read auto defect count */
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
cct_auto_defect_count = REG_ISP_HISTOGRAM_BOUNDARY_CTRL5&0x0000FFFF;
#endif
DISABLE_CMOS_SESNOR;
DISABLE_VIEW_FINDER_MODE;
isp_operation_state=ISP_STANDBY_STATE;
/* disable gamma 1024 */
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
DISABLE_1024_GAMMA_TABLE
#endif
#if (!defined(MT6219))
if(isp_cct_data->flash_mode == CAM_FLASH_ON)
{
/* FlashLight Disnable Pin Config */
DISABLE_FLASH_LIGHT;
if(image_sensor_func->set_flashlight!=0)
image_sensor_func->set_flashlight(KAL_FALSE);
}
#endif
/* Restore pregain of preview mode */
if(sensor_config_data.enable_shutter_tansfer==KAL_TRUE)
{
#if (defined(MT6219))
ae_set_pregain(pregain);
#else
ae_set_lut_gain();
#endif
}
return ret_code;
}
void exit_camera_preview_cct(void)
{
MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_PREVIEW_ID;
kal_uint32 j=0;;
if (isp_operation_state!=ISP_PREVIEW_STATE)
ASSERT(0);
#if (defined(AF_SUPPORT)&&(!defined(YUV_SENSOR_SUPPORT)))//prevent scenario error
if ((af_operation_state == AF_COLLECT_STATE) || (af_operation_state == AF_SEARCH_STATE))
{
cct_camera_operation_setting(CAM_AF_KEY, CAM_AF_RELEASE);
}
#endif
ENABLE_CAMERA_IDLE_INT;
DISABLE_VIEW_FINDER_MODE;
isp_idle_done_flag=KAL_FALSE;
while(isp_idle_done_flag==KAL_FALSE)
{
j++;
kal_sleep_task(10);
if(j>5) break;
}
DISABLE_CMOS_SESNOR;
lcd_stop_hw_update(isp_preview_config_data.lcd_id);
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
RESZ_Stop(scene_id);
RESZ_Close(scene_id);
IMGPROC_Stop(scene_id);
IMGPROC_Close(scene_id);
stop_image_dma(scene_id);
IMGDMA_Close(scene_id);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
close_image_data_path(scene_id);
#endif
isp_operation_state=ISP_STANDBY_STATE;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
intmem_deinit();
extmem_deinit();
#endif
}
void recover_sensor_setting(void)
{
// image_sensor_func->sensor_preview_setting(&exposure_window,&sensor_config_data);
}
void get_banding_factor(kal_uint8 *baseshutter_60hz,kal_uint8 *baseshutter_50hz)
{
kal_uint32 pixelclk;
kal_uint16 max_expo_width, max_expo_line;
#if (defined(MCU_52M)||defined(MCU_104M))
pixelclk=((kal_uint32)(52000000/(((DRV_Reg32(ISP_TG_PHASE_COUNTER_REG)&0xF0)>>4)+1)));
#elif (defined(MCU_26M))
pixelclk=((kal_uint32)(26000000/(((DRV_Reg32(ISP_TG_PHASE_COUNTER_REG)&0xF0)>>4)+1)));
#endif
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
if((REG_ISP_TG_PHASE_COUNTER & REG_TGPC_PIXEL_CLK_SELECT_BIT)!= 0)
pixelclk=((kal_uint32)(48000000/(((DRV_Reg32(ISP_TG_PHASE_COUNTER_REG)&0xF0)>>4)+1)));
#endif
image_sensor_func->get_sensor_period(&max_expo_width, &max_expo_line);
*baseshutter_60hz=(kal_uint8)(pixelclk/(120*max_expo_width));
*baseshutter_50hz=(kal_uint8)(pixelclk/(100*max_expo_width));
}
kal_uint32 isp_cct_get_isp_id(void)
{
#if defined(MT6219)
return 0x62198A01;
#elif defined(MT6228)
// new isp function, assign a new unique id
return 0x62288A00;
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227))
// different baseband chip but isp functionality is the same, just apply the same id
return 0x62278A00;
#elif(defined(MT6229)||defined(MT6230))
return 0x62298A00;
#else
return 0x00000000;
#endif
}
kal_bool isp_cct_is_gamma_table_supported(void) {
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))//only 6226 & 6227 & 6229 can support gamma 1024
return KAL_TRUE;
#else
return KAL_FALSE;
#endif
}
void isp_cct_set_gamma_table(const kal_uint8 gamma_table[1024])
{
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
kal_uint16 i;
kal_uint32 temp1, temp2;
//bypass gamma
temp1 = REG_ISP_COLOR_PROCESS_STAGE_CTRL2;//by gamma
temp2 = REG_ISP_GAMMA_OPERATION3;//output to memory
ENABLE_GAMMA_FUNCTION_BYPASS//disable gamma
DISABLE_1024_GAMMA_TABLE//disable output to memory
for(i=0;i<256;i++)//1000h~13FCh gamma table 1024
INTMEM_GAMMA_1024(i) =
(unsigned int)(gamma_table[i*4]|(gamma_table[i*4+1]<<8)|(gamma_table[i*4+2]<<16)|
(gamma_table[i*4+3]<<24));
REG_ISP_COLOR_PROCESS_STAGE_CTRL2 = temp1;//recover gamma
REG_ISP_GAMMA_OPERATION3 = temp2;//recover output to memory
#endif
}
void isp_cct_get_gamma_table(kal_uint8 gamma_table[1024])
{
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
kal_uint16 i;
kal_uint32 temp1, temp2;
//bypass gamma
temp1 = REG_ISP_COLOR_PROCESS_STAGE_CTRL2;//by gamma
temp2 = REG_ISP_GAMMA_OPERATION3;//output to memory
ENABLE_GAMMA_FUNCTION_BYPASS//disable gamma
DISABLE_1024_GAMMA_TABLE//disable output to memory
for(i=0;i<256;i++)//1000h~13FCh gamma table 1024
{
gamma_table[i*4]=INTMEM_GAMMA_1024(i)&INTMEM_GAMMA_1024_BYTE4_MASK;
gamma_table[i*4+1]=(INTMEM_GAMMA_1024(i)&INTMEM_GAMMA_1024_BYTE3_MASK)>>8;
gamma_table[i*4+2]=(INTMEM_GAMMA_1024(i)&INTMEM_GAMMA_1024_BYTE2_MASK)>>16;
gamma_table[i*4+3]=(INTMEM_GAMMA_1024(i)&INTMEM_GAMMA_1024_BYTE1_MASK)>>24;
}
REG_ISP_COLOR_PROCESS_STAGE_CTRL2 = temp1;//recover gamma
REG_ISP_GAMMA_OPERATION3 = temp2;//recover output to memory
#endif
}
kal_bool isp_cct_is_shading_supported(void)
{
#if (!defined(MT6219))
return KAL_TRUE;
#else
return KAL_FALSE;
#endif
}
kal_bool isp_cct_is_capmode_supported(kal_uint8 mode)
{
kal_bool ret = KAL_FALSE;
switch (mode)
{
case CAPTRUE_MODE_RAW_8BIT: // RAW, 8Bit, capture to internal ram
ret = KAL_TRUE;
break;
case CAPTRUE_MODE_YUV: // YUV, capture to internal ram
ret = KAL_TRUE;
break;
case CAPTRUE_MODE_EXT_RAW_8BIT: // RAW, 8Bit, capture to external ram
#if (defined(MT6219))
ret = KAL_FALSE;
#else
ret = KAL_TRUE;
#endif
break;
case CAPTRUE_MODE_EXT_YUV: // YUV, capture to external ram
#if (defined(MT6219))
ret = KAL_FALSE;
#else
ret = KAL_TRUE;
#endif
break;
case CAPTRUE_MODE_RAW_10BIT: // RAW, 10Bit, capture to internal ram
case CAPTRUE_MODE_EXT_RAW_10BIT: // RAW, 10Bit, capture to external ram
#if (defined(MT6219)||defined(MT6228))
ret = KAL_FALSE;
#else
ret = KAL_TRUE;
#endif
break;
case CAPTRUE_MODE_RGB888: // RGB888, capture to internal ram
case CAPTRUE_MODE_RGB565: // RGB565, capture to internal ram
case CAPTRUE_MODE_EXT_RGB888: // RGB888, capture to external ram
case CAPTRUE_MODE_EXT_RGB565: // RGB565, capture to external ram
ret = KAL_FALSE;
break;
case CAPTRUE_MODE_JPEG:
#if (defined(MT6219))
ret = KAL_FALSE;
#else
ret = KAL_TRUE;
#endif
break;
}
return ret;
}
/* read from global variable */
void get_camera_shading_set(cct_shading_comp_struct *p_cam_addr, camera_comp_set_num p_set_mode)
{
#if (!defined(MT6219))
if ((p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET) ||
(p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET))
{
p_cam_addr->SHADING_RANGE_EN = (camera_para.ISP.reg[Shading_Reg1_ID]&
REG_SHADING_RANGE_ENABLE_BIT)>>29;
p_cam_addr->SHADING_EN= (camera_para.ISP.reg[Shading_Reg1_ID]&
REG_SHADING_ENABLE_BIT)>>28;
p_cam_addr->K_FACTOR= (camera_para.ISP.reg[Shading_Reg1_ID]&
REG_SHADING_K_FACTOR_MASK)>>14;
p_cam_addr->RADIUS_FACTOR= (camera_para.ISP.reg[Shading_Reg1_ID]&
REG_SHADING_RADIUS_FACTOR_MASK)>>12;
p_cam_addr->SHADING_CENTERY= (camera_para.ISP.reg[Shading_Reg1_ID]&
REG_SHADING_CENTERY_MASK)>>16;
p_cam_addr->SHADING_CENTERX= camera_para.ISP.reg[Shading_Reg1_ID]&
REG_SHADING_CENTERX_MASK;
p_cam_addr->SHADING_RANGE_HI= (camera_para.ISP.reg[Shading_Reg1_ID]&
0x40000000)>>30;
p_cam_addr->SHADING_KR= (camera_para.ISP.reg[Shading_Reg1_ID+1]&
REG_SHADING_KR_MASK)>>24;
p_cam_addr->SHADING_KG= (camera_para.ISP.reg[Shading_Reg1_ID+1]&
REG_SHADING_KG_MASK)>>16;
p_cam_addr->SHADING_KB= (camera_para.ISP.reg[Shading_Reg1_ID+1]&
REG_SHADING_KB_MASK)>>8;
p_cam_addr->SHADING_RANGE_LO= camera_para.ISP.reg[Shading_Reg1_ID+1]&
REG_SHADING_RANGE_MASK;
p_cam_addr->SHADING_CURVE_EN= (camera_para.ISP.reg[Shading_Reg1_ID+2]&
REG_SHADING_CURVE_ENABLE_BIT)>>28;
p_cam_addr->SHADING_CURVE_SEL= (camera_para.ISP.reg[Shading_Reg1_ID+2]&
REG_SHADING_CURVE_SEL_MASK)>>24;
p_cam_addr->SHADING_GAMMA[0][0]= (camera_para.ISP.reg[Shading_Reg1_ID+2]&
REG_SHADING_CURVE_R_B1_MASK)>>16;
p_cam_addr->SHADING_GAMMA[0][1]= (camera_para.ISP.reg[Shading_Reg1_ID+2]&
REG_SHADING_CURVE_R_B2_MASK)>>8;
p_cam_addr->SHADING_GAMMA[0][2]= camera_para.ISP.reg[Shading_Reg1_ID+2]&
REG_SHADING_CURVE_R_B3_MASK;
p_cam_addr->SHADING_GAMMA[0][3]= (camera_para.ISP.reg[Shading_Reg1_ID+3]&
REG_SHADING_CURVE_R_B4_MASK)>>24;
p_cam_addr->SHADING_GAMMA[0][4]= (camera_para.ISP.reg[Shading_Reg1_ID+3]&
REG_SHADING_CURVE_R_B5_MASK)>>16;
p_cam_addr->SHADING_GAMMA[0][5]= (camera_para.ISP.reg[Shading_Reg1_ID+3]&
REG_SHADING_CURVE_R_B6_MASK)>>8;
p_cam_addr->SHADING_GAMMA[0][6]= camera_para.ISP.reg[Shading_Reg1_ID+3]&
REG_SHADING_CURVE_R_B7_MASK;
p_cam_addr->SHADING_GAMMA[0][7]= (camera_para.ISP.reg[Shading_Reg1_ID+4]&
REG_SHADING_CURVE_R_B8_MASK)>>24;
p_cam_addr->SHADING_GAMMA[0][8]= (camera_para.ISP.reg[Shading_Reg1_ID+4]&
REG_SHADING_CURVE_R_B9_MASK)>>16;
p_cam_addr->SHADING_GAMMA[0][9]= (camera_para.ISP.reg[Shading_Reg1_ID+4]&
REG_SHADING_CURVE_R_B10_MASK)>>8;
p_cam_addr->SHADING_GAMMA[0][10]= camera_para.ISP.reg[Shading_Reg1_ID+4]&
REG_SHADING_CURVE_R_B11_MASK;
p_cam_addr->SHADING_GAMMA[1][0]= (camera_para.ISP.reg[Shading_Reg1_ID+5]&
REG_SHADING_CURVE_G_B1_MASK)>>24;
p_cam_addr->SHADING_GAMMA[1][1]= (camera_para.ISP.reg[Shading_Reg1_ID+5]&
REG_SHADING_CURVE_G_B2_MASK)>>16;
p_cam_addr->SHADING_GAMMA[1][2]= (camera_para.ISP.reg[Shading_Reg1_ID+5]&
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -