📄 isp_yuv_if.c
字号:
isp_idle_done_flag=KAL_FALSE;
DISABLE_VIEW_FINDER_MODE;
i=0;
kal_sleep_task(25);
while(isp_idle_done_flag==KAL_FALSE)
{
i++;
kal_sleep_task(10);
if(i>5) break;
}
DISABLE_CAMERA_IDLE_INT;
lcd_fb_update(&lcd_data);
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
video_buffer_size=mpeg4_encode_data.mpeg4_image_width * mpeg4_encode_data.mpeg4_image_height * 3;
video_buffer_size>>=1;
mpeg4_encode_data.video_buffer1_address=(kal_uint32) intmem_get_buffer(video_buffer_size);
mpeg4_encode_data.video_buffer2_address=(kal_uint32) intmem_get_buffer(video_buffer_size);
config_image_dma(scene_id,mpeg4_encode_data.image_target_width,mpeg4_encode_data.image_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_video_encode_data_path(scene_id,&ipp_video_encode_data);
#endif
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_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);
ENABLE_VIEW_FINDER_MODE;
#endif
return KAL_TRUE;
} /* mpeg4_encode_yuv_process */
/*************************************************************************
* FUNCTION
* isp_yuv_digital_zoom
*
* DESCRIPTION
* This function is for setting the digital zoom factor
*
* PARAMETERS
* zoom_factor : ISP digital zoom factor
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void isp_yuv_digital_zoom(kal_uint8 zoom_factor)
{
#if (defined(YUV_SENSOR_SUPPORT))
kal_uint16 temp_grab_size;
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_operation_state==ISP_PREVIEW_STATE)
{
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);
}
}
else if (isp_operation_state==ISP_MPEG4_ENCODE_STATE)
{
if ((mpeg4_encode_data.mpeg4_image_width * exposure_window.exposure_window_height) >=
(mpeg4_encode_data.mpeg4_image_height * exposure_window.exposure_window_width))
{ /* x limit */
temp_grab_size=isp_grab_height;
isp_grab_height=(isp_grab_width * mpeg4_encode_data.mpeg4_image_height/
mpeg4_encode_data.mpeg4_image_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 * mpeg4_encode_data.mpeg4_image_width/
mpeg4_encode_data.mpeg4_image_height)&0xFFFE;
isp_grab_start_x+=(((temp_grab_size-isp_grab_width)>>1)&0xFFFC);
}
}
#if(defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
/* 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;
mpeg4_encode_data.image_source_width=isp_grab_width;
mpeg4_encode_data.image_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;
ipp_video_encode_data.image_src_width=mpeg4_encode_data.image_source_width;
ipp_video_encode_data.image_src_height=mpeg4_encode_data.image_source_height;
#endif
#endif
#endif /* YUV_SENSOR_SUPPORT */
}
/*************************************************************************
* FUNCTION
* camera_yuv_image_setting
*
* DESCRIPTION
* This function set yuv sensor image parameter
*
* PARAMETERS
* type_sel: image type
* para : parameter
*
* RETURNS
* TRUE or FALSE
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint8 camera_yuv_image_setting(kal_uint8 type_sel, kal_uint16 para)
{
#if (defined(YUV_SENSOR_SUPPORT))
switch (type_sel)
{
case CAM_PARAM_ZOOM_FACTOR:
isp_digital_zoom(para);
break;
case CAM_PARAM_CONTRAST:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_CONTRAST,para);
break;
case CAM_PARAM_BRIGHTNESS:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_BRIGHTNESS,para);
break;
case CAM_PARAM_HUE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_HUE,para);
break;
case CAM_PARAM_WB:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_WB,para);
break;
case CAM_PARAM_EXPOSURE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_EXPOSURE,para);
break;
case CAM_PARAM_EFFECT:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_EFFECT,para);
break;
case CAM_PARAM_BANDING:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_BANDING,para);
break;
case CAM_PARAM_SATURATION:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_SATURATION,para);
break;
case CAM_PARAM_NIGHT_MODE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_NIGHT_MODE,para);
break;
}
#endif
return KAL_TRUE;
}
/*************************************************************************
* FUNCTION
* background_yuv_image_setting
*
* DESCRIPTION
* This function set yuv sensor image parameter
*
* PARAMETERS
* NONE
*
* RETURNS
* TRUE or FALSE
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint8 background_yuv_image_setting(void)
{
#if (defined(YUV_SENSOR_SUPPORT))
kal_uint8 i;
for (i=0;i<CAM_NO_OF_PARAM;i++)
{
if (image_setting_index & (1<<i))
{
switch (i)
{
case CAM_PARAM_EFFECT:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_EFFECT,isp_preview_config_data.image_effect);
break;
case CAM_PARAM_CONTRAST:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_CONTRAST,isp_preview_config_data.contrast_level);
break;
case CAM_PARAM_BRIGHTNESS:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_BRIGHTNESS,isp_preview_config_data.brightness_level);
break;
case CAM_PARAM_HUE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_HUE,isp_preview_config_data.hue_value);
break;
case CAM_PARAM_WB:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_WB,isp_preview_config_data.wb_mode);
break;
case CAM_PARAM_EXPOSURE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_EXPOSURE,isp_preview_config_data.ev_value);
break;
case CAM_PARAM_BANDING:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_BANDING,isp_preview_config_data.banding_freq);
break;
case CAM_PARAM_SATURATION:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_SATURATION,isp_preview_config_data.saturation_value);
break;
case CAM_PARAM_NIGHT_MODE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_NIGHT_MODE,isp_preview_config_data.night_mode);
break;
}
image_setting_index &=~(1<<i);
}
}
#endif
return KAL_TRUE;
}
/*************************************************************************
* FUNCTION
* camera_yuv_operation_setting
*
* DESCRIPTION
* This function set yuv sensor AE/AF/Flash parameter
*
* PARAMETERS
* NONE
*
* RETURNS
* TRUE or FALSE
*
* GLOBALS AFFECTED
*
*************************************************************************/
void camera_yuv_operation_setting(kal_uint8 func_sel, kal_uint16 para)
{
#if (defined(YUV_SENSOR_SUPPORT))
switch(func_sel)
{
case CAM_DSC_MODE:
dsc_status.dscmode=para;
if(dsc_status.dscmode==CAM_NIGHTSCENE)
camera_image_setting(CAM_PARAM_NIGHT_MODE,1);
else
camera_image_setting(CAM_PARAM_NIGHT_MODE,0);
#if (defined(AF_SUPPORT))
if(dsc_status.dscmode==CAM_FLOWER)
{
dsc_status.af.mode=CAM_AF_MACRO_MODE;
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AF_MODE,CAM_AF_MACRO_MODE);
}
else if(dsc_status.dscmode==CAM_LANDSCAPE)
{
dsc_status.af.mode=CAM_AF_INFINITE_MODE;
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AF_MODE,CAM_AF_INFINITE_MODE);
}
else
{
dsc_status.af.mode=CAM_AF_AUTO_MODE;
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AF_MODE,CAM_AF_AUTO_MODE);
}
#endif
break;
case CAM_AE_METERING:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AE_METERING,para);
break;
#if (defined(AF_SUPPORT))
case CAM_AF_KEY:
if(para==CAM_AF_RELEASE)
af_operation_state=AF_STANDBY_STATE;
else
{
af_operation_state=AF_SEARCH_STATE;
yuv_af_check_count=0;
}
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AF_KEY,para);
break;
case CAM_AF_METERING:
dsc_status.af.metering=para;
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AF_METERING,para);
break;
case CAM_AF_MODE:
if(isp_preview_config_data.dsc_mode==CAM_FLOWER)//scenario modified
dsc_status.af.mode=CAM_AF_MACRO_MODE;
else
dsc_status.af.mode=para;
image_sensor_func->yuv_sensor_setting(CAM_PARAM_AF_MODE,para);
break;
case CAM_MANUAL_FOCUS_DIR:
dsc_status.af.mfdir=para;
image_sensor_func->yuv_sensor_setting(CAM_PARAM_MANUAL_FOCUS_DIR,para);
break;
#endif
case CAM_FLASH_MODE:
image_sensor_func->yuv_sensor_setting(CAM_PARAM_FLASH,para);
break;
}
#endif
}
#endif /* ! MT6219 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -