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

📄 play_vcd.c

📁 MTK1389 SOURCE CODE
💻 C
📖 第 1 页 / 共 3 页
字号:
BOOL fgVCDResumeKey(void) large
{
  BYTE bState = bSharedInfo(SI_PBC_STATE);

#if (STOP_RESUME_STYLE == STOP_RESUME_TWO_KEYS)
  if ((bState == SV_STOP) || (bState == SV_STOP_RESUME))
  {
    vSendUopCmd(UOP_RESUME_PLAY, 0, 0, 0); /* resume play */
    return (UOP_OK);
  }
#elif (STOP_RESUME_STYLE == STOP_RESUME_TWO_STOP)
  if (bState == SV_STOP_RESUME)
  {
    fgSetPlayPostKey(IR_PLAY);
    return (UOP_OK);
  }
#endif

  vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);

  return (UOP_OK);
}

BOOL fgVCDNextKey(void) large
{
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bPbcSwitch = bSharedInfo(SI_PBC_SWITCH);
  BYTE bRepeatMode = bSharedInfo(SI_REPEAT_MODE);

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

#ifdef VCD_LAST_TRACK_NEXT_STOP
  if (!fgIsRepeatMode(bRepeatMode) && (bPbcSwitch == SV_PBC_OFF))
  {
    vSendUopCmd(UOP_NEXT, SV_VCD_NEXT_STOP, 0, 0);
    return (UOP_OK);
  }
#else   /* not VCD_LAST_TRACK_NEXT_STOP */
  #ifdef PLAYER_PROGRAM
  if (!fgIsRepeatMode(bRepeatMode) && (bSharedInfo(SI_USR_PBC_CTRL) == SV_PROGRAM))
  {
    if (bSharedInfo(SI_USR_PROGRAM_NO) >= bSharedInfo(SI_USR_PROGRAM_NS))
    {
      vOsdShowError(SV_ERR_LIST_END_TRK, OSD_TIMEOUT_SHORT);
      return (UOP_OK);
    }
  }
  #endif
#endif  /* not VCD_LAST_TRACK_NEXT_STOP */

  vSendUopCmd(UOP_NEXT, VCD_PBC_NEXT_STYLE, 0, 0);

  return (UOP_OK);
}

BOOL fgVCDPrevKey(void) large
{
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bPbcSwitch = bSharedInfo(SI_PBC_SWITCH);
  BYTE bRepeatMode = bSharedInfo(SI_REPEAT_MODE);

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

#ifdef VCD_SHUFFLE_NO_PREV
  if (bSharedInfo(SI_USR_PBC_CTRL) == SV_SHUFFLE)
  {
    return (UOP_FAIL);
  }
#endif

  /* check if next track is valid */
#ifdef VCD_FIRST_TRACK_PREV_STOP
  if (!fgIsRepeatMode(bRepeatMode) && (bPbcSwitch == SV_PBC_OFF))
  {
    vSendUopCmd(UOP_PREVIOUS, (SV_VCD_PREV_STOP | VCD_PREV_STYLE), VCD_GOTOP_OFFSET, 0);
    return (UOP_OK);
  }
#else  /* not VCD_FIRST_TRACK_PREV_STOP */
  #ifdef PLAYER_PROGRAM
  if (!fgIsRepeatMode(bRepeatMode) && (bSharedInfo(SI_USR_PBC_CTRL) == SV_PROGRAM))
  {
    if (bSharedInfo(SI_USR_PROGRAM_NO) <= 1)
    {
      vOsdShowError(SV_ERR_LIST_HEAD_TRK, OSD_TIMEOUT_SHORT);
      return (UOP_OK);
    }
  }
  #endif
#endif /* VCD_FIRST_TRACK_PREV_STOP */

  vSendUopCmd(UOP_PREVIOUS, (VCD_PBC_PREV_STYLE | VCD_PREV_STYLE), VCD_GOTOP_OFFSET, 0);

  return (UOP_OK);
}

BOOL fgVCDStepFKey(void) large
{
#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

  vSendUopCmd(UOP_STEP, 0, 0, 0);

  return (UOP_OK);
}

BOOL fgVCDStepRKey(void) large
{
#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

  vSendUopCmd(UOP_STEP_BACK, 0, 0, 0);

  return (UOP_OK);
}


