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

📄 play_dvd.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
      else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
      {
        vOsdShowTitleTimeSearch(_rNumInStateCtx.wNum, bTmp,
                                (OSD_DVD_TTL_SEARCH | 1), 0);
      }

      vIrSetTimeOut(IR_TIMEOUT_SEARCH);
    }
  }
  else if (_bIRKey == IR_CLEAR)
  {
    _rNumInStateCtx.wNum = 0;

    if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
    {
      vOsdShowChapterSearch(_rNumInStateCtx.wNum, bTmp,
                            (OSD_DVD_TTL_SEARCH | 1), 0, 0, OSD_NO_DISAPPEAR);
    }
    else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
    {
      vOsdShowTitleTimeSearch(_rNumInStateCtx.wNum, bTmp,
                              (OSD_DVD_TTL_SEARCH | 1), 0);
    }

    vIrSetTimeOut(IR_TIMEOUT_SEARCH);
  }
  else /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */
  {
    vSetExitInputState();

    if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
        (_rSearchStateCtx.bType == SEARCH_DVD_PTT_WAIT))
    {
      vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
    }
    else if ((_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL) ||
             (_rSearchStateCtx.bType == SEARCH_DVD_TIME_WAIT))
    {
      vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
    }

    if (_bIRKey == IR_SELECT)
    {
      switch (_rSearchStateCtx.bType)
      {
        case SEARCH_DVD_PTT_TTL:
          _rSearchStateCtx.bType = SEARCH_DVD_TIME_TTL;
          break;

        case SEARCH_DVD_TIME_TTL:
          // 20050421, IS00002551, if not PTT allow, don't switch to it, or prohibition shown.
          if (fgIsPTTSearchAllow())
            _rSearchStateCtx.bType = SEARCH_DVD_CH;
          else
            _rSearchStateCtx.bType = SEARCH_NONE;
          break;

        case SEARCH_DVD_TIME_CHANGE:
          if (fgIsTimeSearchAllow() == TRUE)
          {
            /* change to title time search in main state */
            _rSearchStateCtx.bType = SEARCH_DVD_PTT;
          }
          else
          {
            vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
#ifdef SEARCH_INPUT_SHOW
            vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
                                    (OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END), 0);
#endif

            _rSearchStateCtx.bType = SEARCH_NONE;
            return (TRUE);
          }
          break;

        case SEARCH_DVD_PTT_CHANGE:
          if (fgIsPTTSearchAllow() == TRUE)
          {
            /* change to PTT search in main state */
            _rSearchStateCtx.bType = SEARCH_DVD_TIME_CH;
          }
          else
          {
            vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
#ifdef SEARCH_INPUT_SHOW
            vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
                                  (OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END),
                                  bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
                                  OSD_TIMEOUT_SHORT);
#endif
            _rSearchStateCtx.bType = SEARCH_NONE;
            return (TRUE);
          }
          break;

        default:
          break;
      } /* switch (_rSearchStateCtx.bType) */

      return (FALSE); /* pass to main state change search mode */
    }
    else if ((_bIRKey == IR_LEFT) || (_bIRKey == IR_RIGHT))
    {
      if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
      {
        /* swicth to PTT search by main state */
#ifdef PLAYER_GOTO
        _rSearchStateCtx.bType = SEARCH_DVD_TIME_CH;  // megaa Goto
#else
        _rSearchStateCtx.bType = SEARCH_NONE;
#endif
      }
      else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
      {
        /* swicth to title time search by main state */
        _rSearchStateCtx.bType = SEARCH_DVD_PTT;
      }

      _bIRKey = IR_SELECT;
      return (FALSE); /* pass to main state change search mode */
    }
    else
    {
      _rSearchStateCtx.bType = SEARCH_NONE;
    }
  }

  return(TRUE);
}

void vDVDTitleSearchExit(void) large
{
  if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
      (_rSearchStateCtx.bType == SEARCH_DVD_PTT_WAIT))
  {
    vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
  }
  else if ((_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL) ||
           (_rSearchStateCtx.bType == SEARCH_DVD_TIME_WAIT))
  {
    vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
  }

  if (_bIRKey != IR_SELECT)
  {
    _rSearchStateCtx.bType = SEARCH_NONE;
  }
}

// *********************************************************************
// Change audio stream
// *********************************************************************
void vDVDAudioChangeInit(BYTE fgInit) large
{
  vDVDShowAudio(bSharedInfo(SI_AST_NO), bSharedInfo(SI_AST_NS));

  vIrSetTimeOut(IR_TIMEOUT_AUDIO);
}

BOOL fgDVDAudioChangeState(void) large
{
  BYTE bTmp1 = bSharedInfo(SI_AST_NO);
  BYTE bTmp2 = bSharedInfo(SI_AST_NS);
#ifdef SUPPORT_DVD_AUDIO
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
#endif

  if ((bSharedInfo(SI_PBC_STATE) != SV_PLAY) || (bTmp1 >= bTmp2) || (bTmp2 == 0))
  {
    vSetExitInputState();
    return (FALSE);
  }

  if (_bIRKey == IR_AUDIO) /* change to next AST */
  {
    if (bTmp2 > 1)
    {
      bTmp1++;
      if (bTmp1 >= bTmp2)
      {
        bTmp1 = 0;
      }

  #ifdef SUPPORT_DVD_AUDIO
      if (bDiscType == SV_DVD_AUDIO)
      {
        vSetSharedInfo(SI_DVD_AUDIO_USR_AST, bTmp1);
        vNotifySharedInfo(SI_DVD_AUDIO_USR_AST, 0, 0);
      }
  #endif /* SUPPORT_DVD_AUDIO */

  #ifdef AUDIO_STREAM_CHANGE_MUTE
      if (!fgIsMute()                             /* if mute off */
        #if (DVD_CHG_AST_OPT3 == SV_UOP_BLOCK)
          && (fgCheckUopBlock(SV_NV_A_CHANGE) == FALSE)  /* if UOP not block */
        #endif
        )
      {
        if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
        {
          vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT + AST_PCM_CHANGE_UNMUTE_CNT); // extra mute time for PCM
        }
        else
        {
          vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT);
        }
      }
      vSetAudioStreamChange(AST_NORMAL_CHANGE_CNT, bTmp1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
  #else
      vSendUopCmd(UOP_CHANGE_ASTN, bTmp1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
  #endif /* AUDIO_STREAM_CHANGE_MUTE */
    } /* bTmp2 > 1 */

    vIrSetTimeOut(IR_TIMEOUT_AUDIO);
    return (TRUE);
  }
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
  else if ((_bIRKey < IR_ADD10) && (bTmp2 > 1))
  {
    if ((_bIRKey > 0) && (_bIRKey <= bTmp2))
    {
  #if (defined(SUPPORT_DVD_AUDIO) && defined(SET_DVD_AUDIO_USR_AST))
      if (bDiscType == SV_DVD_AUDIO)
      {
        vSetSharedInfo(SI_DVD_AUDIO_USR_AST, _bIRKey - 1);
        vNotifySharedInfo(SI_DVD_AUDIO_USR_AST, 0, 0);
      }
  #endif /* SUPPORT_DVD_AUDIO && SET_DVD_AUDIO_USR_AST */
      
  #ifdef AUDIO_STREAM_CHANGE_MUTE
      if (!fgIsMute()) /* if mute off */
      {
        if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
        {
          vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT + AST_PCM_CHANGE_UNMUTE_CNT); // extra mute time for PCM
        }
        else
        {
          vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT);
        }
      }
      vSetAudioStreamChange(AST_NORMAL_CHANGE_CNT, _bIRKey - 1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
  #else
      vSendUopCmd(UOP_CHANGE_ASTN, _bIRKey - 1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
  #endif /* AUDIO_STREAM_CHANGE_MUTE */
      vSetExitInputState();
    }
    else
    {
      vIrSetTimeOut(IR_TIMEOUT_AUDIO);
    }
    return (TRUE);
  }
#endif
  else
  {
    vSetExitInputState();
  }

  if (_bIRKey == IR_TIME_OUT)
  {
    return (TRUE);
  }

  return (FALSE); // default does not grab the key
}

void vDVDAudioChangeExit(void) large
{
  vOsdShowAudio(OSD_AUDIO_CLEAR, 0, 0, 0, 0, 0, 0);
}

// *********************************************************************
// Change sub-picture stream
// *********************************************************************
void vDVDSubtitleChangeInit(BYTE fgInit) large
{
  vDVDShowSubtitle(bSharedInfo(SI_SPST_NO), bSharedInfo(SI_SPST_NS));

#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
  #ifdef NO_ADD10_KEY
  vNumInInitState(NUM_IN_SEQ_WAIT, 2);
  #else
  vNumInInitState(NUM_IN_TYPE_1, 1);
  #endif
#endif

  vIrSetTimeOut(IR_TIMEOUT_SUBTITLE);
}

BOOL fgDVDSubtitleChangeState(void) large
{
  BYTE bTmp1 = bSharedInfo(SI_SPST_NO);
  BYTE bTmp2 = bSharedInfo(SI_SPST_NS);

  if ((bTmp1 & (~0x41)) == 0x3e) // include 0x3e, 0x3f, 0x7e, 0x7f
  {
    /* take dummy stream as subtitle disabled */
    bTmp1 = 0x40;
  }

  if ((bSharedInfo(SI_PBC_STATE) != SV_PLAY) || ((bTmp1 & 0x1f) >= bTmp2) || (bTmp2 == 0))
  {
    vSetExitInputState();
    return (FALSE);
  }

  if (_bIRKey == IR_SUB_TITLE)
  {
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
  #ifdef NO_ADD10_KEY
  vNumInInitState(NUM_IN_SEQ_WAIT, 2);
  #else
  vNumInInitState(NUM_IN_TYPE_1, 1);
  #endif
#endif

    if (bTmp2 > 0)
    {
      if (bTmp1 & 0x40)
      {
        if ((bTmp1 & 0x1f) >= bTmp2 - 1)
        {
          /* turn off sub-picture */
          bTmp1 = 0x00;
        }
        else
        {
          /* next sp */
          bTmp1 = ((bTmp1 & 0x1f) + 1) | 0x40;
        }
      }
      else
      {
        bTmp1 = 0x40; /* first stream is 0 */
      }
      vSendUopCmd(UOP_CHANGE_SPSTN, bTmp1, 0, 0);
    } /* bTmp2 > 0 */

    vIrSetTimeOut(IR_TIMEOUT_SUBTITLE);
    return (TRUE);
  }
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
  else if ((_bIRKey <= IR_ADD10 || _bIRKey == IR_ADD5) && (bTmp2 > 0) && (bTmp1 & 0x40)) /* only valid when sub-title on */  // megaa ADD5
  {
    fgNumInState();

    if (_rNumInStateCtx.rState.fgComplete)
    {
      if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
          (_rNumInStateCtx.wNum <= bTmp2))
      {
        if (_rNumInStateCtx.wNum > 0)
        {
          vSendUopCmd(UOP_CHANGE_SPSTN, (_rNumInStateCtx.wNum - 1) | 0x40, 0, 0);
        }
  #ifdef NO_ADD10_KEY
        else if (_rNumInStateCtx.wNum == 0)
        {
          vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0); /* sub-title off */
        }
  #endif
      }
      else
      {
        vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
      }
      vSetExitInputState();
    }
  #ifndef NO_ADD10_KEY
    else if (_bIRKey == IR_NUM0) /* the fgNumInState() does not handle number 0 */
    {
      vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0); /* sub-title off */
      vSetExitInputState();
    }
  #endif /* NO_ADD10_KEY */
    else /* _rNumInStateCtx.rState.fgComplete */
    {
      vOsdShowSubtitle(OSD_SUBTITLE_HILI | _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.wNum, bTmp2,
                       bSharedInfo(SI_SP_LCD_0), bSharedInfo(SI_SP_LCD_1), OSD_NO_DISAPPEAR);
      vIrSetTimeOut(IR_TIMEOUT_SUBTITLE);
    }

    return (TRUE);
  }
#endif
  else
  {
    vSetExitInputState();
  }

  if (_bIRKey == IR_TIME_OUT)
  {
    return (TRUE);
  }

  return (FALSE); // default does not grab the key
}

void vDVDSubtitleChangeExit(void) large
{
  vOsdShowSubtitle(OSD_SUBTITLE_CLEAR, 0, 0, 0, 0, 0);
}

// *********************************************************************
// Change Angle
// *********************************************************************
void vDVDAngleChangeInit(BYTE fgInit) large
{
  vOsdShowAngle(OSD_ANGLE_HILI, bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS));

  vIrSetTimeOut(IR_TIMEOUT_ANGLE);
}

BOOL fgDVDAngleChangeState(void) large
{
  BYTE bTmp1 = bSharedInfo(SI_AGL_NO);
  BYTE bTmp2 = bSharedInfo(SI_AGL_NS);

  if ((bSharedInfo(SI_PBC_STATE) != SV_PLAY) ||
      (bTmp2 <= 1) || (bTmp2 > 9) || (bTmp1 > bTmp2))
  {
    vSetExitInputState();
    if (_bIRKey == IR_TIME_OUT)
    {
      return (TRUE);
    }
    else
    {
      return (FALSE);
    }
  }

  if (_bIRKey == IR_ANGLE) /* change to next angle */
  {
#if 0
    if (bTmp1 >= bTmp2)
    {
      bTmp1 = 1;
    }
    else
    {
      bTmp1++;
    }
    vSendUopCmd(UOP_CHANGE_AGL, bTmp1, 0, 0);
#else
    vSendUopCmd(UOP_NEXT_AGL, 0, 0, 0);
#endif

    vIrSetTimeOut(IR_TIMEOUT_ANGLE);
    return (TRUE);
  }
  else if ((_bIRKey <= IR_NUM9) && (bTmp2 > 1))
  {
    if ((_bIRKey > 0) && (_bIRKey <= bTmp2))
    {
      vSendUopCmd(UOP_CHANGE_AGL, _bIRKey, 0, 0);
      /* don't escape input state here, update OSD */
      vOsdShowAngle(OSD_ANGLE_HILI, _bIRKey, bTmp2);
    }

    vIrSetTimeOut(IR_TIMEOUT_ANGLE);
    return (TRUE);
  }
  else
  {
    vSetExitInputState();
  }

  if (_bIRKey == IR_TIME_OUT)
  {
    return (TRUE);
  }

  return (FALSE); // default does not grab the key
}

void vDVDAngleChangeExit(void) large
{
  if (fgIsAngleShow())
  {
    vOsdShowAngle(OSD_ANGLE_NORMAL, bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS));
  }
  else
  {
    vOsdShowAngle(OSD_ANGLE_CLEAR, 0, 0);
  }
}

// *********************************************************************
// Change display mode
// *********************************************************************
void vDVDDisplayChangeInit(BYTE fgInit) large
{
  vOsdDisplayChange(DISP_REMAIN_CHG_INIT, bCurrRemainType());
  vIrSetTimeOut(IR_TIMEOUT_DISPLAY);
}

⌨️ 快捷键说明

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