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

📄 play_dvd.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
  }
  // megaa ADD5 end

  fgRetValue = fgNumInState();

  if (fgRetValue == TRUE)
  {
    if (_rNumInStateCtx.rState.fgComplete == TRUE)
    {
      if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
          (_rNumInStateCtx.wNum <= bChNs))
      {
        if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
        {
          vOsdShowChapterTimeSearch(_rNumInStateCtx.wNum, bChNs,
                                    (OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
          _rSearchStateCtx.bType = SEARCH_DVD_TIME_CH_WAIT;
          vIrSetTimeOut(IR_TIMEOUT_SEARCH);
        }
        else
        {
#ifdef SEARCH_INPUT_SHOW
          if (bDiscType == SV_DVD_AUDIO)
          {
            vOsdShowChapterSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), OSD_DVD_SEARCH_END,
                                  _rNumInStateCtx.wNum, bChNs, OSD_TIMEOUT_SHORT);
          }
          else
          {
            vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), OSD_DVD_SEARCH_END,
                                  _rNumInStateCtx.wNum, bChNs, OSD_TIMEOUT_SHORT);
          }
#else
          vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0); /* clear OSD and input field */
#endif
          _rSearchStateCtx.bType = SEARCH_NONE;
          vSetExitInputState();
        }

#ifdef DVD_NO_PTT_PLAY_UOP_BLOCK
        if (fgCheckUopBlock(SV_NV_PTT_PLAY) == TRUE)
        {
          if (bDiscType == SV_DVD_AUDIO)
          {
            vSendUopCmd(UOP_TRACK_PLAY, _rNumInStateCtx.wNum, 0, 0);
          }
          else
          {
            vSendUopCmd(UOP_PTT_PLAY, _rNumInStateCtx.wNum, SV_PTT_PLAY_FORCE, 0);
          }
        }
        else
#endif
        {
          if (bDiscType == SV_DVD_AUDIO)
          {
            vSendUopCmd(UOP_TRACK_PLAY, _rNumInStateCtx.wNum, 0, 0);
          }
          else
          {
            vSendUopCmd(UOP_PTT_PLAY, _rNumInStateCtx.wNum, SV_PTT_PLAY_NORMAL, 0);
          }
        }
      }
      else /* input cancelled */
      {
        if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
        {
          vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
        }
        else
        {
          vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
        }

        vSetExitInputState();
        _rSearchStateCtx.bType = SEARCH_NONE;
        vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
      }
    }
    else /* not complete yet! */
    {
      /* update OSD only */
      if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
      {
        vOsdShowChapterTimeSearch(_rNumInStateCtx.wNum, bChNs, (OSD_DVD_CH_SEARCH | 1), 0);
      }
      else
      {
          if (bDiscType == SV_DVD_AUDIO)
          {
            vOsdShowChapterSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), 1,
                                  _rNumInStateCtx.wNum, bChNs, OSD_NO_DISAPPEAR);
          }
          else
          {
            vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), 1,
                                  _rNumInStateCtx.wNum, bChNs, OSD_NO_DISAPPEAR);
          }
      }

      vIrSetTimeOut(IR_TIMEOUT_SEARCH);
    }
  }
  else /* the key is not grabed, assume exit input state */
  {
    vSetExitInputState();

    if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
    {
      vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
    }
    else
    {
      vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
    }

    if ((_bIRKey == IR_LEFT) || (_bIRKey == IR_RIGHT))
    {
      if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
      {
        _rSearchStateCtx.bType = SEARCH_DVD_TIME;
      }
      else
      {
        _rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
      }
      _bIRKey = IR_SELECT;
    }
    else if (_bIRKey == IR_SELECT)
    {
      /* note we pass IR_SELECT to main state change search mode */
      if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
      {
        _rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
      }
      else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_CH_CHANGE)
      {
        if (fgIsTimeSearchAllow() == TRUE)
        {
          /* change to chapter time search in main state */
          _rSearchStateCtx.bType = SEARCH_DVD_TIME;
        }
        else
        {
          vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
#ifdef SEARCH_INPUT_SHOW
          if (bDiscType == SV_DVD_AUDIO)
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS),
                                      (OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
          }
#ifdef DVD_VR_SUPPORT
          else if (bDiscType == SV_DVD_VR)
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
                                      (OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
          }
#endif /* DVD_VR_SUPPORT */          
          else
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
                                      (OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
          }
#endif

          _rSearchStateCtx.bType = SEARCH_NONE;
          return (TRUE);
        }
      }
    }
    else
    {
      if (_bIRKey == IR_TIME_OUT)
      {
        fgRetValue = TRUE;
      }

      _rSearchStateCtx.bType = SEARCH_NONE;
    }
  }

  return (fgRetValue);
}

// *********************************************************************
// Time Search State Machine
// *********************************************************************
static BOOL fgCheckTitleTimeValid(BYTE bHour, BYTE bMin, BYTE bSec) large
{
  BYTE bTmp;

  bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_HH));

  if (bHour > bTmp)
  {
    return (FALSE);
  }
  else if (bHour < bTmp)
  {
    return (TRUE);
  }

  bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_MM));

  if (bMin > bTmp)
  {
    return (FALSE);
  }
  else if (bMin < bTmp)
  {
    return (TRUE);
  }

  bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_SS));

  if (bSec > bTmp)
  {
    return (FALSE);
  }
  else
  {
    return (TRUE);
  }
}

static BOOL fgCheckChapterTimeValid(BYTE bHour, BYTE bMin, BYTE bSec) large
{
  BYTE bTmp;

  bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_CHAPTER_HH));

  if (bHour > bTmp)
  {
    return (FALSE);
  }
  else if (bHour < bTmp)
  {
    return (TRUE);
  }

  bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_CHAPTER_MM));

  if (bMin > bTmp)
  {
    return (FALSE);
  }
  else if (bMin < bTmp)
  {
    return (TRUE);
  }

  bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_CHAPTER_SS));

  if (bSec > bTmp)
  {
    return (FALSE);
  }
  else
  {
    return (TRUE);
  }
}

void vDVDTimeSearchInit(BYTE fgInit) large
{
  BYTE  bDiscType = bSharedInfo(SI_DISC_TYPE);

  vNumInInitState(NUM_IN_DVD_TIME, 5);

  if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
  {
    _rSearchStateCtx.bType = SEARCH_DVD_TIME_CH;
    if (bDiscType == SV_DVD_AUDIO)
    {
      vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS), 0, 0);
    }
#ifdef DVD_VR_SUPPORT
    else if (bDiscType == SV_DVD_VR)
    {
      vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO), 0, 0);
    }
#endif /* DVD_VR_SUPPORT */     
    else
    {
      vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS), 0, 0);
    }
  }
  else
  {
    _rSearchStateCtx.bType = SEARCH_DVD_TIME;
    if (bDiscType == SV_DVD_AUDIO)
    {
      vOsdShowTitleTimeSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), 0, 0);
    }
    else
    {
      vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), 0, 0);
    }
  }

  vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}

BOOL fgDVDTimeSearchState(void) large
{
  BOOL fgRetValue;
  BYTE bHour, bMin, bSec;
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);

  if ((_bIRKey <= IR_ADD10) || (_bIRKey == IR_CLEAR) || (_bIRKey == IR_ADD5))  // megaa ADD5
  {
    /* we accept +10 key but do no action */
    fgRetValue = fgNumInState();

    if (_rNumInStateCtx.rState.fgComplete)
    {
      vSetExitInputState();

      bHour = _rNumInStateCtx.bDig[0];
      bMin = _rNumInStateCtx.bDig[1] * 10 + _rNumInStateCtx.bDig[2];
      bSec = _rNumInStateCtx.bDig[3] * 10 + _rNumInStateCtx.bDig[4];

      if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
      {
        //vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */  // disabled by megaa

        if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
            (fgCheckTitleTimeValid(bHour, bMin, bSec) == TRUE))
        {
#ifdef SEARCH_INPUT_SHOW
          if (bDiscType == SV_DVD_AUDIO)
          {
            vOsdShowTitleTimeSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS),
                                    OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
          }
          else
          {
            vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
                                    OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
          }
#endif
          vSendUopCmd(UOP_TIME_PLAY, bHour, bMin, bSec);
        }
        else
        {
          vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */  // added by megaa
          vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
        }
      }
      else /* chapter tiem search */
      {
        //vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */  // disabled by megaa

        if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
            (fgCheckChapterTimeValid(bHour, bMin, bSec) == TRUE))
        {
#ifdef SEARCH_INPUT_SHOW
          if (bDiscType == SV_DVD_AUDIO)
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS),
                                      OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
          }
#ifdef DVD_VR_SUPPORT
          else if (bDiscType == SV_DVD_VR)
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
                                      OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
          }
#endif /* DVD_VR_SUPPORT */          
          else
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
                                      OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
          }
#endif
          vSendUopCmd(UOP_PTT_TIME_PLAY, bHour, bMin, bSec); //?
        }
        else
        {
          vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */  // added by megaa
          vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
        }
      }

      // remember clear search type
      _rSearchStateCtx.bType = SEARCH_NONE;
    }
    else /* _rNumInStateCtx.rState.fgComplete */
    {
      if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
      {
        if (bDiscType == SV_DVD_AUDIO)
        {
          vOsdShowTitleTimeSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS),
                                  _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
        }
        else
        {
          vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
                                  _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
        }
      }
      else /* chapter tiem search */
      {
        if (bDiscType == SV_DVD_AUDIO)
        {
          vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS),
                                    _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
        }
#ifdef DVD_VR_SUPPORT
          else if (bDiscType == SV_DVD_VR)
          {
            vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
                                      _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
          }
#endif /* DVD_VR_SUPPORT */         
        else
        {
          vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
                                    _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
        }
      }

      vIrSetTimeOut(IR_TIMEOUT_SEARCH);
    }
  }
  else /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */
  {
    if ((_bIRKey == IR_LEFT) || (_bIRKey == IR_RIGHT))
    {
      if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
      {
        /* switch to title search */
        vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
        vSetExitInputState();

        /* pass to main state change search mode */
				 _rSearchStateCtx.bType = SEARCH_DVD_TIME_TTL;
      }
      else
      {
        /* switch to chapter search */
        vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
        vSetExitInputState();

        /* pass to main state change search mode */
				 _rSearchStateCtx.bType = SEARCH_DVD_CH;
      }

      _bIRKey = IR_SELECT;
      return (FALSE);
    }
    else /* other keys */
    {
      if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
      {
        vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
      }
      else
      {
        vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
      }

      vSetExitInputState();

      if (_bIRKey == IR_SELECT)
      {
        /* pass to main state change search mode */
        return (FALSE);
      }
      else
      {
        /* remember clear search state */
        _rSearchStateCtx.bType = SEARCH_NONE;
      }
    } /* other keys */
  } /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */

  return(TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -