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

📄 pictcont.c

📁 IT projecotr reference design.
💻 C
📖 第 1 页 / 共 4 页
字号:

    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 + -