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

📄 play_dvd.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
BOOL fgDVDDisplayChangeState(void) large
{
  BYTE bType = bCurrRemainType();

  if (_bIRKey != IR_DISPLAY)
  {
    vSetExitInputState();

    if (_bIRKey == IR_TIME_OUT)
    {
      return (TRUE);
    }
  }
  else /* if (_bIRKey == IR_DISPLAY) */
  {
    bType++;

    if (bType > OSD_SHOW_DVD_REMAIN_MAX)
    {
      bType = OSD_SHOW_DISABLE;
    }

    vOsdDisplayChange(DISP_REMAIN_CHG_INIT, bType);
    vIrSetTimeOut(IR_TIMEOUT_DISPLAY);
    return (TRUE);
  }

  return (FALSE);
}

void vDVDDisplayChangeExit(void) large
{
  vOsdDisplayChange(DISP_REMAIN_CHG_EXIT, 0);
}

// *********************************************************************
// Handle playback UOP return
// *********************************************************************
#ifndef NEW_PLAY
BYTE bDVDHandleUopRet(BYTE bUopId, BYTE bUopRet) large
{
  BYTE bRet;
  BYTE bTmp1, bTmp2;

  if (bUopRet != SV_NO_ERROR)
  {
    bRet = UOP_FAIL; /* show error */
  }
  else
  {
    bRet = UOP_UPDATE;
  }

  switch (bUopId)
  {
    case UOP_DIGITAL_BTN:
    case UOP_ARROW_BTN:
    {
      bRet = UOP_OK; /* no show error */
      break;
    }

    /* normal playback */
    case UOP_PLAY:
    case UOP_RESUME_PLAY:
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdShowPlayStatus(OSD_SHOW_PLAY, OSD_TIMEOUT_SHORT);
        if (bSharedInfo(SI_DVD_DOM) == SV_VTSTT_DOM)
        {
          VfdShowPlayInfo(VFD_INFO_TITLE_CHAPTER, bSharedInfo(SI_TT_NO), bSharedInfo(SI_TRACK_NO));
        }
      }
      _fgDVDStopPlayWait = FALSE ;
      break;

    /* case UOP_PAUSE: */
    /* case UOP_STOP: */
    case UOP_NEXT:
#ifdef DVD_SHOW_MSG_FIRST
      if (bUopRet != SV_NO_ERROR)
      {
        /* TODO: recall play status */
        vOsdShowPlayStatus(OSD_SHOW_CLEAR, 0);
      }
#else
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdShowPlayStatus(OSD_SHOW_NEXT_CH, OSD_TIMEOUT_SHORT);
      }
#endif
      break;

    case UOP_TOP:
    case UOP_PREVIOUS:
#ifdef DVD_SHOW_MSG_FIRST
      if (bUopRet != SV_NO_ERROR)
      {
        /* TODO: recall play status */
        vOsdShowPlayStatus(OSD_SHOW_CLEAR, 0);
      }
#else
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdShowPlayStatus(OSD_SHOW_PREV_CH, OSD_TIMEOUT_SHORT);
      }
#endif
#ifdef KARAOKE_SCORING
      if (bUopRet == SV_NO_ERROR)
      {
        vAdspResetKScore();
      }
#endif
      break;

    case UOP_REPEAT:
      bTmp1 = bSharedInfo(SI_REPEAT_MODE);
      bTmp2 = bSharedInfo(SI_USR_AUX_CTRL);
      if ((bUopRet == SV_NO_ERROR) && (!fgISUsrSeqPlay(bTmp2)))
      {
        switch (bTmp1)
        {
          case SV_REPEAT_ALL:
            vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_ALL, OSD_TIMEOUT_SHORT);
#ifdef PLAYER_GOTO
            // megaa Goto begin
            if (fgIsInGoto())
            {
              vShowGotoRepeat(OSD_MSG_ICON_RPT_ALL);
            }
            // megaa Goto end
#endif
            break;

          case SV_REPEAT_TITLE:
            vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_TITLE, OSD_TIMEOUT_SHORT);
#ifdef PLAYER_GOTO
            // megaa Goto begin
            if (fgIsInGoto())
            {
              vShowGotoRepeat(OSD_MSG_ICON_RPT_TT);
            }
            // megaa Goto end
#endif
            break;

          case SV_REPEAT_CHAPTER:
            vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_CHAPTER, OSD_TIMEOUT_SHORT);
#ifdef PLAYER_GOTO
            // megaa Goto begin
            if (fgIsInGoto())
            {
              vShowGotoRepeat(OSD_MSG_ICON_RPT_CH);
            }
            // megaa Goto end
#endif
            break;

          case SV_REPEAT_NONE:
          case SV_REPEAT_ABNONE:
            vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_OFF, OSD_TIMEOUT_SHORT);
#ifdef PLAYER_GOTO
            // megaa Goto begin
            if (fgIsInGoto())
            {
              vShowGotoRepeat(OSD_MSG_OFF);
            }
            // megaa Goto end
