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

📄 isp_yuv_if.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
#endif
	
	jpeg_encoder_operation_state=JPEG_ENCODER_STANDBY_STATE;
	isp_operation_state=ISP_STANDBY_STATE;

	jpeg_codec_power_down();

#endif
#endif
	return jpeg_file_size;
}

/*************************************************************************
* FUNCTION
*	camera_yuv_captuer_mem_process
*
* DESCRIPTION
*	This function capture one picture and overlap it with another frame
*
* PARAMETERS
*	isp_data : the parameters for camera capture and frame added process
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint8 camera_yuv_capture_mem_process(void)
{
#if (defined(YUV_SENSOR_SUPPORT))
	MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_CAPTURE_MEM_ID;
	lcd_frame_update_to_mem_struct lcd_data;
	kal_uint32 event_group;
	kal_uint16 temp_grab_size;
	kal_uint8 i;
#if (defined(EXIF_SUPPORT))	
	exif_cam_para_struct* exif_cam_para_ptr;
 	exif_MTK_para_struct* exif_MTK_para_ptr;
#endif	
	
	ENABLE_CMOS_SESNOR;
	DISABLE_VIEW_FINDER_MODE;

	exposure_window.image_target_width=isp_capture_mem_data.target_width;
	exposure_window.image_target_height=isp_capture_mem_data.target_height;
	exposure_window.digital_zoom_factor=isp_digital_zoom_factor;
	
	sensor_config_data.enable_shutter_tansfer=KAL_FALSE;
	sensor_config_data.meta_mode=KAL_FALSE;
	sensor_config_data.enable_flashlight_tansfer=KAL_FALSE;

	image_sensor_func->sensor_capture_setting(&exposure_window,&sensor_config_data);	

	/* accoring the zoom factor to calculate the grab window area */
	isp_grab_width= ((exposure_window.exposure_window_width * ISP_MIN_DIGITAL_ZOOM_FACTOR) / isp_digital_zoom_factor)&0xFFFC ;
	isp_grab_height=((exposure_window.exposure_window_height * ISP_MIN_DIGITAL_ZOOM_FACTOR) / isp_digital_zoom_factor)&0xFFFC ;
	isp_grab_start_x=exposure_window.grab_start_x+ (((exposure_window.exposure_window_width-isp_grab_width)>>1)&0xFFFC);
	isp_grab_start_y=exposure_window.grab_start_y+ (((exposure_window.exposure_window_height-isp_grab_height)>>1)&0xFFFE);

	if ((isp_capture_mem_data.target_width * exposure_window.exposure_window_height) >=
		 (isp_capture_mem_data.target_height * exposure_window.exposure_window_width))
	{	/* x limit */
		temp_grab_size=isp_grab_height;
		isp_grab_height=(isp_grab_width * isp_capture_mem_data.target_height/isp_capture_mem_data.target_width)&0xFFFE;
		isp_grab_start_y+=(((temp_grab_size-isp_grab_height)>>1)&0xFFFE);
	}
	else
	{	/* y limit */
		temp_grab_size=isp_grab_width;
		isp_grab_width=(isp_grab_height * isp_capture_mem_data.target_width/isp_capture_mem_data.target_height)&0xFFFE;
		isp_grab_start_x+=(((temp_grab_size-isp_grab_width)>>1)&0xFFFC);
	}

	SET_YUV_TG_GRAB_PIXEL(isp_grab_start_x,isp_grab_width);
	SET_YUV_TG_GRAB_LINE(isp_grab_start_y,isp_grab_height);
	isp_capture_mem_data.source_width=isp_grab_width;
	isp_capture_mem_data.source_height=isp_grab_height;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
	ipp_capture_mem_data.image_src_width	=	isp_capture_mem_data.source_width;
	ipp_capture_mem_data.image_src_height	=	isp_capture_mem_data.source_height;
#endif
	DISABLE_VERTICAL_SUB_SAMPLE;
	DISABLE_HORIZONTAL_SUB_SAMPLE;

	kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
	ENABLE_CAMERA_IDLE_INT;
	SET_CAMERA_CAPTURE_MODE;
	SET_CAMERA_FRAME_RATE(0);
	for(i=0;i<camera_oper_data.capture_delay_frame;i++)
	{
	   DISABLE_VIEW_FINDER_MODE;
	   kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
		ENABLE_VIEW_FINDER_MODE;
	
	   kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_IDLE_EVENT,KAL_OR_CONSUME,
	                          &event_group,KAL_SUSPEND);
	}
	DISABLE_VIEW_FINDER_MODE;
	DISABLE_CAMERA_IDLE_INT;

#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	intmem_init((kal_uint32 *) isp_capture_mem_data.intmem_start_address,
					isp_capture_mem_data.intmem_size);
	extmem_init((kal_uint32 *) isp_capture_mem_data.extmem_start_address,
					isp_capture_mem_data.extmem_size);
#endif

	lcd_data.fb_update_mode			=	LCD_HW_TRIGGER_MODE;
	lcd_data.block_mode				=	isp_capture_mem_data.block_mode;
	lcd_data.dest_block_width		=	isp_capture_mem_data.dest_block_width;
	lcd_data.dest_buffer_address	=	isp_capture_mem_data.dest_buffer_address;
	lcd_data.dest_buffer_size		=	isp_capture_mem_data.dest_buffer_size;
	lcd_data.roi_offset_x			=	isp_capture_mem_data.roi_offset_x;
	lcd_data.roi_offset_y			=	isp_capture_mem_data.roi_offset_y;
	lcd_data.roi_width				=	isp_capture_mem_data.roi_width;
	lcd_data.roi_height				=	isp_capture_mem_data.roi_height;
	lcd_data.update_layer			=	isp_capture_mem_data.update_layer;
	lcd_data.hw_update_layer		=	isp_capture_mem_data.hw_update_layer;
	lcd_data.roi_background_color	=	isp_capture_mem_data.roi_background_color;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
	lcd_data.hw_trigger_src			=	LCD_HW_TRIGGER_IBW2;
	lcd_data.memory_data_format	=	isp_capture_mem_data.memory_data_format;
#endif

	lcd_fb_update_to_memory(&lcd_data);

#if (defined(EXIF_SUPPORT))	
   /* config exif header */
   exif_cam_para_ptr=exif_get_cam_para_struct();
   exif_MTK_para_ptr=exif_get_MTK_para_struct();	
   exif_update_cam_para_struct(exif_cam_para_ptr);
#endif
	
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	config_image_dma(scene_id,isp_capture_mem_data.target_width,isp_capture_mem_data.target_height);
	config_image_processor(scene_id);
	config_pixel_resizer(scene_id);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	open_image_data_path(scene_id);
	config_camera_capture_mem_data_path(scene_id,&ipp_capture_mem_data);
#endif

	isp_operation_state=ISP_CAPTURE_MEM_STATE;

	camera_image_setting(CAM_PARAM_EFFECT,isp_preview_config_data.image_effect);
	if(isp_preview_config_data.image_effect==0)
	{
		camera_image_setting(CAM_PARAM_CONTRAST,isp_preview_config_data.contrast_level);
		camera_image_setting(CAM_PARAM_BRIGHTNESS,isp_preview_config_data.brightness_level);
		camera_image_setting(CAM_PARAM_HUE,isp_preview_config_data.hue_value);
		camera_image_setting(CAM_PARAM_SATURATION,isp_preview_config_data.saturation_value);
	}
	camera_image_setting(CAM_PARAM_WB,isp_preview_config_data.wb_mode);
	camera_image_setting(CAM_PARAM_EXPOSURE,isp_preview_config_data.ev_value);
	camera_image_setting(CAM_PARAM_BANDING,isp_preview_config_data.banding_freq);
	camera_image_setting(CAM_PARAM_NIGHT_MODE,isp_preview_config_data.night_mode);
	
	ENABLE_VIEW_FINDER_MODE;

   kal_retrieve_eg_events(lcd_event_id,LCD_TRANSFER_COMPLETE_EVENT,KAL_OR_CONSUME,
                          &event_group,KAL_SUSPEND);

	kal_sleep_task(15);
	DISABLE_CMOS_SESNOR;
	DISABLE_VIEW_FINDER_MODE;
	lcd_stop_hw_update(current_update_lcd);
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	RESZ_Stop(scene_id);
	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);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	close_image_data_path(scene_id);
#endif

	isp_operation_state=ISP_STANDBY_STATE;

#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	intmem_deinit();
	extmem_deinit();
#endif

#endif
	return KAL_TRUE;
}	/* camera_yuv_capture_mem_process() */

/*************************************************************************
* FUNCTION
*	mpeg4_encode_yuv_process
*
* DESCRIPTION
*	This function starts mpeg4 encode process
*
* PARAMETERS
*	mpeg4_data : the parameters for mpeg4 encode
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
#if (defined(MP4_CODEC))
extern void video_enc_dma_lisr(void);
#endif
kal_uint8 mpeg4_encode_yuv_process(void)
{
#if (defined(YUV_SENSOR_SUPPORT))
	kal_uint16 temp_grab_size;
	MMDI_SCENERIO_ID scene_id=SCENARIO_MPEG_ENCODE_ID;
	lcd_frame_update_struct lcd_data;
	kal_uint32 video_buffer_size;
	volatile kal_uint8 i;
	
	isp_enter_exit_process_flag=KAL_FALSE;
	
	DISABLE_AE_COUNT;
	ae_on_off(KAL_FALSE);
	awb_on_off(KAL_FALSE);
	DISABLE_CAMERA_IDLE_INT;
	ENABLE_CMOS_SESNOR;

	sensor_config_data.image_mirror=mpeg4_encode_data.image_mirror;
	sensor_config_data.frame_rate=mpeg4_encode_data.frame_rate;
	exposure_window.image_target_width	= mpeg4_encode_data.mpeg4_image_width;
	exposure_window.image_target_height	= mpeg4_encode_data.mpeg4_image_height;
	image_sensor_func->sensor_preview_setting(&exposure_window,&sensor_config_data);
	
	/* accorind the zoom factor to calculate the grab window area */
	isp_digital_zoom_factor=isp_preview_config_data.zoom_factor;
	isp_grab_width= ((exposure_window.exposure_window_width * ISP_MIN_DIGITAL_ZOOM_FACTOR) / isp_digital_zoom_factor)&0xFFFC ;
	isp_grab_height=((exposure_window.exposure_window_height * ISP_MIN_DIGITAL_ZOOM_FACTOR) / isp_digital_zoom_factor)&0xFFFC ;

	/* start x should align 4X */
	isp_grab_start_x=exposure_window.grab_start_x+ (((exposure_window.exposure_window_width-isp_grab_width)>>1)&0xFFFC);
	isp_grab_start_y=exposure_window.grab_start_y+ (((exposure_window.exposure_window_height-isp_grab_height)>>1)&0xFFFE);

	if ((mpeg4_encode_data.mpeg4_image_width * exposure_window.exposure_window_height) >=
		 (mpeg4_encode_data.mpeg4_image_height * exposure_window.exposure_window_width))
	{	/* x limit */
		temp_grab_size=isp_grab_height;
		isp_grab_height=(isp_grab_width * mpeg4_encode_data.mpeg4_image_height/
							 mpeg4_encode_data.mpeg4_image_width)&0xFFFE;
		isp_grab_start_y+=(((temp_grab_size-isp_grab_height)>>1)&0xFFFE);
	}
	else
	{	/* y limit */
		temp_grab_size=isp_grab_width;
		isp_grab_width=(isp_grab_height * mpeg4_encode_data.mpeg4_image_width/
							mpeg4_encode_data.mpeg4_image_height)&0xFFFE;
		isp_grab_start_x+=(((temp_grab_size-isp_grab_width)>>1)&0xFFFC);
	}
	SET_YUV_TG_GRAB_PIXEL(isp_grab_start_x,isp_grab_width);
	SET_YUV_TG_GRAB_LINE(isp_grab_start_y,isp_grab_height);

	/* Disable ISP Down Sample */
	DISABLE_VERTICAL_SUB_SAMPLE;
	DISABLE_HORIZONTAL_SUB_SAMPLE;	
	SET_HSUB_SRC_SIZE(isp_grab_width);	
	SET_VSUB_SRC_SIZE(isp_grab_height);
	SET_HSUB_DST_SIZE(isp_grab_width);				  
	SET_VSUB_DST_SIZE(isp_grab_height);
	mpeg4_encode_data.image_source_width=isp_grab_width;
	mpeg4_encode_data.image_source_height=isp_grab_height;	
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
	ipp_video_encode_data.image_src_width	=	mpeg4_encode_data.image_source_width;
	ipp_video_encode_data.image_src_height	=	mpeg4_encode_data.image_source_height;
#endif
	
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	intmem_init((kal_uint32 *) mpeg4_encode_data.intmem_start_address,
					mpeg4_encode_data.intmem_size);
	extmem_init((kal_uint32 *) mpeg4_encode_data.extmem_start_address,
					mpeg4_encode_data.extmem_size);
#endif

	lcd_data.module_id=LCD_UPDATE_MODULE_MEDIA;
	lcd_data.lcd_id= mpeg4_encode_data.lcd_id;

#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
	if (get_lcd_hw_layer_rotate_value(mpeg4_encode_data.hw_update_layer)==LCD_LAYER_ROTATE_NORMAL)
		lcd_data.fb_update_mode=LCD_DIRECT_COUPLE_MODE;
	else
	   lcd_data.fb_update_mode=LCD_HW_TRIGGER_MODE;
#else
	lcd_data.fb_update_mode=LCD_HW_TRIGGER_MODE;
#endif

	lcd_data.lcm_start_x				=	mpeg4_encode_data.lcm_start_x;
	lcd_data.lcm_start_y				=	mpeg4_encode_data.lcm_start_y;
	lcd_data.lcm_end_x				=	mpeg4_encode_data.lcm_end_x;
	lcd_data.lcm_end_y				=	mpeg4_encode_data.lcm_end_y;
	lcd_data.roi_offset_x			=	mpeg4_encode_data.roi_offset_x;
	lcd_data.roi_offset_y			=	mpeg4_encode_data.roi_offset_y;
	lcd_data.update_layer			=	mpeg4_encode_data.update_layer;
	lcd_data.hw_update_layer		=	mpeg4_encode_data.hw_update_layer;
	lcd_data.roi_background_color	=	mpeg4_encode_data.roi_background_color;	      
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
	lcd_data.hw_trigger_src 		= 	LCD_HW_TRIGGER_IBW2;	            
	lcd_data.memory_output			=	KAL_FALSE;
	lcd_data.block_mode_flag		=	KAL_TRUE;
	lcd_data.lcd_block_mode_cb		=	NULL;

	if ((mpeg4_encode_data.tv_output==KAL_TRUE)&&(tv_output_config_data.tv_output_mode==TV_OUTPUT_MODE1))
	{
		lcd_data.tv_output								=	KAL_TRUE;
		lcd_data.tv_output_width						=	mpeg4_encode_data.tv_output_width;
		lcd_data.tv_output_height						=	mpeg4_encode_data.tv_output_height;
		lcd_data.tv_output_offset_x					=	mpeg4_encode_data.tv_output_offset_x;
		lcd_data.tv_output_offset_y					=	mpeg4_encode_data.tv_output_offset_y;
		lcd_data.tv_output_frame_buffer1_address	=	mpeg4_encode_data.tv_output_buffer1_address;
		lcd_data.tv_output_frame_buffer2_address	=	mpeg4_encode_data.tv_output_buffer2_address;
		lcd_data.tv_output_frame_buffer_size		=	mpeg4_encode_data.tv_output_buffer_size;

		ipp_video_encode_data.tv_output=KAL_FALSE;
	}
	else
	{
		lcd_data.tv_output=KAL_FALSE;
	}
#endif

	isp_operation_state=ISP_MPEG4_ENCODE_STATE;

	SET_CAMERA_PREVIEW_MODE;
	SET_CAMERA_FRAME_RATE(0);
	ENABLE_VIEW_FINDER_MODE;
	

	ENABLE_CAMERA_IDLE_INT;

⌨️ 快捷键说明

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