亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msvd.c

?? mstar716驅動源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include "board.h"

#include <math.h>

#define _MSVD_C_

#include <math.h>
#include "types.h"
#include "ms_reg.h"
#include "board.h"
#include "global.h"
#include "DEBUG.h"
#include "ms_rwreg.h"
#include "misc.h"
#include "userpref.h"
#include "power.h"
#include "panel.h"
#include "mstar.h"
#include "tv.h"
#include "DevVD.h"
#include "Detect.h"
#include "DEVTuner.h"
#include "adjust.h"
#include "Maria2_FSC_Lib.h"
#include "Maria2_ACC_Lib.h"
#include "M2_VD_Std_Lib.h"
#include "DevVD_User.h"
#include "menu.h"
#include "msvd.h"

#include "M2_VD_AGC_Lib.h"
#include "msVDField.h"

#if(ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif

///////////////////////////////////////////////////////////////////////////////
// h sync lock	:   DspReg[14.1] or DspReg[0x25]7:4(CTRL_STATE[3:0]) >= 6
// color lock   :   DspReg[0x25]7:4(CTRL_STATE[3:0]) == 8
// 50Hz         :   by DSP
// interlace	:   by scaler.
//
// BK2_01[2:0] => FREQ_FSC[2:0] ==> Detect Signal type
//  000: 4.43361875MHz.
//  010: 3.579545MHz.
//  100: 3.57561149MHz.
//  110: 3.58205625MHz
//
// BK2_01[7:4] => APLL_TRK_MD[3:0]
//  1000: APLL in tracking mode
//  0110: APLL in free run mode(no color)
//
// BK2_02[7:6] => APLL_LCK_STATE[1:0]
//  01: APLL in lock state(color on)
//  xx: APLL not in lock yet(color off)
//
// BK2_02[5:4] => FRM_LNS[1:0]
//  00: Unknown
//  10: Above 575 lines
//  01: Below 575 lines
//
// BK2_02[3:2] => Lock color burst
//  01: Lock
//  10: No lock
//
// BK2_02[1:0] => TV_SYSTEM[1:0]
//  01: NTSC system
//  10: PAL system
//
// BK2_03[7] ==> VCR_MD ==> VCR mode detect
// ------------------------------------------------------------------
// When Bk2_04 = 0x04, Bk2_02 ==> Noise level
// When Bk2_04 = 0x08, Bk2_01 ==> Gain level
// ------------------------------------------------------------------
// How to judge these situation:
//  VCR - Stop(OSD): Non-interlace
//  VCR - Pause: Vtotal is different with normal play
//  VCR : Vtotal is always change
///////////////////////////////////////////////////////////////////////////////
// BK3_72[2:0]
// 000: NTSC(M)
// 001: NTSC(443)
// 010: PAL(M)
// 011: PAL(BDGHIN)
// 100: PAL(Nc)
// 111: Unknow => No signal
///////////////////////////////////////////////////////////////////////////////
//              Htotal*Vtotal
// NTSC(M)      910*525
// NTSC-443     1127.1*525
// PAL(M)       909*525
// PAL(BDGHIN)  1135*625+4
// PAL(Nc)      917*625+4
//
// NTSC(M) New capture = 720*910/858
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// 3.58: 910    NTSC-M  525 NTSC
//       909    PAL-M   525 PAL
//       917    PAL-Nc  625
// 4.43:
//       1135   PAL-BDGHIN  625
//       1127   NTSC-443    525
///////////////////////////////////////////////////////////////////////////////
// Use ShibaSoku TG35CX get some info:
// NTSC:
// FH=15.735KHz ==> HP=0x2FB
// FV=59.94Hz   ==> VT=525
//-------------------------------------
// PAL:
// FH=15.625KHz ==> HP=0x334
// FV=50        ==> VT=625
////////////////////////////////////////////////////////////////////////////

WORD code tVideoSystemStdHTotal[SIG_NUMS] =
{
    910, // SIG_NTSC, // M
    1135, // SIG_PAL, // B/G, D/K, I, H, N
    1097, // SIG_SECAM,
    1127, // SIG_NTSC_443,
    1127, // SIG_PAL_60,
    909, // SIG_PAL_M,
    917, // SIG_PAL_NC,
};
void msVDDSPWriteByte( BYTE ucAddr, BYTE ucData )
{
    BYTE ucBk2_07 = msReadByte( BK2_07 );

    msWriteByte( BK2_07, ucAddr );
    msWriteByte( BK2_08, ucData );
    msWriteByte( BK2_07, ucBk2_07 );
}

BYTE msVDDSPReadByte( BYTE ucAddr )
{
    BYTE ucTmp;
    BYTE ucBk2_07 = msReadByte( BK2_07 );
    msWriteByte( BK2_07, ucAddr );
    ucTmp = msReadByte( BK2_09 );
    msWriteByte( BK2_07, ucBk2_07 );
    return ucTmp;
}

WORD msVDDSPRead2Bytes( BYTE ucAddr )
{
    return (msVDDSPReadByte(ucAddr) + (msVDDSPReadByte(ucAddr+1)<<8));
}

BYTE msVDSpecialRead( BYTE ucMux, BYTE ucAddr )
{
    BYTE ucBank;
    BYTE ucBackupBK2_04;
    BYTE ucTmp;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
    ucBackupBK2_04 = msReadByte( BK2_04 );
    msWriteByte( BK2_04, ucMux );
    ucTmp = msReadByte( ucAddr );
    msWriteByte( BK2_04, ucBackupBK2_04 );
    msWriteByte( BK0_00_REGBK, ucBank );
    return ucTmp;
}

void msVDReset(void)
{
    BYTE ucBank = msReadByte( BK0_00_REGBK );

    putstr("\r\n[Reset VD]");
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );

    #if( ENABLE_PAL_SWITCH_HANDLER )
    //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_PAL_SWITCH )
        msVDPalSwitchHandlerReset(); // Auto detect PAL/NTSC
    #endif

    msWriteByteMask(BK2_21_APLL_CTRL2, 0x00, 0x06); // Auto detect PAL/NTSC

    msWriteBit( BK2_14_SOFT_RST, 1, _BIT7 );
    Delay1ms(1);
    msWriteBit( BK2_14_SOFT_RST, 0, _BIT7 );
    Delay1ms(1);


    //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AGC_PROCESSOR )
        VD_AGC_Ctl( VD_AGC_CTL_ENABLE );

#if(ENABLE_VD_DSP)
    //if( g_ucmsVDCtl&MSVD_CTL_FLAG_VSYNC )
    {
        BYTE ucVSyncCtl = VD_DSP_CTL_ENABLE;

        #if(ENABLE_VSYNC_CTL_AUTO_H_TOTAL)
        ucVSyncCtl |= VD_DSP_CTL_DISABLE_AUTO_H_TOTAL;
        #endif

        #if( TV_SYSTEM == TV_NTSC )
        VD_DSP_Ctl( ucVSyncCtl, 525 ); // Enable DSP, 60Hz
        #else
        VD_DSP_Ctl( ucVSyncCtl, 625 ); // Enable DSP, 50Hz
        #endif
    }
#elif( ENABLE_SW_FILED )
    msVDDSPWriteByte( DSP_0F, 0x04 );
#endif

    //if( g_ucmsVDCtl&MSVD_CTL_FLAG_NOISE_HANDLER )
        msVDNoiseHandlerInit();

//yurian for VD Reset DSP10 error
    {
      BYTE DSP10_Value=msVDDSPReadByte( 0x10 );
      while(DSP10_Value!=0x85)
        {
            Delay1ms(2);
            msVDDSPWriteByte(DSP_10, 0x85);
            msVDDSPWriteByte(DSP_11, 0x00);
            Delay1ms(1);
            DSP10_Value=msVDDSPReadByte( 0x10 );
        }
    }

    msWriteByte( BK0_00_REGBK, ucBank );
}

void msVD_FSM_Reset(void)
{
    BYTE ucBank = msReadByte( BK0_00_REGBK);
    putstr("\r\n[Reset FSM]");

    #if ( ENABLE_PAL_SWITCH_HANDLER )
    //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_PAL_SWITCH )
        msVDPalSwitchHandlerReset(); // Auto detect PAL/NTSC
    #endif
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
    msWriteBit( BK2_14_SOFT_RST, 1, _BIT6 );
    Delay1ms(1);
    msWriteBit( BK2_14_SOFT_RST, 0, _BIT6 );
    Delay1ms(1);
    msWriteByte( BK0_00_REGBK, ucBank );
}

WORD msVDGetVTotal(void)
{
    BYTE ucBank;
    WORD wVTotal;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
    wVTotal = msVDDSPRead2Bytes(0);
    msWriteByte( BK0_00_REGBK, ucBank );
    return wVTotal;
}
// ucFlag:
// [1:0]: 1 -> Always return a valid h freq
//        2 -> Return virtual H period
WORD msGetVideoHPeriod( BYTE ucFlag )
{
    BYTE i;
    WORD wInHP;
    WORD wInHF;

    if( (ucFlag&3) != 2 )
    {
        for( i = 0; i < 10; ++ i )
        {
            wInHP = msGetHorizontalPeriod();
            if( wInHP )
            {
                wInHF = MST_CLOCK_HZ/wInHP;
                if( (wInHF >= 13500)&&(wInHF <= 17800) )
                {
                    return wInHP;
                }
            }
        }
    }

    // H period invalid...
    if( (ucFlag&3) )
    {
        if( msVDGetVTotal() > 566 )
            return MST_CLOCK_HZ/15625;
        else
            return MST_CLOCK_HZ/15734;
    }
    return 0;
}

#if(ENABLE_CHECK_AUTO_H_TOTAL)

BYTE msVDCheckScalerStatus( BYTE ucCheckFlag )
{
    BYTE ucStatus = 0;
    WORD wTmp;
    WORD wHFreq;
    WORD wVTotal;

    // Calculate H frequency ...
    wTmp = msGetHorizontalPeriod();
    if( wTmp == 0x1fff || wTmp == 0 ) // Check H period
    {
        //printf("\r\nHP=%d", wTmp);
        ucStatus |= VD_H_PERIOD_INVALID;
    }
    else // H period is valid
    {
        wHFreq = msCalculateHFreqX10(wTmp); // Cal H freq
        if( wHFreq < 146 || wHFreq > 167 ) //200 ) // Hfreq < 14.6K, > 16.6K => freq invalid
        {
            ucStatus |= VD_H_FREQ_INVALID;
        }
        else // H freq is valid
        {
            if( ucCheckFlag&VD_V_TOTAL_INVALID )
            {
                wVTotal = msVDGetVTotal(); // Get VTotal from VD
                wTmp = msVDGetVTotal(); // Get VTotal from scaler

                // Check VD&Scaler VTotal
                if( (wVTotal < 420) || (wVTotal > 730)
                  ||(wTmp < 420) || (wTmp > 730)
                  ||(abs((int)wVTotal - wTmp) > 50)) // The VTotal of VD and Scaler is different!!
                {
                    ucStatus |= VD_V_TOTAL_INVALID;
                }
                else // VTotal is valid
                {
                    if( ucCheckFlag&VD_V_FREQ_INVALID )
                    {
                        // Cal V freq
                        wTmp = msCalculateVFreqX10( wHFreq, wTmp )*2;
                        if( wTmp < 440 || wTmp > 660 )
                        {
                            ucStatus |= VD_V_FREQ_INVALID;
                        }
                    }
                }
            }
        }
    }
    return ucStatus;
}
#endif

bit msVDGetColorLockBit(void)
{
    return msVD_FSC_GetColorBurstStatus();
}

WORD msVDGetSyncStatus(void)
{
    BYTE ucBank;
    BYTE ucTmp;
    WORD wVDStatus = 0;
    BYTE ucCombStatus;
    WORD wVDVtotal = msVDGetVTotal();


    ucBank = msReadByte( BK0_00_REGBK);

    msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
    ucCombStatus = msReadByte( BK3_72_COMB_STSC);

    // Check V total
#if( ENABLE_VD_DSP )
    if( wVDVtotal > 566 ) // 625 lines
        wVDStatus |= VD_VSYNC_50HZ;
#else
    if( ucCombStatus&_BIT6 ) // 625 lines
        wVDStatus |= VD_VSYNC_50HZ;
#endif

    //if( 0 == (ucCombStatus&_BIT3) ) // Check comb: No any input signal
    {
        msWriteByte(BK0_00_REGBK, REG_BANK2_VD);
        if( ((msVDSpecialRead( 0x00, BK2_01 )&0xF0) >= 0x60)// Sync ctl state > 6
          &&(msVDDSPReadByte( 0x14 )&_BIT1) ) // SYNC_FOUND
        {
        #if( ENABLE_VD_DSP )
            if( wVDVtotal >= 420 && wVDVtotal <= 730 )
        #else
            if( (ucCombStatus&0x07) != 7 )
        #endif
           {
                wVDStatus |= (VD_HSYNC_LOCKED|VD_SYNC_LOCKED);

                // Check interlace
                if( msGetInterlaceBit() )
                {
                    wVDStatus |= VD_INTERLACED;
                }
            }
        }
    }

    // Get other VD status:
    if( wVDStatus&VD_HSYNC_LOCKED )
    {
        // Check color
        // Get bk2_02 value
        ucTmp = msVDSpecialRead( 0x00, BK2_02 );
        // Check Color burst lock
        if( (ucTmp&0x0C) == 0x04 )
        {
            wVDStatus |= VD_COLOR_LOCKED;
        }

        // Check FSC
        ucTmp = msVDSpecialRead( 0x00, BK2_01 );
        switch( ucTmp&0x07 )
        {
            default:
            case 0: wVDStatus |= VD_FSC_4433;
                break;
            case 2: wVDStatus |= VD_FSC_3579;
                break;
            case 4: wVDStatus |= VD_FSC_3575;
                break;
            case 6: wVDStatus |= VD_FSC_3582;
                break;
            case 1: wVDStatus |= VD_FSC_4285;
                break;
        }

        // Check PAL switch
        if( g_ucMSVDForceSystem == VD_FORCE_AUTO )
        {
            if( wVDStatus&VD_VSYNC_50HZ ) // 50 Hz
            {
                wVDStatus |= VD_PAL_SWITCH;
            }
            else // 60 Hz
            {
//                ucTmp = wVDStatus&VD_FSC_TYPE;
//                if( (ucTmp == VD_FSC_3579)
//                  ||(ucTmp == VD_FSC_3575)
//                  ||(ucTmp == VD_FSC_3582)
//                  ||(ucTmp == VD_FSC_4433)
//                  )
                {
                if (VD_Type<MARIA2_E)
                	{
                    ucTmp = msVDSpecialRead( 0x00, BK2_03 );
                    if( ucTmp&_BIT5 )
                        wVDStatus |= VD_PAL_SWITCH;
                	}
                #if( ENABLE_SW_DETECT_COLOR_STD )
                else if( g_ucVD_ColorStd == DSP_COLOR_PAL )
                        wVDStatus |= VD_PAL_SWITCH;
                #endif
                }
            }
        }
        else // Force color
        {
            if( (g_ucMSVDForceSystem == VD_FORCE_PAL)||(g_ucMSVDForceSystem == VD_FORCE_PAL_358) )
            {
                wVDStatus |= VD_PAL_SWITCH;
            }
        }

        //wVDStatus |= msVDGetVideoSystem( wVDStatus )
    }

    msWriteByte( BK0_00_REGBK, ucBank );

    return wVDStatus;
}

//////////////////////////////////////////////////////
//  Std     50/60   Vtotal  FSC HTotal  Color
//-----------------------------------------
//  NTSC     60     525     358 910
//  PAL-M    60     525     358 909     PAL-Switch
//  NTSC-443 60     525     443 1127
//  PAL-60   60     525     443 1127    PAL-Switch
//  xxx      50     625     358
//  PAL-Nc   50     625     358 917     PAL-Switch
//  xxx      50     625     443
//  PAL      50     625     443 1135    PAL-Switch

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av一级做a爰片久久| 91在线观看免费视频| 亚洲色图欧洲色图| 久久蜜桃av一区二区天堂 | 蜜臀av一区二区| 日韩av不卡一区二区| 亚洲一区二区三区在线播放| 亚洲欧美日韩人成在线播放| 亚洲欧美激情小说另类| 中文字幕乱码亚洲精品一区 | 免费成人你懂的| 亚洲成人免费av| 免费看欧美美女黄的网站| 青青草原综合久久大伊人精品| 日韩高清欧美激情| 国产一区二区不卡老阿姨| 国产91丝袜在线播放| 91视频.com| 欧美精品一级二级三级| 久久综合999| 亚洲欧洲一区二区在线播放| 亚洲精品免费播放| 国产综合色在线视频区| 国产一区亚洲一区| 成人avav影音| 日韩一区二区免费在线电影| 在线观看一区日韩| 91在线精品一区二区三区| 久久9热精品视频| 日本美女一区二区三区| 性久久久久久久久久久久| 有坂深雪av一区二区精品| 国产精品美女久久久久久2018| 精品99一区二区| 日韩欧美专区在线| 欧美日韩免费高清一区色橹橹 | 欧美日韩你懂的| 韩国一区二区在线观看| 日韩不卡免费视频| 日韩成人dvd| 久久精品国产色蜜蜜麻豆| 蜜桃久久精品一区二区| 天天综合日日夜夜精品| 一区二区三区在线视频观看| 亚洲伦在线观看| 亚洲一区中文日韩| 日韩国产一区二| 午夜欧美2019年伦理| 亚洲欧美日韩中文播放 | 国产精品激情偷乱一区二区∴| 欧美一区二区三区四区视频| 精品粉嫩aⅴ一区二区三区四区| 精品盗摄一区二区三区| 国产欧美日韩中文久久| 日韩毛片一二三区| 一区二区三区欧美激情| 九色porny丨国产精品| 国产乱码精品一品二品| 国产成人午夜精品影院观看视频 | 欧美一级夜夜爽| 精品国产乱码久久久久久久| 自拍偷拍亚洲综合| 一区二区三区不卡视频在线观看 | 日韩你懂的在线播放| 久久久亚洲精品石原莉奈 | 91原创在线视频| 26uuu久久综合| 国产精品久久久久7777按摩 | 7777精品伊人久久久大香线蕉经典版下载 | 久久色.com| 亚洲国产欧美日韩另类综合| 久久99精品视频| 一本色道久久加勒比精品| 不卡一区在线观看| 在线综合视频播放| 欧美国产欧美综合| 国产精品国产自产拍高清av王其| 国产精品久久99| 国产精品1区二区.| 欧美日韩不卡一区| 日韩和欧美的一区| 99久久精品费精品国产一区二区| 在线观看区一区二| 国产精品素人一区二区| 日韩不卡手机在线v区| 日韩欧美www| 久久精品国产成人一区二区三区| 极品少妇xxxx偷拍精品少妇| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲成人自拍偷拍| 91精品免费在线观看| 亚洲精品国产成人久久av盗摄 | 激情偷乱视频一区二区三区| 91女神在线视频| 亚洲成人免费电影| 欧美在线视频日韩| 一区二区三区精品| 成人精品视频一区二区三区| 国产欧美日韩视频一区二区| 久久精品国产成人一区二区三区| 正在播放一区二区| 天天色综合天天| 色诱视频网站一区| 午夜精品免费在线| 欧美日韩激情一区二区三区| 成人欧美一区二区三区视频网页| 成人午夜电影小说| 亚洲bdsm女犯bdsm网站| 欧美影视一区在线| 日本一区二区三区四区| 在线日韩一区二区| 亚洲一区二区欧美激情| 69堂国产成人免费视频| 欧美xxxxx裸体时装秀| 麻豆一区二区三| 日韩欧美在线一区二区三区| 日本vs亚洲vs韩国一区三区二区 | 91久久精品网| 日韩欧美不卡在线观看视频| www.欧美.com| 亚洲国产精品久久一线不卡| 2021中文字幕一区亚洲| 国产一区二三区好的| 在线视频欧美区| 日本强好片久久久久久aaa| 欧美一区二区精品| 欧美亚洲国产一区在线观看网站| 亚洲一区二区成人在线观看| 久久久精品tv| 91亚洲国产成人精品一区二区三| 中文字幕av不卡| 精品免费国产一区二区三区四区| 美女在线观看视频一区二区| 一区在线中文字幕| 欧美疯狂性受xxxxx喷水图片| 免费成人在线观看视频| 中国av一区二区三区| 日本久久一区二区三区| 91色视频在线| 日韩精品一二区| 亚洲午夜精品网| 精品国产sm最大网站免费看| 91精品国产欧美一区二区成人| 国内精品国产成人国产三级粉色| 国产精品萝li| 国产精品久久久爽爽爽麻豆色哟哟| 欧美午夜电影一区| 色视频欧美一区二区三区| 秋霞成人午夜伦在线观看| 国产精品美女视频| 欧美大片一区二区| 韩国女主播成人在线观看| 亚洲欧美成人一区二区三区| 欧美性xxxxxx少妇| 国产91精品免费| 蜜桃视频第一区免费观看| 日韩精品1区2区3区| 亚洲精品大片www| 亚洲图片欧美色图| 中文字幕在线观看不卡| 久久久国产一区二区三区四区小说 | 制服丝袜成人动漫| 91国产免费看| 白白色 亚洲乱淫| 在线视频欧美精品| 成人免费高清视频| 99久久国产综合精品色伊| 国产精品99久久久久久有的能看| 专区另类欧美日韩| 亚洲一区在线视频观看| 中文字幕亚洲一区二区av在线| 18涩涩午夜精品.www| 国产女人18水真多18精品一级做| 国产三级精品三级| 精品国产伦理网| 久久毛片高清国产| 亚洲欧美色图小说| 亚洲精品第1页| 欧美一区二区久久久| 麻豆精品在线看| 欧美成人bangbros| 日本一区二区三区dvd视频在线| 日韩午夜激情视频| 欧美成人在线直播| 精品免费一区二区三区| 日韩欧美一级片| 久久久精品免费免费| 国产欧美综合在线观看第十页| 久久久久久日产精品| 久久久www免费人成精品| 亚洲精品一区二区三区影院 | 视频一区免费在线观看| 亚洲一区二区三区精品在线| 亚洲美女视频在线| 久久蜜桃香蕉精品一区二区三区| 26uuu精品一区二区在线观看| 国产丝袜欧美中文另类| 国产精品区一区二区三区| 亚洲视频每日更新| 亚洲午夜av在线|