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

📄 usbvideo_cam_if.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	RESZ_Close(scene_id);

	//clean_imgprc_coefficient(scene_id);
	IMGPROC_Stop(scene_id);
	IMGPROC_Close(scene_id);

	stop_image_dma(scene_id);
	IMGDMA_Close(scene_id);

	deinit_working_mem();
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	close_image_data_path(scene_id);
#endif

	jpeg_encoder_operation_state=JPEG_ENCODER_STANDBY_STATE;

	if((usbvideo_cam_operation_state==USBVIDEO_CAM_OFF_STATE) ||
		(usbvideo_cam_operation_state==USBVIDEO_CAM_STANDBY_STATE))
		return;

	if(usbvideo_complete_flag==KAL_TRUE)
	{
		if(usbvideo_cam_operation_state==USBVIDEO_CAM_PREVIEW_CHECK_STATE)
			USBVideo_Complete_Video_Buffer(g_usbvideo_cam_buff, jpeg_file_size, time, g_usbvideo_cam_size);
		else if(usbvideo_cam_operation_state==USBVIDEO_CAM_CAPTURE_STATE)
			USBVideo_Complete_Still_Buffer(g_usbvideo_cam_buff, jpeg_file_size, time, g_usbvideo_cam_size);			
	}

	// GetNext?
	if(usbvideo_cam_operation_state==USBVIDEO_CAM_PREVIEW_CHECK_STATE)
	{
		/* Get Next USB Video Buffer */
		g_usbvideo_cam_buff = USBVideo_Get_Video_Buffer();
		if(g_usbvideo_cam_buff!=NULL)
		{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))			
#if (defined(MT6219))	    
			if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
				ENABLE_AE_COUNT;	
#else
			if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_FLASH_DONE_ENABLE_BIT)== 0)
			{    // For use Frame Ready interrupt sensor modules
				if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
					ENABLE_AE_COUNT;	
			}    		
#endif            
			/* Update desc buff addr */
			init_working_mem();

			g_usbvideo_camera_data.target_buffer_start_address = (kal_uint32) g_usbvideo_cam_buff;
			jpeg_encode_config_data.jpeg_file_start_address=g_usbvideo_camera_data.target_buffer_start_address;

			mp4_reset();
			config_image_dma(scene_id,g_usbvideo_camera_data.target_width,g_usbvideo_camera_data.target_height);
			config_jpeg_encoder(&jpeg_encode_config_data);
			config_image_processor(scene_id);
			config_pixel_resizer(scene_id);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
			ENABLE_CMOS_SESNOR;
#if (defined(MT6228))			
			if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_VSYNC_ENABLE_BIT)== 0)
			{    // For use Frame Ready interrupt sensor modules
			if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
				ENABLE_AE_COUNT;	
			}    		
#else
			if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_FLASH_DONE_ENABLE_BIT)== 0)
			{    // For use Frame Ready interrupt sensor modules
			if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
				ENABLE_AE_COUNT;	
			}    		
#endif	
			g_usbvideo_camera_data.target_buffer_start_address = (kal_uint32) g_usbvideo_cam_buff;
			ipp_capture_jpeg_data.jpeg_file_start_address1=g_usbvideo_camera_data.target_buffer_start_address;			

			open_image_data_path(scene_id);
			config_camera_usbvideo_jpeg_data_path(scene_id,&ipp_capture_jpeg_data);
#endif
			// Update effect
			usbvideo_camera_update_attr();

			usbvideo_cam_operation_state = USBVIDEO_CAM_PREVIEW_CHECK_STATE;
			jpeg_encoder_encode_result=0;

			SET_CAMERA_CAPTURE_MODE;
			ENABLE_VIEW_FINDER_MODE;
		}
		else	// Exit USB or Stop Preview
			usbvideo_cam_operation_state = USBVIDEO_CAM_STANDBY_STATE;
	}
	else
	{
		usbvideo_cam_operation_state = USBVIDEO_CAM_STANDBY_STATE;
	}
}

/*************************************************************************
 * Init / Update Attribute for ISP
 *************************************************************************/
void usbvideo_camera_init_attr(void)
{
	kal_uint32 i;
	for (i=0;i<GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_PU_MAX);i++)		
	{
		usbvideo_attr_PU_value_list[i] = USBVIDEO_ATTR_PARA.attr_info[i].def;
	}
	/* CT Part , Fix(Default) Attributes */
	usbvideo_cam_command_CT_map[GET_ATTR_CT_IDX(USBVIDEO_ATTRIBUTE_FOCAL_MIN)] = USBVIDEO_CAM_ATTR_FIX;
	usbvideo_cam_command_CT_map[GET_ATTR_CT_IDX(USBVIDEO_ATTRIBUTE_FOCAL_MAX)] = USBVIDEO_CAM_ATTR_FIX;
	usbvideo_cam_command_CT_map[GET_ATTR_CT_IDX(USBVIDEO_ATTRIBUTE_FOCAL_LENGTH)] = USBVIDEO_CAM_ATTR_FIX;
}

kal_uint8 usbvideo_camera_update_attr(void)
{
	kal_uint32 i;
	for (i=0;i<GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_PU_MAX);i++)		
	{
		if(usbvideo_cam_command_PU_map[i]==USBVIDEO_CAM_ATTR_ISP)
			usbvideo_attr_setting_PU_index |= (1<<i); 	
	}
	usbvideo_camera_effect_background_setting_attr();
	return KAL_TRUE;
}

/*************************************************************************
 * Set / Get Attribute for ISP
 *************************************************************************/
void usbvideo_camera_effect_background_setting_attr(void)
{
	kal_uint32 i;
	kal_uint32 attr_value;
	for (i=0;i<GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_PU_MAX);i++)
	{
		if (usbvideo_attr_setting_PU_index & (1<<i))
		{
			attr_value = usbvideo_attr_PU_value_list[i];
			if(usbvideo_cam_command_PU_map[i] == USBVIDEO_CAM_ATTR_ISP)
			{
			switch (i)
			{
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_CONTRAST):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))			
					adjustment_brightness_contrast_para(scene_id,
						usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_BRIGHTNESS)],
						attr_value);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))					
					isp_contrast_setting(attr_value+1);	/*ISP Range: 0~128, WEBCAM Range 0~255*/
#endif						
				break;
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_BRIGHTNESS):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))							
					adjustment_brightness_contrast_para(scene_id,
						attr_value,
						usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_CONTRAST)]);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))					
					isp_bright_setting(attr_value);		/*ISP Range: 0~255, WEBCAM Range 0~255*/
#endif						
				break;
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_SATURATION):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))											
					adjustment_saturation_para(scene_id,attr_value);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))					
					SET_HUE_U_GAIN(((attr_value+1)/128)*0x20);					/*ISP Default: 0x20*/
					SET_HUE_V_GAIN(((attr_value+1)/128)*0x20);																	
#endif					
				break;					
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE_AUTO):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))															
					if(attr_value>0)
						adjustment_hue_para(scene_id, 0);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))					
					if(attr_value>0)
						disable_adjustment_isp_hue_para();
#endif												
				break;
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE):				
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))																			
					if(usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE_AUTO)]==0)
					adjustment_hue_para(scene_id, attr_value);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))					
					if(usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE_AUTO)]==0)
						adjustment_isp_hue_para(attr_value);						
#endif						
				break;	
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_POWER_LINE_FREQUENCY):
					if(attr_value==1)	/* 50Hz */
						ae_select_band(CAM_BANDING_50HZ);
					else					/* 60Hz or Disable */
						ae_select_band(CAM_BANDING_60HZ);
				break;													
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_SHARPNESS):
					if(attr_value==0)
					{
						DISABLE_Y_EDGE;
					}
					else
					{
						ENABLE_Y_EDGE;
						SET_Y_EDGE_GAIN(attr_value);
					}
				break;
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_GAMMA):
					if(attr_value==100)
					{
					    SET_GAMMA_B1(USBVIDEO_GAMMA_ATTR[0][0]);
					    SET_GAMMA_B2(USBVIDEO_GAMMA_ATTR[0][1]);
					    SET_GAMMA_B3(USBVIDEO_GAMMA_ATTR[0][2]);
					    SET_GAMMA_B4(USBVIDEO_GAMMA_ATTR[0][3]);					    					    
					    SET_GAMMA_B5(USBVIDEO_GAMMA_ATTR[0][4]);
					    SET_GAMMA_B6(USBVIDEO_GAMMA_ATTR[0][5]);
					    SET_GAMMA_B7(USBVIDEO_GAMMA_ATTR[0][6]);
					    SET_GAMMA_B8(USBVIDEO_GAMMA_ATTR[0][7]);					    					    
					    SET_GAMMA_B9(USBVIDEO_GAMMA_ATTR[0][8]);
					    SET_GAMMA_B10(USBVIDEO_GAMMA_ATTR[0][9]);
					    SET_GAMMA_B11(USBVIDEO_GAMMA_ATTR[0][10]);				    
					}
					else if(attr_value==160)	
					{
					    SET_GAMMA_B1(USBVIDEO_GAMMA_ATTR[1][0]);
					    SET_GAMMA_B2(USBVIDEO_GAMMA_ATTR[1][1]);
					    SET_GAMMA_B3(USBVIDEO_GAMMA_ATTR[1][2]);
					    SET_GAMMA_B4(USBVIDEO_GAMMA_ATTR[1][3]);					    					    
					    SET_GAMMA_B5(USBVIDEO_GAMMA_ATTR[1][4]);
					    SET_GAMMA_B6(USBVIDEO_GAMMA_ATTR[1][5]);
					    SET_GAMMA_B7(USBVIDEO_GAMMA_ATTR[1][6]);
					    SET_GAMMA_B8(USBVIDEO_GAMMA_ATTR[1][7]);					    					    
					    SET_GAMMA_B9(USBVIDEO_GAMMA_ATTR[1][8]);
					    SET_GAMMA_B10(USBVIDEO_GAMMA_ATTR[1][9]);
					    SET_GAMMA_B11(USBVIDEO_GAMMA_ATTR[1][10]);				    					
					}						
					else if(attr_value==220)	
					{
					    SET_GAMMA_B1(USBVIDEO_GAMMA_ATTR[2][0]);
					    SET_GAMMA_B2(USBVIDEO_GAMMA_ATTR[2][1]);
					    SET_GAMMA_B3(USBVIDEO_GAMMA_ATTR[2][2]);
					    SET_GAMMA_B4(USBVIDEO_GAMMA_ATTR[2][3]);					    					    
					    SET_GAMMA_B5(USBVIDEO_GAMMA_ATTR[2][4]);
					    SET_GAMMA_B6(USBVIDEO_GAMMA_ATTR[2][5]);
					    SET_GAMMA_B7(USBVIDEO_GAMMA_ATTR[2][6]);
					    SET_GAMMA_B8(USBVIDEO_GAMMA_ATTR[2][7]);					    					    
					    SET_GAMMA_B9(USBVIDEO_GAMMA_ATTR[2][8]);
					    SET_GAMMA_B10(USBVIDEO_GAMMA_ATTR[2][9]);
					    SET_GAMMA_B11(USBVIDEO_GAMMA_ATTR[2][10]);				    										    
					}											
				break;																						
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_BACKLIGHT_COMPENSATION):
					ae_set_ev(attr_value);
				break;			
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_TMP_AUTO):
					if(attr_value>0)
						awb_on_off(KAL_TRUE);
					else
						awb_on_off(KAL_FALSE);											
				break;													
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_TMP):
					if(usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_TMP_AUTO)] == 0 )
					{
						if(attr_value>5800)
							awb_set_manual_gain(CAM_WB_DAYLIGHT);
						else if(attr_value>=4800)					
							awb_set_manual_gain(CAM_WB_INCANDESCENCE);											
						else if(attr_value>=3800)											
							awb_set_manual_gain(CAM_WB_FLUORESCENT);																
						else if(attr_value>=2800)					
							awb_set_manual_gain(CAM_WB_TUNGSTEN);						
						awb_set_gain();					
					}
				break;									
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_COMP_AUTO):
					if(attr_value>0)
						awb_on_off(KAL_TRUE);
					else
						awb_on_off(KAL_FALSE);															
				break;													
									
				/* May Not Support*/
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_COMP):
				break;													
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_GAIN):
				break;													
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_DIGITAL_MULTIPLIER):
				break;									
				case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_DIGITAL_MULTIPLIER_LIMIT):
				break;									
				default:
				break;
			}
    		}
			usbvideo_attr_setting_PU_index &=~(1<<i);
		}
	}
}

kal_uint8 usbvideo_camera_effect_setting_attr(USBVideo_Attr_Value *attr)
{
	USBVIDEO_ATTRIBUTE_TYPE attr_type = attr->type;
	kal_uint32 attr_value = attr->value;

	// update attr PU current value
	if(attr_type>USBVIDEO_ATTRIBUTE_CT_MAX)
	{
		usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(attr_type)] = attr_value;
		usbvideo_attr_setting_PU_index |= 1<<GET_ATTR_PU_IDX(attr_type);
	}
	return KAL_TRUE;
}

kal_uint8 usbvideo_camera_effect_getting_attr(USBVideo_Attr_Value *attr)
{
	USBVIDEO_ATTRIBUTE_TYPE attr_type = attr->type;
	if(attr_type>USBVIDEO_ATTRIBUTE_CT_MAX)
	{
		switch(attr->req_type)
		{
			case USBVIDEO_REQUEST_GET_CUR:
				attr->value = usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(attr_type)];
				break;
			case USBVIDEO_REQUEST_GET_MIN:
				attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].min;
				break;
			case USBVIDEO_REQUEST_GET_MAX:
				attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].max;
				break;
			case USBVIDEO_REQUEST_GET_DEF:
				attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].def;
				break;
			case USBVIDEO_REQUEST_GET_RES:
				attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].res;
				break;
			default:
				EXT_ASSERT(0, (kal_uint32)attr->req_type, 0, 0);
				break;
		}
		return KAL_TRUE;		
	}
	else	// CT Part
	{	
		return KAL_FALSE;		
	}
}

#endif  // END_OF_WEBCAM_SUPPORT
#endif  // END_OF_ISP_SUPPORT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -