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

📄 isp_yuv_if.c

📁 MTK6225 支持的200W像素的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	lcd_data.memory_output=KAL_FALSE;

#if (defined(TV_OUT_SUPPORT))
	if ((isp_preview_config_data.tv_output==KAL_TRUE)&&
		 ((tv_output_config_data.tv_output_mode==TV_OUTPUT_MODE1)||
		  (tv_output_config_data.tv_output_mode==TV_OUTPUT_MODE4)))
	{
		lcd_data.tv_output=KAL_TRUE;
		lcd_data.tv_output_width=isp_preview_config_data.tv_output_width;
		lcd_data.tv_output_height=isp_preview_config_data.tv_output_height;
		lcd_data.tv_output_offset_x=isp_preview_config_data.tv_output_offset_x;
		lcd_data.tv_output_offset_y=isp_preview_config_data.tv_output_offset_y;
		lcd_data.tv_output_frame_buffer1_address=isp_preview_config_data.tv_output_buffer1_address;
		lcd_data.tv_output_frame_buffer2_address=isp_preview_config_data.tv_output_buffer2_address;
		lcd_data.tv_output_frame_buffer_size=isp_preview_config_data.tv_output_buffer_size;

		ipp_preview_data.tv_output=KAL_FALSE;
	}
	else
	{
		lcd_data.tv_output=KAL_FALSE;
	}
#endif	/* TV_OUT_SUPPORT */
#endif

#if (defined(DRV_ISP_6227_SERIES))
	config_image_dma(scene_id,isp_preview_config_data.target_width,isp_preview_config_data.target_height);
	config_image_processor(scene_id);
	config_pixel_resizer(scene_id);
#elif (defined(DRV_ISP_6228_SERIES)||defined(DRV_ISP_6229_SERIES))
	open_image_data_path(scene_id);
	config_camera_preview_data_path(scene_id,&ipp_preview_data);
#elif (defined(DRV_ISP_6225_SERIES))

	config_pixel_resizer(scene_id);
#endif

	isp_operation_state=ISP_PREVIEW_STATE;

	/* camera operation setting */
	if(isp_preview_config_data.continue_capture==0)
	{
		camera_yuv_operation_setting(CAM_DSC_MODE,isp_preview_config_data.dsc_mode);
		camera_yuv_operation_setting(CAM_AE_METERING,isp_preview_config_data.ae_metering_mode);
		camera_yuv_operation_setting(CAM_AF_MODE,isp_preview_config_data.af_mode);
		camera_yuv_operation_setting(CAM_AF_METERING,isp_preview_config_data.af_metering_mode);
		camera_yuv_operation_setting(CAM_FLASH_MODE,isp_preview_config_data.flash_mode);
	}

	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);

	// Wait first frame for preview stable
	wait_first_frame_flag = KAL_TRUE;
	isp_preview_frame = 0;

	kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
	SET_CAMERA_PREVIEW_MODE;
	SET_CAMERA_FRAME_RATE(0);
	ENABLE_VIEW_FINDER_MODE;

  	kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR_CONSUME,
    	                    &event_group,KAL_SUSPEND);

	if(isp_preview_config_data.lcd_update==KAL_TRUE)
		lcd_fb_update(&lcd_data);
#endif
	return KAL_TRUE;
}	/* camera_yuv_preview_process() */

#if defined(OV2640)
kal_uint32 camera_yuv_capture_jpeg_process_320240(void)
{
	kal_uint32 jpeg_file_size = 1;    
#if (defined(YUV_SENSOR_SUPPORT))
	volatile kal_uint8 i;
	kal_uint8 capture_retry_flag=0;
	kal_uint16 temp_grab_size;
	MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_CAPTURE_JPEG_ID;
	kal_uint32 event_group;

	kal_uint32 img_width ,img_height, temp;
	kal_uint32 image_width ,image_height,channel_size;

   	memset( (kal_uint8 *)(isp_capture_jpeg_data.target_buffer_start_address) , 0, MAX_CAM_FILE_BUFFER_LEN_JPEG);

	
	ENABLE_CMOS_SESNOR;
	DISABLE_VIEW_FINDER_MODE;
	DISABLE_CAMERA_IDLE_INT;


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

	/* accoring the zoom factor to calculate the grab window area */
	exposure_window.image_target_width=  320; //isp_capture_jpeg_data.target_width;
	exposure_window.image_target_height= 240; //isp_capture_jpeg_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;


	temp = jpeg_capture_flag;
	jpeg_capture_flag = 0;
	
	image_sensor_func->sensor_capture_setting(&exposure_window,&sensor_config_data);
	jpeg_capture_flag = temp;


	/* 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_jpeg_data.target_width * exposure_window.exposure_window_height) >=
		 (isp_capture_jpeg_data.target_height * exposure_window.exposure_window_width))
	{	/* x limit */
		temp_grab_size=isp_grab_height;
		isp_grab_height=(isp_grab_width * isp_capture_jpeg_data.target_height/isp_capture_jpeg_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_jpeg_data.target_width/isp_capture_jpeg_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_jpeg_data.source_width=isp_grab_width;
	isp_capture_jpeg_data.source_height=isp_grab_height;


	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;


	sw_jpeg_encode_config_data.image_width= 320; //isp_capture_jpeg_data.target_width;
	sw_jpeg_encode_config_data.image_height=240;  //isp_capture_jpeg_data.target_height;
	sw_jpeg_encode_config_data.image_quality=isp_capture_jpeg_data.image_quality;
	sw_jpeg_encode_config_data.jpeg_file_start_address = isp_capture_jpeg_data.target_buffer_start_address + 
                                                                    MAX_CAM_FILE_BUFFER_LEN_JPEG-MAX_BUFFER_LEN_JPEG_320240;
	sw_jpeg_encode_config_data.jpeg_file_buffer_size= MAX_BUFFER_LEN_JPEG_320240; //isp_capture_jpeg_data.target_buffer_size;
	sw_jpeg_encode_config_data.intmem_start_address=isp_capture_jpeg_data.intmem_start_address;	
	sw_jpeg_encode_config_data.intmem_size=isp_capture_jpeg_data.intmem_size;			

	sw_jpeg_encode_config_data.input_type=IMAGE_FORMAT_YUV420;
	if(isp_capture_jpeg_data.jpeg_gray_mode==0)
		sw_jpeg_encode_config_data.output_type=IMAGE_FORMAT_YUV420;
	else
		sw_jpeg_encode_config_data.output_type=IMAGE_FORMAT_GRAY;
	sw_jpeg_encode_config_data.jpeg_yuv_data[0]=(kal_uint8 *)isp_capture_jpeg_data.y_address;
	sw_jpeg_encode_config_data.jpeg_yuv_data[1]=(kal_uint8 *)isp_capture_jpeg_data.u_address;
	sw_jpeg_encode_config_data.jpeg_yuv_data[2]=(kal_uint8 *)isp_capture_jpeg_data.v_address;
	sw_jpeg_encode_config_data.jpeg_yuv_size[0]=isp_capture_jpeg_data.y_size;
	sw_jpeg_encode_config_data.jpeg_yuv_size[1]=isp_capture_jpeg_data.u_size;
	sw_jpeg_encode_config_data.jpeg_yuv_size[2]=isp_capture_jpeg_data.v_size;

	config_pixel_resizer(scene_id);
	isp_operation_state=ISP_CAPTURE_JPEG_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);

	SET_CAMERA_CAPTURE_MODE;
	SET_CAMERA_FRAME_RATE(0);
	ENABLE_VIEW_FINDER_MODE;

	
	while(RESZ_CheckBusy());

	intmem_deinit();
	extmem_deinit();

	jpeg_file_size=jpeg_encode_process(&sw_jpeg_encode_config_data);
	
	DISABLE_CMOS_SESNOR;
	DISABLE_VIEW_FINDER_MODE;

	RESZ_Stop(scene_id);
	RESZ_Close(scene_id);
	
	isp_operation_state=ISP_STANDBY_STATE;



#endif	/* (defined(YUV_SENSOR_SUPPORT)) */
	return jpeg_file_size;
}




