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