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

📄 drvscaler.h

📁 mstar 776 开发的车载dvd
💻 H
字号:
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2006-2007 MStar Semiconductor, Inc.
// All rights reserved.
//
// Unless otherwise stipulated in writing, any and all information contained
// herein regardless in any format shall remain the sole proprietary of
// MStar Semiconductor Inc. and be kept in strict confidence
// (¨MStar Confidential Information〃) by the recipient.
// Any unauthorized act including without limitation unauthorized disclosure,
// copying, use, reproduction, sale, distribution, modification, disassembling,
// reverse engineering and compiling of the contents of MStar Confidential
// Information is unlawful and strictly prohibited. MStar hereby reserves the
// rights to any and all damages, losses, costs and expenses resulting therefrom.
//
////////////////////////////////////////////////////////////////////////////////

#ifndef DRV_SCALER_H
#define DRV_SCALER_H

#include "DataType.h"
#include "Analog_Reg.h"
#include "drvGlobal.h"
#include "board.h"
#include "Panel.h"
#include "drvAnalog_DataType.h"


/******************************************************************************/
/*                     Macro                                                  */
/* ****************************************************************************/

// =========== Over-Scan ratio define =================
#define OVERSCAN_DTV_480I_H     35
#define OVERSCAN_DTV_480I_V     28
#define OVERSCAN_DTV_480P_H     34
#define OVERSCAN_DTV_480P_V     34
#define OVERSCAN_DTV_576I_H     32
#define OVERSCAN_DTV_576I_V     23
#define OVERSCAN_DTV_576P_H     20
#define OVERSCAN_DTV_576P_V     20
#define OVERSCAN_DTV_720P_H     34
#define OVERSCAN_DTV_720P_V     34
#define OVERSCAN_DTV_1080I_H    31
#define OVERSCAN_DTV_1080I_V    30
#define OVERSCAN_DTV_1080P_H    33
#define OVERSCAN_DTV_1080P_V    33

#define OVERSCAN_YPBPR_480I_H   31
#define OVERSCAN_YPBPR_480I_V   24
#define OVERSCAN_YPBPR_480P_H   30
#define OVERSCAN_YPBPR_480P_V   29
#define OVERSCAN_YPBPR_576I_H   32
#define OVERSCAN_YPBPR_576I_V   23
#define OVERSCAN_YPBPR_576P_H   20
#define OVERSCAN_YPBPR_576P_V   20
#define OVERSCAN_YPBPR_720P_H   32
#define OVERSCAN_YPBPR_720P_V   31
#define OVERSCAN_YPBPR_1080I_H  31
#define OVERSCAN_YPBPR_1080I_V  30
#define OVERSCAN_YPBPR_1080P_H  33
#define OVERSCAN_YPBPR_1080P_V  33

#define OVERSCAN_HDMI_480I_H     35
#define OVERSCAN_HDMI_480I_V     28
#define OVERSCAN_HDMI_480P_H     39
#define OVERSCAN_HDMI_480P_V     32
#define OVERSCAN_HDMI_1440_480I_H     30
#define OVERSCAN_HDMI_1440_480I_V     28
#define OVERSCAN_HDMI_1440_480P_H     39
#define OVERSCAN_HDMI_1440_480P_V     32
#define OVERSCAN_HDMI_576I_H     32
#define OVERSCAN_HDMI_576I_V     23
#define OVERSCAN_HDMI_576P_H     20
#define OVERSCAN_HDMI_576P_V     20
#define OVERSCAN_HDMI_720P_H     30
#define OVERSCAN_HDMI_720P_V     34
#define OVERSCAN_HDMI_1080I_H    30
#define OVERSCAN_HDMI_1080I_V    33
#define OVERSCAN_HDMI_1080P_H    30
#define OVERSCAN_HDMI_1080P_V    33
// =========== Over-Scan ratio define =================



//*************************************************************************
//          Enums
//*************************************************************************
enum
{
    LINE_BUFF_IN_CLOCK,
    LINE_BUFF_OUT_CLOCK
};

// scaler interrupt sources
typedef enum
{
    // first 4 bits are unused
    SC_INT_TUNE_FAIL_P = 4,
    SC_INT_VSINT,
    SC_INT_F2_VTT_CHG,
    SC_INT_F1_VTT_CHG,
    SC_INT_F2_VS_LOSE,
    SC_INT_F1_VS_LOSE,
    SC_INT_F2_JITTER,
    SC_INT_F1_JITTER,
    SC_INT_F2_IPVS_SB,
    SC_INT_F1_IPVS_SB,
    SC_INT_F2_IPHCS_DET,
    SC_INT_F1_IPHCS_DET,
    SC_INT_F2_IPHCS1_DET,
    SC_INT_F1_IPHCS1_DET,
    SC_INT_F2_HTT_CHG,
    SC_INT_F1_HTT_CHG,
    SC_INT_F2_HS_LOSE,
    SC_INT_F1_HS_LOSE,
    SC_INT_F2_DVI_CK_LOSE,
    SC_INT_F1_DVI_CK_LOSE,
    SC_INT_F2_CSOG,
    SC_INT_F1_CSOG,
    SC_INT_F2_ATS_READY,
    SC_INT_F1_ATS_READY,
    SC_INT_F2_ATP_READY,
    SC_INT_F1_ATP_READY,
    SC_INT_F2_ATG_READY,
    SC_INT_F1_ATG_READY,
} SC_INT_SRC;

// scaler register double buffer setting
typedef enum
{
    SC_DB_DISABLE       = 0x00,
    SC_DB_KEEP_OLD      = 0x01,
    SC_DB_MANUAL_LOAD   = 0x03,
    SC_DB_VSYNC_LOAD    = 0x05,
} SC_DB_SETTING;


//*************************************************************************
//          Structures
//*************************************************************************

#ifdef DRV_SCALER_C
#define INTERFACE
#else
#define INTERFACE extern
#endif

#define H_OVER_SCAN         30 // 1.0%
#define V_OVER_SCAN         35 // 1.0%

#define DTV_H_OVER_SCAN     10
#define DTV_V_OVER_SCAN     10



#define H_OVER_SCANCinena   100
#define V_OVER_SCANCinena   100

#define V_OVER_SCANZOOM     112

#define V_OVER_SCANZOOM_130_UP      120
#define V_OVER_SCANZOOM_130_DOWN    244

#define V_OVER_SCANZOOM_108_UP      180
#define V_OVER_SCANZOOM_108_DOWN    244

#define V_OVER_SCAN14_9_UP          77
#define V_OVER_SCAN14_9_DOWN        152

#define SCALING_RATIO_TYPE_NATIVE  0
#define SCALING_RATIO_TYPE_UP      1
#define SCALING_RATIO_TYPE_DOWN    2

#define MS_DNR_F2_BASE0     (SCALER_DNR_BUF_ADR >> 4)
#define MS_DNR_F2_BASE1     ((SCALER_DNR_BUF_ADR + (SCALER_DNR_BUF_LEN/2)) >> 4)


//----------------------------------------------
// for PIP
//----------------------------------------------
#define PIP_2P5DI       1   // sub channel with 2.5 De-interlace or not
// The V scaling has to use OP1 in 2.5D mode

#if (PANEL_WIDTH == 800 && PANEL_HEIGHT == 480)
// 800x480
#define SUB_WIN_NTSC_HSCALE_H   0x8013
#define SUB_WIN_NTSC_HSCALE_L   0xA000

#if PIP_2P5DI
#define SUB_WIN_NTSC_VSCALE_H   0x0093
#define SUB_WIN_NTSC_VSCALE_L   0xC000
#else
#define SUB_WIN_NTSC_VSCALE_H   0x800D
#define SUB_WIN_NTSC_VSCALE_L   0x0000
#endif

#define SUB_WIN_NTSC_VPOS       0x002A

#define SUB_WIN_PAL_HSCALE_H    0x8013
#define SUB_WIN_PAL_HSCALE_L    0xA000

#if PIP_2P5DI
#define SUB_WIN_PAL_VSCALE_H    0x0098
#define SUB_WIN_PAL_VSCALE_L    0x8000
#else
#define SUB_WIN_PAL_VSCALE_H    0x800A
#define SUB_WIN_PAL_VSCALE_L    0xC000
#endif

#define SUB_WIN_PAL_VPOS        0x0055

#define SUB_WIN_HSTART          0x0136
#define SUB_WIN_HWIDTH          0x012B
#define SUB_WIN_VSTART          0xA028
#define SUB_WIN_VHEIGHT         0x00B4
#else
// 480x234
//#define SUB_WIN_NTSC_HSCALE
#if PIP_2P5DI
#define SUB_WIN_NTSC_VSCALE_H   0x00A5
#define SUB_WIN_NTSC_VSCALE_L   0x0000
#else
#define SUB_WIN_NTSC_VSCALE_H   0x8017
#define SUB_WIN_NTSC_VSCALE_L   0x0000
#endif
#define SUB_WIN_NTSC_VPOS       0x0014

//#define SUB_WIN_PAL_HSCALE
#if PIP_2P5DI
#define SUB_WIN_PAL_VSCALE_H    0x00AA
#define SUB_WIN_PAL_VSCALE_L    0x0000
#define SUB_WIN_PAL_VPOS        0x003C
#else
#define SUB_WIN_PAL_VSCALE_H    0x8006
#define SUB_WIN_PAL_VSCALE_L    0x0000
#define SUB_WIN_PAL_VPOS        0x0040
#endif

#define SUB_WIN_HSTART          0x0136
#define SUB_WIN_HWIDTH          0x00B4
#define SUB_WIN_VSTART          0xA069
#define SUB_WIN_VHEIGHT         0x0064
#endif

#define SUB_WIN_NTSC_VCAPTURE   0x01CA
#define SUB_WIN_PAL_VCAPTURE    0x0271
/********************************************************************************/
/*                   Function Prototypes                                        */
/********************************************************************************/

// init
INTERFACE void MDrv_Scaler_Init(void);

// power
INTERFACE void MDrv_Scaler_PowerOn(void);
INTERFACE void MDrv_Scaler_PowerOff(void);

// reset
INTERFACE void MDrv_Scaler_SoftwareResetEx(U16 u16Param);

// port control
INTERFACE void MDrv_Scaler_SetInputPort(MS_SYS_INFO *penMsSysInfo, U8 u8InputSrcMux, U8 u8SyncSelMux);

// Sync & pixel clk
INTERFACE U16 MDrv_Scaler_CalculateVFreqX10(U16 wHFreq, U16 wVTotal);
INTERFACE U16 MDrv_Scaler_CalculateHFreqX10(U16 u16HPeriod);
INTERFACE U8 MDrv_Scaler_CalculateVSyncTime(U16 u16VTotal, U16 u16HPeriod);
INTERFACE U8 MDrv_Scaler_CalculatePixClk(U16 u16HTotal);
INTERFACE U8 MDrv_Scaler_GetInputSyncStatus(void);

// over scan
INTERFACE void MDrv_Scaler_CalculateOverScan(MS_INPUT_SOURCE_TYPE enInputSrcType, MS_DISPLAYWINDOW_TYPE *pstDisplayWindow );

// screen
INTERFACE void MDrv_Scaler_GenerateBlackVideo(BOOLEAN bEnable);
INTERFACE BOOLEAN MDrv_Scaler_IsBlackVideoEnable(void);
INTERFACE void MDrv_Scaler_SetBlueScreen(BOOLEAN bEnable, U8 u8Color);

// aspect ratio
INTERFACE void MDrv_Scaler_CalculateAspectRatio(MS_INPUT_SOURCE_TYPE enInputSourceType, MS_DISPLAYWINDOW_TYPE *pstDisplayWindow, EN_ASPECT_RATIO_TYPE enVideoScreen);

// scaling
INTERFACE void MDrv_Scaler_SetScalingRatio(MS_INPUT_SOURCE_TYPE enInputSourceType, MS_DISPLAYWINDOW_TYPE *pstDisplayWindow);
INTERFACE void MDrv_Scaler_SetScalingFilter(MS_DISPLAYWINDOW_TYPE *pstDisplayWindow);
INTERFACE void MDrv_Scaler_SetScalingInitialFactor(MS_DISPLAYWINDOW_TYPE *pstDisplayWindow);
INTERFACE void MDrv_Scaler_InitFilterTbl(MS_SCALING_DRAM dram, MS_SCALING_FILTER filter);

// window
INTERFACE void MDrv_Scaler_SetDisplayWindow(void);
INTERFACE void MDrv_Scaler_SetCaptureWindow(void);
INTERFACE void MDrv_Scaler_GetStdDisplayWindow(void);
INTERFACE void MDrv_Scaler_SetBorder( MS_DISPLAYWINDOW_TYPE *pstDisplayWindow, EN_ASPECT_RATIO_TYPE enVideoScreen );
INTERFACE void MDrv_Scaler_SetDEWindow(void);
INTERFACE MS_DISPLAYWINDOW_TYPE* MDrv_Scaler_ProgAnalogWin(MS_INPUT_SOURCE_TYPE enInputSourceType, MS_PCADC_MODESETTING_TYPE *pstModesetting, U8 u8CurrentSyncStatus);
INTERFACE MS_DISPLAYWINDOW_TYPE* MDrv_Scaler_ProgDigitalWin(MS_INPUT_SOURCE_TYPE enInputSourceType, EN_VD_SIGNALTYPE enVideoSystem);
INTERFACE U16 MDrv_Scaler_GetHorizontalDEStart(void);
INTERFACE U16 MDrv_Scaler_GetVerticalDEStart(void);

// frame lock
INTERFACE void MDrv_Scaler_SetFrameLock(BOOLEAN bSignal);
INTERFACE U16  MDrv_Scaler_SetFRC(U16 u16InputVFreqX10);

// mode
INTERFACE void MDrv_Scaler_SetMemFormat(void);
INTERFACE void MDrv_Scaler_SetFilmMode(BOOLEAN bCtrl, BOOLEAN b60Hz);

// quality
INTERFACE void MDrv_Scaler_SetDeInterlaceMode(MS_DISPLAYWINDOW_TYPE *pstDisplayWindow);
INTERFACE void MDrv_Scaler_SetEODI(U8 u8EODiMode, U8 u8InterlaceMode);

// IP MUX
// seven 070823_00
INTERFACE void MDrv_Scaler_SetIPMux(EN_INPUT_PORT_TYPE enInputPortType, U8 u8InputSrcMux);

// FPLL
INTERFACE void MDrv_Scaler_CtrlFPLL(EnuFpllCtl eFlag);

// LPLL
INTERFACE void MDrv_Scaler_ClearLPLL(void);
INTERFACE void MDrv_Scaler_MonitorLPLL(void);

// SSC
INTERFACE void MDrv_Scaler_SetSsc(U16 u16Periodx100Hz, U16 u16Percentx100, BOOLEAN bEnable);

// VOP control
INTERFACE void MDrv_Scaler_SetOutPutSyncControl(U8 u8MemFormat, U8 u8InputSrcType);
INTERFACE void MDrv_Scaler_SetShiftLine(U8 u8MemoryMode, U8 u8InterlaceMode);

// IP1 control
INTERFACE void MDrv_Scaler_SetDelayLine(U8 u8DelayLines);
INTERFACE U16 MDrv_Scaler_GetHorizontalPeriod(void);
INTERFACE U16 MDrv_Scaler_GetVerticalTotal(void);
INTERFACE void MDrv_Scaler_SetCSC(BOOLEAN bEnable);
INTERFACE U16 MDrv_Scaler_GetHorizontalDE(void);
INTERFACE U16 MDrv_Scaler_GetVerticalDE(void);
INTERFACE void MDrv_Scaler_SetFieldDetect ( MS_INPUT_SOURCE_TYPE enInputSrcType, MS_DISPLAYWINDOW_TYPE *pstWindow );

// OP1 control
INTERFACE void MDrv_Scaler_SetOPClkGating(BOOLEAN bEnable);
INTERFACE BOOLEAN MDrv_Scaler_GetOPClkGating(void);

// Others
INTERFACE void MDrv_Scaler_SetFreeRunWindow(void);
INTERFACE void MDrv_Scaler_SetFreeRunColor(U8 u8Color);
INTERFACE void MDrv_Scaler_SetFreeRunTiming(void);
INTERFACE U16 MDrv_Scaler_VD_GetHPeriod(EN_GET_SYNC_TYPE enGetSyncType);
INTERFACE U16 MDrv_Scaler_VD_GetVTotal(EN_GET_SYNC_TYPE enGetSyncType, U16 u16HFreqX10);
INTERFACE void MDrv_Scaler_SetGammaOnOff(BOOLEAN bEnable);
INTERFACE void MDrv_Scaler_AdjustRGBBrightness(U8 u8Red, U8 u8Green, U8 u8Blue);
INTERFACE void MDrv_Scaler_AdjustBrightness(U8 u8Brightness);
INTERFACE void MDrv_Scaler_AdjustWBBrightness ( MS_BRIGHTNESS_SETTING stBrightness );
INTERFACE void MDrv_Scaler_SetLineBffDelay(EN_INPUT_PORT_TYPE enPortType);
INTERFACE void MDrv_Scaler_InitRegInTimingChange(void);
INTERFACE void MDrv_Scaler_SetPcHPosition(U16 u16Position);
INTERFACE void MDrv_Scaler_SetPcVPosition(U16 u16Position);
INTERFACE void MDrv_Scaler_SetupMADi(BIT bEnable);
INTERFACE void MDrv_Scaler_SetPanelTiming(MS_INPUT_SOURCE_TYPE enInputSourceType, MS_DISPLAYWINDOW_TYPE *pstDisplayWindow);
INTERFACE void MDrv_Scaler_Isr(void);

// NR
INTERFACE void MDrv_Scaler_InitNR(void);
INTERFACE void MDrv_Scaler_EnableNR(MS_3D_NR_FUNCTION_TYPE e3DNRCtl);
INTERFACE void MDrv_Scaler_Enable3DNR(BOOLEAN bEnable);

//Finetune
INTERFACE void MDrv_Scaler_FineTune(MS_INPUT_SOURCE_TYPE enInputSourceType, MS_DISPLAYWINDOW_TYPE *pstDisplayWindow);
#if (PANEL_ATCON||PANEL_DTCON)
INTERFACE void MDrv_Scaler_TCON_FineTune( MS_INPUT_SOURCE_TYPE enInputSourceType, MS_DISPLAYWINDOW_TYPE *pstDisplayWindow );
#endif

//CRT
#if (PANEL_TYPE_SEL == PNL_DAC_CRT)
INTERFACE BOOLEAN MDrv_Scaler_CheckScanMode(void);
INTERFACE void    MDrv_Scaler_Set_DACHSYNC(void);
INTERFACE void    MDrv_Scaler_Set_OutputTiming(U8 panelSelect);
INTERFACE void    MDrv_Scaler_Set_DACOutTiming (void);
#endif

#if (ENABLE_SCART_VIDEO)
INTERFACE U8 MDrv_CheckScartInput(U8 SCART_Input);
#endif

// Interrupt
INTERFACE void MDrv_Scaler_SetInterrupt(SC_INT_SRC u8IntSrc, BOOLEAN bEnable);
INTERFACE void MDrv_Scaler_Isr(void);

// panel
INTERFACE void MDrv_Scaler_SetPanelVCC(BOOLEAN bEnable);
INTERFACE void MDrv_Scaler_SetPanelBacklight(BOOLEAN bEnable);

INTERFACE void MDrv_Scaler_SetFreezeImg(BOOLEAN bEn);
INTERFACE U8 MDrv_Scaler_WaitInputVSync(U8 u8NumVSyncs, U16 u16Timeout);
//INTERFACE U8 MDrv_Scaler_WaitOutputVSync(U8 u8NumVSyncs, U16 u16Timeout);

//INTERFACE U8 MDrv_Scaler_SetDoubleBuffer(SC_DB_SETTING dbSetting);

INTERFACE BOOLEAN MDrv_IsHdmiInVideoMode(void);

#undef INTERFACE

#endif /* DRV_SCALER_H */

⌨️ 快捷键说明

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