📄 drvscaler_nr.c
字号:
////////////////////////////////////////////////////////////////////////////////
//
// 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 + -