亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? r128_video.c

?? x.org上有關ati系列顯卡最新驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c,v 1.30 2003/11/10 18:22:18 tsi Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <string.h>#include "r128.h"#include "r128_reg.h"#ifdef XF86DRI#include "r128_common.h"#include "r128_sarea.h"#endif#include "xf86.h"#include "dixstruct.h"#include <X11/extensions/Xv.h>#include "fourcc.h"#define OFF_DELAY       250  /* milliseconds */#define FREE_DELAY      15000#define OFF_TIMER       0x01#define FREE_TIMER      0x02#define CLIENT_VIDEO_ON 0x04#define TIMER_MASK      (OFF_TIMER | FREE_TIMER)static XF86VideoAdaptorPtr R128SetupImageVideo(ScreenPtr);static int  R128SetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer);static int  R128GetPortAttribute(ScrnInfoPtr, Atom ,INT32 *, pointer);static void R128StopVideo(ScrnInfoPtr, pointer, Bool);static void R128QueryBestSize(ScrnInfoPtr, Bool, short, short, short, short,			unsigned int *, unsigned int *, pointer);static int  R128PutImage(ScrnInfoPtr, short, short, short, short, short,			short, short, short, int, unsigned char*, short,			short, Bool, RegionPtr, pointer, DrawablePtr);static int  R128QueryImageAttributes(ScrnInfoPtr, int, unsigned short *,			unsigned short *,  int *, int *);static void R128ResetVideo(ScrnInfoPtr);static void R128VideoTimerCallback(ScrnInfoPtr pScrn, Time now);#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)static Atom xvBrightness, xvColorKey, xvSaturation, xvDoubleBuffer;typedef struct {   int           brightness;   int           saturation;   Bool          doubleBuffer;   unsigned char currentBuffer;   FBLinearPtr   linear;   RegionRec     clip;   CARD32        colorKey;   CARD32        videoStatus;   Time          offTime;   Time          freeTime;   int           ecp_div;} R128PortPrivRec, *R128PortPrivPtr;static void R128ECP(ScrnInfoPtr pScrn, R128PortPrivPtr pPriv){    R128InfoPtr     info      = R128PTR(pScrn);    unsigned char   *R128MMIO = info->MMIO;    int             dot_clock = info->ModeReg.dot_clock_freq;    if (dot_clock < 12500)      pPriv->ecp_div = 0;    else if (dot_clock < 25000) pPriv->ecp_div = 1;    else                        pPriv->ecp_div = 2;    OUTPLLP(pScrn, R128_VCLK_ECP_CNTL, pPriv->ecp_div<<8, ~R128_ECP_DIV_MASK);}void R128InitVideo(ScreenPtr pScreen){    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];    XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;    XF86VideoAdaptorPtr newAdaptor = NULL;    int num_adaptors;    newAdaptor = R128SetupImageVideo(pScreen);    num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);    if(newAdaptor) {	if(!num_adaptors) {	    num_adaptors = 1;	    adaptors = &newAdaptor;	} else {	    newAdaptors =  /* need to free this someplace */		xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));	    if(newAdaptors) {		memcpy(newAdaptors, adaptors, num_adaptors *					sizeof(XF86VideoAdaptorPtr));		newAdaptors[num_adaptors] = newAdaptor;		adaptors = newAdaptors;		num_adaptors++;	    }	}    }    if(num_adaptors)	xf86XVScreenInit(pScreen, adaptors, num_adaptors);    if(newAdaptors)	xfree(newAdaptors);}#define MAXWIDTH 2048#define MAXHEIGHT 2048/* client libraries expect an encoding */static XF86VideoEncodingRec DummyEncoding ={   0,   "XV_IMAGE",   MAXWIDTH, MAXHEIGHT,   {1, 1}};#define NUM_FORMATS 12static XF86VideoFormatRec Formats[NUM_FORMATS] ={   {8, TrueColor}, {8, DirectColor}, {8, PseudoColor},   {8, GrayScale}, {8, StaticGray}, {8, StaticColor},   {15, TrueColor}, {16, TrueColor}, {24, TrueColor},   {15, DirectColor}, {16, DirectColor}, {24, DirectColor}};#define NUM_ATTRIBUTES 4static XF86AttributeRec Attributes[NUM_ATTRIBUTES] ={   {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},   {XvSettable | XvGettable, -64, 63, "XV_BRIGHTNESS"},   {XvSettable | XvGettable, 0, 31, "XV_SATURATION"},   {XvSettable | XvGettable, 0, 1, "XV_DOUBLE_BUFFER"}};#define NUM_IMAGES 4static XF86ImageRec Images[NUM_IMAGES] ={	XVIMAGE_YUY2,	XVIMAGE_UYVY,	XVIMAGE_YV12,	XVIMAGE_I420};static voidR128ResetVideo(ScrnInfoPtr pScrn){    R128InfoPtr   info      = R128PTR(pScrn);    unsigned char *R128MMIO = info->MMIO;    R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;    OUTREG(R128_OV0_SCALE_CNTL, 0x80000000);    OUTREG(R128_OV0_EXCLUSIVE_HORZ, 0);    OUTREG(R128_OV0_AUTO_FLIP_CNTL, 0);   /* maybe */    OUTREG(R128_OV0_FILTER_CNTL, 0x0000000f);    OUTREG(R128_OV0_COLOUR_CNTL, (pPriv->brightness & 0x7f) |				 (pPriv->saturation << 8) |				 (pPriv->saturation << 16));    OUTREG(R128_OV0_GRAPHICS_KEY_MSK, (1 << pScrn->depth) - 1);    OUTREG(R128_OV0_GRAPHICS_KEY_CLR, pPriv->colorKey);    OUTREG(R128_OV0_KEY_CNTL, R128_GRAPHIC_KEY_FN_NE);    OUTREG(R128_OV0_TEST, 0);}static XF86VideoAdaptorPtrR128AllocAdaptor(ScrnInfoPtr pScrn){    XF86VideoAdaptorPtr adapt;    R128InfoPtr info = R128PTR(pScrn);    R128PortPrivPtr pPriv;    if(!(adapt = xf86XVAllocateVideoAdaptorRec(pScrn)))	return NULL;    if(!(pPriv = xcalloc(1, sizeof(R128PortPrivRec) + sizeof(DevUnion))))    {	xfree(adapt);	return NULL;    }    adapt->pPortPrivates = (DevUnion*)(&pPriv[1]);    adapt->pPortPrivates[0].ptr = (pointer)pPriv;    xvBrightness   = MAKE_ATOM("XV_BRIGHTNESS");    xvSaturation   = MAKE_ATOM("XV_SATURATION");    xvColorKey     = MAKE_ATOM("XV_COLORKEY");    xvDoubleBuffer = MAKE_ATOM("XV_DOUBLE_BUFFER");    pPriv->colorKey = info->videoKey;    pPriv->doubleBuffer = TRUE;    pPriv->videoStatus = 0;    pPriv->brightness = 0;    pPriv->saturation = 16;    pPriv->currentBuffer = 0;    R128ECP(pScrn, pPriv);    return adapt;}static XF86VideoAdaptorPtrR128SetupImageVideo(ScreenPtr pScreen){    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];    R128InfoPtr info = R128PTR(pScrn);    R128PortPrivPtr pPriv;    XF86VideoAdaptorPtr adapt;    if(!(adapt = R128AllocAdaptor(pScrn)))	return NULL;    adapt->type = XvWindowMask | XvInputMask | XvImageMask;    adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;    adapt->name = "ATI Rage128 Video Overlay";    adapt->nEncodings = 1;    adapt->pEncodings = &DummyEncoding;    adapt->nFormats = NUM_FORMATS;    adapt->pFormats = Formats;    adapt->nPorts = 1;    adapt->nAttributes = NUM_ATTRIBUTES;    adapt->pAttributes = Attributes;    adapt->nImages = NUM_IMAGES;    adapt->pImages = Images;    adapt->PutVideo = NULL;    adapt->PutStill = NULL;    adapt->GetVideo = NULL;    adapt->GetStill = NULL;    adapt->StopVideo = R128StopVideo;    adapt->SetPortAttribute = R128SetPortAttribute;    adapt->GetPortAttribute = R128GetPortAttribute;    adapt->QueryBestSize = R128QueryBestSize;    adapt->PutImage = R128PutImage;    adapt->QueryImageAttributes = R128QueryImageAttributes;    info->adaptor = adapt;    pPriv = (R128PortPrivPtr)(adapt->pPortPrivates[0].ptr);    REGION_NULL(pScreen, &(pPriv->clip));    R128ResetVideo(pScrn);    return adapt;}static voidR128StopVideo(ScrnInfoPtr pScrn, pointer data, Bool cleanup){  R128InfoPtr info = R128PTR(pScrn);  unsigned char *R128MMIO = info->MMIO;  R128PortPrivPtr pPriv = (R128PortPrivPtr)data;  REGION_EMPTY(pScrn->pScreen, &pPriv->clip);  if(cleanup) {     if(pPriv->videoStatus & CLIENT_VIDEO_ON) {	OUTREG(R128_OV0_SCALE_CNTL, 0);     }     if(pPriv->linear) {	xf86FreeOffscreenLinear(pPriv->linear);	pPriv->linear = NULL;     }     pPriv->videoStatus = 0;  } else {     if(pPriv->videoStatus & CLIENT_VIDEO_ON) {	pPriv->videoStatus |= OFF_TIMER;	pPriv->offTime = currentTime.milliseconds + OFF_DELAY;     }  }}static intR128SetPortAttribute(  ScrnInfoPtr pScrn,  Atom attribute,  INT32 value,  pointer data){  R128InfoPtr info = R128PTR(pScrn);  unsigned char *R128MMIO = info->MMIO;  R128PortPrivPtr pPriv = (R128PortPrivPtr)data;  if(attribute == xvBrightness) {	if((value < -64) || (value > 63))	   return BadValue;	pPriv->brightness = value;	OUTREG(R128_OV0_COLOUR_CNTL, (pPriv->brightness & 0x7f) |				     (pPriv->saturation << 8) |				     (pPriv->saturation << 16));  } else  if(attribute == xvSaturation) {	if((value < 0) || (value > 31))	   return BadValue;	pPriv->saturation = value;	OUTREG(R128_OV0_COLOUR_CNTL, (pPriv->brightness & 0x7f) |				     (pPriv->saturation << 8) |				     (pPriv->saturation << 16));  } else  if(attribute == xvDoubleBuffer) {	if((value < 0) || (value > 1))	   return BadValue;	pPriv->doubleBuffer = value;  } else  if(attribute == xvColorKey) {	pPriv->colorKey = value;	OUTREG(R128_OV0_GRAPHICS_KEY_CLR, pPriv->colorKey);	REGION_EMPTY(pScrn->pScreen, &pPriv->clip);  } else return BadMatch;  return Success;}static intR128GetPortAttribute(  ScrnInfoPtr pScrn,  Atom attribute,  INT32 *value,  pointer data){  R128PortPrivPtr pPriv = (R128PortPrivPtr)data;  if(attribute == xvBrightness) {	*value = pPriv->brightness;  } else  if(attribute == xvSaturation) {	*value = pPriv->saturation;  } else  if(attribute == xvDoubleBuffer) {	*value = pPriv->doubleBuffer ? 1 : 0;  } else  if(attribute == xvColorKey) {	*value = pPriv->colorKey;  } else return BadMatch;  return Success;}static voidR128QueryBestSize(  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;}/* * * R128DMA - abuse the texture blit ioctl to transfer rectangular blocks * * The block is split into 'passes' pieces of 'hpass' lines which fit entirely * into an indirect buffer * */static BoolR128DMA(  R128InfoPtr info,  unsigned char *src,  unsigned char *dst,  int srcPitch,  int dstPitch,  int h,  int w){#ifdef XF86DRI#define BUFSIZE (R128_BUFFER_SIZE - R128_HOSTDATA_BLIT_OFFSET)#define MAXPASSES (MAXHEIGHT/(BUFSIZE/(MAXWIDTH*2))+1)    unsigned char *buf;    int err=-1, i, idx, offset, hpass, passes, srcpassbytes, dstpassbytes;    int sizes[MAXPASSES], list[MAXPASSES];    drmDMAReq req;    drmR128Blit blit;    /* Verify conditions and bail out as early as possible */    if (!info->directRenderingEnabled || !info->DMAForXv)        return FALSE;    if ((hpass = min(h,(BUFSIZE/w))) == 0)	return FALSE;    if ((passes = (h+hpass-1)/hpass) > MAXPASSES)        return FALSE;    /* Request indirect buffers */    srcpassbytes = w*hpass;    req.context		= info->drmCtx;    req.send_count	= 0;    req.send_list	= NULL;    req.send_sizes	= NULL;    req.flags		= DRM_DMA_LARGER_OK;    req.request_count	= passes;    req.request_size	= srcpassbytes + R128_HOSTDATA_BLIT_OFFSET;    req.request_list	= &list[0];    req.request_sizes	= &sizes[0];    req.granted_count	= 0;    if (drmDMA(info->drmFD, &req))        return FALSE;    if (req.granted_count < passes) {        drmFreeBufs(info->drmFD, req.granted_count, req.request_list);	return FALSE;    }    /* Copy parts of the block into buffers and fire them */    dstpassbytes = hpass*dstPitch;    dstPitch /= 8;    for (i=0, offset=dst-info->FB; i<passes; i++, offset+=dstpassbytes) {        if (i == (passes-1) && (h % hpass) != 0) {	    hpass = h % hpass;	    srcpassbytes = w*hpass;	}	idx = req.request_list[i];	buf = (unsigned char *) info->buffers->list[idx].address + R128_HOSTDATA_BLIT_OFFSET;	if (srcPitch == w) {            memcpy(buf, src, srcpassbytes);	    src += srcpassbytes;	} else {	    int count = hpass;	    while(count--) {		memcpy(buf, src, w);		src += srcPitch;		buf += w;	    }	}        blit.idx = idx;        blit.offset = offset;        blit.pitch = dstPitch;        blit.format = (R128_DATATYPE_CI8 >> 16);        blit.x = (offset % 32);        blit.y = 0;        blit.width = w;        blit.height = hpass;	if ((err = drmCommandWrite(info->drmFD, DRM_R128_BLIT,                                   &blit, sizeof(drmR128Blit))) < 0)	    break;    }    drmFreeBufs(info->drmFD, req.granted_count, req.request_list);    return (err==0) ? TRUE : FALSE;#else    /* This is to avoid cluttering the rest of the code with '#ifdef XF86DRI' */    return FALSE;#endif	/* XF86DRI */}static voidR128CopyData422(  R128InfoPtr info,  unsigned char *src,  unsigned char *dst,  int srcPitch,  int dstPitch,  int h,  int w){    w <<= 1;    /* Attempt data transfer with DMA and fall back to memcpy */    if (!R128DMA(info, src, dst, srcPitch, dstPitch, h, w)) {        while(h--) {	    memcpy(dst, src, w);	    src += srcPitch;	    dst += dstPitch;	}    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品性做久久久久久| 高清成人在线观看| 国产欧美一区二区精品久导航| av高清不卡在线| 国产米奇在线777精品观看| 天天影视涩香欲综合网| 一区二区三区国产精华| 《视频一区视频二区| 久久这里只有精品首页| 91精品国产综合久久久久久漫画| 欧美在线视频全部完| 99国产精品视频免费观看| 成人av小说网| 91黄色在线观看| 欧美视频自拍偷拍| 制服丝袜成人动漫| 日韩伦理av电影| 一区二区三区视频在线观看| 久久99久久精品| 国产尤物一区二区| 欧美高清视频不卡网| 日韩欧美色综合网站| 日韩美女天天操| 午夜精品福利一区二区蜜股av| 99久久er热在这里只有精品15| 久久久99久久精品欧美| 精品福利一区二区三区| 国产亚洲一区二区三区在线观看| 亚洲成人自拍一区| 老司机免费视频一区二区| 国产麻豆视频精品| 精品国产污网站| 久久精品99国产国产精| 日韩欧美的一区二区| 蜜臀av一级做a爰片久久| 国产一区激情在线| 欧美精品一区二区三区久久久| 视频在线在亚洲| 国产麻豆日韩欧美久久| 久久久电影一区二区三区| 国产一区二区福利视频| 久久久99精品久久| 成人免费视频一区二区| 制服视频三区第一页精品| 午夜伊人狠狠久久| 欧美一级精品大片| 亚洲女人****多毛耸耸8| 三级一区在线视频先锋 | 精品少妇一区二区三区视频免付费| 久久久久久**毛片大全| 国产精品中文字幕欧美| 国产欧美视频一区二区三区| 成人妖精视频yjsp地址| 日韩美女啊v在线免费观看| 99精品欧美一区| 亚洲成人一区在线| 久久久久久久综合色一本| 成人激情小说网站| 亚洲国产色一区| 成人精品电影在线观看| 亚洲精选视频免费看| 国产成人免费视| 精品福利在线导航| 91视频在线看| 日本一区二区电影| 国内精品伊人久久久久av一坑| 在线观看国产日韩| 麻豆国产欧美一区二区三区| 欧美国产日韩精品免费观看| 在线欧美日韩国产| 国内精品嫩模私拍在线| 亚洲精品日产精品乱码不卡| 精品国产乱码久久久久久蜜臀| 不卡的电影网站| 日韩成人午夜电影| 91.com视频| 豆国产96在线|亚洲| 亚洲18女电影在线观看| 久久精品亚洲精品国产欧美| 欧美探花视频资源| 成人综合在线网站| 日本网站在线观看一区二区三区| 国产丝袜在线精品| 欧美一级片在线| 麻豆高清免费国产一区| 最新久久zyz资源站| 精品免费国产一区二区三区四区| 99综合影院在线| 国产美女久久久久| 日韩精品国产欧美| 亚洲精品欧美综合四区| 欧美极品少妇xxxxⅹ高跟鞋| 欧美精品在线观看播放| 色系网站成人免费| 午夜精品视频在线观看| 国产精品久久久久影院| 色综合视频在线观看| 国产一区二区免费在线| 麻豆视频一区二区| 日韩高清在线电影| 一区二区三区在线观看网站| 久久久不卡影院| 欧美精品一区二区三区蜜桃视频 | 欧美一级在线免费| 在线成人午夜影院| 欧美综合天天夜夜久久| 91麻豆免费看片| 色综合天天综合| 三级欧美韩日大片在线看| 亚洲欧美色综合| 蜜乳av一区二区三区| 亚洲图片欧美综合| 一区二区三区中文字幕电影| 中文字幕亚洲成人| 国产精品国产三级国产aⅴ无密码| 日韩视频免费直播| 日韩久久久精品| 欧美大尺度电影在线| 日韩一区二区三区视频在线| 91精品婷婷国产综合久久竹菊| 欧美在线一二三| 欧美精三区欧美精三区| 欧美日韩激情一区二区三区| 日本视频免费一区| 日韩专区欧美专区| 韩国理伦片一区二区三区在线播放| 日韩av中文字幕一区二区 | 欧美日韩精品福利| 欧美电影一区二区| 日韩午夜激情视频| 日韩一级片网址| 久久综合久久综合久久综合| 精品国产亚洲在线| 中文字幕中文字幕一区二区| 成人免费视频在线观看| 椎名由奈av一区二区三区| 一区二区三区电影在线播| 亚洲国产日日夜夜| 精品一区二区精品| 北岛玲一区二区三区四区| 91在线视频免费91| 欧美日韩成人在线| 久久蜜桃一区二区| 亚洲女厕所小便bbb| 午夜免费久久看| 国产美女精品一区二区三区| av亚洲产国偷v产偷v自拍| 欧美在线视频日韩| 欧美电影免费观看高清完整版在线观看 | 成人综合婷婷国产精品久久免费| 成人性生交大片免费看视频在线| 91在线你懂得| 91精品国产一区二区三区| 久久久欧美精品sm网站| 亚洲综合丝袜美腿| 亚洲另类色综合网站| 美女脱光内衣内裤视频久久网站 | 日本不卡123| 亚洲成人免费影院| 国产精品一区二区在线观看网站| 99re热这里只有精品视频| 在线成人高清不卡| **性色生活片久久毛片| 麻豆精品视频在线| 欧美色综合网站| 国产色产综合色产在线视频| 亚洲自拍偷拍网站| 成人午夜av电影| 欧美一三区三区四区免费在线看| 中文字幕在线不卡一区二区三区| 青青青伊人色综合久久| 99热99精品| 久久久www免费人成精品| 亚洲福利电影网| 99国产精品久| 久久精品男人的天堂| 亚洲一二三四久久| 94色蜜桃网一区二区三区| 久久久精品免费网站| 麻豆高清免费国产一区| 欧美日本精品一区二区三区| 中文字幕一区二区三区四区不卡| 韩日av一区二区| 欧美一区二区视频在线观看| 亚洲乱码中文字幕综合| 国产99久久久精品| 久久久久久久久免费| 日韩在线播放一区二区| 91福利社在线观看| 亚洲黄色免费电影| 成人av资源站| 国产精品久久久久精k8 | 国产欧美精品日韩区二区麻豆天美| 日韩综合小视频| 欧美人妇做爰xxxⅹ性高电影| 亚洲免费观看高清完整| 9久草视频在线视频精品| 中文字幕一区在线| 99精品在线免费| 亚洲欧美日韩在线|