⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isp_cct_if.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	
		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 + -