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

📄 isp_yuv_if.c

📁 MTK6225 支持的200W像素的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
*  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,MT6230
 *
 * 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!
 *
 *
 * 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 "kal_release.h"
#include "drv_features.h"

#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 "visualhisr.h"
#include "visual_comm.h"
#include "img_comm.h"
#if (defined(DRV_ISP_6228_SERIES)||defined(DRV_ISP_6227_SERIES)||defined(DRV_ISP_6225_SERIES)||defined(DRV_ISP_6229_SERIES))
#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 "rtc_sw.h"
#include "bmd.h"

#if defined(OV2640)
#include "med_global.h"
#include "med_utility.h"
#endif

#if (defined(DRV_ISP_6228_SERIES)||defined(DRV_ISP_6229_SERIES))
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_bool wait_first_frame_flag;
extern kal_uint8 isp_preview_frame;
#if (defined(AF_SUPPORT))
extern kal_uint8 yuv_af_check_count;
#endif
#if (defined(DRV_ISP_6225_SERIES)&&defined(YUV_SENSOR_SUPPORT))
	jpeg_encode_process_struct sw_jpeg_encode_config_data;
#endif

#if defined(OV2640)
extern kal_uint8 jpeg_capture_flag;
#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))
	kal_uint16 temp_grab_size;
	lcd_frame_update_struct lcd_data;
	MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_PREVIEW_ID;
	kal_uint32 event_group;

	if (sensor_err_check<0)
		return KAL_FALSE;

	if (isp_operation_state!=ISP_STANDBY_STATE)
		ASSERT(0);
		
	memset(&lcd_data, 0, sizeof(lcd_frame_update_struct));	//initial lcd_data
	
#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;
	DISABLE_CAMERA_IDLE_INT;
	ENABLE_CMOS_SESNOR;
	DISABLE_VIEW_FINDER_MODE;

	sensor_config_data.isp_op_mode=ISP_PREVIEW_MODE;
	sensor_config_data.image_mirror		= isp_preview_config_data.image_mirror;
	sensor_config_data.frame_rate			= isp_preview_config_data.frame_rate;
/* Jackie_Jiang_win2008xp 0303 add */
#if defined(ANALOG_TV_SUPPORT)
	exposure_window.image_target_width	= isp_preview_config_data.target_height;	//target_width;		yah
	exposure_window.image_target_height	= isp_preview_config_data.target_width;	//target_height;
#else
	exposure_window.image_target_width	= isp_preview_config_data.target_width;
	exposure_window.image_target_height	= isp_preview_config_data.target_height;
#endif

	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(DRV_ISP_6228_SERIES)||defined(DRV_ISP_6229_SERIES))
	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(DRV_ISP_6227_SERIES)||defined(DRV_ISP_6225_SERIES))
	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(DRV_ISP_6219_SERIES))
	lcd_data.roi_background_color=isp_preview_config_data.roi_background_color;
#endif

#if (defined(DRV_ISP_6227_SERIES)||defined(DRV_ISP_6225_SERIES))
	lcd_data.memory_output=KAL_FALSE;
#endif

#if (defined(DRV_ISP_6228_SERIES)||defined(DRV_ISP_6229_SERIES))
	/* Prepare LCD Data */
	lcd_data.hw_trigger_src = LCD_HW_TRIGGER_IBW2;

⌨️ 快捷键说明

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