?? swosd.c
字號:
_OSD_ShowDigestNumber(SW_CHAR_DASH); // -
__iCol+=__wFontW;
_OSD_ShowDigestNumber(SW_CHAR_D); // D
__iCol+=__wFontW;
_OSD_ShowDigestNumber(SW_CHAR_A); // A
__bShowNumber=TRUE;
}
// must restore the font size as number font size
if(__wDiscType&BOOK_SVCD || __wDiscType&BOOK_CVD)
{
__wFontH=FONTN2_H;
__wFontW=FONTN2_W;
}
else
{
__wFontH=FONTN1_H;
__wFontW=FONTN1_W;
}
#endif
}
#endif
// *********************************************************************
// Function : _OSD_ShowDigestNumber
// Description : Show the number in DIGEST mode
// Arguments : wValue, number for display,
// the MSB indicate to show or clear the number
// Return : NULL
// Side Effect :
// *********************************************************************
//LJY1.20, support 4M flash, remove digest
#ifndef NO_DIGEST
void _OSD_ShowDigestNumber(WORD wValue)
{
BYTE n;//, WYC.050a use __bTemp to replace bIdx;
BIT bEnable=TRUE;
BYTE i,j; // WYC.050a Replace i,j from Word to Byte
BYTE wRem, wLine; // JYLiu 2002/4/12 xdata reduce wHpos, wVpos, and wQuot
//DVD.025, don't show swosd temporality
// return; // *** DVD.0381
if(wValue & 0x8000) // clear the digest number or letter
{
bEnable=FALSE;
wValue=wValue & 0x7FFF; // reset the MSB of wValue
}
// wyc.050a if(__bShowNumber) // show digest number (total 2 number)
// bTotal=2;
// else // show digest letter (CD-DA, only 1 letter)
// bTotal=1;
// loop to write the digest number of letter
for(n=0;n<2;n++)
{
if(bEnable)
{
if(n==0)
__bTemp=(BYTE)(wValue/10); // first number of digest number
else
__bTemp=(BYTE)(wValue%10); // second number of digest number
// or the only char of digest letter
}
wLine=0; // indicate which line want to be written
wRem=(BYTE)__wFontH%LINEPERCMD;
__dwW99AVCmdArg[0]=3+LINEPERCMD; // indicate the number from ARG0 ~ ARG15
__dwW99AVCmdArg[3]=LINEPERCMD+1; // the line number which a command can do
for(i=0;i<(BYTE)__wFontH/LINEPERCMD;i++) // JYLiu 2002/4/12 reduce xdata wOut
{
for(j=0;j<LINEPERCMD;j++) // a command only write ## line
{
if(bEnable) // show digitial number or letter
{
if(__wDiscType&BOOK_SVCD || __wDiscType&BOOK_CVD || __wDiscType&BOOK_DVD)
{
__dwW99AVCmdArg[j+4]=(DWORD)_bFont[__bTemp][wLine];
}
else
{
__dwW99AVCmdArg[j+4]=(DWORD)_wFont[__bTemp][wLine];
}
}
else // clear digitial number or letter
{
__dwW99AVCmdArg[j+4]=0x0L;
}
wLine++;
}
if(__wDiscType&BOOK_SVCD || __wDiscType&BOOK_CVD || __wDiscType&BOOK_DVD)
__dwW99AVCmdArg[1]=0x1;
else
__dwW99AVCmdArg[1]=0x0;
__dwW99AVCmdArg[2]=MAKELONG(__iRow+(wLine-LINEPERCMD),__iCol+n*__wFontW); // JYLiu 2002/4/12 reduce xdata wVpos, wHpos
W99AV_CommandN(COMMAND_WPXL);
}
__dwW99AVCmdArg[0]=3+wRem; // indicate the number from ARG0 ~ ARG15
__dwW99AVCmdArg[3]=wRem+1; // the line number which a command can do
if(wRem)
{
for(j=0;j<wRem;j++) // write the final line of a font
{
if(bEnable) // show digitial number or letter
{
if(__wDiscType&BOOK_SVCD || __wDiscType&BOOK_CVD || __wDiscType&BOOK_DVD)
{
__dwW99AVCmdArg[j+4]=(DWORD)_bFont[__bTemp][wLine];
}
else
{
__dwW99AVCmdArg[j+4]=(DWORD)_wFont[__bTemp][wLine];
}
}
else // clear digitial number or letter
{
__dwW99AVCmdArg[j+4]=0x0L;
}
wLine++;
}
if(__wDiscType&BOOK_SVCD || __wDiscType&BOOK_CVD || __wDiscType&BOOK_DVD)
__dwW99AVCmdArg[1]=0x1;
else
__dwW99AVCmdArg[1]=0x0;
__dwW99AVCmdArg[2]=MAKELONG(__iRow+(wLine-wRem),__iCol+n*__wFontW); // JYLiu 2002/4/12 reduce xdata wVpos, wHpos
W99AV_CommandN(COMMAND_WPXL);
}
}
}
#endif
// *********************************************************************
// Function : _OSD_ShowLogo
// Description : According to the LOGO data format, then show LOGO
// Arguments : NULL
// Return : NULL
// Side Effect :
// *********************************************************************
BYTE _OSD_ShowLogo()
{
#ifndef NO_LOGO
#ifndef SYSTEM_8051
WORD i;
#endif // #ifndef SYSTEM_8051
// wyc1.22
extern BYTE __bNextHWReset;
// LLY.275, must clear playing mode and attribute
// Because, nobody to clear it
// Otherwise, LOGO display don't refer real picture size
__bModePlay=MODE_PLAYUNKNOW;
__bAttrPlay=ATTR_NONE;
__bAttrPlayNew=ATTR_NONE;
// wyc1.22, force H/W reset video when play from LOGO.
__bNextHWReset = TRUE;
// wyc2.27, add this here to avoid VCD LOGO -> Motion to do S/W reset and S/W reset will have mosaic.
__bLastModePlay = MODE_PLAYSTILL;
if (_wLogoData[0] == 0x4D4D) // JYLiu 2002/4/12 modified, wpLogoPtr removed
_OSD_ShowMPEG(_wLogoData);
// DVD.040-1, remove _OSD_ShowBitmap(), because it has been used for
// screen saver mode
else
return FALSE;
#else // #ifndef NO_LOGO
// LLY.160, issue NPF command to tell RISC enable VBI interrupt
// otherwise, OSD mseeage "Reading..." can't been seen while #define NO_LOGO
W99AV_Command1(COMMAND_PLAY, 0);
#endif // #ifndef NO_LOGO
return TRUE;
}
// LLY.040-1 create
// *********************************************************************
// Function : OSD_ShowBitmap
// Description : Show OSD bitmap for screen saver usage
// Arguments : NULL
// Return : NULL
// Side Effect :
// *********************************************************************
void OSD_ShowBitmap(BYTE bSCRMode)
{
#ifndef NO_OSD
#ifndef NO_SCREEN_SAVER
DWORD* pdwBitmapData;
BYTE bPALType;
// Specify the screen saver mode
switch(bSCRMode)
{
case OSD_SCR_MODE1:
pdwBitmapData=aBitmapData1;
//alex2.37,20040913,change baseline_saver as Support_Mini_Screen_Saver
#ifndef SUPPORT_MINI_SCREEN_SAVER//alex2.34
if (__bBitmapIndex != 0)
{
_dwSWOSDTemp = 0;
for (bPALType = 0; bPALType < __bBitmapIndex; bPALType++)
{
_dwSWOSDHeaders[0] = _dwSWOSDTemp;
_dwSWOSDTemp += aBitmapData1[_dwSWOSDHeaders[0]]+4;
#ifdef SPLIT_TOP_BOTTOM_DATA
_dwSWOSDHeaders[0] = _dwSWOSDTemp;
_dwSWOSDTemp += aBitmapData1[_dwSWOSDHeaders[0]]+4;
#endif
}
pdwBitmapData=aBitmapData1+_dwSWOSDTemp;
}
#endif//#ifndef SUPPORT_MINI_SCREEN_SAVER
bPALType=OSD_PALETTE_BMP1;
break;
//alex2.37,20040913,change baseline_saver as Support_Mini_Screen_Saver
#ifndef SUPPORT_MINI_SCREEN_SAVER//alex2.34
case OSD_SCR_MODE2: //brian, multiple bitmap screen saver
pdwBitmapData=aBitmapData2;
bPALType=OSD_PALETTE_BMP2;
break;
case OSD_SCR_MODE3:
pdwBitmapData=aBitmapData3;
bPALType=OSD_PALETTE_BMP3;
break;
#endif//#ifndef SUPPORT_MINI_SCREEN_SAVER
}
// LLY.047, spcify offset between "bitmap.tx0" and "bitmap.tx1"
#ifdef SPLIT_TOP_BOTTOM_DATA
_dwSWOSDTemp=pdwBitmapData[0]+4;
#endif // #ifdef SPLIT_TOP_BOTTOM_DATA
// Step 0: specify the resolution, width/height of screen saver mode
__bSCRResolution=(BYTE)pdwBitmapData[1];
__wSCRWidth=(WORD)pdwBitmapData[2];
__wSCRHeight=(WORD)pdwBitmapData[3];
// Step 1: specify top/bottom address/size to zero
//W99AV_WriteDRAMData( W99AV_DRAM_OSDT_ADR, 0x0 );
//W99AV_WriteDRAMData( W99AV_DRAM_OSDB_ADR, 0x0 );
{
// Step 3.2: specify bitmap start/end point for (x,y) to Header2 & Header3
OSD_SetSCR_Position();
// Step 3.1: specify bitmap Header0 and Header 1
_dwSWOSDHeaders[0]=( HEADER0_BMP | (pdwBitmapData[1]<<27) );
_dwSWOSDHeaders[1]=HEADER1_BMP;
// LLY.047, specify header info. for top/bottom region address
W99AV_WriteDRAMBurst(__dwBitmapTBuffer ,_dwSWOSDHeaders, 2);
W99AV_WriteDRAMBurst(__dwBitmapBBuffer ,_dwSWOSDHeaders, 2);
// Step 4: write bitmap OSD data
// LLY.047, spcify bitmap OSD data to DRAM for top/bottom region address
#ifdef SPLIT_TOP_BOTTOM_DATA
W99AV_WriteDRAMBurst(__dwBitmapTBuffer+4, &pdwBitmapData[4], (WORD)(pdwBitmapData[0]));
W99AV_WriteDRAMBurst(__dwBitmapBBuffer+4, &pdwBitmapData[4+_dwSWOSDTemp], (WORD)(pdwBitmapData[_dwSWOSDTemp]));
#else // #ifdef SPLIT_TOP_BOTTOM_DATA
W99AV_WriteDRAMBurst(__dwBitmapTBuffer+4, &pdwBitmapData[4], (WORD)(pdwBitmapData[0]));
W99AV_WriteDRAMBurst(__dwBitmapBBuffer+4, &pdwBitmapData[4], (WORD)(pdwBitmapData[0]));
#endif // #ifdef SPLIT_TOP_BOTTOM_DATA
//Brian0.91, Ct908 DRAM Variable address OSDB_ADR/ OSDT_ADR is siwtched, it is ucode mistake
//_dwSWOSDHeaders[0]=( __dwBitmapBBuffer | ((DWORD)__bSCRResolution <<27) ); //OSDB_ADR
//_dwSWOSDHeaders[2]=( __dwBitmapTBuffer | ((DWORD)__bSCRResolution <<27) ); // OSDT_ADR
_dwSWOSDHeaders[2]=( __dwBitmapBBuffer | ((DWORD)__bSCRResolution <<27) ); //OSDB_ADR
_dwSWOSDHeaders[0]=( __dwBitmapTBuffer | ((DWORD)__bSCRResolution <<27) ); // OSDT_ADR
}
//Brian0.91, Ct908 DRAM Variable address OSDB_SIZE/ OSDT_SIZE is siwtched, it is ucode mistake
//_dwSWOSDHeaders[3]= pdwBitmapData[0]+4 ; //OSDT_SIZE
_dwSWOSDHeaders[1]= pdwBitmapData[0]+4 ; //OSDT_SIZE
// LLY.047, top/bottom size is different while top/bottom splition case
// it dependent on "total data number" for bitmap file
#ifdef SPLIT_TOP_BOTTOM_DATA
//_dwSWOSDHeaders[1]= pdwBitmapData[0+_dwSWOSDTemp]+4;
_dwSWOSDHeaders[3]= pdwBitmapData[0+_dwSWOSDTemp]+4;
#else // #ifdef SPLIT_TOP_BOTTOM_DATA
//_dwSWOSDHeaders[1]= pdwBitmapData[0]+4;
_dwSWOSDHeaders[3]= pdwBitmapData[0]+4;
#endif // #ifdef SPLIT_TOP_BOTTOM_DATA
// write OSDB_ADR, OSDB_SIZE, OSDT_ADR, OSDT_SIZE at the same time
W99AV_WriteDRAMBurst(W99AV_DRAM_OSDB_ADR, &_dwSWOSDHeaders[0], 4);
// Step 2: download color palette if necessary
// LLY.042-2, support download color palette dymatically by RISC
#ifndef LOAD_COLOR_PALETTE_BY_HOST
if (BITMAP_NUMBER != 1 || __bFisrtLoad)
{
extern GDI_PALETTE_INFO code __PaletteList[];
//OSD_LoadPalette(bPALType);
//Brian0.91, CT908 palette is different
GDI_LoadPalette(4);
__bFisrtLoad = FALSE;
}
#endif // #ifndef LOAD_COLOR_PALETTE_BY_HOST
// LLY.042-2 end ...
// Step 6: calculate the vertical/horizontal boundary for screen saver
__wMinSCRX=__wW99AVHDSR;
// LLY2.81, split CT9928AF & CT908, because the bit meaning is different
// CT9928: bit[8:0]=VDW, bit[17:9]=VDS
// CT908: bit[9:0]=VDW, bit[19:10]=VDS
__wMinSCRY=((WORD)(__dwW99AVVDRR>>10))&0x3FF;
// LLY.047, base on "HOR_DUPLICATION" value to calculate horizontal end
//__wMaxSCRX=__wW99AVHDSR+__wW99AVHDWR-(WORD)pdwBitmapData[2]*4; // 4= 2 (space/pixel) * 2 (H2D=0)
// LLY.100, remove "HOR_DUPLICATION" definition, only keep H2D status
//__wMaxSCRX=__wW99AVHDSR+__wW99AVHDWR-(WORD)pdwBitmapData[2]*HOR_DUPLICATION*2; // 2 means: 2 (space/pixel)
__wMaxSCRX=__wW99AVHDSR+__wW99AVHDWR-(WORD)pdwBitmapData[2]*2*2; // 2 means: 2 (space/pixel)
// LLY2.81, split CT9928AF & CT908, because the bit meaning is different
// CT9928: bit[8:0]=VDW, bit[17:9]=VDS
// CT908: bit[9:0]=VDW, bit[19:10]=VDS
//Brian0.91
if(__SetupInfo.bProgressiveScan == SETUP_PROGRESSIVE_SCAN_OFF)
{
__wMaxSCRY=((WORD)(__dwW99AVVDRR>>10)&0x3FF)
+(WORD)(__dwW99AVVDRR&0x3FF)-(WORD)pdwBitmapData[3];
}
else
{
// P-SCAN screen saver bottom bouncing boundary is half of VDW
__wMaxSCRY=((WORD)(__dwW99AVVDRR>>10)&0x3FF)
+(WORD)(__dwW99AVVDRR&0x3FF)/2-(WORD)pdwBitmapData[3];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -