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

📄 mmidc_preview.c

📁 手机Camera部分上层软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
//  Author: bruce.chi
//	Note:
/*****************************************************************************/
PUBLIC void DCSetting_SaveNVValue( MMIDC_SETTING_INFO_T *setting_ptr)
{
	MMIDC_SETTING_SAVE_INFO_T	dc_nv_info = {0};
	MN_RETURN_RESULT_E			nv_result = 0;

	s_mmidc_nv_info.e_quality		= setting_ptr->e_quality;
	s_mmidc_nv_info.e_photo_size	= setting_ptr->e_photo_size;
	s_mmidc_nv_info.b_shutter_voice	= setting_ptr->b_shutter_voice;
	s_mmidc_nv_info.b_flash_enabled	= setting_ptr->b_flash_enabled;
	s_mmidc_nv_info.e_dv_format		= setting_ptr->e_dv_format;
	s_mmidc_nv_info.e_af			= setting_ptr->e_af;
	
	//read and compare
	MMINV_READ(MMINV_DC_SETTING_INFO, &dc_nv_info, nv_result);
	if (nv_result != MN_RETURN_SUCCESS)
    {
		DC_ASSERT_LOW(0);
		MMINV_WRITE(MMINV_DC_SETTING_INFO, &s_mmidc_nv_info);

    }
	else if (0 != memcmp(&s_mmidc_nv_info, &dc_nv_info, sizeof(s_mmidc_nv_info)))
	{
		MMINV_WRITE(MMINV_DC_SETTING_INFO, &s_mmidc_nv_info);
	}
	else
	{
		//do nothing
	}
}

/*****************************************************************************/
// 	Description : Set default value of dc setting
//	Global resource dependence : 
//  Author: bruce.chi
//	Note:
/*****************************************************************************/
PUBLIC void DCSetting_SetDefaultValue(MMIDC_SETTING_INFO_T *setting_info_ptr)
{
	MMIDC_SETTING_SAVE_INFO_T* setting_save_ptr = &s_mmidc_nv_info;
    DC_ASSERT_LOW(PNULL != setting_info_ptr);    
	
	setting_info_ptr->i_contrast		= MMIDC_CONTRAST_MAX / 2;
	setting_info_ptr->e_effect			= MMIDC_EFFECT_NORMAL;
	setting_info_ptr->i_brightness		= MMIDC_BRIGHTNESS_MAX / 2;
	setting_info_ptr->e_mode			= MMIDC_MODE_INDOOOR;
	setting_info_ptr->e_quality			= setting_save_ptr->e_quality;
	setting_info_ptr->e_photo_size		= setting_save_ptr->e_photo_size;
	setting_info_ptr->b_shutter_voice	= setting_save_ptr->b_shutter_voice;
	setting_info_ptr->e_overtime		= MMIDC_OVERTIME_DEACTIVATED;
	setting_info_ptr->i_focus			= 0;
	setting_info_ptr->b_flash_enabled	= setting_save_ptr->b_flash_enabled;
	setting_info_ptr->e_dv_format		= setting_save_ptr->e_dv_format;
	setting_info_ptr->e_storage_dev		= setting_save_ptr->e_storage_dev;
	setting_info_ptr->e_af				= setting_save_ptr->e_af;

#ifdef MMIDC_DEBUG
	setting_info_ptr->st_cap_osd_info.e_osd_type = CAPTURE_OSD_CHARACTER;
	SCI_MEMCPY(setting_info_ptr->st_cap_osd_info.str, "HellO", strlen("HellO"));
	setting_info_ptr->st_cap_osd_info.str_len	= strlen("HellO");
	setting_info_ptr->st_cap_osd_info.is_ucs2	= FALSE;
#else
	SCI_MEMSET(&setting_info_ptr->st_cap_osd_info, 0, sizeof(setting_info_ptr->st_cap_osd_info));
	setting_info_ptr->st_cap_osd_info.e_osd_type = CAPTURE_OSD_NONE;
#endif
	setting_info_ptr->e_frame_rate		= MMIDC_PREV_FRAME_RATE_HIGH;
	setting_info_ptr->e_lcd				= MAIN_LCD_ID;
	setting_info_ptr->b_prefilter		= MMIDC_CAPTURE_PREFILTER_STATE;
	setting_info_ptr->i_sooth			= MMIDC_CAPTURE_I_SMOOTH;
	setting_info_ptr->e_prevwin_mode	= PREVIEW_WIN_FULLSCREEN_CHAR_OSDMENU;
	setting_info_ptr->e_capwin_mode		= CAP_WIN_FULLSCREEN_CHAR_OSDMENU;
	
	SCI_MEMSET(&setting_info_ptr->st_preview_osd_info, 0, sizeof(setting_info_ptr->st_preview_osd_info));

	setting_info_ptr->is_from_dc		= TRUE;
}

/*****************************************************************************/
// 	Description : use DC Driver interface to exit DC module
//	Global resource dependence : 
//  Author: bruce.chi
//	Note:
/*****************************************************************************/
LOCAL BOOLEAN DCAdap_Exit(void)
{
	return TRUE;
}


/*****************************************************************************/
// 	Description : use DC Driver interface to open DC
//	Global resource dependence : 
//  Author: bruce.chi
//	Note:
/*****************************************************************************/
PUBLIC BOOLEAN DCAdap_DCOpen(void)
{ 
	BOOLEAN ret = FALSE;
#ifndef MMI_NOR_VERSION
		if (s_dc_context_ptr == PNULL)
		{
			s_dc_context_ptr = BL_Malloc(BLOCK_MEM_POOL_1);
			SCI_ASSERT(s_dc_context_ptr != PNULL);
		}
#else
	const MMIDC_ALBUM_OPEN_FROM *album_open_status =GetAlbumOpenStatus();
	SCI_TRACE_LOW("DCAdap_DCOpen  album_open_status->is_from_mms %d s_dc_context_ptr= %d",album_open_status->is_from_mms,s_dc_context_ptr);
	if(!album_open_status->is_from_mms)
	{
		if (s_dc_context_ptr == PNULL)
		{
			s_dc_context_ptr = BL_Malloc(BLOCK_MEM_POOL_1);
			SCI_ASSERT(s_dc_context_ptr != PNULL);
		}
	}
#endif
#ifdef _MMI_OCR
	if (!MMIOCR_Is_From_OCR())
	{
		ret = DC_Open((uint8 *)s_dc_context_ptr, MMIDC_MAX_PHOTO_SIZE);
		SCI_TRACE_LOW("DCAM status %d",ret);		
	}
	else
	{
		ret = OCR_Init(PNULL, PNULL);
		SCI_TRACE_LOW("DCAM ocr status %d",ret);		
			
	}
#else
	ret = DC_Open((uint8 *)s_dc_context_ptr, MMIDC_MAX_PHOTO_SIZE);
		
#endif
		if(ret == 0)
		{
			s_is_dc_open = TRUE;
			return TRUE;
		}
		else
		{
			return FALSE;
		}
		//测试函数作为表达式时是否打印函数内信息
		SCI_TRACE_LOW("LW  TRACE: DCAdap_DCOpen__函数名作为表达式的打印信息");
}

/*****************************************************************************/
// 	Description : use DC Driver interface to set preview parameter
//	Global resource dependence : 
//  Author: bruce.chi
//	Note:
/*****************************************************************************/
static int a,b,c;
LOCAL BOOLEAN DCAdap_SetPreviewParam(const MMIDC_SETTING_INFO_T *setting_ptr)
{												//LW  2007.8.15
	//SCI_TRACE_LOW("LW  TRACE:DCAdap_SetPreviewParam__xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
	DC_PREVIEW_PARAM_T st_preview_param = {0};
    BOOLEAN ret=TRUE;
	a=st_preview_param.i_frame_rate;
	b=st_preview_param.i_sensor_sequence;
	c=st_preview_param.i_lcd;
	//SCI_TRACE_LOW("ST_PREVIEW_PARAM.i_frame_rate=%d   .isensor_sequence=%d  .i_lcd=%d",a,b,c);
	
    SCI_TRACE_LOW("DCAdap_SetPreviewParam setting_ptr->e_af = %d ",setting_ptr->e_af);
       //SCI_TRACE_LOW("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");	
	//set preview param
	st_preview_param.i_lcd			= setting_ptr->e_lcd;
	st_preview_param.b_prefilter	= setting_ptr->b_prefilter;
	st_preview_param.i_frame_rate	= setting_ptr->e_frame_rate;
	st_preview_param.i_smooth		= setting_ptr->i_sooth;
    SCI_TRACE_LOW("seting_ptr->e_lcd=%d, ->b_prefilter=%d,  ->e_frame_rate=%d,  ->i_sooth=%d",setting_ptr->e_lcd,setting_ptr->b_prefilter,setting_ptr->e_frame_rate,setting_ptr->i_sooth);
        if(0 == setting_ptr->is_from_dc)
        {
                st_preview_param.b_is_scale      = FALSE;
        }
        else
        {
                st_preview_param.b_is_scale      = TRUE;
        }

	switch(setting_ptr->e_af)
	{
	case MMIDC_AF_CONTINUOUS:
		st_preview_param.af_flag = 1;
		st_preview_param.i_sensor_sequence	= DCAdap_GetSensorModeSequence(setting_ptr, MMIDC_PREVIEW_AF_CONTINUOUS);
		if (!DCSetting_GetTrimRect(&st_preview_param.st_trim_rect, &st_preview_param.st_disp_rect, setting_ptr, MMIDC_PREVIEW_AF_CONTINUOUS))
		{
			return FALSE;
		}
		break;

	case MMIDC_AF_OFF:
		a=st_preview_param.i_sensor_sequence;
		st_preview_param.i_sensor_sequence	= DCAdap_GetSensorModeSequence(setting_ptr, MMIDC_PREVIEW_NO_AF);
		st_preview_param.af_flag = 0;
		if (!DCSetting_GetTrimRect(&st_preview_param.st_trim_rect, &st_preview_param.st_disp_rect, setting_ptr, MMIDC_PREVIEW_NO_AF))
		{
			return FALSE;
		}
		break;

	default:
		DC_ASSERT_LOW(0);
		st_preview_param.af_flag = 0;
		break;
	}
	
#ifndef _MMI_OCR
	 
	 ret= DC_SetPreviewParam(&st_preview_param);
          //SCI_TRACE_LOW("ret=%d",ret);
#else
	 if (MMIOCR_Is_From_OCR())
	 {
		 ret=OCR_SetPreviewParam(NULL);
	 }
	 else
	 {
	 	//打印不出SCI_TRACE_LOW("LW  TRACE:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
		 ret= DC_SetPreviewParam(&st_preview_param);
		//SCI_TRACE_LOW("LW  TRACE:RET=%D",ret);
	 }
	 
#endif
    if (0!=ret)
    {
		return FALSE;
    }

	//set preview osd
	//依赖于DC_SETTING_INFO,OSD_MENU数组,OSD_CIRCLE数组,当前OSDMENU_Select情况。
	switch(setting_ptr->e_prevwin_mode)
	{
	case PREVIEW_WIN_FULLSCREEN_CHAR_OSDMENU:	//主屏全屏、文字OSD MENU
		DrawPreviewCharacterOSDMenu(setting_ptr->is_from_dc);
		break;

	case PREVIEW_WIN_FULLSCREEN_IMAGE_OSDMENU:	//主屏全屏、图片OSD MENU
		DrawImgOSDMenu(
			setting_ptr->is_from_dc,
			setting_ptr->st_preview_osd_info.cur_img_osd_menu_index, 
			setting_ptr->st_preview_osd_info.left_img_osd_menu_index,
			&st_preview_param.st_disp_rect
			);
		break;

	case PREVIEW_WIN_PARTSCREEN_CIRCLE_OSD:		//主屏半屏、像框
		DrawImgOSDCircle(setting_ptr->st_preview_osd_info.e_circle_osd_index, &st_preview_param.st_disp_rect);
		break;

	case PREVIEW_WIN_SUBLCD_NO_OSD:				//副屏, NO OSD
		DisableOSDMenu();
		break;

	default:
		DC_ASSERT_LOW(0);
		break;
	}

	return TRUE;
}

/*****************************************************************************/
// 	Description : use DC Driver interface to set preview parameter in af status
//	Global resource dependence : 
//  Author: bruce.chi
//	Note:
/*****************************************************************************/
PUBLIC BOOLEAN DCAdap_SetAFSinglePreviewParam(const MMIDC_SETTING_INFO_T *setting_ptr)
{
	DC_PREVIEW_PARAM_T st_preview_param = {0};
	

	//set preview param
	st_preview_param.i_lcd			= setting_ptr->e_lcd;
	st_preview_param.b_prefilter	= setting_ptr->b_prefilter;
	st_preview_param.i_frame_rate	= setting_ptr->e_frame_rate;
	st_preview_param.i_smooth		= setting_ptr->i_sooth;

        if(0 == setting_ptr->is_from_dc)
        {
                st_preview_param.b_is_scale      = FALSE;
        }
        else
        {
                st_preview_param.b_is_scale      = TRUE;
        }
	
	st_preview_param.af_flag = 1;
	st_preview_param.i_sensor_sequence	= DCAdap_GetSensorModeSequence(setting_ptr, MMIDC_PREVIEW_AF_SINGLE);
	if (!DCSetting_GetTrimRect(&st_preview_param.st_trim_rect, &st_preview_param.st_disp_rect, setting_ptr, MMIDC_PREVIEW_AF_SINGLE))
	{
		return FALSE;
	}

#ifdef MMI_ENABLE_AUTO_FOCUS
	if (0 != DC_SingleModeAutoFocus(&st_preview_param))
	{
		return FALSE;
	}
#endif

	//set preview osd
	//依赖于DC_SETTING_INFO,OSD_MENU数组,OSD_CIRCLE数组,当前OSDMENU_Select情况。
	switch(setting_ptr->e_prevwin_mode)
	{
	case PREVIEW_WIN_FULLSCREEN_CHAR_OSDMENU:	//主屏全屏、文字OSD MENU
		DrawPreviewCharacterOSDMenu(setting_ptr->is_from_dc);
		break;

	case PREVIEW_WIN_FULLSCREEN_IMAGE_OSDMENU:	//主屏全屏、图片OSDMENU
		DrawImgOSDMenu(
			setting_ptr->is_from_dc,
				setting_ptr->st_preview_osd_info.cur_img_osd_menu_index, 
			setting_ptr->st_preview_osd_info.left_img_osd_menu_index,
			&st_preview_param.st_disp_rect
			);
		break;

	case PREVIEW_WIN_PARTSCREEN_CIRCLE_OSD:		//主屏半屏、像框
		DrawImgOSDCircle(setting_ptr->st_preview_osd_info.e_circle_osd_index, &st_preview_param.st_disp_rect);
		break;

	case PREVIEW_WIN_SUBLCD_NO_OSD:				//副屏, NO OSD
		DisableOSDMenu();
		break;

	default:
		DC_ASSERT_LOW(0);
		break;
	}

	return TRUE;
}

/*****************************************************************************/
// 	Description : Get preview/capture trim rect according to setting info
//	Global resource dependence : 
//  Author: bruce.chi
//	Note:	trim_rect的计算,是根据LCD的大小,然后取一个小的scale系数,乘回去的
//			if (need_trunk)
//			{
//				scale_factor = MIN((sensor_width /  lcd_width), (sensor_height / lcd_height));
//				trim_width = scale_factor * lcd_width;
//				trim_heigth = scale_factor * lcd_height;
//				and trim_widht, trim_height must be up_trunked by 16
//				display_rect need not to trim
//			}
/*****************************************************************************/
PUBLIC BOOLEAN DCSetting_GetTrimRect(RECT_T *p_trim_rect, RECT_T *p_disp_rect, const MMIDC_SETTING_INFO_T *setting_ptr, MMIDC_TRIMRECT_TYPE_E e_trimrect_type)
{								//LW  2007.8.15
	int32		sensor_width = 0;
	int32		sensor_height = 0;
	int32		target_width = 0;
	int32		target_height = 0;
	BOOLEAN		need_trunk = FALSE;

	MMIDC_PHOTO_SIZE_E	e_photo_size = 0;
	MMIVC_VIDEO_SIZE_E	e_video_size = 0;
	
	DC_ASSERT_LOW(p_trim_rect != PNULL);
	DC_ASSERT_LOW(setting_ptr != PNULL);

	//calc display rect
	p_disp_rect->w_start_x = 0;
	p_disp_rect->w_start_y = 0;
	switch(setting_ptr->e_prevwin_mode)
	{
	case PREVIEW_WIN_FULLSCREEN_CHAR_OSDMENU:
	case PREVIEW_WIN_FULLSCREEN_IMAGE_OSDMENU:
		//全屏
		p_disp_rect->w_width	= MMIDC_MAINSCREEN_WIDTH;
		p_disp_rect->w_height	= MMIDC_MAINSCREEN_HEIGHT;
		break;

	case PREVIEW_WIN_PARTSCREEN_CIRCLE_OSD:
		//半屏
		p_disp_rect->w_width	= MMIDC_MAINSCREEN_WIDTH;
		p_disp_rect->w_height	= MMIDC_MAINSCREEN_HEIGHT - PARTSCREEN_CIRCLE_OSD_IMG_HEIGHT - MMI_FULLSCREEN_SOFTKEY_BAR_HEIGHT;
		break;
		
	case PREVIEW_WIN_SUBLCD_NO_OSD:

⌨️ 快捷键说明

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