BOOL fgVCDReturnKey(void) large
{
  if (bSharedInfo(SI_PBC_SWITCH) == SV_PBC_ON)
  {
    vSendUopCmd(UOP_RETURN, 0, 0, 0);
  }
  else
  {
    vOsdShowError(SV_ERR_PBC_ON_ONLY, OSD_TIMEOUT_SHORT);
  }

  return (UOP_OK);
}

BOOL fgVCDAudioKey(void) large
{
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
  BYTE bTmp1 = bSharedInfo(SI_AST_NO);
  BYTE bTmp2 = bSharedInfo(SI_AST_NS);
  BYTE bMode = bAdspCurrVocal();
  BYTE bType;

  /* if is in karaoke mode, the Audio key is not available */
#ifdef PLAYER_KARAOKE
  #if 0
  if (fgIsVocalAssistOn() && (!fgIsVoiceCancel()))
  {
    return (UOP_FAIL);
  }
  #else
  if (fgIsVocalAssistOn())
  {
    vAdspVocalAssist(VOCAL_NO_ASSIST);
  }
  #endif
#endif /* PLAYER_KARAOKE */

  if ((IS_SVCD_TYPE(bDiscType)
#ifdef CVD_4AST
   || (bDiscType == SV_CVD)
#endif
  ) && (bTmp2 > 1))
  {
    bTmp1++;
    if (bTmp1 >= bTmp2)
    {
      bTmp1 = 0;
    }
    vSendUopCmd(UOP_CHANGE_ASTN, bTmp1, 0, 0);
  }
  else /* 2 channel audio stream */
  {
#if 0
    return (UOP_FAIL);
#else
    /* TODO: write to serial EEPROM content */
    switch (bMode)
    {
      case AUDIO_STEREO:
        bMode = AUDIO_MONO_LEFT;
        break;

      case AUDIO_MONO_LEFT:
        bMode = AUDIO_MONO_RIGHT;
        break;

      case AUDIO_MONO_RIGHT:
#ifdef AUD_EN_MIXED_MONO
        bMode = AUDIO_MONO_MIXED;
#else
        bMode = AUDIO_STEREO;
#endif
        break;

      case AUDIO_MONO_MIXED:
      default:
        bMode = AUDIO_STEREO;
        break;
    } /* switch() */

    vAdspLR(bMode);
    vVCDShowAudioLR(TRUE); /* show OSD */
#endif
  } /* 2 channel audio stream */

  return (UOP_OK);
}

BOOL fgVCDSpKey(void) large
{
#ifdef SVCD_OGT
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
  BYTE bTmp1 = bSharedInfo(SI_SPST_NO);
  BYTE bTmp2 = bSharedInfo(SI_SPST_NS);

  if (IS_SVCD_TYPE(bDiscType) && (bTmp2 > 1))
  {
    bTmp1++;
    if (bTmp1 >= bTmp2)
    {
      bTmp1 = 0;
    }
    vSendUopCmd(UOP_CHANGE_SPSTN, bTmp1, 0, 0);
    return (UOP_OK);
  }
  else
#endif
  {
    return (UOP_FAIL);
  }
}


BOOL fgVCDPbcKey(void) large
{
  BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

  if (fgIsDiscPlay(bPbcState) && fgIsUsrCtrlMode(bMode))
  {
    if (bMode == SV_PROGRAM)
    {
      vSendUopCmd(UOP_PROGRAM, SV_PROGRAM_STOP, 0, 0);
    }
    else if (bMode == SV_SHUFFLE)
    {
      vSendUopCmd(UOP_SHUFFLE, SV_OFF, 0, 0);
    }
    else if (bMode == SV_RANDOM)
    {
      vSendUopCmd(UOP_RANDOM, SV_OFF, 0, 0);
    }
    else
    {
      vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
      return (UOP_OK);
    }
  }

  if (bSharedInfo(SI_PBC_SWITCH) == SV_PBC_ON)
  {
    #ifdef SETUP_MENU_PBC_CTRL
    vSetSharedInfo(SH_VCD_USR_PBC_OFF, TRUE);
    #endif

    if ((bSharedInfo(SI_TRACK_NO) == 0) && (bPbcState != SV_STOP))
    {
      vSendUopCmd(UOP_PBC_SWITCH, 1, 0, 0);
    }
    else
    {
      /* switch to PBC OFF at any time */
      vSendUopCmd(UOP_PBC_SWITCH, 0, 0, 0);
    }
  }
  else /* switch to PBC ON need to check */
  {
    if (bSharedInfo(SI_PBC_CTRL_VALID) == SV_PBC_ON) /* disc with PBC */
    {
#ifdef VCD_FORCE_PBC_ON_OFF
      if (bPbcState != SV_STOP)
      {
        vSetSharedInfo(SI_VCD_PBC_OFF, FALSE); /* user force to PBC on */
        #ifdef SETUP_MENU_PBC_CTRL
        vSetSharedInfo(SH_VCD_USR_PBC_OFF, FALSE);
        #endif
        vSendUopCmd(UOP_PBC_SWITCH, 1, 0, 0);
      }
      else
#endif /* VCD_FORCE_PBC_ON_OFF */

      /* we do not check setup menu seting here! */
      /* only in fully stop can switch to PBC on */
      if (bPbcState == SV_STOP)
      {
        vSetSharedInfo(SI_VCD_PBC_OFF, FALSE); /* user force to PBC on */
        #ifdef SETUP_MENU_PCB_CTRL
        vSetSharedInfo(SH_VCD_USR_PBC_OFF, FALSE);
        #endif
        vSendUopCmd(UOP_PBC_SWITCH, 0, 0, 0);
#ifdef VCD_PBC_ON_PLAY
        vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_PBC_ON, OSD_TIMEOUT_SHORT);
        vSendUopCmd(UOP_PLAY, 0, 0, 0);
#endif
      }
      else
      {
        vOsdShowError(SV_ERR_STOP_ONLY, OSD_TIMEOUT_SHORT);
      }
    }
    else /* if (bSharedInfo(SI_PBC_CTRL_VALID) == SV_PBC_OFF) */ /* VCD 1.1 */
    {
      vOsdShowError(SV_ERR_DISC_NOT_SUPPORT, OSD_TIMEOUT_SHORT);
    }
  } /* switch to PBC ON */

  return (UOP_OK);
}

#ifdef PLAYER_DIGEST
BOOL fgVCDDigestKey(void) large
{
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);

  /* need to check PBC on/off and switch input state */
#ifdef PLAYER_DIGEST
  vChangeInputState(INPUT_STATE_DIGEST, FALSE);
#endif

  return (UOP_OK);
}
#endif


#ifdef SIMPLE_ZOOM_MODE

#define VCD_ZOOM_USED_MODE   6

static code BYTE pbVcdZoomMode[VCD_ZOOM_USED_MODE] = {
  SV_ZOOM_2,
  SV_ZOOM_3,
  SV_ZOOM_4,
  SV_ZOOM_21,
  SV_ZOOM_31,
  SV_ZOOM_41
};

#endif /* SIMPLE_ZOOM_MODE */

BOOL fgVCDZoomInKey(void) large
{
  BYTE bZoom;
#ifdef SIMPLE_ZOOM_MODE
  BYTE bIdx;
#endif
#ifdef ZOOM_NO_SLOW_STEP
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

  if (
#if ((!defined DISABLE_SF) && (!defined DISABLE_SR))   	
  	  (bPbcState == SV_SF) || (bPbcState == SV_SR) ||
#endif  	  
      (bPbcState == SV_STEP) || (bPbcState == SV_STEP_BACK))
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

  /* for CDDA track */
  if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }

#ifdef VCD_MENU_NO_ZOOM_IN
  if (bSharedInfo(SI_TRACK_NO) == 0)
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
  else
#endif /* VCD_MENU_NO_ZOOM_IN */
  {
    bZoom = bSharedInfo(SI_ZOOM_SWITCH);

  #ifdef ENABLE_ZOOM_USER_MODE
    if (bZoom == SV_ZOOM_USR)
    {
      vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_OFF, 0, 0);
      return (UOP_OK);
    }
  #endif

    // get next zoom mode
#ifdef SIMPLE_ZOOM_MODE
    for (bIdx = 0; bIdx < VCD_ZOOM_USED_MODE; bIdx++)
    {
      if (pbVcdZoomMode[bIdx] > bZoom)
      {
        bZoom = pbVcdZoomMode[bIdx];
        break;
      }
    }
    
    if (bIdx == VCD_ZOOM_USED_MODE)
    {
      bZoom = SV_ZOOM_IN_MAX + 1;
    }
#else
    bZoom += 1;
#endif

    if (bZoom > SV_ZOOM_IN_MAX)
    {
  #ifdef ZOOM_IN_OUT_SAME_KEY
      fgSetPlayPostKey(IR_ZOOM_OUT);
      return (UOP_OK);
  #else
      bZoom = SV_ZOOM_OFF;
  #endif
    }
    else if (bZoom < SV_ZOOM_IN_MIN)
    {
      bZoom = SV_ZOOM_IN_MIN;
    }
  }

  vSendUopCmd(UOP_ZOOM_IN, bZoom, 0, 0);

  return (UOP_OK);
}

#ifndef DISABLE_ZOOM_OUT
BOOL fgVCDZoomOutKey(void) large
{
  BYTE bZoom;
#ifdef SIMPLE_ZOOM_MODE
  BYTE bIdx;
#endif
#ifdef ZOOM_NO_SLOW_STEP
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

  if (
#if ((!defined DISABLE_SF) && (!defined DISABLE_SR))   	
  	  (bPbcState == SV_SF) || (bPbcState == SV_SR) ||
#endif  	  
      (bPbcState == SV_STEP) || (bPbcState == SV_STEP_BACK))
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

#ifdef VCD_MENU_NO_ZOOM_OUT
  if (bSharedInfo(SI_TRACK_NO) == 0)
  {
    bZoom = SV_ZOOM_OFF;
  #ifdef VCD_MENU_NO_ZOOM_IN
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
  #endif
  }
  else
#endif /* VCD_MENU_NO_ZOOM_OUT */
  {
    bZoom = bSharedInfo(SI_ZOOM_SWITCH);

#ifdef ENABLE_ZOOM_USER_MODE
    if (bZoom == SV_ZOOM_USR)
    {
      vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_OFF, 0, 0);
      return (UOP_OK);
    }
#endif

    // get next zoom mode
#ifdef SIMPLE_ZOOM_MODE
    for (bIdx = 0; bIdx < VCD_ZOOM_USED_MODE; bIdx++)
    {
      if (pbVcdZoomMode[bIdx] > bZoom)
      {
        bZoom = pbVcdZoomMode[bIdx];
        break;
      }
    }
    
    if (bIdx == VCD_ZOOM_USED_MODE)
    {
      bZoom = SV_ZOOM_OUT_MAX + 1;
    }
#else
    bZoom += 1;
#endif

    if (bZoom > SV_ZOOM_OUT_MAX)
    {
      bZoom = SV_ZOOM_OFF;
    }
    else if (bZoom < SV_ZOOM_OUT_MIN)
    {
      bZoom = SV_ZOOM_OUT_MIN;
    }
  }

  vSendUopCmd(UOP_ZOOM_IN, bZoom, 0, 0);

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

#ifdef ENABLE_ZOOM_USER_MODE
BOOL fgVCDZoomUsrKey(void) large
{
  #ifdef ZOOM_NO_SLOW_STEP
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

  if (
#if ((!defined DISABLE_SF) && (!defined DISABLE_SR))   	
  	  (bPbcState == SV_SF) || (bPbcState == SV_SR) ||
#endif  	  
      (bPbcState == SV_STEP) || (bPbcState == SV_STEP_BACK))
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
  #endif

  if (bSharedInfo(SI_ZOOM_SWITCH) != SV_ZOOM_USR)
  {
    vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_USR, ZOOM_USR_H_BASE, ZOOM_USR_V_BASE);
  }
  else
  {
    vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_OFF, 0, 0);
  }

  return (UOP_OK);
}
#endif /* ENABLE_ZOOM_USER_MODE */

#ifdef PLAYER_VRMT
BOOL fgVCDVremoteKey(void) large
{
  vChangeInputState(INPUT_STATE_VREMOTE, FALSE);
  return (UOP_OK);
}
#endif /* PLAYER_VRMT */

#endif /* VCD_SUPPORT */

⌨️ 快捷键说明

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