📄 pictcont.c
字号:
datapath_GetSourceDesc( &srcDesc );
if( !srcDesc->isYUV )
return FAIL;
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
*min = -128; /* from videodecoder driver */
*max = 127;
break;
case VGA:
case DVI:
/* 0 to 200% (from IMG_CSC_SetHueAndColorAdjustment) */
*min = -45;
*max = 45;
break;
default:
return FAIL;
}
}
else
return FAIL;
return PASS;
}
int08 pictcont_GetHue( int16 *value )
{
int08 hueAngle;
int16 colorSaturation;
uint08 temp08;
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( !srcDesc->isYUV )
return FAIL;
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
if( DEC_GetTint( &temp08 ) != PASS )
return FAIL;
*value = (int16) temp08;
break;
case VGA:
case DVI:
if( IMG_CSC_GetHueAndColorAdjustment( SRC_PRIMARY, &hueAngle, &colorSaturation ) != PASS )
return FAIL;
*value = hueAngle;
break;
default:
return FAIL;
}
}
else
return FAIL;
return PASS;
}
int08 pictcont_SetHue( int16 value )
{
int08 hueAngle;
int16 colorSaturation;
int16 min, max;
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( !srcDesc->isYUV )
return FAIL;
pictcont_GetHueLimits( &min, &max );
if( value < min || value > max )
return FAIL;
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
if( DEC_SetTint( (uint08)value ) != PASS )
return FAIL;
break;
case VGA:
case DVI:
if( IMG_CSC_GetHueAndColorAdjustment( SRC_PRIMARY, &hueAngle, &colorSaturation ) != PASS )
return FAIL;
hueAngle = value;
if( IMG_CSC_SetHueAndColorAdjustment( SRC_PRIMARY, hueAngle, colorSaturation ) != PASS )
return FAIL;
break;
default:
return FAIL;
}
}
else
return FAIL;
return PASS;
}
/****************************************************************************/
/* Color (saturation) user controls */
/****************************************************************************/
int08 pictcont_GetColorLimits( int16 *min, int16 *max )
{
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( !srcDesc->isYUV )
return FAIL;
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
*min = 0; /* from videodecoder driver */
*max = 255;
break;
case VGA:
case DVI:
/* 0 to 200% (from IMG_CSC_SetHueAndColorAdjustment) */
*min = 0;
*max = 200;
break;
default:
return FAIL;
}
}
else
return FAIL;
return PASS;
}
int08 pictcont_GetColor( int16 *value )
{
int08 hueAngle;
int16 colorSaturation;
uint08 temp08;
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( !srcDesc->isYUV )
return FAIL;
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
if( DEC_GetColor( &temp08 ) != PASS )
return FAIL;
*value = (int16) temp08;
break;
case VGA:
case DVI:
if( IMG_CSC_GetHueAndColorAdjustment( SRC_PRIMARY, &hueAngle, &colorSaturation ) != PASS )
return FAIL;
*value = colorSaturation;
break;
default:
return FAIL;
}
}
else
return FAIL;
return PASS;
}
int08 pictcont_SetColor( int16 value )
{
int08 hueAngle;
int16 colorSaturation;
int16 min, max;
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( !srcDesc->isYUV )
return FAIL;
pictcont_GetColorLimits( &min, &max );
if( value < min || value > max )
return FAIL;
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
if( DEC_SetColor( (uint08)value ) != PASS )
return FAIL;
break;
case VGA:
case DVI:
if( IMG_CSC_GetHueAndColorAdjustment( SRC_PRIMARY, &hueAngle, &colorSaturation ) != PASS )
return FAIL;
colorSaturation = value;
if( IMG_CSC_SetHueAndColorAdjustment( SRC_PRIMARY, hueAngle, colorSaturation ) != PASS )
return FAIL;
break;
default:
return FAIL;
}
}
else
return FAIL;
return PASS;
}
/****************************************************************************/
/* Sharpness user controls */
/****************************************************************************/
int08 pictcont_GetSharpnessLimits( int16 *min, int16 *max )
{
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
case VGA:
case DVI:
/* from IMG_SetHorizontalSharpness() */
*min = 0;
*max = 31;
break;
default:
return FAIL;
}
return PASS;
}
else
return FAIL;
}
int08 pictcont_GetSharpness( int16 *value )
{
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
case VGA:
case DVI:
/* invert the value to make 0=smoothest and 31=sharpest */
/* horizontal and vertical sharpness should be equal, poll horizontal */
*value = 31 - IMG_GetHorizontalSharpness();
break;
default:
return FAIL;
}
return PASS;
}
else
return FAIL;
}
int08 pictcont_SetSharpness( int16 value )
{
int16 min, max;
DP_SOURCEDESC *srcDesc;
pictcont_GetSharpnessLimits( &min, &max );
if( value < min || value > max )
return FAIL;
datapath_GetSourceDesc( &srcDesc );
if( srcDesc->sourceActive )
{
switch( srcDesc->connector )
{
case SVIDEO:
case COMPONENT:
case COMPOSITE:
case VGA:
case DVI:
/* invert the value to make 0=smoothest and 31=sharpest */
if( IMG_SetHorizontalSharpness( (uint08) max - value ) != PASS )
return FAIL;
if( IMG_SetVerticalSharpness( (uint08) max - value ) != PASS )
return FAIL;
break;
default:
return FAIL;
}
return PASS;
}
else
return FAIL;
}
/****************************************************************************/
/* Colorspace user controls */
/****************************************************************************/
int08 pictcont_GetColorSpace( uint08 *cscIndex )
{
DP_SOURCEDESC *srcDesc;
datapath_GetSourceDesc( &srcDesc );
EE_GETVAR( UserMachine.ConnectorSettings[srcDesc->connector].ColorSpace, cscIndex );
return PASS;
}
int08 pictcont_SetColorSpace( uint08 cscIndex )
{
int16 tempOffset;
SRC_CSC_TABLES tableIndex;
SRC_SOURCE_CONFIG sourceConfig;
DP_SOURCEDESC *srcDesc;
BOOL autoSelect = FALSE;
datapath_GetSourceDesc( &srcDesc );
if(( srcDesc->connector >= NUM_CONNECTORS ) || (!srcDesc->sourceActive ))
return FAIL;
/* OSD mappings of colortable */
/* Some colorspaces include an offset. We must remove the offset
* from the luma channel before expanding to full range */
dbmsg_ftrace( DBM_ALWAYS, "cscIndex %d \r\n", cscIndex );
switch( cscIndex )
{
case 0: /* allow datapath to calculate proper CSC table */
autoSelect = TRUE;
break;
case 1:
tableIndex = SRC_CSC_TABLE0; /* full-range RGB */
tempOffset = 0;
break;
case 2:
tableIndex = SRC_CSC_TABLE2; /* ITU-BT.601 offset YUV (video decoder sources) */
tempOffset = -16 * 4; /* -16 in s8.2 format */
break;
case 3:
tableIndex = SRC_CSC_TABLE7; /* full-range YUV 2 (ADC sources) */
tempOffset = 0;
break;
case 4:
tableIndex = SRC_CSC_TABLE1; /* offset RGB */
tempOffset = -16 * 4; /* -16 in s8.2 format */
break;
case 5:
tableIndex = SRC_CSC_TABLE3; /* ITU-BT.601 offset YUV */
tempOffset = -16 * 4; /* -16 in s8.2 format */
break;
case 6:
tableIndex = SRC_CSC_TABLE4; /* full-range YUV */
tempOffset = 0;
break;
case 7:
tableIndex = SRC_CSC_TABLE5; /* ITU-BT.709 offset YUV */
tempOffset = -16 * 4; /* -16 in s8.2 format */
break;
case 8:
tableIndex = SRC_CSC_TABLE6; /* SMTPE 240M */
tempOffset = -16 * 4; /* -16 in s8.2 format */
break;
default:
return FAIL;
}
if( autoSelect ) // determine proper CSC table based on YUV status and connector
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -