📄 goto.c
字号:
case GOTO_SHOW_TITLE_REMAIN:
bHour = bSharedInfo(SI_TIME_RMN_HH);
bMin = bSharedInfo(SI_TIME_RMN_MM);
bSec = bSharedInfo(SI_TIME_RMN_SS);
if (fgIsDvdPlay())
wMsgIdx = OSD_MSG_TITLE_REMAIN;
else
wMsgIdx = OSD_MSG_TOTAL_REMAIN;
break;
case GOTO_SHOW_CHAPTER_ELAPSED:
bHour = bSharedInfo(SI_TIME_CHAPTER_HH);
bMin = bSharedInfo(SI_TIME_CHAPTER_MM);
bSec = bSharedInfo(SI_TIME_CHAPTER_SS);
if (fgIsDvdPlay())
wMsgIdx = OSD_MSG_CHAPTER_ELAPSED;
else
wMsgIdx = OSD_MSG_SINGLE_ELAPSED;
break;
case GOTO_SHOW_CHAPTER_REMAIN:
bHour = bSharedInfo(SI_TIME_CHAPTER_RMN_HH);
bMin = bSharedInfo(SI_TIME_CHAPTER_RMN_MM);
bSec = bSharedInfo(SI_TIME_CHAPTER_RMN_SS);
if (fgIsDvdPlay())
wMsgIdx = OSD_MSG_CHAPTER_REMAIN;
else
wMsgIdx = OSD_MSG_SINGLE_REMAIN;
break;
}
if (BCD2DEC(bMin) >= 60) // for VCD only, assume max. 99:59
{
bMin = ((BCD_HI(bMin) - 6) << 4) | BCD_LO(bMin);;
bHour++;
}
// show time info
vSetMsgCol4(_bWBGotoMenu, 0, 0, 2, 1);
#ifdef GOTO_STATUS_NO_TTCH
pbStr[0] = 7;
pbStr[1] = bLoByte(wMsgIdx);
pbStr[2] = bHiByte(wMsgIdx);
pbStr[3] = BCD_LO(bHour) + '0';
pbStr[4] = BCD_HI(bMin) + '0';
pbStr[5] = BCD_LO(bMin) + '0';
pbStr[6] = BCD_HI(bSec) + '0';
pbStr[7] = BCD_LO(bSec) + '0';
if (bSharedInfo(SI_NTSC_PAL) == SV_PAL)
{
vOsdPosPasteArg(OSD_POS_GOTO_DISP_P, OSD_MSG_TIME_STATUS_G, pbStr, 0);
}
else
{
vOsdPosPasteArg(OSD_POS_GOTO_DISP, OSD_MSG_TIME_STATUS_G, pbStr, 0);
}
#else
pbStr[0] = 7;
pbStr[1] = BCD_LO(bHour) + '0';
pbStr[2] = ':';
pbStr[3] = BCD_HI(bMin) + '0';
pbStr[4] = BCD_LO(bMin) + '0';
pbStr[5] = ':';
pbStr[6] = BCD_HI(bSec) + '0';
pbStr[7] = BCD_LO(bSec) + '0';
vOsdShowStrXY(GOTO_LITEM_X + 308, GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * 4 + 7,
_bWBGotoMenu, pbStr);
#endif
if (!fgShowAll)
break;
case GOTO_SHOW_PANEL_BITRATE:
// show bitrate info
// make VCD's bitrate scale the same as DVD
if (fgIsVcdPlay() && wBitrate < 1500)
{
wBitrate *= (9800.0 / 1499.0);
}
#ifdef GOTO_STATUS_NO_TTCH
pbStr[0] = 2;
pbStr[1] = (wBitrate / 100) / 10 + '0';
pbStr[2] = (wBitrate / 100) % 10 + '0';
vSetMsgCol4(_bWBGotoMenu, 0, 0, 2, 1);
vOsdShowStrXY(GOTO_BITRATE_X, GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * 4 + 7,
_bWBGotoMenu, pbStr);
#endif
wBitrate *= 1.7;
_wStartY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * 4 + 7 + 6;
_wEndY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * 5 + 7 - 6;
#ifdef GOTO_STATUS_NO_TTCH
_wStartX = GOTO_BITRATE_X + 40;
#else
_wStartX = GOTO_BITRATE_X;
#endif
for (bCntI = 0; bCntI < wBitrate / 1000; bCntI++)
{
_wStartX += 5;
_wEndX = _wStartX;
vOsdShowLine(_bWBGotoMenu, 2, 2);
}
for (; bCntI < 9800.0 * 1.7 / 1000; bCntI++)
{
_wStartX += 5;
_wEndX = _wStartX;
vOsdShowLine(_bWBGotoMenu, 0, 2);
}
break;
}
}
void vGotoBackMain(void) large
{
_bGotoState = STGOTO_MAIN;
_bInputPos = 0xFF;
_bInputBeg = 0xFF;
_bInputNum = 0;
}
// *********************************************************************
// Function : void vGotoClose(void)
// Description :
// Parameter : None
// Return : None
// *********************************************************************
void vGotoClose(void) large
{
// delete Goto used white board
//vOsdSetSt(OSD_ST_BURST); This will cause error(can't delete WB)?
//vVoidDis(); This will cause error?
vDisableWB(_bWBGotoMenu);
vDisableWB(_bWBGotoPanel);
vDeleteWB(_bWBGotoMenu);
vDeleteWB(_bWBGotoPanel);
//vOsdSetSt(OSD_ST_NML); This will cause error?
// hide HL, disable change color
// megaa downsize begin
//vChgColDis();
//vHideHL(HL_1);
//vHideHL(HL_2);
// megaa downsize end
// get normal wb back
vOsdShowWb(OSD_WB_RESTORE);
vSetExitInputState();
}
static void v2DigitFieldShower(BYTE bState, BYTE bNo, BYTE bNs) large
{
BYTE bYPos = bState - _bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
BYTE pbStr[] = { 5, '1', '2', '/', '3', '4' };
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
if (_bGotoState == bState) // don't have to update when we are in the state itself
return;
if (fgIsDvdPlay())
{
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case STGOTO_DVD_REPEAT:
case STGOTO_DVD_TIMEDISP:
return;
default:
break;
}
}
else if (fgIsVcdPlay())
{
switch (_bGotoState)
{
case STGOTO_VCD_REPEAT:
case STGOTO_VCD_TIMEDISP:
return;
default:
break;
}
}
pbStr[1] = bNo / 10 + '0';
pbStr[2] = bNo % 10 + '0';
pbStr[4] = bNs / 10 + '0';
pbStr[5] = bNs % 10 + '0';
vSetMsgCol4(_bWBGotoMenu, 0, 3, 2, 1);
vOsdShowStrXY(GOTO_RITEM_X, wY, _bWBGotoMenu, pbStr);
}
void vShowGotoChapter(void) large
{
// when VCD, use PTT as the analogy to DVD's chapter
BYTE bChNo = bSharedInfo(fgIsDvdPlay() ? SI_CHAP_NO : SI_PTT_NO);
BYTE bChNs = bSharedInfo(fgIsDvdPlay() ? SI_CHAP_NS : SI_PTT_NS);
#ifndef GOTO_VCD_SEGMENT
if (fgIsVcdPlay())
return;
#endif
if (fgIsDvdPlay() && bSharedInfo(SI_DVD_DOM) != SV_VTSTT_DOM)
bChNo = bChNs = 0;
v2DigitFieldShower(STGOTO_DVD_CHAPTER, bChNo, bChNs);
}
void vShowGotoTitle(void) large
{
// when VCD, use TRACK as the analogy to DVD's title
BYTE bTtNo = bSharedInfo(fgIsDvdPlay() ? SI_TT_NO : SI_TRACK_NO);
BYTE bTtNs = bSharedInfo(fgIsDvdPlay() ? SI_TT_NS : SI_TRACK_NS);
if (fgIsDvdPlay() && bSharedInfo(SI_DVD_DOM) != SV_VTSTT_DOM)
bTtNo = 0;
v2DigitFieldShower(STGOTO_DVD_TITLE, bTtNo, bTtNs);
}
void vShowGotoAudio(WORD wMsgIdx1, WORD wMsgIdx2, WORD wMsgIdx3) large
{
BYTE bYPos = STGOTO_DVD_AUDIO - _bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case STGOTO_DVD_REPEAT:
case STGOTO_DVD_TIMEDISP:
return;
default:
break;
}
vSolidRect(_bWBGotoMenu, GOTO_RITEM_X, wY,
GOTO_MARK_X - 1, wY + LINE_HEIGHT - 1, 3);
vSetMsgCol4(_bWBGotoMenu, 0, 3, 2, 1);
vOsdPasteMsgXY(GOTO_RITEM_X, wY, _bWBGotoMenu, wMsgIdx2);
vOsdPasteMsgXY(GOTO_RITEM_X + 80, wY, _bWBGotoMenu, wMsgIdx3);
}
void vShowGotoSubtitle(WORD wMsgIdx) large
{
BYTE bYPos = STGOTO_DVD_SUBTITLE - _bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case STGOTO_DVD_REPEAT:
case STGOTO_DVD_TIMEDISP:
return;
default:
break;
}
vSolidRect(_bWBGotoMenu, GOTO_RITEM_X, wY,
GOTO_MARK_X - 1, wY + LINE_HEIGHT - 1, 3);
vSetMsgCol4(_bWBGotoMenu, 0, 3, 2, 1);
vOsdPasteMsgXY(GOTO_RITEM_X, wY, _bWBGotoMenu, wMsgIdx);
}
void vShowGotoAngle(void) large
{
BYTE bAgNo = bSharedInfo(SI_AGL_NO);
BYTE bAgNs = bSharedInfo(SI_AGL_NS);
BYTE bYPos = STGOTO_DVD_ANGLE - _bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
BYTE pbStr[] = { 3, '1', '/', '3' };
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
if (bAgNo > bAgNs)
bAgNo = 1;
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case STGOTO_DVD_ANGLE:
case STGOTO_DVD_REPEAT:
case STGOTO_DVD_TIMEDISP:
return;
default:
break;
}
if (bAgNo == 0xFF)
bAgNo = 1;
pbStr[1] = bAgNo + '0';
pbStr[3] = bAgNs + '0';
vSetMsgCol4(_bWBGotoMenu, 0, 3, 2, 1);
vOsdShowStrXY(GOTO_RITEM_X, wY, _bWBGotoMenu, pbStr);
}
static void vTimeFieldShower(BYTE bState, BYTE bHH, BYTE bMM, BYTE bSS) large
{
BYTE pbStr[] = { 7, '_', ':', '0', '0', ':', '0', '0' };
BYTE bYPos = bState - _bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
if (_bGotoState == bState) // don't have to update when we are in the state itself
return;
if (fgIsDvdPlay())
{
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case STGOTO_DVD_REPEAT:
case STGOTO_DVD_TIMEDISP:
return;
default:
break;
}
}
else if (fgIsVcdPlay())
{
switch (_bGotoState)
{
case STGOTO_VCD_REPEAT:
case STGOTO_VCD_TIMEDISP:
return;
default:
break;
}
}
if (bHH == 0 && bMM == 0 && bSS == 0)
{
/*
if ()
{
pbStr[2] = pbStr[5] = ' ';
vOsdShowStrXY(GOTO_RITEM_X, wY, _bWBGotoMenu, pbStr);
}
*/
return;
}
if (BCD2DEC(bMM) >= 60) // for VCD only, assume max 99:59
{
bMM = ((BCD_HI(bMM) - 6) << 4) | BCD_LO(bMM);
bHH++;
}
pbStr[1] = BCD_LO(bHH) + '0';
pbStr[3] = BCD_HI(bMM) + '0';
pbStr[4] = BCD_LO(bMM) + '0';
pbStr[6] = BCD_HI(bSS) + '0';
pbStr[7] = BCD_LO(bSS) + '0';
vSetMsgCol4(_bWBGotoMenu, 0, 3, 2, 1);
vOsdShowStrXY(GOTO_RITEM_X, wY, _bWBGotoMenu, pbStr);
}
void vShowGotoTime(void) large
{
BYTE bTotalTimeHH = bSharedInfo(SI_TIME_TOTAL_HH);
BYTE bTotalTimeMM = bSharedInfo(SI_TIME_TOTAL_MM);
BYTE bTotalTimeSS = bSharedInfo(SI_TIME_TOTAL_SS);
vTimeFieldShower(fgIsDvdPlay() ? STGOTO_DVD_TIME : STGOTO_VCD_TIME,
bTotalTimeHH, bTotalTimeMM, bTotalTimeSS);
}
void vShowGotoTimeCH(void) large
{
BYTE bTotalTimeHH = bSharedInfo(fgIsDvdPlay() ? SI_TIME_TOTAL_CHAPTER_HH : SI_TIME_TOTAL_TRACK_HH);
BYTE bTotalTimeMM = bSharedInfo(fgIsDvdPlay() ? SI_TIME_TOTAL_CHAPTER_MM : SI_TIME_TOTAL_TRACK_MM);
BYTE bTotalTimeSS = bSharedInfo(fgIsDvdPlay() ? SI_TIME_TOTAL_CHAPTER_SS : SI_TIME_TOTAL_TRACK_SS);
vTimeFieldShower(fgIsDvdPlay() ? STGOTO_DVD_TIME_CH : STGOTO_VCD_TIME_CH,
bTotalTimeHH, bTotalTimeMM, bTotalTimeSS);
}
void vShowGotoRepeat(WORD wMsgIdx) large
{
BYTE bYPos = (fgIsDvdPlay() ? STGOTO_DVD_REPEAT : STGOTO_VCD_REPEAT ) -
_bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
if (fgIsDvdPlay())
{
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case STGOTO_DVD_REPEAT:
case STGOTO_DVD_TIMEDISP:
return;
default:
break;
}
}
else if (fgIsVcdPlay())
{
switch (_bGotoState)
{
case STGOTO_VCD_REPEAT:
case STGOTO_VCD_TIMEDISP:
return;
default:
break;
}
}
vSolidRect(_bWBGotoMenu, GOTO_RITEM_X, wY,
GOTO_MARK_X - 1, wY + LINE_HEIGHT - 1, 3);
vSetMsgCol4(_bWBGotoMenu, 0, 3, 2, 1);
vOsdPasteMsgXY(GOTO_RITEM_X, wY, _bWBGotoMenu, wMsgIdx);
}
void vShowGotoTimedisp(WORD wMsgIdx) large
{
BYTE bYPos = (fgIsDvdPlay() ? STGOTO_DVD_TIMEDISP : STGOTO_VCD_TIMEDISP) -
_bGotoBeg;
WORD wY = GOTO_ITEM_BEGIN_Y + LINE_HEIGHT * bYPos;
if (bYPos < 0 || bYPos >= GOTO_PAGE_ITEM_NUM) // out of display range
return;
if (fgIsDvdPlay())
{
switch (_bGotoState)
{
case STGOTO_DVD_AUDIO:
case STGOTO_DVD_SUBTITLE:
case
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -