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

📄 play_dvd.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:

#ifdef PLAYER_GOTO
  if (fgIsDiscPlay(bPbcState) &&
      (_rSearchStateCtx.bType == SEARCH_NONE) &&
      (bDiscType == SV_DVD_VIDEO) && fgGoto)
  {
    #ifdef GOTO_VTSTT_DOM_ONLY
    if ((bDom == SV_VTSTT_DOM) && (bHliState == SV_OFF))
    #endif /* GOTO_VTSTT_DOM_ONLY */
    {
      vChangeInputState(INPUT_STATE_GOTO, FALSE);
      return (UOP_OK);
    }
  }
#else
  //vGotoDummy();
#endif

  if ((bDom == SV_VTSTT_DOM) || (bDom == SV_ATSTT_DOM))
  {
    if ((_rSearchStateCtx.bType == SEARCH_NONE) ||
        (_rSearchStateCtx.bType == SEARCH_DVD_TIME_CH))
    {
      if (fgIsPTTSearchAllow())
      {
        vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
      }
      else if (fgIsTimeSearchAllow())
      {
        vChangeInputState(INPUT_STATE_DVD_TIME_SEARCH, FALSE);
      }
      else if (fgIsTTLSearchAllow())
      {
        vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
      }
      else
      {
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
        _rSearchStateCtx.bType = SEARCH_NONE;
      }
    }
    else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
    {
      if (fgIsTimeSearchAllow())
      {
        /* switch to chapter time search */
        vChangeInputState(INPUT_STATE_DVD_TIME_SEARCH, FALSE);
      }
      else if (fgIsPTTSearchAllow())
      {
        vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
      }
      else if (fgIsTTLSearchAllow())
      {
        vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
      }
      else
      {
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
        _rSearchStateCtx.bType = SEARCH_NONE;
      }
    }
    else if (_rSearchStateCtx.bType == SEARCH_DVD_PTT)
    {
      if (fgIsTimeSearchAllow())
      {
        /* switch to title time search */
        vChangeInputState(INPUT_STATE_DVD_TIME_SEARCH, FALSE);
      }
      else if (fgIsPTTSearchAllow())
      {
        vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
      }
/*      
      else if (fgIsTTLSearchAllow())
      {
        vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
      }
*/      
      else
      {
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
        _rSearchStateCtx.bType = SEARCH_NONE;
      }
    }
    else if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
             (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL))
    {
      if (fgIsTTLSearchAllow())
      {
        vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
      }
      else
      {
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
        _rSearchStateCtx.bType = SEARCH_NONE;
      }
    }
    else if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
    {
      if (fgIsPTTSearchAllow())
      {
        vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
      }
      else
      {
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
        _rSearchStateCtx.bType = SEARCH_NONE;
      }
    }
    else
    {
      _rSearchStateCtx.bType = SEARCH_NONE;
    }
  }
  else /* non-VTS doamin, only allow title search */
  {
    if (fgIsTTLSearchAllow())
    {
      _rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
      vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
    }
    else
    {
      vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
      _rSearchStateCtx.bType = SEARCH_NONE;
    }
  }

  return (UOP_OK);
}

static BYTE bDVDGetRepeatType(BYTE bType)
{
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
  BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);

  switch (bType)
  {
    case SV_REPEAT_CHAPTER:
      if (fgIsUsrCtrlMode(bMode))
      {
#ifdef DVD_NO_REPEAT_ALL
        return (SV_REPEAT_NONE);
#else
        return (SV_REPEAT_ALL);
#endif
      }
      else /* normal play */
      {
        return (SV_REPEAT_TITLE);
      }

    case SV_REPEAT_TITLE:
#ifdef DVD_NO_REPEAT_ALL
      return (SV_REPEAT_NONE);
#else
      return (SV_REPEAT_ALL);
#endif

    case SV_REPEAT_ALL:
      return (SV_REPEAT_NONE);

    case SV_REPEAT_NONE:
      return (SV_REPEAT_CHAPTER);

    default:
      return (0xff);
  }
}

BOOL fgDVDRepeatKey(void) large
{
  BYTE bUsrCtrl = bSharedInfo(SI_USR_PBC_CTRL);
  BYTE bRepeatType;

  if (0
#ifdef PROGRAM_NO_REPEAT
      || (bUsrCtrl == SV_PROGRAM)
#endif
#ifdef RANDOM_SHUFFLE_NO_REPEAT
      || (bUsrCtrl == SV_RANDOM) || (bUsrCtrl == SV_SHUFFLE)
#endif
    )
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }

  bRepeatType = bDVDGetRepeatType(bSharedInfo(SI_REPEAT_MODE));

  if (bRepeatType == 0xff)
  {
    bRepeatType = bDVDGetRepeatType(bSharedInfo(SI_USR_PBC_CTRL));
  }

  if (bRepeatType == 0xff)
  {
    bRepeatType = SV_REPEAT_CHAPTER;
  }

  vSendUopCmd(UOP_REPEAT, bRepeatType, 0, 0);

  return (UOP_OK);
}


BOOL fgDVDFFKey(void) large
{
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bPbcSpeed = bSharedInfo(SI_PBC_SPEED);

  if (!fgIsDiscPlay(bPbcState))
  {
    vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#ifdef PAUSE_NO_TRICK
  else if (bPbcState == SV_PAUSE)
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

  if(bPbcState == SV_FF)
  {
    if(bPbcSpeed < DVD_FAST_MAX - 1)
    {
      bPbcSpeed++;
    }
    else
    {
#ifdef TRICK_MODE_USE_PLAY
      vSendUopCmd(UOP_PLAY, 0, 0, 0);
      return UOP_OK;
#else
      bPbcSpeed = 0;
#endif
    }
  }
  else
  {
    bPbcSpeed = SV_TWO;
  }

  vSendUopCmd(UOP_FORWARD, SV_FAST, bPbcSpeed, pbDVDFastSpeedTbl[bPbcSpeed]);

  return UOP_OK;
}

BOOL fgDVDFRKey(void) large
{
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bPbcSpeed = bSharedInfo(SI_PBC_SPEED);

  if (!fgIsDiscPlay(bPbcState))
  {
    vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#ifdef PAUSE_NO_TRICK
  else if (bPbcState == SV_PAUSE)
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

  if(bPbcState == SV_FR)
  {
    if(bPbcSpeed < DVD_FAST_MAX - 1)
    {
      bPbcSpeed++;
    }
    else
    {
#ifdef TRICK_MODE_USE_PLAY
      vSendUopCmd(UOP_PLAY, 0, 0, 0);
      return UOP_OK;
#else
      bPbcSpeed = 0;
#endif
    }
  }
  else
  {
    bPbcSpeed = SV_TWO;
  }

  vSendUopCmd(UOP_REVERSE, SV_FAST, bPbcSpeed, pbDVDFastSpeedTbl[bPbcSpeed]);

  return UOP_OK;
}

#ifndef DISABLE_SF
BOOL fgDVDSFKey(void) large
{
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bPbcSpeed = bSharedInfo(SI_PBC_SPEED);

#ifdef SUPPORT_DVD_AUDIO
  if (bSharedInfo(SI_DVD_DOM) == SV_ATSTT_DOM)
  {
    if (!fgIsDiscPlay(bPbcState))
    {
      vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
      return (UOP_OK);
    }
    
    fgSetPlayPostKey(IR_PREV_DLIST);
    return(UOP_OK);
  }
#endif /* SUPPORT_DVD_AUDIO */

  if (!fgIsDiscPlay(bPbcState))
  {
    vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#ifdef PAUSE_NO_TRICK
  else if (bPbcState == SV_PAUSE)
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

#ifdef ZOOM_NO_SLOW_STEP
  if (bSharedInfo(SI_ZOOM_SWITCH) != SV_ZOOM_1)
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

  if (bPbcState == SV_SF)
  {
    if(bPbcSpeed < DVD_SLOW_MAX - 1)
    {
      bPbcSpeed++;
    }
    else
    {
#ifdef SF_SR_SAME_KEY
  #ifdef PLAYER_VRMT
      if (fgIsInputStateValid(INPUT_STATE_VREMOTE))
      {
    #ifdef TRICK_MODE_USE_PLAY
        vSendUopCmd(UOP_PLAY, 0, 0, 0);
        return (UOP_OK);
    #else
        bPbcSpeed = 0;
    #endif
      }
      else
  #endif /* PLAYER_VRMT */
      {
        fgSetPlayPostKey(IR_SR);
        return(UOP_OK);
      }
#else /* not SF_SR_SAME_KEY */
  #ifdef TRICK_MODE_USE_PLAY
      vSendUopCmd(UOP_PLAY, 0, 0, 0);
      return (UOP_OK);
  #else
      bPbcSpeed = 0;
  #endif
#endif /* not SF_SR_SAME_KEY */
    }
  }
#ifdef SF_SR_SAME_KEY
  else if ((bPbcState == SV_SR)
  #ifdef PLAYER_VRMT
           && (fgIsInputStateValid(INPUT_STATE_VREMOTE) == FALSE)
  #endif
          )
  {
    fgSetPlayPostKey(IR_SR);  
    return (UOP_OK);
  }
#endif /* SF_SR_SAME_KEY */
  else
  {
    bPbcSpeed = SV_TWO;
  }

#ifdef DVD_NO_VID_NO_STEP
  vSendUopCmd(UOP_FORWARD, SV_SLOW, bPbcSpeed, 1);
#else
  vSendUopCmd(UOP_FORWARD, SV_SLOW, bPbcSpeed, 0);
#endif

  return (UOP_OK);
}
#endif /* #ifndef DISABLE_SF */

BOOL fgDVDNumKey(void) large
{
  BYTE bState = bSharedInfo(SI_HLI_STATE);
  BYTE bPbc = bSharedInfo(SI_PBC_STATE);
  BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);
  BYTE bChNs = bSharedInfo(SI_CHAP_NS);

  if (fgIsUsrCtrlMode(bMode))
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }

  if ((bPbc == SV_STOP) || (bPbc == SV_STOP_RESUME))
  {
    /* in stop state, select title */
    _rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
    //vChangeInputState(INPUT_STATE_TITLE_SEARCH, TRUE);
    vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
  }
  else
  {
    if (bState == SV_OFF)
    {
#ifdef NUM_KEY_SEARCH
      if (
  #ifdef ONE_PTT_NO_SEARCH
          (bChNs > 1)
  #else
          (bChNs > 0)
  #endif
          &&
  #ifdef NUM_KEY_DIRECT_SEARCH_CHECK_RANGE
    #ifdef NO_ADD10_KEY
          ((_bIRKey < IR_ADD10) && (_bIRKey * 10 <= bChNs))
    #else
          ((_bIRKey <= IR_ADD10 && _bIRKey <= bChNs) || (_bIRKey == IR_ADD5 && 5 <= bChNs))  // megaa ADD5
    #endif
  #else
          (1)
  #endif
        )
      {
  #ifdef  NUM_KEY_DIRECT_SEARCH
        if (fgIsPTTSearchAllow())
        {    	
          vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
        }  
        else
        {   	
          vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
          _rSearchStateCtx.bType = SEARCH_NONE;
        }
  #else
        vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
  #endif
      }
      else /* if only one chapter, can not do PTT search */
#endif
      {
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
        return (UOP_OK);
      }
    }
    else
    {
      vChangeInputState(INPUT_STATE_SELECT_NUM, TRUE);
    }
  }

  return (UOP_OK);
}

BOOL fgDVDEnterKey(void) large
{
  BYTE bState = bSharedInfo(SI_PBC_STATE);

  if (fgIsDiscPlay(bState))
  {
    /* the ENTER for hili is only valid when disc play */
    vSendUopCmd(UOP_ARROW_BTN, SV_ACTIVATE, 0, 0);
  }
  else
  {
    fgSetPlayPostKey(IR_PLAY);
    return (UOP_OK);
  }

  return (UOP_OK);
}

BOOL fgDVDMenuKey(void) large
{
  BYTE bUsrCtrl = bSharedInfo(SI_USR_PBC_CTRL);
  BYTE bDom = bSharedInfo(SI_DVD_DOM);
  BYTE bMenuId = bSharedInfo(SI_DVD_MENU_TYPE);
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

#ifdef USR_

⌨️ 快捷键说明

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