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

📄 osd_draw.c

📁 SAMSUNG 5009的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************
 *   Filename    : Osd_draw_BASIC.c
 *   Start       : 2003. 8. 25
 *   By          : Hongsik Park
 *   Contact     : hongsik7.park@samsung.com
 *   Description : 
 *		For another scheme of OSD resource manageent.
 *
 ******************************************************************************
 */
#ifndef _OSD_DRAW_BASIC_C_
#define _OSD_DRAW_BASIC_C_
/******************************************************
 *       INCLUDES
 *****************************************************/
#include <string.h>
#include <stdio.h>
#include "Basic_typedefs.h"
#include "CUSTOM/Custom_option.h"
#include "OS/OS_abstract.h"
#include "API/SH_types.h"
#include "API/SH_api.h"
#include "API/HAPI/SH_capability.h"
#include "API/HAPI/SH_MEM_api.h"

#include "COMMON/Common.h"

#include "DRIVER/FS/Fs_api.h"

#include "MAIN/Global_state.h"
#include "MAIN/Appl_types.h"

#include "CUSTOM/Osd_types.h"
#include "CUSTOM/Osd_if.h"
#include "Osd_timer.h"

#include "CUSTOM/Key_handler_setup.h"

#include "MAIN/DVD/Dvd_predef.h"
#include "MAIN/DVD/Dvd_common.h" /* for  gDvd_program */

#include "Osd_strings.h"		/* this file is only included in here. */


#include "CUSTOM/FP_handle.h"

#include "MAIN/Uop_msg.h"


#include "MAIN/SVCD/Svcd_types.h"
#include "MAIN/SVCD/Svcd_ext.h"
#include "MAIN/SVCD/Svcd_show.h"

#include "CUSTOM/Firm_update.h"

#include "MAIN/MMP/Mmp_common.h"
#include "MAIN/MMP/Mmp_global.h"	

#include "CUSTOM/Key_receive.h"

#include "Osd_util.h"
#include "Osd_draw.h"
#include "Osd_data.h"
#include "CUSTOM/strings_ext.h"


#include "CUSTOM/BASIC/LOGO/idlelogo.h"
#include "CUSTOM/BASIC/LOGO/setuplogo.h"

#include "API\hapi\SH_SCRT_api.h"		

//vobsub
#if _APP_CAP_MMP_SUPPORT_VOBSUB_SUBTITLE		// cydrain 20060629
#include "API/HAPI/SH_capability.h"
#include "API/HAPI/SH_MEM_api.h"
#include "../API/LAPI/SCRIPT/SCRT_exlocal.h"	// cydrain 20060814
#endif

#if _COP_CAPTURE_LOGO_USED
#include "API/SH_BM_api.h"
#include "API/LAPI/IFO/IFO.h"
#include "API/LAPI/IFO/Capture_Logo.h"
#endif

extern _SMI_Ctrl_st *gSMI_Ctrl;

#if _APP_CAP_MMP_SUPPORT_VOBSUB_SUBTITLE		// cydrain 20060629
//#define READ_VOB_SPU_UINT_NUM	3	// cydrain 20060814, no use.
//#define READ_VOB_SPU_UINT_SIZE	1024*6//1024*4 //3000	// cydrain 20060814, no use.
//extern FS_File_t smi_fid;	// cydrain 20060814, no use.
//extern BYTE4 smi_ftype;	// cydrain 20060814, no use.

//UINT vobsub_filepos[READ_VOB_SPU_UINT_NUM];	// cydrain 20060814, no use.
//UINT vobRead_cnt = 0;	// cydrain 20060814, no use.
//UINT vobRead_cnt2 = 0;	// cydrain 20060814, no use.
//extern gVobsub_key; 	// cydrain 20060814, no use.

extern _VOBSUB_Ctrl_st *gVOBSUB_Ctrl;	// cydrain 20060814

/*limeng 060810:vobsub last spu display duration*/
extern UINT gVOBSUB_lastspu_dura;
extern BOOL gVOBSUB_last_spu;
#endif

#if _APP_CAP_FUNC_RANDOM_PLAY
CHAR	dvd_sel_mode = 0;	// normal play, also for vcd
#endif

#if _APP_CAP_FUNC_DIVX_DRM		
BOOL toggle_on_off;	
#endif	

#if _APP_CAP_FUNC_SCORING //limeng 060930:karaoke/vcd/osd task sync
extern SysSema_t gDisplay_score_sema;
#endif

UINT digest_num;	
NCHAR gPreTimeString[MAX_SUPPORT_DYNAMIC_LENGTH];
/******************************************************
 *       Global variables / functions
 *****************************************************/
S5H_GfxCursor_t		gOsd_cursor;

#if !(_USE_5005 || _USE_5009 || _USE_5015 )
USHORT clt_cursor_tmp[15];
USHORT loading_color[4] = {0xAA2F, 0x764E, 0xCD52, 0x9D6D};/* 1, 8, D, E */
#else /* !(_USE_5005 || _USE_5009 || _USE_5015 ) */
UINT loading_color[4] = {0xFF948F77, 0xFF779074, 0xFFCE5195, 0xFF9E5D6A};/* 1, 8, D, E */
#endif /* !(_USE_5005 || _USE_5009 || _USE_5015 ) */ 

//BOOL	gMuteOn = 0;

CONST OSD_CursorPos_st cur_pos[] = 
{
	{CURSOR_ID_WARN,600,0,40,40},
	{CURSOR_ID_ANGLE,640,0,40,40},
	{CURSOR_ID_ZOOM,680,0,40,40}
};



/******************************************************************************
 *   GLOBALS                                                                  *
 ******************************************************************************/
//static WND_ID gLoading_pos = ID_WND_LOAD_L;
/******************************************************************************
 *   Structure for graphic                                                    *
 *****************************************************************************/
// below describes the window structure of Loading state
extern int					gTime_now_vcd; 
extern S5H_GfxCursor_t		gOsd_cursor;
extern ONOFF 				gOsd_angle_onoff;
extern SH_Gfx_base_st		gGfx_base;

extern SH_NOTIFYCALLBACK AttachedPlayCallback; //limeng 060523
extern BOOL dump_fail_flag;
#if _APP_CAP_MMP_SUPPORT_EXT_SUBTITLE_FAST_SEARCH
extern UINT gSMI_FastSearch_table[];
#endif
extern MenuLang_et gSetupOSDLangOrderMap[] ;

extern UINT iPAR_GetAviAudioCurStreamNo(void);		//(weilf)20060726
extern VOID MmpGetCurTimeStr(CHAR *cur_str, CHAR *remain_str);	//(weilf)20060726
extern OSD_MainType_et GetDisplayMainState(void);		//(weilf)20060726
extern BOOL iDISP_GetCurrentPtm(GenPtm_st *pPtm);		//(weilf)20060726
extern VOID OwSetSmiVisibleString(CHAR *string);		//(weilf)20060726
extern BOOL SH_GfxDrawSubtitle(BYTE1 canvas_id, CHAR *draw_str,  BYTE2 x, BYTE2 y, BYTE1 font_color );	//(weilf)20060726
extern BYTE1 GetDisplayDigestState(void);		//(weilf)20060726

/******************************************************************************
 *   GLOBALS   FUNCTION                                                       *
 ******************************************************************************/
extern UINT SH_GetKaraokeScore( VOID );

/******************************************************************************
 * Function name	: OwShowNoticeBox 
 * Arguments		:  
 *     IN        
 *					  OwNotice_type type_nt, NCHAR *text_1,NCHAR *text_2
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By			: 
 * Description		:  
 * Revision		: 1.0
 ******************************************************************************
 */
//UINT read_count_old = 0	// cydrain 20060814, no use.;
//BOOL read_first = TRUE;	// cydrain 20060814, no use.

VOID OwShowNoticeBox( OwNotice_type type_nt, NCHAR *text_1,NCHAR *text_2)
{	
	BYTE2	 str_width1, str_height1, str_len;
	BYTE2	 str_width2, str_height2;
	BYTE2	 bg_width, bg_height;
	UCHAR tmp;
	NCHAR	 str_buf[32];

	/*if empty-string, do not draw notice box*/
	str_len = (USHORT)strlen( text_1 );	
	if(   (str_len == 0) || 
		((str_len < 2) &&( text_1[0] ==' ')) ||
		((str_len <= 2) &&( text_1[0] ==' ') &&( text_1[1] ==' ')) )
		return ; 
		
	switch(type_nt)
	{
		case NOTICE_TYPE_PLAY:
			tmp = '\033';
			break;
			
		case NOTICE_TYPE_PAUSE:
			tmp = '\034';
			break;			
			
		case NOTICE_TYPE_STOP:
			tmp = '\035';
			break;			
			
		case NOTICE_TYPE_SKIP_F:
		case NOTICE_TYPE_DIVX_SKIP_F:
			tmp = '\076';
			break;			
			
		case NOTICE_TYPE_SKIP_R:
		case NOTICE_TYPE_DIVX_SKIP_R:
			tmp = '\074';
			break;						
			
		case NOTICE_TYPE_FF:
			tmp = '\375';
			break;			
			
		case NOTICE_TYPE_FR:	
			tmp = '\376';
			break;			 
			
		case NOTICE_TYPE_SF:
			tmp = '\177';
			break;			
			
		case NOTICE_TYPE_SR:	
			tmp = '\200';
			break;	
			
		case NOTICE_TYPE_OPEN:
		case NOTICE_TYPE_CLOSE:	
			tmp = '\37';
#if _USE_5005 || _USE_5009
			/*  restore the clut again. */
			SH_GfxSetDefaultPallet( SH_CANV1 );
#endif /* _USE_5005 */

			break;			
		case NOTICE_TYPE_DEFAULT:	
			break;		
			
		default:
			break;
	}
		
	if( (type_nt == NOTICE_TYPE_DEFAULT))
	{
		sprintf(str_buf, "%s", (NCHAR *) text_1);	
	}
	else
	{
		sprintf(str_buf, "%c %s", tmp, (NCHAR *) text_1);			
	}
		
	SH_GfxGetStrSize(str_buf, &str_width1, &str_height1);

	if(text_2 != NULL)
	{
		SH_GfxGetStrSize(text_2, &str_width2, &str_height2);	
		bg_height = 76;
	}
	else
	{	
		str_width2 = 0;
		bg_height = 40;
	} 		

	bg_width = ((str_width1 > str_width2) ? str_width1: str_width2) + 30 ;
		
	SH_GfxSetCanvas(SH_CANV1, 60, GFX_BAR_Y, bg_width, bg_height);
	SH_GfxDrawRec(SH_CANV1, 0, 0, bg_width, bg_height, OSD_COLOR_BORDER);
	SH_GfxDrawRec(SH_CANV1, 3, 3, bg_width-6, bg_height-6, OSD_COLOR_TRANS_BG);
	SH_GfxDrawStr(SH_CANV1, str_buf, 10, 5, NULL);
	
	if(text_2 != NULL)
	{
		SH_GfxDrawStr(SH_CANV1, text_2, 50, 35, NULL);
	}	

	SH_GfxShowCanvas(SH_CANV1, TRUE);
	
}

/******************************************************************************
 * Function name	: SetDvdvInfoRepeatStringNew 
 * Arguments		:  
 *     IN        
 *					  char *string, RepeatSub_et repeat 
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By			: 
 * Description		: Set repeat string according to param. This function is called to display 
 *					repeat state both in Info OSD and in Repeat Banner
 * Revision		: 1.0
 ******************************************************************************
 */ 
