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

📄 goto.c

📁 mtkDVD源代码程序4*16 很好玩的内置5.1环绕音效 大家可以玩一下
💻 C
📖 第 1 页 / 共 5 页
字号:

        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 + -