extern kal_uint8 camera_capture_jpeg(camera_capture_cct_struct_jpeg *isp_cct_data);
kal_uint32 camera_yuv_capture_jpeg_process_jpeg(void)
{

	kal_uint32 jpeg_file_size = 0;

	kal_uint8 *p1=NULL;
	kal_uint8 *p2=NULL;

	camera_capture_cct_struct_jpeg isp_jpeg_data;

	kal_uint32 isp_capture_shutter;
	kal_uint16 isp_capture_pregain;


	volatile kal_uint8 i;
	kal_uint8 capture_retry_flag=0;
	kal_uint16 temp_grab_size;
	MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_CAPTURE_JPEG_ID;
	kal_uint32 event_group;

#if (defined(EXIF_SUPPORT))
	exif_cam_para_struct* exif_cam_para_ptr;
	exif_MTK_para_struct* exif_MTK_para_ptr;
#if (defined(DRV_ISP_6227_SERIES))
	kal_uint16	exif_header_length;
	kal_uint16	exif_padding_length=0;
#endif
#endif


#if (defined(DRV_ISP_6227_SERIES)||defined(DRV_ISP_6225_SERIES))
	intmem_init((kal_uint32 *) isp_capture_jpeg_data.intmem_start_address,
	isp_capture_jpeg_data.intmem_size);
	extmem_init((kal_uint32 *) isp_capture_jpeg_data.extmem_start_address,
	isp_capture_jpeg_data.extmem_size);
#endif

		if(jpeg_capture_flag == 2)	//1600*1200
		{
			/* accoring the zoom factor to calculate the grab window area */
			exposure_window.image_target_width= 1600; // isp_capture_jpeg_data.target_width;
			exposure_window.image_target_height=1200;		
		}
		else	
			if(jpeg_capture_flag == 1)	//1280*960
		{
			/* accoring the zoom factor to calculate the grab window area */
			exposure_window.image_target_width= 1280; // isp_capture_jpeg_data.target_width;
			exposure_window.image_target_height=960;		
		}




	
	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);

	isp_operation_state=ISP_STANDBY_STATE;


	isp_jpeg_data.grab_start_x = 0/*2*/;
	isp_jpeg_data.grab_start_y = 0/*2*/;

	isp_jpeg_data.grab_width = 1600/*1600 -2*/;
	isp_jpeg_data.grab_height = 1200/*1200 -2*/;


	isp_jpeg_data.debug_mode = 5; //CAPTRUE_MODE_EXT_RAW_8BIT;
	isp_jpeg_data.flash_mode = CAM_FLASH_OFF;

	isp_jpeg_data.sub_sample_mode = CAMERA_SUB_SAMPLE_1_1;

	isp_jpeg_data.isp_debug_buffer = isp_capture_jpeg_data.target_buffer_start_address;



#if (defined(DRV_ISP_6228_SERIES)||defined(DRV_ISP_6229_SERIES))
	lcd_frame_update_struct lcd_data;
	memset(&lcd_data, 0, sizeof(lcd_frame_update_struct));	//initial lcd_data
#endif

	//intmem_deinit();
	//extmem_deinit();
	camera_capture_jpeg(&isp_jpeg_data );
	p1=p2=(kal_uint8 *)(isp_jpeg_data.isp_debug_buffer );

       #if 0
       while(!((*(p1) == 0xff) && ( (*(p1+1)) == 0xd8)))
	{
		p1++;
	}

       p2=p1;
       #endif
       
	while(!((*(p2) == 0xff) && ( (*(p2+1)) == 0xd9)))
	{
		p2++;
	}
	jpeg_file_size = p2-p1+2;


	isp_operation_state=ISP_STANDBY_STATE;


	return jpeg_file_size;
}
#endif


/*************************************************************************

⌨️ 快捷键说明

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