📄 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
*
* 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 + -