📄 57xx_adjust.c
字号:
/*
$Workfile: 57xx_adjust.c $
$Revision: 1.15 $
$Date: Aug 23 2006 23:00:10 $
*/
//******************************************************************
//
// Copyright (C) 2002. GENESIS MICROCHIP INC.
// All rights reserved. No part of this program may be reproduced.
//
// Genesis Microchip Corp., 2150 Gold Street
// Alviso, CA 95002 USA
// Genesis Microchip Inc., 165 Commerce Valley Dr. West
// Thornhill, Ontario, Canada, L3T 7V8
//
//================================================================
//
// MODULE: adjust.c
//
// USAGE : This module contains adjuster function
//
//******************************************************************
//******************************************************************
// I N C L U D E F I L E S
//******************************************************************
#include "inc\all.h"
#include "mem.h"
#include "math.h"
#define DEBUG_COLOR 0
#define DEBUG_OSD 0
#define DEBUG_OSD_EXTENDED 0
#if DEBUG_MSG && (DEBUG_COLOR | DEBUG_OSD)
#define msg(a,b) gm_Print((const char far *)a,b)
#else
#define msg(a,b)
#endif
#if DEBUG_MSG && DEBUG_OSD_EXTENDED
#define msgx(a,b) gm_Print((const char far *)a,b)
#else
#define msgx(a,b)
#endif
#pragma option -w-use //Supress Warnings for Parameters not used.
#define FLIP_HPOS_ADJUSTER 1 //when set, incrementing UserPrefHTotal will shift immage to the right.
//******************************************************************
// L O C A L D E F E N I T I O N S
//******************************************************************
//#define HSVS_SPACE_ADJ 0x40 // used to adjust iphs_delay
#define MIN_SRC_HSTART IPHS_ActiveStart // minimum source hstart position for UserPrefHStart
#define MAX_SRC_HSTART (UserPrefHTotal/2) // maximum source hstart position for UserPrefHStart
#define SystemReset() ((void (code*)(void))0)()
#define Unused(x) ((x) = (x))
#if USE_AUDIO && USE_GSEL_DRVR_MODEL
extern BYTE Set_AudioMute;
#endif
#ifdef Genesis_REF_OSD
BYTE ROM ColorTempConst[8][3] =
{
{255, 255, 255}, //CTEMP_SRGB
{255, 255, 255}, //CTEMP_USER
{248, 237, 210}, //CTEMP_4200K
{251, 237, 227}, //CTEMP_5000K
{234, 255, 241}, //CTEMP_6500K
{255, 255, 255}, //CTEMP_7500K
{224, 228, 251}, //CTEMP_9300K
{255, 255, 255}, //CTEMP_NON_SRGB, Note: the values of this array should be the same as CTEMP_SRGB
//CTEMP_CURRENT
};
#endif
#if USE_3x3Matrix_FOR_SATURATION
//Note, following saturation is used in 3x3 matrix, and should be tuned for actual application and
//work with ACM-3D. For hue, no change (128) in 3x3 matrix. These default settings are only used when:
//1)MAIN channel; and
//2)Graphics input; (VGA & DVI)
//3)ACC/ACM is enabled.
//4)default userPrefSaturation and Hue equals to 128.
//The # of entries in following array should be the same as # of
//theme modes including 6-axis mode.
BYTE ROM SaturationHueConst[ACM_MODE_SIXAXIS-ACM_MODE_NORMAL+1][2] =
{
//{saturation, hue} //128 is at 50%
{128, 128}, //Normal, 50% saturation
{145, 128}, //Vivid, 56.5% saturation
{160, 128}, //Sport, 62.5%
{154, 128}, //Theatre, 60%
{141, 128}, //Game, 55%
{128, 128}, //6-axis
};
#endif
#if UPDATE_BW_BY_MODE
extern BYTE gmvb_Input_ADC_BW;
#endif
//================================================================================//
//For Flash test only. It should not be enabled for normal operation //
//#define FLASH_RELIABILITY_TEST //
//#define POWER_CYCLE_TEST_MASTER //
//#define POWER_CYCLE_TEST_TARGET //
//================================================================================//
#if defined(FLASH_RELIABILITY_TEST) //Flash reliability test
ModeIndependentUserPrefType ModeIndependentUserPreferences_temp;
static DWORD testcounter=0x0;
static BYTE test_err=0;
//static BYTE pre_delay_down=0;
#elif defined(POWER_CYCLE_TEST_MASTER)
static DWORD testcounter=0x0;
static BYTE Initial_1st=1;
static BYTE Check_feedback=0;
#elif defined(POWER_CYCLE_TEST_TARGET)
static BYTE pre_delay_down=0;
#endif
//To keep track of previous non-srgb color space for implementation 2 of AdjustContrast()
static BYTE B_PreUserPrefColor = CTEMP_NON_SRGB;
static void __near matrix_MxM(SDWORD *A, SDWORD *B);
static void __near matrix_MxA(SDWORD *A, SWORD C);
static void __near matrix_MxC(SDWORD *A, SWORD C);
static short sinus(BYTE);
static short cosinus(BYTE);
#ifdef ZERO_K_MAIN // gives cleaner display sometimes, but adds a phase skew
extern BYTE KM0PhaseOffset;
#endif
extern BYTE ModeTableIndex;
//******************************************************************
// DESCRIPTION : Brightness adjuster function
// SYNTEX : void AdjustBrightness(void)
// PARAMETERS : none
// RETURN : none
//******************************************************************
#ifdef Action_AdjustBrightness_WB_Used
void AdjustBrightness(void)
{
// BYTE B_Brightness = UserPrefBrightness + 128;
#if PWM0_BRIGHTNESS==1
#ifdef _CUSTOMER_D_SPECIFIC_IN_52XX_
gm_SetBrightnessMainPWM_Customer_D(UserPrefBrightness);
#else
gm_SetBrightnessMainPWM(UserPrefBrightness);
#endif
#else
gm_SetBrightnessMain(UserPrefBrightness);
#endif
//forceHostIPControl();
msgx("Adjust Brightness = %d", UserPrefBrightness);
}
#endif // Action_AdjustBrightness_WB_Used
//******************************************************************
// DESCRIPTION : Contrast adjuster function
// SYNTEX : void AdjustContrast(void)
// PARAMETERS : none
// RETURN : none
//******************************************************************
#ifdef Action_AdjustContrast_WB_Used
void AdjustContrast ()
{
//Adjusting contrast for any non-srgb color space (CTEMP_4200K, CTEMP_USER, etc)
//will not change color space, while adjusting contrast in srgb color space will
//make it a non-srgb color space, and it's like a hidden non-srgb color space (not CTEMP_4200K, ... or CTEMP_USER).
//Implementation 1: Always assume CTEMP_NON_SRGB is used. One has to be aware of no osd submenu under color main menu for this hidden non-srgb color space.
//Implementation 2: Always assume previous non-srgb color space is used when adjusting contrast in srgb color space.
if (UserPrefColor == CTEMP_SRGB)
{
UserPrefColor = CTEMP_NON_SRGB; //This is implementation 1.
//by uncomment following line will enable implementation 2.
//UserPrefColor = B_PreUserPrefColor; //Implementation 2.
}
AdjustColor();
}
#endif // Action_AdjustContrast_WB_Used
#if USE_ACC_ACM
//******************************************************************
// DESCRIPTION : Configure Highlight window and ACC/ACM setting
// SYNTAX : void LoadAcc(void)
// PARAMETERS : none
// RETURN : none
//******************************************************************
//void LoadAccAcm(BYTE const far *CMFineTable,
// BYTE const far *CMIntpTable,
// ACCDataType const far *ACCData,
// BYTE const far CMGainV,
// BYTE const far CMGainU)
void LoadAcc(ACCDataType const far *ACCData)
{
//Raise OCM priority to avoid system hangs (memory contention on sram and ocm)
//when ACC data are written to OCM memory.
gm_SetRegBitsByte(OCM_BUS_CONTROL, (1 << 2));
//gm_ACM_loadFEMatrix(CMFineTable,
// (BYTE const far *)CMIntpTable,
// 0x01);
//gm_WriteRegByte(ACM_INTERP_GAIN,
// CMGainV | (CMGainU << 4));
gm_InitACC(ACCData);
gm_WriteRegByte(HOST_CONTROL,
DPFORCE_UPDATE | IPFORCE_UPDATE);
gm_WriteRegByte(YC_LINK_CTRL,0x00);
gm_ClearRegBitsByte(OCM_BUS_CONTROL, (1 << 2));
}
#endif
#if USE_ACM_3D
//******************************************************************
// DESCRIPTION : Load ACM-3D settings
// (ACM_MODE_DEFAULT, ACM_MODE_THEATRE/NIGHT-TIME, ACM_MODE_NATURE/VIVID,
// or ACM_MODE_SPORT, ACM_MODE_GAME, ACM_MODE_6AXIS?)
// SYNTAX : void LoadAcm3DSettings(void)
// PARAMETERS : none
// RETURN : none
//******************************************************************
void LoadAcm3DSettings( gmt_ACM3DRegionDef ROM* pt_stRegionDef, gmt_ACM3DCorrectionParams ROM* pt_stCorrParams)
{
msg("LoadAcm3DSettings()", 0);
gm_ACM3DLoadRegionSettings(pt_stRegionDef, pt_stCorrParams);
gm_WriteRegByte(ACM_CTRL, 0x81);
gm_ForceUpdate();
}
#else
#define LoadAcm3DSettings( a, b)
#endif
void AdjustHightlightWindow(void)
{
#ifdef UserPrefW_OsdAccAcmFlag
#if (USE_ACC_ACM || USE_ACM_3D)
msg("UserPrefW_OsdAccAcmFlagn %x",(WORD)UserPrefW_OsdAccAcmFlag);
if(UserPrefW_OsdAccAcmFlag & WindowEnableBit)
{
switch(UserPrefW_OsdAccAcmFlag & WindowMask)
{
case WindowLetterBox :
{
WORD HighlightWinFrontPorch, wHStart;
msg("ColorWindow: LetterBox", 0);
wHStart = gmvw_OutputHStartMain;
HighlightWinFrontPorch = PanelMinHTotal - wHStart - gmc_PanelWidth;
if( HighlightWinFrontPorch <= HIGHLIGHT_WINDOW_FRONT_PORCH)
wHStart = PanelMinHTotal - gmc_PanelWidth - HIGHLIGHT_WINDOW_FRONT_PORCH;
gm_WriteRegWord(DH_WIN_START, wHStart);
gm_WriteRegWord(DH_WIN_WIDTH, gmc_PanelWidth);
gm_WriteRegWord(DV_WIN_START, gmvw_OutputVStartMain + gmc_PanelHeight/2 - gmc_PanelWidth/32*9); //16:9 format
gm_WriteRegWord(DV_WIN_LENGTH, gmc_PanelWidth/16*9);
}
break;
case WindowLetterBox2 :
{
WORD HighlightWinFrontPorch, wHStart;
msg("ColorWindow: LetterBox2", 0);
wHStart = gmvw_OutputHStartMain;
HighlightWinFrontPorch = PanelMinHTotal - wHStart - gmc_PanelWidth;
if( HighlightWinFrontPorch <= HIGHLIGHT_WINDOW_FRONT_PORCH)
wHStart = PanelMinHTotal - gmc_PanelWidth - HIGHLIGHT_WINDOW_FRONT_PORCH;
gm_WriteRegWord(DH_WIN_START, wHStart);
gm_WriteRegWord(DH_WIN_WIDTH, gmc_PanelWidth);
gm_WriteRegWord(DV_WIN_START, gmvw_OutputVStartMain + gmc_PanelHeight/2 - gmc_PanelWidth/32*10); //16:10 format
gm_WriteRegWord(DV_WIN_LENGTH, gmc_PanelWidth/16*10);
}
break;
case WindowLeftLetterBox :
{
WORD HighlightWinFrontPorch, wHStart;
msg("ColorWindow: LeftLetterBox", 0);
wHStart = gmvw_OutputHStartMain;
HighlightWinFrontPorch = PanelMinHTotal - wHStart - gmc_PanelWidth;
if( HighlightWinFrontPorch <= HIGHLIGHT_WINDOW_FRONT_PORCH)
wHStart = PanelMinHTotal - gmc_PanelWidth - HIGHLIGHT_WINDOW_FRONT_PORCH;
#if 0 // Louis for Half windows
gm_WriteRegWord(DH_WIN_START, wHStart);
gm_WriteRegWord(DH_WIN_WIDTH, gmc_PanelWidth/2);
gm_WriteRegWord(DV_WIN_START, gmvw_OutputVStartMain + gmc_PanelHeight/2 - gmc_PanelWidth/32*9); //16:9 format
gm_WriteRegWord(DV_WIN_LENGTH, gmc_PanelWidth/16*9);
#else
gm_WriteRegWord(DH_WIN_START, wHStart);
gm_WriteRegWord(DH_WIN_WIDTH, gmc_PanelWidth/2);
gm_WriteRegWord(DV_WIN_START, gmvw_OutputVStartMain);
gm_WriteRegWord(DV_WIN_LENGTH, gmc_PanelHeight);
#endif
}
break;
case WindowFullScreen :
{
WORD HighlightWinFrontPorch, wHStart;
msg("ColorWindow: FullScreen", 0);
wHStart = gmvw_OutputHStartMain;
HighlightWinFrontPorch = PanelMinHTotal - wHStart - gmc_PanelWidth;
if( HighlightWinFrontPorch <= HIGHLIGHT_WINDOW_FRONT_PORCH)
wHStart = PanelMinHTotal - gmc_PanelWidth - HIGHLIGHT_WINDOW_FRONT_PORCH;
gm_WriteRegWord(DH_WIN_START, wHStart);
gm_WriteRegWord(DH_WIN_WIDTH, gmc_PanelWidth);
gm_WriteRegWord(DV_WIN_START, gmvw_OutputVStartMain);
gm_WriteRegWord(DV_WIN_LENGTH, gmc_PanelHeight);
}
break;
#if 0
// Louis For Magic Zone
case WindowMagicZone :
{
Adjust_MagicWindow_Pos();
Adjust_MagicWindow_Size();
Adjust_MagicWindow_Hue();
Adjust_MagicWindow_Saturation();
Adjust_MagicWindow_Brightness();
}
break;
#endif
case WindowDDCCISetting :
break;
default :
msg("Unknown Window option!!",0);
break;
} // switch window
}// if window enabled
else
{//clear video window
msg("HighLight Window OFF!!",0);
gm_WriteRegWord(DH_WIN_START, 0);
gm_WriteRegWord(DH_WIN_WIDTH, 0);
gm_WriteRegWord(DV_WIN_START, 0); //16:9 format
gm_WriteRegWord(DV_WIN_LENGTH, 0);
}
gm_ForceUpdate();
#endif // (USE_ACC_ACM || USE_ACM_3D)
#endif
}
//BYTE UserPrefWindowScheme = ACM_MODE_NORMAL;
void AdjustACCACM(void)
{
#if (USE_ACC_ACM || USE_ACM_3D)
if(InputPortArray[gmvb_CurrentPortMain].ACM_En)
{
// switch(UserPrefACMMode)
switch(UserPrefThemeMode)
{
case ACM_MODE_NORMAL:
msg("Enter ACM_MODE_NORMAL", 0);
// UserPrefW_OsdAccAcmFlag &= ~(AccEnableBit|AcmEnableBit);
break;
case ACM_MODE_CINEMA:
msg("Enter ACM_MODE_CINEMA", 0);
break;
case ACM_MODE_VIVID: //ACM_MODE_NATURE
msg("Enter ACM_MODE_VIVID/Nature", 0);
break;
case ACM_MODE_GAME:
msg("Enter ACM_MODE_GAME", 0);
break;
case ACM_MODE_SPORT:
msg("Enter ACM_MODE_SPORT", 0);
break;
#if USE_ACM_3D
case ACM_MODE_SIXAXIS:
msg("Enter ACM_MODE_SIXAXIS", 0);
break;
#endif
default:
return;
}
#if USE_ACC_ACM
switch(UserPrefThemeMode)
{
case ACM_MODE_NORMAL:
UserPrefW_OsdAccAcmFlag &= ~AccEnableBit;
break;
case ACM_MODE_CINEMA:
LoadAcc(&ACCData_Cinema);
UserPrefW_OsdAccAcmFlag |= AccEnableBit;
break;
default:
case ACM_MODE_VIVID: //ACM_MODE_NATURE
LoadAcc(&ACCData_Vivid);
UserPrefW_OsdAccAcmFlag |= AccEnableBit;
break;
case ACM_MODE_GAME:
LoadAcc(&ACCData_Nature);
UserPrefW_OsdAccAcmFlag |= AccEnableBit;
break;
case ACM_MODE_SPORT:
LoadAcc(&ACCData_Sport);
UserPrefW_OsdAccAcmFlag |= AccEnableBit;
break;
}
#endif
#if USE_ACM_3D
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -