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

📄 drvscaler_nr.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:
        }
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_SetDNR(MS_DNR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);

    switch (eCtrl)
    {
    case MS_DNR_ON:
        MDrv_WriteRegBit(BK_SC_DNR_1C_H, DISABLE, _BIT2);  // DNR_En_F2
        MDrv_WriteByteMask(BK_SC_DNR_1B_L, 0x8F, 0x8F);
        break;

    case MS_DNR_FORCE_PRE: // Y/C Ratio force 100% previous
        MDrv_WriteRegBit(BK_SC_DNR_1C_H, DISABLE, _BIT2);  // DNR_En_F2
        MDrv_WriteByteMask(BK_SC_DNR_1B_L, 0x30, 0x30);
        break;

    case MS_DNR_OFF:
    default:
        MDrv_WriteRegBit(BK_SC_DNR_1C_H, DISABLE, _BIT2);  // DNR off
        break;
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_SetCNR(MS_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);

    if (eCtrl == MS_NR_OFF)
    {
        MDrv_WriteRegBit(BK_SC_DNR_1B_H, DISABLE, _BIT0); // Pre_CCS_Flt_F2
        MDrv_WriteRegBit(BK_SC_DNR_1B_H, DISABLE, _BIT1); // Pre_CCS_En_F2
    }
    else
    {
        //MDrv_WriteRegBit(BK_SC_DNR_1B_H, ENABLE, _BIT0); // Pre_CCS_Flt_F2
        //MDrv_WriteRegBit(BK_SC_DNR_1B_H, ENABLE, _BIT1); // Pre_CCS_En_F2
        MDrv_WriteRegBit(BK_SC_DNR_6E_H, ENABLE, _BIT6); // patch HW bug
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_Set_DNRHmd(MS_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);

    if (eCtrl == MS_NR_OFF)
    {
        MDrv_WriteRegBit(BK_SC_DNR_1B_H, DISABLE, _BIT4);   // Pre_HmD_En_F2
    }
    else
    {
        //MDrv_WriteRegBit(BK_SC_DNR_1B_H, ENABLE, _BIT3); // Pre_HmD_Flt
        MDrv_WriteRegBit(BK_SC_DNR_1B_H, ENABLE, _BIT4); // Pre_HmD_En
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_SetPNR(MS_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_OPM);

    if (eCtrl == MS_NR_OFF)
    {
        MDrv_WriteRegBit(BK_SC_OPM_3B_L, ENABLE, _BIT2); // pnr_force_disable_f2
    }
    else
    {
        MDrv_WriteRegBit(BK_SC_OPM_3B_L, DISABLE, _BIT2);
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_SetPCNR(MS_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_OPM);

    if (eCtrl == MS_NR_OFF)
    {
        MDrv_WriteByteMask(BK_SC_OPM_35_L, 0x00, 0x03); // disable POS_CCS_FLT and POS_CCS_EN
    }
    else
    {
        MDrv_WriteByteMask(BK_SC_OPM_54_L, 0x00, 0xF0); // YIIR_Mode, UV_IIR_Mode
        MDrv_WriteByteMask(BK_SC_OPM_35_L, 0x03, 0x03); // POS_CCS_EN & POS_CCS_FLT
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDr_Scaler_SetPNRHmD(MS_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_OPM);

    if (eCtrl == MS_NR_OFF)
    {
        MDrv_WriteByteMask(BK_SC_OPM_38_L, 0x00, 0x03); // disable POST_HMD_EN and POST_HMD_FLT
    }
    else
    {
        MDrv_WriteByteMask(BK_SC_OPM_62_L, 0x00, 0x0F);// UV_iir_mode_hmd & Y_iir_mode_hmd
        MDrv_WriteByteMask(BK_SC_OPM_38_L, 0x01, 0x03); // pos_hmd_flt_f2
    }
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_SetSNR(MS_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_ACE);

    if (IsSrcTypeAV(stSystemInfo.enInputSourceType))
    {
        if (eCtrl == MS_NR_ON)
        {
            MDrv_Write2Byte(BK_SC_ACE_30_L, 0x0001);
            MDrv_Write2Byte(BK_SC_ACE_31_L, 0x0010);
            MDrv_Write2Byte(BK_SC_ACE_34_L, 0xFFFF);
            MDrv_Write2Byte(BK_SC_ACE_35_L, 0x469C);
            MDrv_Write2Byte(BK_SC_ACE_36_L, 0x0012);
            MDrv_Write2Byte(BK_SC_ACE_37_L, 0x0000);
        }
        else
        {
            MDrv_Write2Byte(BK_SC_ACE_30_L, 0x0000);
        }
    }

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

static void MDrv_Scaler_SetPreNR8Bits(BOOLEAN bCtl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);
    MDrv_WriteRegBit(BK_SC_DNR_11_H, bCtl, _BIT7);
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_SetForceNR10_8Bits(MS_NR_BIT_TYPE eCtl)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);

    switch (eCtl)
    {
        case MS_NR_FORCE_8BITS:
            MDrv_WriteRegBit(BK_SC_DNR_1C_H, DISABLE, _BIT7);
            MDrv_WriteRegBit(BK_SC_DNR_11_H, ENABLE, _BIT7);
            break;

        case MS_NR_FORCE_10BITS:
            MDrv_WriteRegBit(BK_SC_DNR_1C_H, ENABLE, _BIT7);
            MDrv_WriteRegBit(BK_SC_DNR_11_H, DISABLE, _BIT7);
            break;

        default:
        case MS_NR_FORCE_OFF:
            MDrv_WriteRegBit(BK_SC_DNR_1C_H, DISABLE, _BIT7);
            MDrv_WriteRegBit(BK_SC_DNR_11_H, DISABLE, _BIT7);
            break;
    }

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

//-----------------------------------------------------------------------------
// Public APIs of NR
//-----------------------------------------------------------------------------

void MDrv_Scaler_InitNR(void)
{
    // Init DNR
    MDrv_WriteRegTbl2(DNR_YC_IIR_TBL);  // DNR Cur/Pre Y C Table
    MDrv_Write2Byte(BK_SC_DNR_20_L, 0x4444);

    // Init DNR's CNR
    MDrv_WriteRegTbl2(DNR_CNR_TBL);
    MDrv_WriteRegTbl2(DNR_CNR_WT_TBL);

    // Init DNR's HmD
    MDrv_WriteRegTbl2(DNR_HMD_TBL);
    MDrv_WriteRegTbl2(DNR_HMD_WT_TBL);

    // Init PNR
    MDrv_WriteRegTbl2(PNR_YC_TBL);

    // Init PNR's CNR
    MDrv_WriteRegTbl2(PNR_PCNR_TBL);
    MDrv_WriteRegTbl2(PNR_PCNR_WT_TBL);

    // Init PNR's HmD
    MDrv_WriteRegTbl2(PNR_HMD_TBL);
    MDrv_WriteRegTbl2(PNR_HMD_WT_TBL);
}

void MDrv_Scaler_Enable3DNR(BOOLEAN bEnable)
{
    U8 u8Bank;

    // force NR to be disabled when GWIN is consuming bandwidth in HD modes

    // if NR is enabled in progressive mode, enable Force Pre_NR8
    // (don't enable if NR disabled, because it will read data and consume bandwidth)
    MDrv_Scaler_SetPreNR8Bits(bEnable && !(g_DisplayWindowSetting.u8DisplayStatus & DISPLAYWINDOW_INTERLACE));

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);

    MDrv_WriteRegBit(BK_SC_DNR_1C_H, bEnable, _BIT4);

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

void MDrv_Scaler_EnableNR(MS_3D_NR_FUNCTION_TYPE e3DNRCtl)
{
    MDrv_Scaler_Set3DNR(e3DNRCtl);

    if (/*(e3DNRCtl != MS_3D_NR_OFF )&& // NR On    // kevin */
        (g_SrcInfo.u8DeInterlaceMode == MS_DEINT_2DDI_BOB) // bob mode
        )
    {
        MDrv_Scaler_SetForceNR10_8Bits(MS_NR_FORCE_8BITS);
    }
    else
    {
        MDrv_Scaler_SetForceNR10_8Bits(MS_NR_FORCE_OFF);
    }

    #if ENABLE_PC_CSC
        MDrv_Scaler_SetCNR(MS_NR_ON);
        //MDrv_Scaler_SetSNR(MS_NR_ON);
    #else
    if(IsSrcTypeVga(stSystemInfo.enInputSourceType))
    {
        MDrv_Scaler_SetCNR(MS_NR_OFF);      // for pure RGB
        //MDrv_Scaler_SetSNR(MS_NR_OFF);      // for pure RGB
    }
    else
    {
        MDrv_Scaler_SetCNR(MS_NR_ON);
        //MDrv_Scaler_SetSNR(MS_NR_ON);
    }
    #endif

    if (!(IsSrcColorSpaceYUV()) && (IsSrcTypeVga(stSystemInfo.enInputSourceType)))
    {
        MDrv_Scaler_SetPNR(MS_NR_OFF);
        MDrv_Scaler_SetPCNR(MS_NR_OFF);
        MDrv_Scaler_SetDNR(MS_NR_OFF);
    }
    else
    {
        MDrv_Scaler_SetPNR(MS_NR_ON);
        MDrv_Scaler_SetPCNR(MS_NR_ON);
        MDrv_Scaler_SetDNR(MS_NR_ON);
    }
}

⌨️ 快捷键说明

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