亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? showmp4osdtext.c

?? dvd里面的一個文件系統(tǒng)的代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "user_init.h"

// 2005/08/29 yltseng, modify draw subtitle function from byte base to pixel base
// 2005/09/12 yltseng, Add new structure for font
// 2005/09/22 yltseng, add support for unix format new line

#if defined( OSD_FONT_API ) && defined( SUPPORT_OSDSRT )

//This is only for Nero Digital Certification (Temp solution)
#ifdef SUPPORT_QUICKTIME
    #include "File_def.h"
    #include "File_if.h"
#endif //SUPPORT_QUICKTIME

#ifdef NEW_OSD_DRIVER

#include "global.h"
#include "func.h"
#include "LanguageUtil.h"

#ifdef SUBTITLE_SUPPORT_ALL_FORMAT
static inline void ModifyStringForTMPlayer( const UINT8* pStr, UINT16 uiStrLen )
{   //suxin,2005-07-29,for support subtitle of TMPlayer(*.txt)
	int     i, j;
	UINT8*  pTmpStr = (UINT8*) pStr;

	for( i = 0; i <= (uiStrLen+11); i++ )
	{
		if( (pTmpStr[i  ] == ',') && 
		    (pTmpStr[i+1] == '2') && 
		    (pTmpStr[i+2] == '=') )
		{	
			UINT16 uiLen = uiStrLen - i + 11;
			i -= 8;
			for( j = 0; j <= uiLen; j++ )
			{
				pTmpStr[i] = pTmpStr[ i + 11 ];
				i++;
			}
			break;
		}
	}//for(i = 0;i<=(size+11);i++)
}
#else
#define ModifyStringForTMPlayer(...)
#endif

#ifdef SWITCH_SUB_DIRECTION // 2005/09/30 yltseng, libing 2005-7-15 14:43
#define redirect_subtitle()                                             \
    if( subtitle_ratate_flag )                                          \
    {                                                                   \
        uiStart_x = ( uiRegionWidth + uiLineLen ) >> 1;                 \
        UINT8   uiChar;                                                 \
        UINT8*  pStrPtr     = &aLineBuf[0];                             \
        UINT8*  pNumStart   = NULL;                                     \
        while( TRUE )                                                   \
        {                                                               \
            uiChar = *pStrPtr;                                          \
            if( !pNumStart )                                            \
            {                                                           \
                if( uiChar >= '0' && uiChar <= '9' )                    \
                    pNumStart = pStrPtr;                                \
            }                                                           \
            else                                                        \
            {                                                           \
                if( uiChar < '0' || uiChar > '9' )                      \
                {                                                       \
                    UINT8* pNumEnd = pStrPtr - 1;                       \
                    while( (UINT32) pNumStart < (UINT32) pNumEnd )      \
                    {                                                   \
                        UINT8 uiTmp = *pNumEnd;                         \
                        *pNumEnd    = *pNumStart;                       \
                        *pNumStart  = uiTmp;                            \
                        pNumStart++;                                    \
                        pNumEnd--;                                      \
                    }                                                   \
                    pNumStart = NULL;                                   \
                }                                                       \
            }                                                           \
            if( uiChar == 0 ) break;                                    \
            pStrPtr++;                                                  \
        }                                                               \
    }
#else
#define redirect_subtitle()
#endif

#if defined (SUPPORT_SMI_MultiLanguage)//libing 2006/3/16
extern int strncmpIgnoreCase(char *a,char *b,unsigned i);
extern UINT8  SmiSupType;
extern BYTE nowSupLang;
extern BYTE lang_temp[][15];
extern BYTE lang_num;
#define MAX_Para   3
#endif

void ShowOSDText( const UINT8* pStr,  UINT16 uiStrLen )
{
    // get font width & height
#ifdef	SUPPORT_FONT_OUTLINE  // 2006-02-24, mimitsai add for adjusting the subtitle string lenth when with subtitle_frame
    #define FONT_WIDTH_INTERNAL_OSD         (18+8-6+1)	// 8: add 4bits for left and right(if width%8=0).
    													// (if width%8!=0, add 4bits for left and right )
#else
    #define FONT_WIDTH_INTERNAL_OSD         18
#endif
    #define FONT_HEIGHT_INTERNAL_OSD        24
    #define OSD_EXTERNAL_SUBTITLE_REGION    3
    #ifdef OSD_SUPPORT_2_COLOR
    #ifdef ALCO_DVD_UI//shenyj add 2006-9-7 08:39下午
    #define FONT_COLOR_INDEX                2       
    #else
    #define FONT_COLOR_INDEX                1       // 2005/12/28 yltseng
    #endif
    #else
    #define FONT_COLOR_INDEX                2
   #endif    

    #ifdef ADJUST_SPACE_BETWEEN_FONT //denghg  add 2006-1-6 06:00     
    #include "osd_AppAPI.h"    
    const UINT8* pBmp   = NULL;
    UINT8  uiFONTRealWidth = 0;
    UINT8  uiDrawWidth     = 0;
    UINT8  uiDrawHeight    = 0;
    #endif
    
    UINT8   uiFontWidth     = FONT_WIDTH_INTERNAL_OSD; 
    UINT8   uiFontHeight    = FONT_HEIGHT_INTERNAL_OSD;

#ifdef	SUPPORT_FONT_OUTLINE
	Mp4Subtitle_flag=1;
#endif

#if defined (SUPPORT_SMI_MultiLanguage)//libing 2006/3/16
	UINT8 Para_num=0;
	UINT8 nPara_num;
	UINT32 Para_addr[MAX_Para];
	UINT8  Para_size[MAX_Para];
	BYTE ParaCntFlg=0;
#endif

    if( langGetSupportedFontNum() )
    {
        UINT8 uiHeight;
        if( !langGetFontSize( &uiFontWidth, &uiHeight ) )
            return;

        UINT8 uiScaleX, uiScaleY;
        langGetScale( &uiScaleX, &uiScaleY );
        uiFontWidth     *= uiScaleX;

        uiHeight    *= uiScaleY;
        uiFontHeight = ( uiHeight     >= uiFontHeight) ? uiHeight : uiFontHeight;
    }

    // get region width & height
    dimension diSize;
    if( !osd_get_original_region_size( OSD_EXTERNAL_SUBTITLE_REGION, &diSize ) )
        return;

    UINT16  uiRegionWidth   = diSize.x_length;
    UINT16  uiRegionHeight  = diSize.y_length;

    // calc max line for subtitle region
    UINT8   uiMaxLine   = uiRegionHeight / uiFontHeight;
    
    // modify string for TMPlayer subtitle
    ModifyStringForTMPlayer( pStr, uiStrLen );
    
    UINT8*  pStrEnd     = (UINT8*) (pStr + uiStrLen);
    UINT8   uiLineCnt   = 0;
    
    //osd_tog_region( OSD_EXTERNAL_SUBTITLE_REGION, OSD_OFF );

#ifdef	SUPPORT_FONT_OUTLINE // 2006-02-24, mimitsai add for adjusting the subtitle string lenth when with subtitle_frame
    uiFontWidth = uiFontWidth+8-6+1;// 8: add 4bits for left and right(if width%8=0).
    								// (if width%8!=0, add 4bits for left and right )
#endif
    

#ifdef SUPPORT_SMI_MultiLanguage//libing 2006/3/16
UINT8   CorrectWordCnt = 0;
	if(SmiSupType)
    {
    	while( (UINT32) pStr < (UINT32) pStrEnd )
    	{
    		if( (*pStr) == '<' && (*(pStr+1) == 'P' || *(pStr+1) == 'p' ) )
    		{
    			if(ParaCntFlg)
			    {   
			       Para_size[Para_num]=CorrectWordCnt;
			       Para_num++;
		        }
		        
    			ParaCntFlg=0;
    			
    			if(lang_num>1)
	    		{
	    			while(*pStr!='='&&(UINT32) pStr < (UINT32) pStrEnd)
	                {
	                   pStr++;
	                }      			
	    		    pStr++;
	    		    if(strncmpIgnoreCase( (BYTE*)pStr,lang_temp[nowSupLang], strlen((const char*)lang_temp[nowSupLang]) )==0)
	    		    {        		       
	    		       while(*pStr!='>')
	    		       {
	    		    	  pStr++;   		       	     		         
	    		       }  
	    		       pStr++;
	    		       Para_addr[Para_num]=(UINT32) pStr;
	    		       CorrectWordCnt=0;
	    		       ParaCntFlg=1;
	       		    }
    		    }
    		    else
    		    {
    		       while(*pStr!='>')
    		       {  
    		    	  pStr++;   		       	     		         
    		       }  
    		       pStr++;
    		       Para_addr[Para_num]=(UINT32) pStr;
    		       CorrectWordCnt=0;
    		       ParaCntFlg=1;    		    
    		    }
    		}
    	    
    		pStr++;
       	    if(ParaCntFlg)
       	      CorrectWordCnt++;       	    
       	}
	    if(ParaCntFlg) 
	    {   
	       Para_size[Para_num]=CorrectWordCnt;
	       Para_num++;
        }
	}
	if(!SmiSupType)
    {      
        Para_num=1;
    }
	nPara_num=0;
    			
#endif  
#if defined (SUPPORT_SMI_MultiLanguage)//libing 2006/3/16
	while(nPara_num<Para_num)
	{   
		if(SmiSupType)
        {          	
            pStr=(BYTE *)Para_addr[nPara_num];
            pStrEnd = (BYTE*) (pStr + Para_size[nPara_num]);
        }
#endif
      
    while( (UINT32) pStr < (UINT32) pStrEnd )
    {
        BYTE    aLineBuf[60];
        UINT8   uiWordCnt   = 0;
        UINT16  uiLineLen   = 0;

        while( ( (*pStr) != '\n' ) && ( (UINT32) pStr < (UINT32) pStrEnd ) )
		{
		    UINT8   uiCurChar   = *pStr;
		    
            if( uiCurChar == '\r' )   //if '\n' not jump next line just continue
            {
                pStr++;
                continue;
            }

            UINT32 uiRtnVal = langIsInCharacterSet( pStr );
            
            if( uiRtnVal == FONT_TWO_BYTE )
			{
                if( uiLineLen + uiFontWidth > uiRegionWidth )
                {
                    break;
                }
                    			    
			    aLineBuf[ uiWordCnt     ] = uiCurChar;
			    aLineBuf[ uiWordCnt + 1 ] = *(pStr+1);
			    
			    #ifdef ADJUST_SPACE_BETWEEN_FONT  //denghg add for FONT_TWO_BYTE 2006-9-25 13:25 
		        ftGetDrawFontSize(pStr, &uiDrawWidth, &uiDrawHeight);
                GetDrawFontBmp(pStr, &pBmp);		    
			    uiFONTRealWidth = Cnt_font_Realwidth( pBmp,uiDrawWidth, uiDrawHeight );
			    uiLineLen      += uiFONTRealWidth;
			    #else			    
			    uiLineLen   += uiFontWidth;
			    #endif
			    
			    uiWordCnt   += 2;
			    pStr        += 2;
			}
			else
            {


                if( uiRtnVal == FONT_NOT_IN_RANGE )
                {
                    #ifndef ADJUST_SPACE_BETWEEN_FONT //DENGHG ADD 2006-1-6 06:04     
                    if( uiLineLen + FONT_WIDTH_INTERNAL_OSD > uiRegionWidth )
                    #else
                    if( uiLineLen + uiFontWidth > uiRegionWidth )   //denghg modify 2006-3-15 9:10
                    #endif                    
                    {                   
                        break;
                    }

                    if( ( uiCurChar < 32 ) || ( uiCurChar > 126 ) )
                    {
    //This is only for Nero Digital Certification (Temp solution)
    #ifdef SUPPORT_QUICKTIME
                        if (GET_FILE_TYPE()==FILE_TYPE_ND)
                            return;
    #endif //SUPPORT_QUICKTIME
                        
                        uiCurChar = '?';
                        ///denghg modify for FONT_NOT_IN_RANGE
                        #ifdef ADJUST_SPACE_BETWEEN_FONT //DENGHG ADD 2006-1-6 06:04     
		    	        ftGetDrawFontSize(&uiCurChar, &uiDrawWidth, &uiDrawHeight);
                        GetDrawFontBmp(&uiCurChar, &pBmp);
		    	        uiFONTRealWidth = Cnt_font_Realwidth( pBmp, uiDrawWidth, uiDrawHeight );
                        #endif
                    }
                    #ifdef ADJUST_SPACE_BETWEEN_FONT //denghg add for FONT_NOT_IN_RANGE and use OSD font 2006-9-25 14:16
                    else
                    {
                        ftGetDrawFontSize(&uiCurChar, &uiDrawWidth, &uiDrawHeight);
                        GetDrawFontBmp(&uiCurChar, &pBmp);
                        uiFONTRealWidth = Cnt_font_Realwidth(pBmp, uiDrawWidth, uiDrawHeight);  
                    }
                    #endif

                    #ifndef ADJUST_SPACE_BETWEEN_FONT     //DENGHG ADD 2006-1-6 06:04                         
                    uiLineLen += FONT_WIDTH_INTERNAL_OSD;
                    #else
                    uiLineLen += uiFONTRealWidth;
                 	#endif
                }
                else
                {
                   
                    #ifdef ADJUST_SPACE_BETWEEN_FONT //DENGHG ADD 2006-1-6 06:04     
		    	    ftGetDrawFontSize(pStr, &uiDrawWidth, &uiDrawHeight);
                    GetDrawFontBmp(pStr, &pBmp);		    
		    		uiFONTRealWidth = Cnt_font_Realwidth(pBmp, uiDrawWidth, uiDrawHeight);
		    	    if (uiLineLen + /*uiFONTRealWidth*/uiDrawWidth > uiRegionWidth) //denghg ADD uiFontWidth for  first font is eaten 2006-3-3 16:51
                    {
                        break;
                    }
                    uiLineLen += uiFONTRealWidth;
                    #else
                    if( uiLineLen + uiFontWidth > uiRegionWidth )
                        break;

                    uiLineLen += uiFontWidth;
                    #endif 
                   
                   
                }

                const UINT8* pTmpStr    = pStr;
                UINT16 uiTmpLineLen      = uiLineLen;
                
                aLineBuf[ uiWordCnt ] = uiCurChar;
                uiWordCnt++;
                pStr++;

                if( uiCurChar == ' ' )
                {
    			    do
    			    {
    			        pTmpStr++;
    			        #ifdef ADJUST_SPACE_BETWEEN_FONT //DENGHG 2006-1-6 06:05     
		    			langGetCharacterBmp( pTmpStr, &pBmp );
		    			uiFONTRealWidth = Cnt_font_Realwidth(pBmp,uiFontWidth, uiFontHeight);
		    			uiTmpLineLen += uiFONTRealWidth;    			        
    			        #else
    			        uiTmpLineLen += uiFontWidth;
    			        #endif
    			        
    			        if( uiTmpLineLen > uiRegionWidth  )
    			            goto PARSE_LINE_END;
    			        else if( ( *pTmpStr == ' ' ) || ( *pTmpStr == '\n' ) )
    			            break;
    			    }while( TRUE );			    
                }
            }
        }

PARSE_LINE_END:
       
        // count uiCurStrLen,'\r':when "return",'\n':next line is blank
        // '\n' just count uiCurStrLen not jump next line wangap add 2005/1/25
        if( (*pStr) == '\n' )
            pStr++;

        if( uiWordCnt > 0 )
        {
            aLineBuf[ uiWordCnt ] = '\0';
            
        	UINT32  uiStart_x = ( uiRegionWidth - uiLineLen ) >> 1;
            UINT32  uiStart_y = uiLineCnt * uiFontHeight;
            redirect_subtitle();    // 2005/09/28 yltseng
            
            #ifdef DIRECT_ACCESS_MEDIA//added by wangwei, 2006-5-16 10:23(for show swith GUI no show MP4 subtitle).
            if(!(full_scrn & SW_MEDIA))
            #endif//DIRECT_ACCESS_MEDIA
            OSD_ShowString( uiStart_x, uiStart_y, aLineBuf, FONT_COLOR_INDEX, OSD_EXTERNAL_SUBTITLE_REGION );

            osd_tog_region( OSD_EXTERNAL_SUBTITLE_REGION, OSD_OFF );

            uiLineCnt++;
            if( uiLineCnt >= uiMaxLine )
                break;
        }        
    }
#if defined (SUPPORT_SMI_MultiLanguage)//libing 2006/3/16       
        nPara_num++;
    }
#endif    
    
    if( uiLineCnt > 0 )
    {
        coordinate coPos;
        if( osd_get_original_region_position( OSD_EXTERNAL_SUBTITLE_REGION, &coPos ) )
        {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩dvd在线观看| 精品一区二区三区影院在线午夜| 国产毛片精品一区| 日韩一级黄色片| 首页亚洲欧美制服丝腿| 欧美三片在线视频观看| 夜夜嗨av一区二区三区| 久久五月婷婷丁香社区| 亚洲一区二区影院| 国产毛片一区二区| 国产日韩综合av| 国产毛片一区二区| 91精品国产综合久久久久久久久久 | 午夜精品福利一区二区蜜股av| 色综合久久中文综合久久97 | 亚洲高清一区二区三区| 欧美人牲a欧美精品| 视频一区二区欧美| 欧美岛国在线观看| 国产一区高清在线| 国产精品免费aⅴ片在线观看| av亚洲精华国产精华| 一区二区视频在线| 91精品办公室少妇高潮对白| 亚洲成av人**亚洲成av**| 这里只有精品99re| 国产呦精品一区二区三区网站 | 欧美日韩美女一区二区| 午夜精品福利一区二区三区蜜桃| 欧美一级日韩不卡播放免费| 久久福利资源站| 欧美电影免费提供在线观看| 国产成人精品综合在线观看| 亚洲欧美色图小说| 欧美日韩国产一区二区三区地区| 久久99精品国产.久久久久久| 国产欧美综合色| 在线观看成人免费视频| 蜜臂av日日欢夜夜爽一区| 久久久亚洲高清| www.欧美精品一二区| 亚洲福利视频一区| 91精品国产品国语在线不卡 | 人人狠狠综合久久亚洲| 精品欧美乱码久久久久久1区2区 | 国产精一品亚洲二区在线视频| 国产精品久久夜| 欧美日韩一区高清| 成人免费av资源| 日韩成人免费在线| 国产精品免费看片| 日韩欧美国产麻豆| 日本道色综合久久| 国产一区二区三区观看| 亚洲高清中文字幕| 日本一区二区三区四区在线视频| 欧美视频在线一区| 国产精品538一区二区在线| 亚洲人成电影网站色mp4| 欧美mv和日韩mv的网站| 欧美在线观看视频一区二区| 国产精品91一区二区| 蜜臀a∨国产成人精品| 一区二区在线观看免费 | www国产成人| 色呦呦网站一区| 成人网在线免费视频| 蜜臀av性久久久久av蜜臀妖精| 亚洲精品乱码久久久久久黑人| 久久免费午夜影院| 日韩视频一区在线观看| 欧美日韩一卡二卡三卡| 91一区二区三区在线观看| 日韩精品视频网站| 午夜欧美电影在线观看| 日韩一区日韩二区| 国产女主播一区| 精品福利二区三区| 日韩一区国产二区欧美三区| 欧美色图片你懂的| 欧美午夜一区二区| 成人禁用看黄a在线| 国产成人在线观看免费网站| 久久99国产精品免费网站| 日韩黄色小视频| 午夜精品福利一区二区三区av| 夜夜嗨av一区二区三区中文字幕| 久久综合给合久久狠狠狠97色69| 欧美日本高清视频在线观看| 欧美在线视频全部完| 欧美私人免费视频| 欧美日韩一区二区三区在线| 欧美色综合天天久久综合精品| 色婷婷综合视频在线观看| 色婷婷综合久久久久中文| av午夜精品一区二区三区| 99re8在线精品视频免费播放| 波多野结衣中文一区| 91免费视频观看| 色狠狠色狠狠综合| 欧美日韩国产免费一区二区| 欧美日韩黄视频| 欧美猛男gaygay网站| 欧美日韩激情在线| 欧美一区二区三区免费大片| 日韩欧美激情在线| 久久网站最新地址| 国产精品三级av| 有码一区二区三区| 日韩国产成人精品| 六月丁香婷婷色狠狠久久| 国产一区二区在线观看免费| 国产不卡在线一区| 在线欧美一区二区| 91麻豆精品国产| 国产日韩欧美不卡| 亚洲精品第一国产综合野| 综合在线观看色| 午夜精品久久久久影视| 久久不见久久见免费视频7| 国产不卡在线播放| www.性欧美| 欧美日韩在线播| 日韩精品一区二区三区三区免费| 欧美剧情片在线观看| 精品女同一区二区| 国产精品美女久久久久久2018| 一区二区三区欧美激情| 免费日韩伦理电影| 粉嫩欧美一区二区三区高清影视 | 久久99久久久久| 成人app网站| 欧美激情在线观看视频免费| 国产欧美日韩三区| 日本亚洲欧美天堂免费| 91美女在线看| 久久色.com| 久久精品国产在热久久| 欧美日韩视频在线观看一区二区三区| 久久精品欧美一区二区三区不卡 | 91精品黄色片免费大全| 国产精品久久综合| 国产成人丝袜美腿| 精品国产百合女同互慰| 日韩精品五月天| 欧美日韩一区二区三区四区五区 | 欧美日韩高清影院| 亚洲精品成人少妇| 成人av在线资源网站| 国产三级精品视频| 国产99久久久精品| 久久久久久久网| 国产乱淫av一区二区三区 | 欧美日韩精品一区二区| 一级做a爱片久久| 色综合一个色综合| 亚洲卡通欧美制服中文| av在线播放一区二区三区| 国产日韩精品一区| 国产成人免费视频精品含羞草妖精 | 久久久99久久精品欧美| 韩国av一区二区三区四区| 欧美电视剧在线观看完整版| 美女看a上一区| 精品久久一区二区三区| 狠狠网亚洲精品| 久久久无码精品亚洲日韩按摩| 国产一区二区精品久久91| 久久午夜羞羞影院免费观看| 国产激情精品久久久第一区二区 | 久久久久久久综合| 国产九色sp调教91| 国产精品色哟哟网站| 91免费小视频| 亚洲电影一区二区三区| 51精品国自产在线| 久久精品国产网站| 久久综合狠狠综合久久综合88| 国产盗摄女厕一区二区三区| 欧美极品美女视频| 色偷偷一区二区三区| 日韩影视精彩在线| 26uuu亚洲| 成人av电影在线观看| 一区二区三区精品视频在线| 欧美日韩aaa| 国产精品99久久久久久久vr| 综合久久久久久久| 在线播放国产精品二区一二区四区| 丝袜亚洲另类欧美| 国产欧美日韩麻豆91| 91福利资源站| 狠狠色伊人亚洲综合成人| 中文字幕中文字幕一区| 欧美欧美欧美欧美| 国产成a人亚洲| 亚洲成人资源网| 久久久精品日韩欧美| 在线视频观看一区| 国产精品69毛片高清亚洲|