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

📄 radeon_video.c

📁 x.org上有关ati系列显卡最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
RADEONSetPortAttribute(ScrnInfoPtr  pScrn,		       Atom	    attribute,		       INT32	    value,		       pointer	    data){    RADEONInfoPtr	info = RADEONPTR(pScrn);    RADEONPortPrivPtr	pPriv = (RADEONPortPrivPtr)data;    Bool		setTransform = FALSE;    Bool		setAlpha = FALSE;    unsigned char *RADEONMMIO = info->MMIO;    RADEON_SYNC(info, pScrn);#define RTFSaturation(a)   (1.0 + ((a)*1.0)/1000.0)#define RTFBrightness(a)   (((a)*1.0)/2000.0)#define RTFIntensity(a)   (((a)*1.0)/2000.0)#define RTFContrast(a)   (1.0 + ((a)*1.0)/1000.0)#define RTFHue(a)   (((a)*3.1416)/1000.0)    if(attribute == xvAutopaintColorkey)    {	pPriv->autopaint_colorkey = ClipValue (value, 0, 1);    }    else if(attribute == xvSetDefaults)    {	pPriv->autopaint_colorkey = TRUE;	pPriv->brightness = 0;	pPriv->saturation = 0;	pPriv->contrast = 0;	pPriv->hue = 0;	pPriv->red_intensity = 0;	pPriv->green_intensity = 0;	pPriv->blue_intensity = 0;	pPriv->gamma = 1000;	pPriv->transform_index = 0;	pPriv->doubleBuffer = FALSE;	pPriv->ov_alpha = 255;	pPriv->gr_alpha = 255;	pPriv->alpha_mode = 0;        /* It is simpler to call itself */        RADEONSetPortAttribute(pScrn, xvDecBrightness, 0, data);        RADEONSetPortAttribute(pScrn, xvDecSaturation, 0, data);        RADEONSetPortAttribute(pScrn, xvDecContrast,   0, data);        RADEONSetPortAttribute(pScrn, xvDecHue,   0, data);        RADEONSetPortAttribute(pScrn, xvVolume,   -1000, data);        RADEONSetPortAttribute(pScrn, xvMute,   1, data);        RADEONSetPortAttribute(pScrn, xvSAP,   0, data);        RADEONSetPortAttribute(pScrn, xvDoubleBuffer,   1, data);	setTransform = TRUE;	setAlpha = TRUE;    }    else if(attribute == xvBrightness)    {	pPriv->brightness = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if((attribute == xvSaturation) || (attribute == xvColor))    {	pPriv->saturation = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if(attribute == xvContrast)    {	pPriv->contrast = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if(attribute == xvHue)    {	pPriv->hue = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if(attribute == xvRedIntensity)    {	pPriv->red_intensity = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if(attribute == xvGreenIntensity)    {	pPriv->green_intensity = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if(attribute == xvBlueIntensity)    {	pPriv->blue_intensity = ClipValue (value, -1000, 1000);	setTransform = TRUE;    }    else if(attribute == xvGamma)     {	pPriv->gamma = ClipValue (value, 100, 10000);	setTransform = TRUE;    }     else if(attribute == xvColorspace)     {	pPriv->transform_index = ClipValue (value, 0, 1);	setTransform = TRUE;    }     else if(attribute == xvDoubleBuffer)    {	pPriv->doubleBuffer = ClipValue (value, 0, 1);    }    else if(attribute == xvColorKey)    {	pPriv->colorKey = value;	RADEONSetColorKey (pScrn, pPriv->colorKey);	REGION_EMPTY(pScrn->pScreen, &pPriv->clip);    }     else if(attribute == xvSwitchCRT)     {	pPriv->crt2 = ClipValue (value, 0, 1);	pPriv->crt2 = value;	if (pPriv->crt2)	    info->OverlayOnCRTC2 = TRUE;	else	    info->OverlayOnCRTC2 = FALSE;     }    else if(attribute == xvOvAlpha)     {	pPriv->ov_alpha = ClipValue (value, 0, 255);	setAlpha = TRUE;    }    else if(attribute == xvGrAlpha)     {	pPriv->gr_alpha = ClipValue (value, 0, 255);	setAlpha = TRUE;    }     else if(attribute == xvAlphaMode)     {	pPriv->alpha_mode = ClipValue (value, 0, 1);	setAlpha = TRUE;    }     else if(attribute == xvDecBrightness)     {        pPriv->dec_brightness = value;        if(pPriv->theatre!=NULL) xf86_RT_SetBrightness(pPriv->theatre, pPriv->dec_brightness);      }     else if((attribute == xvDecSaturation) || (attribute == xvDecColor))     {        if(value<-1000)value = -1000;        if(value>1000)value = 1000;        pPriv->dec_saturation = value;        if(pPriv->theatre != NULL)xf86_RT_SetSaturation(pPriv->theatre, value);    }     else if(attribute == xvDecContrast)     {        pPriv->dec_contrast = value;        if(pPriv->theatre != NULL)xf86_RT_SetContrast(pPriv->theatre, value);    }     else if(attribute == xvDecHue)     {        pPriv->dec_hue = value;        if(pPriv->theatre != NULL)xf86_RT_SetTint(pPriv->theatre, value);    }     else if(attribute == xvEncoding)     {        pPriv->encoding = value;        if(pPriv->video_stream_active)        {           if(pPriv->theatre != NULL) RADEON_RT_SetEncoding(pScrn, pPriv);           if(pPriv->msp3430 != NULL) RADEON_MSP_SetEncoding(pPriv);           if(pPriv->tda9885 != NULL) RADEON_TDA9885_SetEncoding(pPriv);	   if(pPriv->fi1236 != NULL) RADEON_FI1236_SetEncoding(pPriv);           if(pPriv->i2c != NULL) RADEON_board_setmisc(pPriv);        /* put more here to actually change it */        }   }    else if(attribute == xvFrequency)    {        pPriv->frequency = value;        /* mute volume if it was not muted before */        if((pPriv->msp3430!=NULL)&& !pPriv->mute)xf86_MSP3430SetVolume(pPriv->msp3430, MSP3430_FAST_MUTE);		if((pPriv->uda1380!=NULL)&& !pPriv->mute)xf86_uda1380_mute(pPriv->uda1380, TRUE);        if(pPriv->fi1236 != NULL) xf86_TUNER_set_frequency(pPriv->fi1236, value);/*        if(pPriv->theatre != NULL) RADEON_RT_SetEncoding(pScrn, pPriv);  */        if((pPriv->msp3430 != NULL) && (pPriv->msp3430->recheck))                xf86_InitMSP3430(pPriv->msp3430);        if((pPriv->msp3430 != NULL)&& !pPriv->mute) xf86_MSP3430SetVolume(pPriv->msp3430, MSP3430_VOLUME(pPriv->volume));		if((pPriv->uda1380 != NULL)&& !pPriv->mute) xf86_uda1380_setvolume(pPriv->uda1380, pPriv->volume);   }    else if(attribute == xvMute)    {        pPriv->mute = value;        if(pPriv->msp3430 != NULL) xf86_MSP3430SetVolume(pPriv->msp3430, pPriv->mute ? MSP3430_FAST_MUTE : MSP3430_VOLUME(pPriv->volume));        if(pPriv->i2c != NULL) RADEON_board_setmisc(pPriv);		if(pPriv->uda1380 != NULL) xf86_uda1380_mute(pPriv->uda1380, pPriv->mute);   }    else if(attribute == xvSAP)    {        pPriv->sap_channel = value;        if(pPriv->msp3430 != NULL) xf86_MSP3430SetSAP(pPriv->msp3430, pPriv->sap_channel?4:3);   }    else if(attribute == xvVolume)    {        if(value<-1000)value = -1000;        if(value>1000)value = 1000;        pPriv->volume = value;          pPriv->mute = FALSE;        if(pPriv->msp3430 != NULL) xf86_MSP3430SetVolume(pPriv->msp3430, MSP3430_VOLUME(value));        if(pPriv->i2c != NULL) RADEON_board_setmisc(pPriv);		if(pPriv->uda1380 != NULL) xf86_uda1380_setvolume(pPriv->uda1380, value);   }    else if(attribute == xvOverlayDeinterlacingMethod)    {        if(value<0)value = 0;        if(value>2)value = 2;        pPriv->overlay_deinterlacing_method = value;            switch(pPriv->overlay_deinterlacing_method){                case METHOD_BOB:                        OUTREG(RADEON_OV0_DEINTERLACE_PATTERN, 0xAAAAA);                        break;                case METHOD_SINGLE:                        OUTREG(RADEON_OV0_DEINTERLACE_PATTERN, 0xEEEEE | (9<<28));                        break;                case METHOD_WEAVE:                        OUTREG(RADEON_OV0_DEINTERLACE_PATTERN, 0x0);                        break;                default:                        OUTREG(RADEON_OV0_DEINTERLACE_PATTERN, 0xAAAAA);                }                          }    else if(attribute == xvDumpStatus)    {  	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Current mode flags 0x%08x: %s%s\n",		pScrn->currentMode->Flags,		pScrn->currentMode->Flags & V_INTERLACE ? " interlaced" : "" ,		pScrn->currentMode->Flags & V_DBLSCAN ? " doublescan" : ""		);	if(pPriv->tda9885 != NULL){		xf86_tda9885_getstatus(pPriv->tda9885);		xf86_tda9885_dumpstatus(pPriv->tda9885);		}	if(pPriv->fi1236!=NULL){		xf86_fi1236_dump_status(pPriv->fi1236);		}   }    else if(attribute == xvAdjustment)    {  	pPriv->adjustment=value;        xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"Setting pPriv->adjustment to %ld\n", pPriv->adjustment);  	if(pPriv->tda9885!=0){		pPriv->tda9885->top_adjustment=value;		RADEON_TDA9885_SetEncoding(pPriv);		}   }   else 	return BadMatch;    if (setTransform)    {	RADEONSetTransform(pScrn,			   RTFBrightness(pPriv->brightness),			   RTFContrast(pPriv->contrast),			   RTFSaturation(pPriv->saturation),			   RTFHue(pPriv->hue),			   RTFIntensity(pPriv->red_intensity),			   RTFIntensity(pPriv->green_intensity),			   RTFIntensity(pPriv->blue_intensity),			   pPriv->transform_index,			   pPriv->gamma);    }    if (setAlpha)    {	RADEONSetOverlayAlpha(pScrn, pPriv->ov_alpha, pPriv->gr_alpha, pPriv->alpha_mode);    }	    return Success;}static intRADEONGetPortAttribute(ScrnInfoPtr  pScrn,		       Atom	    attribute,		       INT32	    *value,		       pointer	    data){    RADEONInfoPtr	info = RADEONPTR(pScrn);    RADEONPortPrivPtr	pPriv = (RADEONPortPrivPtr)data;    if (info->accelOn) RADEON_SYNC(info, pScrn);    if(attribute == xvAutopaintColorkey)	*value = pPriv->autopaint_colorkey;    else if(attribute == xvBrightness)	*value = pPriv->brightness;    else if((attribute == xvSaturation) || (attribute == xvColor))	*value = pPriv->saturation;    else if(attribute == xvContrast)	*value = pPriv->contrast;    else if(attribute == xvHue)	*value = pPriv->hue;    else if(attribute == xvRedIntensity)	*value = pPriv->red_intensity;    else if(attribute == xvGreenIntensity)	*value = pPriv->green_intensity;    else if(attribute == xvBlueIntensity)	*value = pPriv->blue_intensity;    else if(attribute == xvGamma)	*value = pPriv->gamma;    else if(attribute == xvColorspace)	*value = pPriv->transform_index;    else if(attribute == xvDoubleBuffer)	*value = pPriv->doubleBuffer ? 1 : 0;    else if(attribute == xvColorKey)	*value = pPriv->colorKey;    else if(attribute == xvSwitchCRT)	*value = pPriv->crt2 ? 1 : 0;    else if(attribute == xvOvAlpha)	*value = pPriv->ov_alpha;    else if(attribute == xvGrAlpha)	*value = pPriv->gr_alpha;    else if(attribute == xvAlphaMode)	*value = pPriv->alpha_mode;    else if(attribute == xvDecBrightness)        *value = pPriv->dec_brightness;    else if((attribute == xvDecSaturation) || (attribute == xvDecColor))        *value = pPriv->dec_saturation;    else if(attribute == xvDecContrast)        *value = pPriv->dec_contrast;    else if(attribute == xvDecHue)        *value = pPriv->dec_hue;    else if(attribute == xvEncoding)        *value = pPriv->encoding;    else if(attribute == xvFrequency)        *value = pPriv->frequency;    else     if(attribute == xvTunerStatus) {        if(pPriv->fi1236==NULL){                *value=TUNER_OFF;                } else                {                *value = xf86_TUNER_get_afc_hint(pPriv->fi1236);                }       }     else if(attribute == xvMute)        *value = pPriv->mute;    else if(attribute == xvSAP)        *value = pPriv->sap_channel;    else if(attribute == xvVolume)        *value = pPriv->volume;    else if(attribute == xvOverlayDeinterlacingMethod)        *value = pPriv->overlay_deinterlacing_method;    else if(attribute == xvDeviceID)        *value = pPriv->device_id;    else if(attribute == xvLocationID)        *value = pPriv->location_id;    else if(attribute == xvInstanceID)        *value = pPriv->instance_id;    else if(attribute == xvAdjustment)  	*value = pPriv->adjustment;    else	return BadMatch;    return Success;}static voidRADEONQueryBestSize(  ScrnInfoPtr pScrn,  Bool motion,  short vid_w, short vid_h,  short drw_w, short drw_h,  unsigned int *p_w, unsigned int *p_h,  pointer data){   if(vid_w > (drw_w << 4))	drw_w = vid_w >> 4;   if(vid_h > (drw_h << 4))	drw_h = vid_h >> 4;  *p_w = drw_w;  *p_h = drw_h;}static struct {	double range;	signed char coeff[5][4];	} TapCoeffs[]=	{        {0.25, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13,   13,    3}, }},        {0.26, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.27, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.28, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.29, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.30, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.31, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.32, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.33, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.34, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, }},        {0.35, {{ 7,    16,  9,  0}, { 7,   16,  9,  0}, { 5,   15, 11,  1}, { 4,   15, 12,  1}, { 3,   13, 13,  3}, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -