📄 pictcont.c
字号:
int08 pictcont_SetGamma( uint08 gammaTable )
{
DISP_SetFreeze(TRUE);
if( IMG_GAM_LoadLut( gammaTable ) != PASS )
{
DISP_SetFreeze(FALSE);
return FAIL;
}
DISP_SetFreeze(FALSE);
return PASS;
}
/****************************************************************************/
/* Whitepeaking user controls */
/****************************************************************************/
int08 pictcont_GetWhitePeaking( uint08 *value )
{
*value = IMG_GetWhitePeaking();
return PASS;
}
int08 pictcont_SetWhitePeaking( uint08 value )
{
DISP_SetFreeze(TRUE);
if( IMG_SetWhitePeaking( value ) != PASS )
{
DISP_SetFreeze(FALSE);
return FAIL;
}
DISP_SetFreeze(FALSE);
return PASS;
}
/****************************************************************************/
/* BrilliantColor(tm) user controls */
/****************************************************************************/
int08 pictcont_SetBrilliantColor( uint08 enable )
{
/* channel is 'don't care' */
if( IMG_EnableAlgorithm( SRC_PRIMARY, IMG_ALG_BRICOLOR, enable ) != PASS )
return FAIL;
return PASS;
}
int08 pictcont_SetBrilliantColorLook(uint08 look)
{
if( IMG_SetBrilliantColorLook( look ) != PASS )
return FAIL;
return PASS;
}
int08 pictcont_GetBrilliantColorLook( uint08 *look )
{
*look = IMG_GetBrilliantColorLook();
return PASS;
}
/****************************************************************************/
/* Noise Reduction user controls */
/****************************************************************************/
int08 pictcont_GetNoiseReduction( uint08 *enable )
{
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( srcDesc->sourceActive )
{
EE_GETVAR( UserMachine.ConnectorSettings[srcDesc->connector].NoiseReduction, enable );
return PASS;
}
else
return FAIL;
}
int08 pictcont_SetNoiseReduction( uint08 enable )
{
int08 spatial_retval = FAIL;
int08 temporal_retval = FAIL;
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( srcDesc->sourceActive )
{
if( enable == FALSE )
{
spatial_retval = ANR_Enable( TRUE, FALSE ); /* disable spatial */
temporal_retval = ANR_Enable( FALSE, FALSE ); /* disable temporal */
}
else
{
ANR_SetFilterStrength( TRUE, ANR_STRENGTH_8 );
ANR_SetFilterStrength( FALSE, ANR_STRENGTH_8 );
if( srcDesc->okToDeinterlace == TRUE )
{
/* sources using the deinterlacer use both spatial and temporal NR */
spatial_retval = ANR_Enable( TRUE, TRUE ); /* enable spatial */
temporal_retval = ANR_Enable( FALSE, TRUE ); /* enable temporal */
}
else
{
/* sources not using the deinterlacer can only use spatial NR */
spatial_retval = ANR_Enable( TRUE, TRUE ); /* enable spatial */
temporal_retval = ANR_Enable( FALSE, FALSE ); /* disable temporal */
}
}
if( spatial_retval != PASS || temporal_retval != PASS )
return FAIL;
}
else
return FAIL;
return PASS;
}
/****************************************************************************/
/* DDC/CI color controls */
/****************************************************************************/
void pictcont_RestoreColorDefaults( BOOL resetAll )
{
DP_SOURCEDESC *srcDesc;
uint08 connectorNum;
datapath_GetSourceDesc( &srcDesc );
if( !resetAll )
{
if( srcDesc->sourceActive )
{
pictcont_writeColorDefaultstoEEPROM( srcDesc->connector );
}
}
else
{
for( connectorNum = 0; connectorNum < NUM_CONNECTORS; connectorNum++ )
{
pictcont_writeColorDefaultstoEEPROM( connectorNum );
}
}
/* update display with new values */
pictcont_ConfigureForExternalSource();
}
void pictcont_writeColorDefaultstoEEPROM( DP_CONNECTOR connector )
{
uint08 i;
/* set all DDC/CI color default settings from flash to the EEPROM for the active connector */
EE_PUTVAR( UserMachine.ConnectorSettings[connector].Brightness,
gpSettings->UserMachine.ConnectorSettings[connector].Brightness );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].Contrast,
gpSettings->UserMachine.ConnectorSettings[connector].Contrast );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].Hue,
gpSettings->UserMachine.ConnectorSettings[connector].Hue );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].Color,
gpSettings->UserMachine.ConnectorSettings[connector].Color );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].Sharpness,
gpSettings->UserMachine.ConnectorSettings[connector].Sharpness );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].ColorSpace,
gpSettings->UserMachine.ConnectorSettings[connector].ColorSpace );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].Gamma,
gpSettings->UserMachine.ConnectorSettings[connector].Gamma );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].WhitePeaking,
gpSettings->UserMachine.ConnectorSettings[connector].WhitePeaking );
for( i = 0; i < NUM_HSG_COLORS; i++ )
{
EE_PUTVAR( UserMachine.ConnectorSettings[connector].HSGColorValues[i],
gpSettings->UserMachine.ConnectorSettings[connector].HSGColorValues[i] );
}
EE_PUTVAR( UserMachine.ConnectorSettings[connector].HSGWhiteRedGain,
gpSettings->UserMachine.ConnectorSettings[connector].HSGWhiteRedGain );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].HSGWhiteGreenGain,
gpSettings->UserMachine.ConnectorSettings[connector].HSGWhiteGreenGain );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].HSGWhiteBlueGain,
gpSettings->UserMachine.ConnectorSettings[connector].HSGWhiteBlueGain );
EE_PUTVAR( UserMachine.ConnectorSettings[connector].BrilliantColorLook,
gpSettings->UserMachine.ConnectorSettings[connector].BrilliantColorLook );
}
void pictcont_SetColorTempPresets( ColorTempEnum colorTemp )
{
struct colorvaluesstruct colorTempcolorValues[NUM_HSG_COLORS];
int16 redGain, greenGain, blueGain;
uint08 i;
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( srcDesc->sourceActive )
{
switch( colorTemp )
{
case COLORTEMP_NATIVE:
/* set gains of individual colors for desired color temp */
colorTempcolorValues[HSG_RED].Gain = 100;
colorTempcolorValues[HSG_GREEN].Gain = 100;
colorTempcolorValues[HSG_BLUE].Gain = 100;
colorTempcolorValues[HSG_CYAN].Gain = 100;
colorTempcolorValues[HSG_MAGENTA].Gain = 100;
colorTempcolorValues[HSG_YELLOW].Gain = 100;
/* set white gains for color temp */
redGain = 100;
greenGain = 100;
blueGain = 100;
break;
case COLORTEMP_WARMEST:
/* set gains of individual colors for desired color temp */
colorTempcolorValues[HSG_RED].Gain = 100;
colorTempcolorValues[HSG_GREEN].Gain = 95;
colorTempcolorValues[HSG_BLUE].Gain = 90;
colorTempcolorValues[HSG_CYAN].Gain = 92;
colorTempcolorValues[HSG_MAGENTA].Gain = 97;
colorTempcolorValues[HSG_YELLOW].Gain = 95;
/* set white gains for color temp */
redGain = 100;
greenGain = 90;
blueGain = 80;
break;
case COLORTEMP_WARMER:
/* set gains of individual colors for desired color temp */
colorTempcolorValues[HSG_RED].Gain = 100;
colorTempcolorValues[HSG_GREEN].Gain = 97;
colorTempcolorValues[HSG_BLUE].Gain = 95;
colorTempcolorValues[HSG_CYAN].Gain = 96;
colorTempcolorValues[HSG_MAGENTA].Gain = 98;
colorTempcolorValues[HSG_YELLOW].Gain = 97;
/* set white gains for color temp */
redGain = 100;
greenGain = 95;
blueGain = 90;
break;
case COLORTEMP_COOLER:
/* set gains of individual colors for desired color temp */
colorTempcolorValues[HSG_RED].Gain = 95;
colorTempcolorValues[HSG_GREEN].Gain = 97;
colorTempcolorValues[HSG_BLUE].Gain = 100;
colorTempcolorValues[HSG_CYAN].Gain = 98;
colorTempcolorValues[HSG_MAGENTA].Gain = 96;
colorTempcolorValues[HSG_YELLOW].Gain = 97;
/* set white gains for color temp */
redGain = 90;
greenGain = 95;
blueGain = 100;
break;
case COLORTEMP_COOLEST:
/* set gains of individual colors for desired color temp */
colorTempcolorValues[HSG_RED].Gain = 90;
colorTempcolorValues[HSG_GREEN].Gain = 95;
colorTempcolorValues[HSG_BLUE].Gain = 100;
colorTempcolorValues[HSG_CYAN].Gain = 97;
colorTempcolorValues[HSG_MAGENTA].Gain = 95;
colorTempcolorValues[HSG_YELLOW].Gain = 92;
/* set white gains for color temp */
redGain = 80;
greenGain = 90;
blueGain = 100;
break;
default:
break;
}
/* set hue and saturation values to nominal for all color temperatures */
colorTempcolorValues[HSG_RED].Hue = 0;
colorTempcolorValues[HSG_RED].Saturation = 100;
colorTempcolorValues[HSG_GREEN].Hue = 0;
colorTempcolorValues[HSG_GREEN].Saturation = 100;
colorTempcolorValues[HSG_BLUE].Hue = 0;
colorTempcolorValues[HSG_BLUE].Saturation = 100;
colorTempcolorValues[HSG_CYAN].Hue = 0;
colorTempcolorValues[HSG_CYAN].Saturation = 100;
colorTempcolorValues[HSG_MAGENTA].Hue = 0;
colorTempcolorValues[HSG_MAGENTA].Saturation = 100;
colorTempcolorValues[HSG_YELLOW].Hue = 0;
colorTempcolorValues[HSG_YELLOW].Saturation = 100;
pictcont_SetAllHSGColorValues( colorTempcolorValues );
pictcont_SetAllHSGWhiteGains( redGain, greenGain, blueGain );
/* update EEPROM */
for( i = 0; i < NUM_HSG_COLORS; i++ )
{
EE_PUTVAR( UserMachine.ConnectorSettings[srcDesc->connector].HSGColorValues[i], colorTempcolorValues[i] );
}
EE_PUTVAR( UserMachine.ConnectorSettings[srcDesc->connector].HSGWhiteRedGain, redGain );
EE_PUTVAR( UserMachine.ConnectorSettings[srcDesc->connector].HSGWhiteGreenGain,greenGain );
EE_PUTVAR( UserMachine.ConnectorSettings[srcDesc->connector].HSGWhiteBlueGain, blueGain );
}
}
uint08 pictcont_GetColorTempPresets( void )
{
return lastSetColorTempEnum;
}
/****************************************************************************/
/* Screen Capture */
/****************************************************************************/
int08 pictcont_ScreenCapture(void)
{
GUIMSG newmsg;
uint32 time;
uint32 Imagesize;
uint32 userAddress;
uint08 endUserSplashNumber = 1; /* End user splash location in flash. (Splash Screen 2 in flash builder) */
ScreenCaptureStateEnum nextState = SCREEN_CAPTURE_ADDRESS;
dbmsg_ftrace( DBM_DPATH, "Splash Capture Started. \r\n" );
do
{
switch(nextState)
{
case SCREEN_CAPTURE_ADDRESS:
/* bring up OSD status screen */
guiScreenCaptureStatusMessage( GUI_SCREENCAPTURESTART );
guiStyle_StartMenu( MENU_SCREENCAPTUREPROGRESSMENU, &newmsg );
/* Splash Screen 2 must be setup in flash builder with a default image and must be on a 64K byte boundary. */
/* Get the address from the flash table for splash location 2 */
if( PASS != FLASH_GetFlashAddr( SPLASH_DATA, endUserSplashNumber, &userAddress ))
{
dbmsg_ftrace( DBM_DPATH, "Splash Capture Address Error!\r\n" );
return FAIL;
}
nextState = SCREEN_CAPTURE_EXECUTE;
break;
case SCREEN_CAPTURE_EXECUTE:
/* Splash_Store_Immediate is set to FALSE, so capture will occur in background */
/* Background color is set to 0xff which is blue. */
time = 0;/* Zero the timer */
if( PASS == ( nextState = (ScreenCaptureStateEnum)SPLASH_CaptureImage((uint32*)userAddress, FALSE, 0xff, &Imagesize)) )
nextState = SCREEN_CAPTURE_PROGRESS;
break;
case SCREEN_CAPTURE_PROGRESS:
dbmsg_ftrace( DBM_DPATH, "Splash Capture in Progress...\r\n" );
/* Wait 2 sec */
RTA_TaskDelay(TMR_ConvertMSToTicks(2000));
/* Get the status */
nextState = (ScreenCaptureStateEnum)SPLASH_GetImageCaptureStatus();
/* if it is not done in 2 minutes, exit. */
if(120000 < (time += 2000) )
{ /* If it was still inprogress when timeout occured, then fail, */
if( nextState == SCREEN_CAPTURE_PROGRESS )
{
nextState = SCREEN_CAPTURE_FAIL;
}
}
break;
case SCREEN_CAPTURE_INSUFFICIENT_SPACE_IN_FLASH:
dbmsg_ftrace( DBM_ALWAYS, "Splash Capture insufficient space!\r\n" );
nextState = SCREEN_CAPTURE_FAIL;
break;
case SCREEN_CAPTURE_WRITE_TO_FLASH_COMPLETE:
guiScreenCaptureStatusMessage( GUI_SCREENCAPTURESUCCESS );
dbmsg_ftrace( DBM_ALWAYS, "Splash Capture completed. Splash size: %d\r\n", Imagesize );
return PASS;
break;
case SCREEN_CAPTURE_FAIL:
case SCREEN_CAPTURE_NOT_SUPPORTED:
case SCREEN_CAPTURE_UNSUCCESSFUL:
guiScreenCaptureStatusMessage( GUI_SCREENCAPTUREERROR );
dbmsg_ftrace( DBM_ALWAYS, "Splash Capture FAILED!\r\n" );
return FAIL;
break;
default:
guiScreenCaptureStatusMessage( GUI_SCREENCAPTUREERROR );
dbmsg_ftrace( DBM_ALWAYS, "Splash Capture FAILED!\r\n" );
return FAIL;
break;
}
}
while(1);
return FAIL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -