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

📄 isp_yuv_if.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *   isp_device_if.c
 *
 * Project:
 * --------
 *   MT6226,MT6227,MT6228,MT6229
 *
 * Description:
 * ------------
 *   These are interface with ISP for YUV sensor
 *
 * Author:
 * -------
 *
 *   Jeff Yang (mtk00747)
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/

#include "drv_comm.h"
#include "stdio.h"
#include "string.h"
#include "IntrCtrl.h"
#include "gpio_sw.h"
#include "jpeg.h"
#include "exif.h"
#include "lcd_if.h"
#include "lcd_sw.h"
#include "lcd_sw_inc.h"
#include "visualhisr.h"
#include "visual_comm.h"
#include "img_comm.h"
#if (defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
#include "sccb.h"
#include "isp_if.h"
#include "med_api.h"
#include "image_effect.h"
#if (defined(ISP_SUPPORT))
#include "image_sensor.h"
#include "camera_para.h"
#endif
#include "ae_awb.h"
#include "af.h"
#include "imgproc.h"
#include "resizer.h"
#if (defined(YUV_SENSOR_SUPPORT))
#include "isp_yuv_if.h"
#endif

#include "med_status.h"
#include "fsal.h"
#include "mp4_parser.h"
#include "l1audio.h"
#include "rtc_sw.h"
#include "video_file_creator.h"
#include "bmd.h"
#include "video_enc_glb.h"
#include "video_dec_glb.h"
#include "video_glb.h"
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
#include "tv_out.h"
#endif

#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
extern camera_preview_data_path_struct			ipp_preview_data;
extern camera_capture_jpeg_data_path_struct 	ipp_capture_jpeg_data;
extern camera_capture_mem_data_path_struct   ipp_capture_mem_data;
extern video_encode_data_path_struct			ipp_video_encode_data;
#endif
extern kal_eventgrpid camera_isp_event_id;
extern kal_eventgrpid lcd_event_id;
extern kal_bool wait_first_frame_flag;
extern kal_uint8 isp_preview_frame;
#if (defined(AF_SUPPORT))
extern kal_uint8 yuv_af_check_count;
#endif

/*************************************************************************
* FUNCTION
*	camera_yuv_preview_process
*
* DESCRIPTION
*	This function starts camera preview
*
* PARAMETERS
*	isp_data : the parameters for camera preview process
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint8 camera_yuv_preview_process(void)
{
#if (defined(YUV_SENSOR_SUPPORT))
	volatile kal_uint32 *resizer_buf_ptr;
	kal_uint16 temp_grab_size;
	lcd_frame_update_struct lcd_data;
	MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_PREVIEW_ID;
	kal_uint32 event_group;
	kal_uint8 i;
	
	if (sensor_err_check<0)
		return KAL_FALSE;
		
	if (isp_operation_state!=ISP_STANDBY_STATE)
		ASSERT(0);
		
#if (defined(AF_SUPPORT))
	if(isp_preview_config_data.continue_capture==0)
		camera_operation_setting(CAM_AF_KEY, CAM_AF_RELEASE);
#endif

	DISABLE_AE_COUNT;
	ae_on_off(KAL_FALSE);
	awb_on_off(KAL_FALSE);

	DISABLE_CAMERA_IDLE_INT;
	ENABLE_CMOS_SESNOR;
	DISABLE_VIEW_FINDER_MODE;

	sensor_config_data.image_mirror		= isp_preview_config_data.image_mirror;
	sensor_config_data.frame_rate			= isp_preview_config_data.frame_rate;
	exposure_window.image_target_width	= isp_preview_config_data.target_width;
	exposure_window.image_target_height	= isp_preview_config_data.target_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 ((isp_preview_config_data.target_width * exposure_window.exposure_window_height) >=
		 (isp_preview_config_data.target_height * exposure_window.exposure_window_width))
	{	/* x limit */
		temp_grab_size=isp_grab_height;
		isp_grab_height=(isp_grab_width * isp_preview_config_data.target_height/isp_preview_config_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_preview_config_data.target_width/isp_preview_config_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);

	/* 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);
	isp_preview_config_data.source_width=isp_grab_width;
	isp_preview_config_data.source_height=isp_grab_height;	

#if (defined(MT6228)||defined(MT6229)||defined(MT6230))	
	ipp_preview_data.image_src_width		= isp_preview_config_data.source_width;
	ipp_preview_data.image_src_height	= isp_preview_config_data.source_height;
#endif	
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	intmem_init((kal_uint32 *) isp_preview_config_data.intmem_start_address,
					isp_preview_config_data.intmem_size);
	extmem_init((kal_uint32 *) isp_preview_config_data.extmem_start_address,
					isp_preview_config_data.extmem_size);
#endif

	lcd_data.module_id=LCD_UPDATE_MODULE_MEDIA;
	lcd_data.lcd_id=isp_preview_config_data.lcd_id;
	lcd_data.fb_update_mode=LCD_HW_TRIGGER_MODE;
	lcd_data.lcm_start_x=isp_preview_config_data.lcm_start_x;
	lcd_data.lcm_start_y=isp_preview_config_data.lcm_start_y;
	lcd_data.lcm_end_x=isp_preview_config_data.lcm_end_x;
	lcd_data.lcm_end_y=isp_preview_config_data.lcm_end_y;
	lcd_data.roi_offset_x=isp_preview_config_data.roi_offset_x;
	lcd_data.roi_offset_y=isp_preview_config_data.roi_offset_y;
	lcd_data.update_layer=isp_preview_config_data.update_layer;
	lcd_data.hw_update_layer=isp_preview_config_data.hw_update_layer;
	lcd_data.block_mode_flag=KAL_TRUE;
	lcd_data.lcd_block_mode_cb=NULL;
#if (!defined(MT6219))	
	lcd_data.roi_background_color=isp_preview_config_data.roi_background_color;
#endif

#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))	
	lcd_data.memory_output=KAL_FALSE;
#endif

#if (defined(MT6228)||defined(MT6229)||defined(MT6230))	
	/* Prepare LCD Data */
	lcd_data.hw_trigger_src = LCD_HW_TRIGGER_IBW2;
	lcd_data.memory_output=KAL_FALSE;

	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

#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	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(MT6228)||defined(MT6229)||defined(MT6230))
	open_image_data_path(scene_id);
	config_camera_preview_data_path(scene_id,&ipp_preview_data);
#endif

#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	resizer_buf_ptr=(kal_uint32 *) (*((volatile unsigned int *)0x8061005C));		/* resizer working memory */
	*resizer_buf_ptr=0x55AAAA55;
#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);

⌨️ 快捷键说明

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