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

📄 57xx_adjust.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
	$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 + -