VOID SetDvdvInfoRepeatStringNew( char *string, RepeatSub_et repeat )
{
	switch(repeat)
	{
		case REPEAT_SUB_DISC:
			strcpy((char *)string, (char*)gpAll[MENU_LANG]);
			break;
		case REPEAT_SUB_TITLE:
			strcpy((char *)string, (char*)gpTitle[MENU_LANG]);
			break;
		case REPEAT_SUB_CHAPTER:
			strcpy((char *)string, (char*)gpChapter[MENU_LANG]);
			break;
		case REPEAT_SUB_A:
			strcpy((char *)string, "A-");
			break;
		case REPEAT_SUB_B:
			strcpy((char *)string, "A-B");
			break;
		case REPEAT_SUB_NONE:
			strcpy((char *)string, (char*)gToggle_mode[MENU_LANG][0]);
			break;
	}
	
}
	
#if _APP_CAP_NAV_MMP_PLAY_VIDEO_FILE// cydrain 20060112
/******************************************************************************
 *  Function name : 	SetDivxInfoRepeatString
 *  Arguments     : 		STR_ID  str_id, RepeatSub_t repeat 
 *  Return        : 		VOID
 *  By            : 		cydrain
 *  Description   : 		Set repeat string according to param. This function is called to display 
 *					repeat state both in Info OSD and in Repeat Banner
 ******************************************************************************
 */
VOID SetDivxInfoRepeatStringNew(char *string, RepeatSub_et repeat )
{
	switch(repeat)
	{
		case REPEAT_SUB_DISC:
			strcpy((char *)string, (char*)gpAll[MENU_LANG]);	// cydrain 20060410
			break;
		case REPEAT_SUB_TITLE:
			strcpy((char *)string, (char*)gpFolder[MENU_LANG]);
			break;
		case REPEAT_SUB_CHAPTER:
			strcpy((char *)string, (char*)gpFile[MENU_LANG]);
			break;
		case REPEAT_SUB_A:
			strcpy((char *)string, "A-");
			break;
		case REPEAT_SUB_B:
			strcpy((char *)string, "A-B");
			break;
		case REPEAT_SUB_NONE:
			strcpy((char *)string, (char*)gToggle_mode[MENU_LANG][0]);
			break;
	}
}
#endif
	

/******************************************************************************
 * Function name	: SetDvdvInfoAudioString 
 * Arguments		:  
 *     IN        
 *					 STR_ID  str_id
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By			: Qian liping
 * Description		: Set Audio string (&coding mode icon) 
 * Revision		: 1.0
 ******************************************************************************
 */  

VOID SetDvdvInfoAudioString( CHAR *string , BYTE1 *icon_id)
 {
	DvdvAudioInfo_t 	audio;

	if( GetDvdvAudioAttribute( &audio ) == FALSE )
	{
		sprintf((CHAR *)string, "****CH" );
	} else	{
		if( audio.num_ch > 5 )
		{
			sprintf((CHAR *)string, "%d/%d %-s%d.1CH", audio.cur_id+1,
#ifdef _DVD_NUM_AVAIL_STREAM
					audio.avail_num,
#else
					audio.total_num,
#endif
				GetLanguageCodeString(audio.sp_code_1st, audio.sp_code_2nd, NULL), audio.num_ch-1);
		} else {
			sprintf( (CHAR *)string, "%d/%d %-s% dCH", audio.cur_id+1,
#ifdef _DVD_NUM_AVAIL_STREAM
					audio.avail_num,
#else
					audio.total_num,
#endif
				GetLanguageCodeString(audio.sp_code_1st, audio.sp_code_2nd,NULL ), audio.num_ch);
		}
	}
	
	/*Auxilliary info of coding mode*/
	switch( audio.c_mode & 0x7 )
	{
#if 0
		case 0:
			( *icon_id )= IMG_DOLBY;
			break;
#endif
		case 2:
		case 3:
			( *icon_id ) = IMG_MPEG;
			break;
		case 4:
			( *icon_id ) = IMG_LPCM;
			break;
		case 6:
			( *icon_id ) = IMG_DTS;
			break;
			
		default:
			(*icon_id ) = IMG_DOLBY;
			break;			
	}
 

⌨️ 快捷键说明

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