📄 radeon_video.c
字号:
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 + -