📄 isp_yuv_if.c
字号:
/*****************************************************************************
* 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 + -