#endif
            break;

          default:
            break;
        } /* switch () */
      }
      break;

    /* trick mode control */
#ifdef DVD_SHOW_MSG_FIRST
    case UOP_FORWARD:
    case UOP_REVERSE:
      /* note only for FF/FR/SF/SR */
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdShowPlayStatus(OSD_SHOW_CLEAR, 0);
        bRet = UOP_OK; /* no need to update again! */
      }
      break;
#endif /* DVD_SHOW_MSG_FIRST */

    /* case UOP_STEP: */
    /* case UOP_STEP_BACK: */
    /* case UOP_A_TO_B: */
    /* case UOP_FREEZE: */

    /* PBC control */
    case UOP_MENU_CALL:
      if (bUopRet == SV_NO_ERROR)
      {
        vDVDShowMenuType(OSD_TIMEOUT);
      }
      break;

    /* case UOP_RETURN: */
    case UOP_CHANGE_ASTN:
    case UOP_NEXT_ASTN:
    {
      bTmp1 = bSharedInfo(SI_AST_NO);
      bTmp2 = bSharedInfo(SI_AST_NS);

#ifdef AUDIO_STREAM_CHANGE_MUTE
      if (!fgIsMute()) /* if mute off */
      {
        // TODO: if change from PCM to PCM?
        if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
        {
          vAdspMute(ADSP_ON, AST_PCM_CHANGE_UNMUTE_CNT); // extra mute time for PCM
        }
      }
#endif /* AUDIO_STREAM_CHANGE_MUTE */

      if ((bUopRet == SV_NO_ERROR) && (bTmp1 < bTmp2) && (bTmp2 > 0))
      {
#ifdef PLAYER_KARAOKE
        if ((bAdspCurrVocal() != VOCAL_AUDIO1) && (bAdspCurrVocal() != VOCAL_AUDIO2))
#endif
        {
          vDVDShowAudio(bTmp1, bTmp2);
        }
      //#if SUPPORT_DVD_AUDIO
      #if 0
        if (bSharedInfo(SI_DISC_TYPE) == SV_DVD_AUDIO)
          vSendUopCmd(UOP_TOP, 0, 0, 0);
      #endif
      }
      else
      {
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_DIRECT)
        vOsdShowAudio(OSD_AUDIO_CLEAR, 0, 0, 0, 0, 0, 0);
#else
        if (fgIsInputStateValid(INPUT_STATE_AUDIO_CHANGE))
        {
          fgSetPlayPostKey(IR_TIME_OUT);
        }
#endif
      }
      break;
    }

    case UOP_CHANGE_SPSTN:
    case UOP_NEXT_SPSTN:
    case UOP_SP_SWITCH:
    case UOP_NEXT_SPSTN_NOSP:
    {
      bTmp1 = bSharedInfo(SI_SPST_NO);
      bTmp2 = bSharedInfo(SI_SPST_NS);

      if ((bUopRet == SV_NO_ERROR) && (bTmp2 > 0) && ((bTmp1 & 0x1f) < bTmp2))
      {
        vDVDShowSubtitle(bTmp1, bTmp2);
      }
      else
      {
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_DIRECT)
        vOsdShowSubtitle(OSD_SUBTITLE_CLEAR, 0, 0, 0, 0, 0);
#else
        if (fgIsInputStateValid(INPUT_STATE_SUBTITLE_CHANGE))
        {
          fgSetPlayPostKey(IR_TIME_OUT);
        }
#endif
      }
      break;
    } /* UOP_CHANGE_SPSTN */

#ifdef DVD_ANGLE_CHANGE_SELECT
    case UOP_NEXT_AGL:
    case UOP_CHANGE_AGL:
    {
      if (!fgIsInputStateValid(INPUT_STATE_VREMOTE))
      {
        if (bUopRet == SV_NO_ERROR)
        {
          if (fgIsInputStateValid(INPUT_STATE_ANGLE_CHANGE))
          {
            vOsdShowAngle(OSD_ANGLE_HILI, bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS));
          }
          else /* not in angle select mode */
          {
            if (fgIsAngleShow())
            {
              vOsdShowAngle(OSD_ANGLE_NORMAL, bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS));
            }
            else
            {
              vOsdShowAngle(OSD_ANGLE_CLEAR, 0, 0);
            }
          }
          bRet = UOP_OK; /* no need to update angle mark again */
        }
      }
      break;
    }
#endif /* DVD_ANGLE_CHANGE_SELECT */

    case UOP_RESUME:
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_RESUME, OSD_TIMEOUT_SHORT);
      }
      break;

    /* case UOP_DEFAULT: */
    /* case UOP_TOP: */
    /* case UOP_GOUP: */
    /* case UOP_STILL_OFF: */
    /* case UOP_MEMORY_PLAY: */

    /* non-PBC control */
    /* case UOP_PBC_SWITCH: */

#ifdef PLAYER_DIGEST
    case UOP_DIGEST:
      if (fgIsInputStateValid(INPUT_STATE_DIGEST))
      {
        if (bUopRet == SV_NO_ERROR)
        {
          fgSetPlayPostKey(IR_DONE);
        }
        else /* error occur */
        {
          fgSetPlayPostKey(IR_TIME_OUT);
        }
      }
      break;
#endif      

    /* case UOP_PROGRAM: */
    /* case UOP_RANDOM: */
    case UOP_SHUFFLE:
      if (bUopRet == SV_NO_ERROR)
      {
        bTmp1 = bSharedInfo(SI_USR_AUX_CTRL);
        bTmp2 = bSharedInfo(SI_REPEAT_MODE);

        if (fgISUsrSeqPlay(bTmp1) && fgISUsrSeqPlay(bTmp2))
        {
          break;
        }

        if (bSharedInfo(SI_USR_PBC_CTRL) == SV_SHUFFLE)
        {
          vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_SHUFFLE_ON, OSD_TIMEOUT_SHORT);
        }
        else
        {
          vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_SHUFFLE_OFF, OSD_TIMEOUT_SHORT);
        }
      }
      break;

    /* case UOP_MEMORY: */
#ifdef PLAYER_BOOKMARK
    case UOP_BOOKMARK:
      vBookmarkUpdate();
      break;
#endif      

    /* item play */
    /* case UOP_TIME_PLAY: */
    case UOP_GROUP_PLAY:
    case UOP_TITLE_PLAY:
      if (_bInputState == INPUT_STATE_TITLE_SEARCH)
      {
        if (bUopRet != SV_NO_ERROR)
        {
          /* title search failed, escape */
          fgSetPlayPostKey(IR_TIME_OUT);
          break;
        }

        if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_WAIT)
        {
          /* call the title search state to switch to time search */
          fgSetPlayPostKey(IR_SELECT);
          _rSearchStateCtx.bType = SEARCH_DVD_TIME_CHANGE;
          vIrSetTimeOut(IR_TIMEOUT_SEARCH);
          break;
        }
        else if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_WAIT)
        {
          /* call the title search state to switch to PTT search */
          fgSetPlayPostKey(IR_SELECT);
          _rSearchStateCtx.bType = SEARCH_DVD_PTT_CHANGE;
          vIrSetTimeOut(IR_TIMEOUT_SEARCH);
          break;
        }
     }
     /* don't break here */
    case UOP_TRACK_PLAY:
    case UOP_PTT_PLAY:
      if ((_bInputState == INPUT_STATE_PTT_SEARCH) &&
          (_rSearchStateCtx.bType == SEARCH_DVD_TIME_CH_WAIT))
      {
        if (bUopRet != SV_NO_ERROR)
        {
          /* title search failed, escape */
          fgSetPlayPostKey(IR_TIME_OUT);
          break;
        }

        /* call the chapter search state to switch to time search */
        fgSetPlayPostKey(IR_SELECT);
        _rSearchStateCtx.bType = SEARCH_DVD_TIME_CH_CHANGE;
        vIrSetTimeOut(IR_TIMEOUT_SEARCH);
        break;
      }
      else
      {
        vOsdDisplayChange(DISP_PLAY_INFO, 0);

      }
      break;

    /* case UOP_TRACK_PLAY: */
    /* case UOP_MP3_PLAY: */
    /* case UOP_JPEG_PLAY: */

#ifdef SUPPORT_DVD_AUDIO
    case UOP_NEXT_DLIST:
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_DA_NEXT_PAGE, OSD_TIMEOUT_SHORT);
      }
      break;

    case UOP_PREV_DLIST:
      if (bUopRet == SV_NO_ERROR)
      {
        vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_DA_PREVIOUS_PAGE, OSD_TIMEOUT_SHORT);
      }
      break;
#endif /* SUPPORT_DVD_AUDIO */

    default:
      break;
  }

  return (bRet);
}
#endif /*#ifndef NEW_PLAY */

BOOL fgDVDRemainKey(void) large
{
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bType = bCurrRemainType();

  if (!fgIsDiscPlay(bPbcState))
  {
    vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }

#ifdef DISPLAY_SHOW_INFO_FIRST
  vChangeInputState(INPUT_STATE_DVD_DISPLAY, FALSE);
#else
  bType++;

  bType = bDvdCheckRemainShow(TRUE, bType); /* check only */

  if (bType > OSD_SHOW_DVD_REMAIN_MAX)
  {
    bType = OSD_SHOW_DISABLE;
  }

  if (bType != bCurrRemainType())
  {
    vOsdDisplayChange(DISP_REMAIN_CHG, bType);
  }
#endif

  return (UOP_OK);
}

BOOL fgDVDSearchKey(BOOL fgGoto) large
{
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
  BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);
  BYTE bDom = bSharedInfo(SI_DVD_DOM);
#ifdef PLAYER_GOTO
  BYTE bHliState = bSharedInfo(SI_HLI_STATE);
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
#endif

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

⌨️ 快捷键说明

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