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

📄 logo_cap.c

📁 MTK1389D dvd原程序
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 04/04/19 3:01p    $       ****************/
/***************  $Revision:: 1                $       ****************/
/***************                                       ****************/
/***************   Description : Logo capture          ****************/
/***************                 control module        ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer :                       ****************/
/**********************************************************************/

#include "general.h"

#pragma NOAREGS

#ifdef SUPPORT_CAPTURE_LOGO

typedef struct structBookmark
{
  BYTE bState:4;
  BYTE Reserve:4;
} strucLogoCap;

static xdata strucLogoCap _rLogoCap;

#define LCAP_START        1
#define LCAP_WAIT_UOP     2
#define LCAP_WAIT_ENC     3
#define LCAP_WAIT_WRITE   4
#define LCAP_FINISH       5

// *********************************************************************
// Function : void vLogoCapStart(void)
// Description :
// Parameter :
// Return    : None
// *********************************************************************
static void vLogoCapStart(void) large
{
  // update OSD first
  // should we wait OSD finished? Or RISC will flsuh the OSD queue?
  // NOTE: when writing flash, RISC could not access flash
  // NOTE: since we do not have OSD core timer here, use direct OSD command here

  // switch UI state
  _rUI.bState = UI_LOGO_CAPTURE;
}

// *********************************************************************
// Function : void vLogoCapEncode(void)
// Description : this is callded from UI_LOGO_CAPTURE
// Parameter :
// Return    : None
// *********************************************************************
void vLogoCapEncode(void) large
{
  BYTE bEncState = bSharedInfo(SI_CAP_LOGO_ST);

  if (_rLogoCap.bState == LCAP_WAIT_ENC)
  {
    if (bEncState == SV_LCAP_WRITE)
    {
      // update OSD
      
      // switch to next state
      _rLogoCap.bState = LCAP_WAIT_WRITE;
    }
  }
  else if (_rLogoCap.bState == LCAP_WAIT_WRITE)
  {
    if (bEncState == SV_LCAP_IDLE)
    {
      // update OSD

      // switch UI state
      _rUI.bState = UI_RUN;

      // switch to next state
      _rLogoCap.bState = LCAP_FINISH;

      fgSetPlayPostKey(IR_TIME_OUT);
    }
  }
  else
  {
    return;
  }
}

// *********************************************************************
// Function : void vLogoCapInit(BYTE fgInit)
// Description : this is callded from UI_RUN
// Parameter :
// Return    : None
// *********************************************************************
void vLogoCapInit(BYTE fgInit) large
{
  if (!fgIsLogoCaptureAllow())
  {
    vSetExitInputState();
    return;
  }

  vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_WAIT_CAPTURE_LOGO, OSD_NO_DISAPPEAR);

  // for state transition
  fgSetPlayPostKey(IR_TIME_OUT);

  _rLogoCap.bState = LCAP_START;

  vSetOsdRefreshNow();
}

// *********************************************************************
// Function : BOOL fgLogoCapState(void)
// Description :
// Parameter :
// Return    : None
// *********************************************************************
BOOL fgLogoCapState(void) large
{
  switch (_rLogoCap.bState)
  {
    case LCAP_START:
      vSendUopCmd(UOP_CAPTURE, 0, 0, 0);
      // set servo stop flag
      _bUISrvStatus = PLAYER_SRV_STOP;
      _rLogoCap.bState = LCAP_WAIT_UOP;
      break;

    case LCAP_WAIT_UOP:
      if (_bIRKey == IR_CAPTURE)
      {
        vLogoCapStart();
        // switch to next state
        _rLogoCap.bState = LCAP_WAIT_ENC;
      }
      else /* if (_bIRKey == IR_TIME_OUT) */
      {
        // other key cancel the capture logo
        vSetExitInputState();
      }
      break;

    case LCAP_WAIT_ENC:
      break;

    case LCAP_WAIT_WRITE:
      break;

    case LCAP_FINISH:
    default:
      vSetExitInputState();
      break;
  }

  return(TRUE);
}

// *********************************************************************
// Function : void vLogoCapExit(void)
// Description :
// Parameter :
// Return    : None
// *********************************************************************
void vLogoCapExit(void) large
{
  // clear OSD here
  if (_rLogoCap.bState == LCAP_FINISH)
  {
    vOsdPosClear(OSD_POS_NORMAL);
  }
  else
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
  }
}

// *********************************************************************
// Function : BOOL fgIsLogoCaptureAllow(void)
// Description :
// Parameter :
// Return    : None
// *********************************************************************
BOOL fgIsLogoCaptureAllow(void) large
{
  BYTE bPbcState;
  
  // DVD-Audio? some special VCD? CD-G?
  //if (fgIsNonPlay() || fgIsCddaPlay() || fgIsIsoPlay())
  if (fgIsNonPlay())
  {
    return (FALSE);
  }
  else if (fgIsCddaPlay())
  {
    if (bSharedInfo(SI_DISC_TYPE) != SV_CDG)
    {
      return (FALSE);
    }
  }

  bPbcState = bSharedInfo(SI_PBC_STATE);

  if (!fgIsDiscPlay(bPbcState))
  {
    return (FALSE);
  }

  return (TRUE);
}

#endif /* SUPPORT_CAPTURE_LOGO */

⌨️ 快捷键说明

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