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

📄 vid_ctrl.c

📁 mtkDVD源代码程序4*16 很好玩的内置5.1环绕音效 大家可以玩一下
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 05/05/19 5:34p    $       ****************/
/***************  $Revision:: 5                $       ****************/
/***************                                       ****************/
/***************   Description :                       ****************/
/***************                                       ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer :                       ****************/
/**********************************************************************/

#define _VID_CTRL_C_

#pragma NOAREGS

#include "general.h"


extern void vMTKTvInit(void) large;
extern void vTvScartAspect(BYTE bEnable) large;
extern void vTvRGBSel(BYTE bEnable) large;
extern void vTvScartTvSel(BYTE bEnable) large;

// *********************************************************************
// Function :
// Description : Video Control Share Memory Initial Routine,
//               called from vUserInit()
// Parameter :
// Return    :
// *********************************************************************
void vInitVideoShareInfo(void) large
{
  WORD wOption;
  BYTE bTmp;

  vSetSharedInfo(SI_TV_SYSTEM, SV_NTSC);
  vSetSharedInfo(SI_TV_SYSTEM_30, SV_NTSC_M);
  vSetSharedInfo(SI_TV_SYSTEM_25, SV_PAL_B);
  vSetSharedInfo(SI_SHARPNESS, SV_SHARPNESS_MID);
  vSetSharedInfo(SI_EDGE_EN, SV_LOW);
  vSetSharedInfo(SI_GAMMA, SV_NONE);
#ifdef NO_PEDESTAL_OFFSET
  vSetSharedInfo(SI_BLK_LVL, 0);
#else
  vSetSharedInfo(SI_BLK_LVL, SV_SETUP);
#endif
  vSetSharedInfo(SI_V_BRIGHTNESS, 0);
  vSetSharedInfo(SI_V_CONTRAST, 0);
#ifdef MTK_TVE
  vSetSharedInfo(SI_V_SATURATION, 0);
#else
  vSetSharedInfo(SI_V_SATURATION, 16);
#endif
  vSetSharedInfo(SI_HUE, 0);
  vSetSharedInfo(SI_LUMINANCE, SV_LUMINANCE_DELAY_1);
  vSetSharedInfo(SI_PIC_MODE, SV_NONFLICKER);

#ifdef VIDEO_PAUSE_SHOW_1FLD
  vSetSharedInfo(SI_V2_PAUSE_SHOW_1FLD, SV_ON);
#else
  vSetSharedInfo(SI_V2_PAUSE_SHOW_1FLD, SV_OFF);
#endif

#ifdef VIDEO_PN_NO_FRM_YC
  vSetSharedInfo(SI_V2_PN_NO_FRM_YC, SV_ON);
#else
  vSetSharedInfo(SI_V2_PN_NO_FRM_YC, SV_OFF);
#endif

#ifdef VIDEO_SHOW_DYNAMIC_BITRATE
  vSetSharedInfo(SI_V2_DYNAMIC_BITRATE, SV_ON);
#else
  vSetSharedInfo(SI_V2_DYNAMIC_BITRATE, SV_OFF);
#endif

#ifdef VIDEO_LOGO_KEEP_TVSYS
  vSetSharedInfo(SI_LOGO_KEEP_TVSYS, SV_ON);
#else
  vSetSharedInfo(SI_LOGO_KEEP_TVSYS, SV_OFF);
#endif

#ifdef VIDEO_SPEED_CONTROL
  vSetSharedInfo(SI_V2_SPEED_CONTROL, SV_ON);
#else
  vSetSharedInfo(SI_V2_SPEED_CONTROL, SV_OFF);
#endif

  vSetSharedInfo(SI_V2_ERR_CRITERION, 0x14);

#ifdef PLAYER_NUI
  //vSetSharedInfo(SI_V2_OSD_RELATED_LOGO, 0x04); //[runma] add line for nui.
  vSetSharedInfo(SI_V2_OSD_RELATED_LOGO, 0x1);    // 20050519, TC request 8032 set this to 1, so that when TV system switch, data disc logo will match
#else  
  vSetSharedInfo(SI_V2_OSD_RELATED_LOGO, 0x0);
#endif

  vSetSharedInfo(SI_NTSC_ADJUST_H, (BYTE)((char)NTSC_ADJUST_H));
  vSetSharedInfo(SI_NTSC_ADJUST_V, (BYTE)((char)NTSC_ADJUST_V));
  vSetSharedInfo(SI_PAL_ADJUST_H, (BYTE)((char)PAL_ADJUST_H));
  vSetSharedInfo(SI_PAL_ADJUST_V, (BYTE)((char)PAL_ADJUST_V));

#ifdef MT1379
  vSetSharedInfo(SI_OSD_NTSC_ADJUST_H, (BYTE)(((char)(OSD_NTSC_ADJUST_H - 6))));
#else
  vSetSharedInfo(SI_OSD_NTSC_ADJUST_H, (BYTE)(((char)OSD_NTSC_ADJUST_H)));
#endif
  vSetSharedInfo(SI_OSD_NTSC_ADJUST_V, (BYTE)((char)OSD_NTSC_ADJUST_V));
  vSetSharedInfo(SI_OSD_PAL_ADJUST_H, (BYTE)(((char)OSD_PAL_ADJUST_H)));
  vSetSharedInfo(SI_OSD_PAL_ADJUST_V, (BYTE)((char)OSD_PAL_ADJUST_V));

  // Initial Close Caption
  vSetSharedInfo(SI_CC_VALID, 0);
  vSetSharedInfo(SI_CC_RP, 0);
  vSetSharedInfo(SI_CC_WP, 0);

  // Initial zoom scale factor
  vSetSharedInfo(SI_ZOOM_USR_H_BASE, ZOOM_USR_H_BASE);
  vSetSharedInfo(SI_ZOOM_USR_V_BASE, ZOOM_USR_V_BASE);

  // for PSCAN
#ifdef MT1379
#if defined(MT1379_MANUFACTURE_TEST)&& defined(MT1389_512K)
  vSetSharedInfo(SI_TVE_OUT_MODE, SV_TVE_YCBCR);
#else
  vSetSharedInfo(SI_TVE_OUT_MODE, SV_TVE_DIRECT);
#endif
  vSetSharedInfo(SI_PSCAN_EN, SV_OFF);
  vSetSharedInfo(SI_PSCAN_MODE, SV_PSCAN_AUTO);
  vSetSharedInfo(SI_PSCAN_VIDEO, PSCAN_DEFAULT_VIDEO_MODE);
  // 030220
  vSetSharedInfo(SI_PSCAN_MOTION_THD_LOW, PSCAN_MOTION_THD_LOW); 
  vSetSharedInfo(SI_PSCAN_MOTION_THD_MID, PSCAN_MOTION_THD_MID); 
  vSetSharedInfo(SI_PSCAN_MOTION_THD_HIGH, PSCAN_MOTION_THD_HIGH); 
  vSetSharedInfo(SI_PSCAN_SWITCH_THD, PSCAN_MODE_SWITCH_THD); 

  vSetSharedInfo(SI_PSCAN_M_PXL_THD_LOW, PSCAN_M_PXL_THD_LOW); 
  vSetSharedInfo(SI_PSCAN_M_PXL_THD_MID, PSCAN_M_PXL_THD_MID); 
  vSetSharedInfo(SI_PSCAN_M_PXL_THD_HIGH, PSCAN_M_PXL_THD_HIGH); 
  vSetSharedInfo(SI_PSCAN_M_PXL_THD_STILL, PSCAN_M_PXL_THD_STILL); 
  vSetSharedInfo(SI_PSCAN_STILL_SCENE_THD, PSCAN_STILL_SCENE_THD); 
  
  vSetSharedInfo(SI_PSCAN_NTSC, PSCAN_NTSC_MODE);
  vSetSharedInfo(SI_PSCAN_PAL, PSCAN_PAL_MODE);
  vSetSharedInfo(SI_PSCAN_TRICK_MODE, PSCAN_TRICK_MODE);
  
  vSetSharedInfo(SI_PSCAN_EDGE, SV_ON);

  vSetSharedInfo(SI_PSCAN_SQUEEZE, SV_OFF);
#endif
  vSetSharedInfo(SI_WARMTH_FLT, SV_WARNTH_OFF);
  vSetSharedInfo(SI_POST_PROCESS_EN, SV_OFF);
  vSetSharedInfo(SI_ZOOM_IN_X_FILTER, ZOOM_IN_X_FILTER);

  // for capture logo
  vSetSharedInfo(SI_FLASH_LOGO_IDX, 0);
  vSetSharedInfo(SI_DEFAULT_LOGO, SV_LOGO_FLASH);

//  wOption = LOGO_GRAY;
  wOption = LOGO_BLUE;    // 20050330, in setup menu, it's blue screen
  bTmp = (wOption & 0x000f) << 4;
  vSetSharedInfo(SI_LOGO_CLR_Y, bTmp);

  wOption >>= 4;
  bTmp = (wOption & 0x000f) << 4;
  vSetSharedInfo(SI_LOGO_CLR_CB, bTmp);

  wOption >>= 4;
  bTmp = (wOption & 0x000f) << 4;
  vSetSharedInfo(SI_LOGO_CLR_CR, bTmp);
  
  vSetSharedInfo(SI_G_SYNC, SV_ON);

  vSetSharedInfo(SI_VDO_CFG_SET, VDO_CFG_NO);

  vSetSharedInfo(SI_VDAC_OFF, SV_OFF);

#ifdef MTK_TVE
  vMTKTvInit();
#endif  

}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoTvSystem(BYTE bSystem) large
{
#ifdef PSCAN_EN
  #ifdef PSCAN_FORCE_TV_AUTO
  if ((bSystem != SV_AUTO) && (bSharedInfo(SI_PSCAN_EN) == SV_ON))
  {
    bSystem = SV_AUTO;
  }
  #endif /* PSCAN_FORCE_TV_AUTO */
#endif /* PSCAN_EN */

  if (bSystem != bSharedInfo(SI_TV_SYSTEM))
  {
    vSetSharedInfo(SI_TV_SYSTEM, bSystem);
    vNotifySharedInfo(SI_TV_SYSTEM, 0, 0);
  }
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoGammaLevel(BYTE bLevel) large
{
  if (bLevel > VID_GAMMA_LEVEL_MAX)
  {
    bLevel = VID_GAMMA_LEVEL_MAX;
  }
  else if (bLevel < VID_GAMMA_LEVEL_MIN)
  {
    bLevel = VID_GAMMA_LEVEL_MIN;
  }
  
  vSetSharedInfo(SI_GAMMA, bLevel);
  vNotifySharedInfo(SI_GAMMA, 0, 0);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
char cVideoGammaBright(char cLevel) large
{
  if (cLevel > VID_BRIGHTNESS_MAX)
  {
    cLevel = VID_BRIGHTNESS_MAX;
  }
  else if (cLevel < VID_BRIGHTNESS_MIN)
  {
    cLevel = VID_BRIGHTNESS_MIN;
  }

  vSetSharedInfo(SI_V_BRIGHTNESS, cLevel);
  vNotifySharedInfo(SI_V_BRIGHTNESS, 0, 0);
  return cLevel;
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
char cVideoGammaContrast(char cLevel) large
{
  if (cLevel > VID_CONTRAST_MAX)
  {
    cLevel = VID_CONTRAST_MAX;
  }
  else if (cLevel < VID_CONTRAST_MIN)
  {
    cLevel = VID_CONTRAST_MIN;
  }

  vSetSharedInfo(SI_V_CONTRAST, cLevel);
  vNotifySharedInfo(SI_V_CONTRAST, 0, 0);
  return cLevel;
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoHueDegree(char cDegree) large
{
  if (cDegree > VID_HUE_DEGREE_MAX)
  {
    cDegree = VID_HUE_DEGREE_MAX;
  }
  else if (cDegree < VID_HUE_DEGREE_MIN)
  {
    cDegree = VID_HUE_DEGREE_MIN;
  }
  
  vSetSharedInfo(SI_HUE, cDegree);
  vNotifySharedInfo(SI_HUE, 0, 0);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
#ifdef MT1379
void vVideoHueSaturation(char cLevel) large
{
  if (cLevel > VID_SATURATION_MAX)
  {
    cLevel = VID_SATURATION_MAX;
  }
  else if (cLevel < VID_SATURATION_MIN)
  {
    cLevel = VID_SATURATION_MIN;
  }
  
  vSetSharedInfo(SI_V_SATURATION, cLevel);
  vNotifySharedInfo(SI_V_SATURATION, 0, 0);
}
#else // for MT1369
void vVideoHueSaturation(BYTE bLevel) large
{
  if (bLevel > VID_SATURATION_MAX)
  {
    bLevel = VID_SATURATION_MAX;
  }
  else if (bLevel < VID_SATURATION_MIN)
  {
    bLevel = VID_SATURATION_MIN;
  }
  
  vSetSharedInfo(SI_V_SATURATION, bLevel);
  vNotifySharedInfo(SI_V_SATURATION, 0, 0);
}
#endif // for MT1369

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoEdgeEnhance(BYTE bLevel) large
{
  if (bLevel > VID_EDGE_ENHANCE_MAX)
  {
    bLevel = VID_EDGE_ENHANCE_MAX;
  }
  else if (bLevel < VID_EDGE_ENHANCE_MIN)
  {
    bLevel = VID_EDGE_ENHANCE_MIN;
  }

  vSetSharedInfo(SI_EDGE_EN, bLevel);
  vNotifySharedInfo(SI_EDGE_EN, 0, 0);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoPedestal(BYTE bType,BOOL fgOnOff) large
{
  /* TODO: check NTSC/PAL system */
  BYTE bOriValue;
  bOriValue = bSharedInfo(SI_BLK_LVL);
  /* pedestal on will make black level lighter */
  if(fgOnOff) //on  
    vSetSharedInfo(SI_BLK_LVL, bOriValue|bType);
  else //off
    vSetSharedInfo(SI_BLK_LVL, bOriValue&(~bType));
  
//r   vSetSharedInfo(SI_BLK_LVL, fgOnOff);
  vNotifySharedInfo(SI_BLK_LVL, 0, 0);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoSharpness(BYTE bLevel) large
{
  if (bLevel > VID_SHARPNESS_MAX)
  {
    bLevel = VID_SHARPNESS_MAX;
  }
  else if (bLevel < VID_SHARPNESS_MIN)
  {
    bLevel = VID_SHARPNESS_MIN;
  }
#ifdef SHARPNESS_USE_YLPF
  switch(bLevel)
  {
    case SV_SHARPNESS_LOW:
      bLevel = (8<<2)|SV_YLP_ENABLE; //bit7 -> sharpness use YLP, 6->10 worse sharpness
    break;
    case SV_SHARPNESS_MID:
      bLevel = (5<<2)|SV_YLP_ENABLE; //5 normal sharpness
    break;
    case SV_SHARPNESS_HIGH:
    default:
      bLevel = (2<<2)|SV_YLP_ENABLE; //4->0 more sharpness
    break;
  }
#else
  bLevel |= (5<<2); //sharpness use CLP and set YLP normal
#endif 
  
  vSetSharedInfo(SI_SHARPNESS, bLevel);
  vNotifySharedInfo(SI_SHARPNESS, 0, 0);
}

#ifdef MTK_TVE
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vVideoPScanMode(BYTE bPScanEn, BYTE bTvMode) large
{
  BYTE bMode = bEepromReadByte(ASPECT_POSITION);

  #ifdef PSCAN_FORCE_TV_AUTO
  if ((bPScanEn == SV_ON) && (bSharedInfo(SI_TV_SYSTEM) != SV_AUTO))
  {
    vSetSharedInfo(SI_TV_SYSTEM, SV_AUTO);
    vNotifySharedInfo(SI_TV_SYSTEM, 0, 0);
  }
  #endif /* PSCAN_FORCE_TV_AUTO */

  if (bTvMode != SV_TVE_SCART)
  {
    vSetSharedInfo(SI_G_SYNC, SV_ON);
    vNotifySharedInfo(SI_G_SYNC, 0, 0);
  }

  #ifdef PSCAN_EN
  if (bPScanEn == SV_ON)
  {
    if (bTvMode == SV_TVE_VGA)
    {
      vSetSharedInfo(SI_G_SYNC, SV_OFF);
      vNotifySharedInfo(SI_G_SYNC, 0, 0);
    }
    
    if (bTvMode == SV_TVE_DIRECT)
    {
      bTvMode = SV_TVE_YCBCR;
    }

    if (bSharedInfo(SI_TVE_OUT_MODE) != bTvMode)
    {
      vSetSharedInfo(SI_TVE_OUT_MODE, bTvMode);
      vNotifySharedInfo(SI_TVE_OUT_MODE, 0, 0);
    }

    if (bSharedInfo(SI_PSCAN_EN) != SV_ON)
    {
      vSetSharedInfo(SI_PSCAN_EN, SV_ON);
      vNotifySharedInfo(SI_PSCAN_EN, 0, 0);
    }
  }
  else
  #endif /* PSCAN_EN */
  // P-Scan off
  {
    if (bTvMode != SV_TVE_SCART)
    {
      vTvScartAspect(0);  // don't care
      vTvRGBSel(1);
      vTvScartTvSel(0);   // don't care
    }
   
    if (bTvMode == SV_TVE_VGA)
    {
      bTvMode = SV_TVE_YCBCR;
    }
    else if (bTvMode == SV_TVE_SCART)
    {
      bTvMode = SV_TVE_RGB;

      vSetSharedInfo(SI_G_SYNC, SV_OFF);
      vNotifySharedInfo(SI_G_SYNC, 0, 0);
      vTvScartTvSel(0);
      vTvRGBSel(0);
      if (bMode == SV_WIDE)
        vTvScartAspect(1);
      else
        vTvScartAspect(0);
    }

    if (bSharedInfo(SI_TVE_OUT_MODE) != bTvMode)
    {
      vSetSharedInfo(SI_TVE_OUT_MODE, bTvMode);
      vNotifySharedInfo(SI_TVE_OUT_MODE, 0, 0);
    }

    if (bSharedInfo(SI_PSCAN_EN) != SV_OFF)
    {
      vSetSharedInfo(SI_PSCAN_EN, SV_OFF);
      vNotifySharedInfo(SI_PSCAN_EN, 0, 0);
    }
  }
}
#endif /* MTK_TVE */

#ifdef PSCAN_EN
  #ifdef  SETUP_NO_PSCAN_CTRL
/***************************************************************************
     Function : void vUserRecallPScan(BOOL fgInit)
  Dsecription : called from Timer routine
    Parameter : None
       Return : None
***************************************************************************/
void vVideoUserRecallPScan(BOOL fgInit) large
{
  BYTE bPScan, bTvMode;

  bTvMode = bEepromReadByte(TV_COMP_POS);
  bPScan = bEepromReadByte(TV_PSCAN_EN_POS);

  if (fgInit == FALSE) // not inited, do reset
  {
    if (bTvMode == SV_TVE_VGA)
    {
      fgEepromWriteByte(TV_COMP_POS, SV_TVE_YUV);
      bTvMode = SV_TVE_YUV;
    }
    
    if (bPScan != SV_OFF)
    {
      fgEepromWriteByte(TV_PSCAN_EN_POS, SV_OFF);
      bPScan = SV_OFF;
    }
  }
  
  vVideoPScanMode(bPScan, bTvMode);
}
  #endif /* SETUP_NO_PSCAN_CTRL */
#endif /* PSCAN_EN */

⌨️ 快捷键说明

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