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

📄 drvscaler_nr.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////
//
// 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.
//
////////////////////////////////////////////////////////////////////////////////

/******************************************************************************/
/*                           Header Files                                     */
/* ****************************************************************************/

#include "Analog_Reg.h"
#include "drvGlobal.h"
#include "drvAnalog_inline.h"
#include "drvScaler.h"
#include "drvMode.h"
#include "drvGop.h"

/******************************************************************************/
/*                           Local Prototypes                                 */
/******************************************************************************/

static void MDrv_Scaler_SetPreNR8Bits(BOOLEAN bCtl);

/******************************************************************************/
/*                           Local Variables                                  */
/******************************************************************************/

//
// 3D NR table
//

MS_REG_INIT code DNR_YC_TBL[][37] =
{
    {   // LOW
        _RV1(BK_SELECT_00, REG_BANK_DNR),
        _RV2(BK_SC_DNR_4D_L, 0x2466),   // DNR Y, 2007/2/26
        _RV2(BK_SC_DNR_4E_L, 0x0001),
        _RV2(BK_SC_DNR_4F_L, 0x0000),
        _RV2(BK_SC_DNR_50_L, 0x0000),

        _RV2(BK_SC_DNR_3F_L, 0x5555),   // DNR C, 2007/2/26
        _RV2(BK_SC_DNR_40_L, 0x1234),
        _RV2(BK_SC_DNR_41_L, 0x0000),
        _RV2(BK_SC_DNR_42_L, 0x0000),
        _END_OF_TBL2_
    },

    {   // MID
        _RV1(BK_SELECT_00, REG_BANK_DNR),
        _RV2(BK_SC_DNR_4D_L, 0x468A),   // DNR Y, 2007/2/26
        _RV2(BK_SC_DNR_4E_L, 0x0012),
        _RV2(BK_SC_DNR_4F_L, 0x0000),
        _RV2(BK_SC_DNR_50_L, 0x0000),

        _RV2(BK_SC_DNR_3F_L, 0x7777),   // DNR C, 2007/2/26
        _RV2(BK_SC_DNR_40_L, 0x3456),
        _RV2(BK_SC_DNR_41_L, 0x0012),
        _RV2(BK_SC_DNR_42_L, 0x0000),
        _END_OF_TBL2_
    },

    {   // HIGH
        _RV1(BK_SELECT_00, REG_BANK_DNR),
        _RV2(BK_SC_DNR_4D_L, 0x5678),   // DNR Y, seven 070823_00
        _RV2(BK_SC_DNR_4E_L, 0x2334),
        _RV2(BK_SC_DNR_4F_L, 0x0112),
        _RV2(BK_SC_DNR_50_L, 0x0000),

        _RV2(BK_SC_DNR_3F_L, 0x789C),   // DNR C
        _RV2(BK_SC_DNR_40_L, 0x3456),
        _RV2(BK_SC_DNR_41_L, 0x0012),
        _RV2(BK_SC_DNR_42_L, 0x0000),
        _END_OF_TBL2_,
    },
};

//
// DRN table
//

MS_REG_INIT code DNR_YC_IIR_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_DNR),
    _RV2(BK_SC_DNR_21_L, 0x6887), // DNR Cur YIIR
    _RV2(BK_SC_DNR_22_L, 0x2334),
    _RV2(BK_SC_DNR_23_L, 0x2222),
    _RV2(BK_SC_DNR_24_L, 0x1112),
    _RV2(BK_SC_DNR_25_L, 0x0001),
    _RV2(BK_SC_DNR_26_L, 0x6887), // DNR Pre YIIR
    _RV2(BK_SC_DNR_27_L, 0x2334),
    _RV2(BK_SC_DNR_28_L, 0x2222),
    _RV2(BK_SC_DNR_29_L, 0x1112),
    _RV2(BK_SC_DNR_2A_L, 0x0001),

    _RV2(BK_SC_DNR_2B_L, 0x6887), // DNR Cur CIIR
    _RV2(BK_SC_DNR_2C_L, 0x2334),
    _RV2(BK_SC_DNR_2D_L, 0x1222),
    _RV2(BK_SC_DNR_2E_L, 0x1111),
    _RV2(BK_SC_DNR_2F_L, 0x0001),
    _RV2(BK_SC_DNR_30_L, 0x6887), // DNR Pre CIIR
    _RV2(BK_SC_DNR_31_L, 0x2334),
    _RV2(BK_SC_DNR_32_L, 0x2222),
    _RV2(BK_SC_DNR_33_L, 0x1112),
    _RV2(BK_SC_DNR_34_L, 0x0001),
    _END_OF_TBL2_
};

//
// HmD
//

MS_REG_INIT code DNR_HMD_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_DNR),
    _RV2(BK_SC_DNR_45_L, 0x0000), // DNR HmD
    _RV2(BK_SC_DNR_46_L, 0x0000),
    _RV2(BK_SC_DNR_47_L, 0x0000),
    _RV2(BK_SC_DNR_48_L, 0x0000),
    _RV2(BK_SC_DNR_49_L, 0x0000),
    _RV2(BK_SC_DNR_4A_L, 0x0000),
    _RV2(BK_SC_DNR_4B_L, 0x0000),
    _END_OF_TBL2_
};

MS_REG_INIT code DNR_HMD_WT_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_DNR),
    _RV2(BK_SC_DNR_43_L, 0x0808), // DNR_Nor_diff_HmD_RAW_Weight &  DNR_Nor_diff_C_Weight
    _RV2(BK_SC_DNR_44_L, 0x0880), // DNR_HmD_LUT_TH & DNR_Nor_diff_C_HmD_Weight
    _RV2(BK_SC_DNR_4C_L, 0x0002), // Y_CBR_MUX_HmD
    _END_OF_TBL2_
};

//
// CNR table
//

MS_REG_INIT code DNR_CNR_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_DNR),
    _RV2(BK_SC_DNR_37_L, 0x3344), // DNR CNR
    _RV2(BK_SC_DNR_38_L, 0x1122),
    _RV2(BK_SC_DNR_39_L, 0x0001),
    _RV2(BK_SC_DNR_3A_L, 0x0000),
    _RV2(BK_SC_DNR_3B_L, 0x4400),
    _RV2(BK_SC_DNR_3C_L, 0x2233),
    _RV2(BK_SC_DNR_3D_L, 0x0011),
    _END_OF_TBL2_
};

MS_REG_INIT code DNR_CNR_WT_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_DNR),
    _RV2(BK_SC_DNR_35_L, 0x1919), // DNR_Nor_diff_Weight & DNR_Nor_diff_CNR_RAW_Weight
    _RV2(BK_SC_DNR_36_L, 0x0000), // DNR_CCS_LUT_TH & DNR_Nor_diff_Y_CNR_Weight
    _RV2(BK_SC_DNR_3E_L, 0x0002), // Y_CBR_MUX[2:0]
    _END_OF_TBL2_
};

//
// PNR
//

MS_REG_INIT code PNR_YC_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_OPM),
    _RV2(BK_SC_OPM_6D_L, 0x2222), //PNR TableY
    _RV2(BK_SC_OPM_6E_L, 0x0012),
    _RV2(BK_SC_OPM_60_L, 0x2222), //PNR TableC
    _RV2(BK_SC_OPM_61_L, 0x0012),
    _END_OF_TBL2_

};

//
// PCNR
//

MS_REG_INIT code PNR_PCNR_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_OPM),
    _RV2(BK_SC_OPM_58_L, 0x1112), //PCNR
    _RV2(BK_SC_OPM_59_L, 0x1111),
    _RV2(BK_SC_OPM_5A_L, 0x1111),
    _RV2(BK_SC_OPM_5B_L, 0x1111),
    _RV2(BK_SC_OPM_5C_L, 0x1111),
    _RV2(BK_SC_OPM_5D_L, 0x1111),
    _RV2(BK_SC_OPM_5E_L, 0x0001),
    _END_OF_TBL2_
};

MS_REG_INIT code PNR_PCNR_WT_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_OPM),
    _RV2(BK_SC_OPM_35_L, 0x2000),  // CCS_LUT_TH, Y_CBR_MUX
    _RV2(BK_SC_OPM_36_L, 0x0808),  // NOR_Diff_CNR_RAW Weight, NOR_Diff_Weight
    _RV1(BK_SC_OPM_37_L, 0x08),  // NOR_Diff_Y_CNR_WEIGHT
    _RV1(BK_SC_OPM_3C_H, 0x04),  // NR_TH2Y
    _END_OF_TBL2_
};

//
// PNR HmD table
//

MS_REG_INIT code PNR_HMD_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_OPM),
    _RV2(BK_SC_OPM_66_L, 0x0000), //PNR TableHmd
    _RV2(BK_SC_OPM_67_L, 0x0000),
    _RV2(BK_SC_OPM_68_L, 0x0000),
    _RV2(BK_SC_OPM_69_L, 0x0000),
    _RV2(BK_SC_OPM_6A_L, 0x0000),
    _RV2(BK_SC_OPM_6B_L, 0x0000),
    _RV2(BK_SC_OPM_6C_L, 0x0000),
    _END_OF_TBL2_
};

MS_REG_INIT code PNR_HMD_WT_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_OPM),
    _RV2(BK_SC_OPM_38_L, 0x2000),// HMD_LUT_TH, Y_CBR_MUX_Hmd
    _RV2(BK_SC_OPM_39_L, 0x0808),// NOR_DIFF_HMD_RAW_WEIGHT, NOR_DIFFC_WEIGHT
    _RV1(BK_SC_OPM_3A_L, 0x08),// NOR_DIFF_C_HMD_WEIGHT
    _RV2(BK_SC_OPM_3C_H, 0x40),// NR_TH2C
    _END_OF_TBL2_
};

#if 0
//
// SNR
//

MS_REG_INIT code SNR_TBL[] =
{
    _RV1(BK_SELECT_00, REG_BANK_OP1),
    _RV2(BK_SC_OP1_1E_L, 0x0000),
    _RV2(BK_SC_OP1_1F_L, 0x0000),
    _RV2(BK_SC_OP1_20_L, 0x0000),
    _RV2(BK_SC_OP1_21_L, 0x0000),
    _RV2(BK_SC_OP1_22_L, 0x0000),
    _RV2(BK_SC_OP1_23_L, 0x0000),
    _RV2(BK_SC_OP1_24_L, 0x0000),
    _RV2(BK_SC_OP1_25_L, 0x0000),
    _RV2(BK_SC_OP1_26_L, 0x0000),
    _RV2(BK_SC_OP1_27_L, 0x0000),
    _END_OF_TBL2_
};
#endif

//-----------------------------------------------------------------------------
// Private APIs of NR
//-----------------------------------------------------------------------------

void MDrv_Scaler_Set3DNR(MS_3D_NR_FUNCTION_TYPE eCtrl)
{
    U8 u8Bank;

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

    if (eCtrl == MS_3D_NR_OFF)
    {
        g_SrcInfo.u16ColorFinetuneFlag &= ~FINETUNE_3DNR;
        MDrv_Scaler_Enable3DNR(DISABLE);
    }
    else
    {
        g_SrcInfo.u16ColorFinetuneFlag |= FINETUNE_3DNR;
        MDrv_WriteRegTbl2(DNR_YC_TBL[(eCtrl - 1)]);
        MDrv_Scaler_Enable3DNR(ENABLE);

        /* Finetune NR strength for HDMI */
        if (IsSrcTypeYPbPr(stSystemInfo.enInputSourceType))
        {
            MDrv_Write2Byte(BK_SC_DNR_4D_L, 0x7844);
            MDrv_Write2Byte(BK_SC_DNR_3F_L, 0x7844);

⌨️ 快捷键说明

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