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

📄 play_dvd.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
  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);
}

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
// *********************************************************************
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)
        {

          bTmp1=bSharedInfo(SI_TT_NO);
		  bTmp2=bSharedInfo(SI_TRACK_NO);
          vVfdWord(VFD_WORD_TT, bHEXToBCD(bTmp1), 1);
          vVfdWord(VFD_WORD_CH, bHEXToBCD(bTmp2), 1);
          vVfdSymbol(VFD_SYM_PLAYINFO_TT_CH);

        }
      }
      _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)))
      {
/*
  Move the normal display in else condition in any case by Bright_liu 2005/12/01, for CQ(PL00205173)
  In Goto menu, press the IR_AB first, the press the IR_REPEAT key, exit the GOTO menu,
  press IR_VRMT/IR_PROGRAM/IR_MARK, no OSD display.
*/
        switch (bTmp1)
        {
          case SV_REPEAT_ALL:
#ifdef PLAYER_GOTO
            // megaa Goto begin
            if (fgIsInGoto())
            {
              vShowGotoRepeat(OSD_MSG_ICON_RPT_ALL);
            }
            else
            // megaa Goto end
#endif
            {
              vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_ALL, OSD_TIMEOUT_SHORT);
            }
            break;

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

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

          case SV_REPEAT_NONE:
          case SV_REPEAT_ABNONE:
#ifdef PLAYER_GOTO
            // megaa Goto begin
            if (fgIsInGoto())
            {
              vShowGotoRepeat(OSD_MSG_OFF);
            }
            else
            // megaa Goto end
#endif
            {
              vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_OFF, OSD_TIMEOUT_SHORT);
            }
            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
        {

// Seiya: Added on 2004/07/27 for dual mono switch.
#ifdef DVD_VR_SUPPORT
              // LLY.1126, must set dual mono L/R channel to DSP immediately
              // while NV can know current audio stream type is dual mono
              // Otherwise, L/R channel info maybe wrong during vShowAudio()
              // Because, the info. is read-back from DSP
              if(fgIsVRDualMono())
              {
                //set desired dual mono stream channel mode,
                vAdspLR(bSharedInfo(SH_VR_DUAL_MONO_MODE));
              }
#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;
    }

⌨️ 快捷键说明

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