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

📄 neomagic.diff

📁 linux TV 源码
💻 DIFF
📖 第 1 页 / 共 3 页
字号:
diff -uNr neomagic.org/Imakefile neomagic/Imakefile--- neomagic.org/Imakefile	Wed Jun  6 17:31:29 2001+++ neomagic/Imakefile	Fri Feb  1 21:28:40 2002@@ -4,10 +4,10 @@   SRCS = neo_driver.c neo_bank.c neo_cursor.c neo_2097.c neo_2070.c \-	neo_2090.c neo_2200.c neo_i2c.c neo_shadow.c neo_dga.c+	neo_2090.c neo_2200.c neo_i2c.c neo_shadow.c neo_dga.c neo_video.c  OBJS = neo_driver.o neo_bank.o neo_cursor.o neo_2097.o neo_2070.o \-	neo_2090.o neo_2200.o neo_i2c.o neo_shadow.o neo_dga.o+	neo_2090.o neo_2200.o neo_i2c.o neo_shadow.o neo_dga.o neo_video.o  DEFINES = -DPSZ=8 diff -uNr neomagic.org/neo.h neomagic/neo.h--- neomagic.org/neo.h	Wed Jun  6 17:15:07 2001+++ neomagic/neo.h	Sat Feb  2 17:50:18 2002@@ -57,6 +57,11 @@  #include "xf86i2c.h" +#ifdef XvExtension+# include "xf86xv.h"+# include "Xv.h"+#endif /* XvExtension */+ /*  * Driver data structures.  */@@ -196,6 +201,8 @@     unsigned long NeoMMIOAddr;     unsigned long NeoLinearAddr;     unsigned char* NeoMMIOBase;+    unsigned long NeoMMIOAddr2;+    unsigned char* NeoMMIOBase2;     unsigned char* NeoFbBase;     long NeoFbMapSize;     unsigned long vgaIOBase;@@ -245,6 +252,10 @@     RefreshAreaFuncPtr refreshArea;     void	(*PointerMoved)(int index, int x, int y);     int rotate;+#ifdef XvExtension+    XF86VideoAdaptorPtr overlayAdaptor;+    int videoKey;+#endif /* XvExtension */ } NEORec, *NEOPtr;  typedef struct {diff -uNr neomagic.org/neo_driver.c neomagic/neo_driver.c--- neomagic.org/neo_driver.c	Wed Jun  6 17:31:30 2001+++ neomagic/neo_driver.c	Sun Feb  3 12:08:50 2002@@ -262,7 +262,8 @@     OPTION_PROG_LCD_MODE_REGS,     OPTION_PROG_LCD_MODE_STRETCH,     OPTION_OVERRIDE_VALIDATE_MODE,-    OPTION_ROTATE+    OPTION_ROTATE,+    OPTION_VIDEO_KEY } NEOOpts;  static const OptionInfoRec NEO_2070_Options[] = {@@ -282,6 +283,7 @@       OPTV_BOOLEAN, {0}, FALSE },     { OPTION_OVERRIDE_VALIDATE_MODE, "overrideValidateMode",       OPTV_BOOLEAN, {0}, FALSE },+    { OPTION_VIDEO_KEY, "VideoKey",     OPTV_INTEGER,   {0}, FALSE },     { -1,                  NULL,           OPTV_NONE,	{0}, FALSE } }; @@ -844,7 +846,7 @@      if (xf86LoadSubModule(pScrn, "ddc")) {         xf86LoaderReqSymLists(ddcSymbols, NULL);-#if 1 /* for DDC1 testing */+#if 0 /* for DDC1 testing */ 	if (!neoDoDDCVBE(pScrn)) 	  if (!neoDoDDC2(pScrn)) #endif@@ -959,6 +961,16 @@ 		       "Valid options are \"CW\" or \"CCW\"\n");       }     }+#ifdef XvExtension+    if(xf86GetOptValInteger(nPtr->Options, OPTION_VIDEO_KEY, &(nPtr->videoKey))) {+        xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "video key set to 0x%x\n", nPtr->videoKey);+    } else {+        nPtr->videoKey = (1 << pScrn->offset.red) | +                         (1 << pScrn->offset.green) |+                         (((pScrn->mask.blue >> pScrn->offset.blue) - 1) << pScrn->offset.blue); +    }+#endif /* XvExtension */+      if (nPtr->internDisp && nPtr->externDisp) 	xf86DrvMsg(pScrn->scrnIndex,X_CONFIG,@@ -1032,6 +1044,8 @@ 	nPtr->NeoLinearAddr = 0;     } +    nPtr->NeoMMIOAddr2 = 0;+    nPtr->NeoMMIOBase2 = NULL;     if (nPtr->pEnt->device->IOBase && !nPtr->noMMIO) { 	/* XXX Check this matches a PCI base address */ 	nPtr->NeoMMIOAddr = nPtr->pEnt->device->IOBase;@@ -1065,11 +1079,17 @@ 	    case NM2360: 	    case NM2380: 		nPtr->NeoMMIOAddr = nPtr->PciInfo->memBase[1];+		nPtr->NeoMMIOAddr2 = nPtr->PciInfo->memBase[2]; 		break; 	    } 	    xf86DrvMsg(pScrn->scrnIndex, X_PROBED, 		       "MMIO base address is set at 0x%X.\n", 		       nPtr->NeoMMIOAddr);+	    if (nPtr->NeoMMIOAddr2 != 0){+	        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,+		           "MMIO base address2 is set at 0x%X.\n",+		           nPtr->NeoMMIOAddr2);+	    } 	} 	/* XXX What about VGA resources in OPERATING mode? */ 	if (xf86RegisterResources(nPtr->pEnt->index, NULL, ResExclusive))@@ -1554,6 +1574,8 @@      pScrn->racIoFlags = pScrn->racMemFlags = racflag; +    NEOInitVideo(pScreen);+     pScreen->SaveScreen = vgaHWSaveScreen;      /* Setup DPMS mode */@@ -1566,6 +1588,7 @@ 	pScrn->fbOffset = 0;     } +#if 0 #ifdef XvExtension     {         XF86VideoAdaptorPtr *ptr;@@ -1576,6 +1599,7 @@ 	    xf86XVScreenInit(pScreen, ptr, n);     } #endif+#endif      /* Wrap the current CloseScreen function */     nPtr->CloseScreen = pScreen->CloseScreen;@@ -1773,12 +1797,18 @@      if (!nPtr->noLinear) { 	if (!nPtr->noMMIO) {-	    if (nPtr->pEnt->location.type == BUS_PCI)+	    if (nPtr->pEnt->location.type == BUS_PCI){ 		nPtr->NeoMMIOBase = 		    xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, 				  nPtr->PciTag, nPtr->NeoMMIOAddr, 				  0x200000L);-	    else+		if (nPtr->NeoMMIOAddr2 != 0){+		    nPtr->NeoMMIOBase2 =+		        xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO,+				      nPtr->PciTag, nPtr->NeoMMIOAddr2,+				      0x100000L);+		}+	    } else 		nPtr->NeoMMIOBase = 		    xf86MapVidMem(pScrn->scrnIndex, 				  VIDMEM_MMIO, nPtr->NeoMMIOAddr,diff -uNr neomagic.org/neo_video.c neomagic/neo_video.c--- neomagic.org/neo_video.c	Thu Jan  1 09:00:00 1970+++ neomagic/neo_video.c	Tue Feb  5 06:05:47 2002@@ -0,0 +1,1103 @@+#include "neo.h"+#include "neo_video.h"++#define nElems(x)		(sizeof(x) / sizeof(x[0]))+#define MAKE_ATOM(a)	MakeAtom(a, sizeof(a) - 1, TRUE)++#if defined(XvExtension)++#include "dixstruct.h"+#include "xaa.h"+#include "xaalocal.h"++static XF86VideoAdaptorPtr NEOSetupVideo(ScreenPtr);+static void NEOResetVideo(ScrnInfoPtr);++static int NEOPutVideo(ScrnInfoPtr, short, short, short, short, short, short, short, short, RegionPtr, pointer);++static void NEOStopVideo(ScrnInfoPtr, pointer, Bool);+static int NEOSetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer);+static int NEOGetPortAttribute(ScrnInfoPtr, Atom, INT32 *, pointer);+static void NEOQueryBestSize(ScrnInfoPtr, Bool, short, short, short, short, unsigned int *, unsigned int *, pointer);+static int NEOPutImage(ScrnInfoPtr, short, short, short, short, short, short, short, short, int, unsigned char *, short, short, Bool, RegionPtr, pointer);+static int NEOQueryImageAttributes(ScrnInfoPtr, int, unsigned short *, unsigned short *, int *, int *);++static Bool RegionsEqual(RegionPtr, RegionPtr);+static Bool NEOClipVideo(ScrnInfoPtr, BoxPtr, INT32 *, INT32 *, INT32 *, INT32 *, RegionPtr, INT32, INT32);+static void NEODisplayVideo(ScrnInfoPtr, int, int, short, short, int, int, int, int, int, BoxPtr, short, short, short, short);++static void NEOInitOffscreenImages(ScreenPtr);+static FBLinearPtr NEOAllocateMemory(ScrnInfoPtr, FBLinearPtr, int);+static void NEOCopyData(unsigned char *, unsigned char *, int, int, int, int);+static void NEOCopyYV12Data(unsigned char *, unsigned char *, unsigned char *, unsigned char *, int, int, int, int, int);++static int NEOAllocSurface(ScrnInfoPtr, int, unsigned short, unsigned short, XF86SurfacePtr);+static int NEOFreeSurface(XF86SurfacePtr);+static int NEODisplaySurface(XF86SurfacePtr, short, short, short, short, short, short, short, short, RegionPtr clipBoxes);+static int NEOStopSurface(XF86SurfacePtr);+static int NEOGetSurfaceAttribute(ScrnInfoPtr, Atom, INT32 *);+static int NEOSetSurfaceAttribute(ScrnInfoPtr, Atom, INT32);++static Atom xvColorKey, xvBrightness;++void+NEOInitVideo(ScreenPtr pScreen)+{+    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];+    NEOPtr nPtr = NEOPTR(pScrn);+    XF86VideoAdaptorPtr *overlayAdaptors, *newAdaptors = NULL;+    XF86VideoAdaptorPtr newAdaptor = NULL;+    int numAdaptors;++    numAdaptors = xf86XVListGenericAdaptors(pScrn, &overlayAdaptors);++    if (nPtr->NeoChipset == NM2160  &&  nPtr->NeoMMIOBase2 != NULL+	&&  !nPtr->noAccel){+	newAdaptor = NEOSetupVideo(pScreen);+	NEOInitOffscreenImages(pScreen);+    }++    if (newAdaptor){+	if (!numAdaptors){+	    numAdaptors = 1;+	    overlayAdaptors = &newAdaptor;+	} else {+	    newAdaptors = xalloc((numAdaptors + 1) * sizeof(XF86VideoAdaptorPtr*));+	    if (newAdaptors){+		memcpy(newAdaptors, overlayAdaptors, numAdaptors * sizeof(XF86VideoAdaptorPtr));+		newAdaptors[numAdaptors++] = newAdaptor;+		overlayAdaptors = newAdaptors;+	    }+	}+    }++    if (numAdaptors)+	xf86XVScreenInit(pScreen, overlayAdaptors, numAdaptors);++    if (newAdaptors)+	xfree(newAdaptors);+}++static XF86VideoEncodingRec NEOVideoEncodings[] =+{+    {+	NEO_VIDEO_VIDEO,+	"XV_VIDEO",+	1024, 1024,+	{1, 1}+    },+    {+	NEO_VIDEO_IMAGE,+	"XV_IMAGE",+	1024, 1024,+	{1, 1}+    }+};++static XF86VideoFormatRec NEOVideoFormats[] =+{+    { 15, TrueColor },+    { 16, TrueColor },+};++static XF86AttributeRec NEOVideoAttributes[] =+{+    {+	XvSettable | XvGettable,+	0x000000, 0xFFFFFF,+	"XV_COLORKEY"+    },+    {+	XvSettable | XvGettable,+	-128, 127,+	"XV_BRIGHTNESS"+    },+};++static XF86ImageRec NEOVideoImages[] =+{+    XVIMAGE_YUY2,+    XVIMAGE_YV12,+    XVIMAGE_I420,+    {+	FOURCC_RV15,+	XvRGB,+	LSBFirst,+	{ 'R', 'V' ,'1', '5',+	  0x00,'5',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},+	16,+	XvPacked,+	1,+	15, 0x001F, 0x03E0, 0x7C00,+	0, 0, 0,+	0, 0, 0,+	0, 0, 0,+	{ 'R', 'V', 'B' },+	XvTopToBottom+    },+    {+	FOURCC_RV16,+	XvRGB,+	LSBFirst,+	{ 'R', 'V' ,'1', '6',+	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },+	16,+	XvPacked,+	1,+	16, 0x001F, 0x07E0, 0xF800,+	0, 0, 0,+	0, 0, 0,+	0, 0, 0,+	{ 'R', 'V', 'B' },+	XvTopToBottom+    }+};++static XF86VideoAdaptorPtr+NEOSetupVideo(ScreenPtr pScreen)+{+    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];+    NEOPtr nPtr = NEOPTR(pScrn);+    NEOPortPtr pPriv;+    XF86VideoAdaptorPtr overlayAdaptor;+    int i;++#ifdef DEBUG+    xf86DrvMsg(pScrn->scrnIndex,X_INFO,"NEOSetupVideo\n");+#endif+    if ((overlayAdaptor = xcalloc(1, sizeof(XF86VideoAdaptorRec) ++			      sizeof(DevUnion) + +			      sizeof(NEOPortRec))) == NULL){+	return (NULL);+    }++    overlayAdaptor->type = XvInputMask | XvImageMask | XvWindowMask | XvOutputMask | XvVideoMask;+    overlayAdaptor->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;+    overlayAdaptor->name = "NeoMagic Video Engine";+    overlayAdaptor->nEncodings = nElems(NEOVideoEncodings);+    overlayAdaptor->pEncodings = NEOVideoEncodings;+    for (i = 0; i < nElems(NEOVideoEncodings); i++){+	NEOVideoEncodings[i].width = 1024;+	NEOVideoEncodings[i].height = 1024;+    }+    overlayAdaptor->nFormats = nElems(NEOVideoFormats);+    overlayAdaptor->pFormats = NEOVideoFormats;+    overlayAdaptor->nPorts = 1;+    overlayAdaptor->pPortPrivates = (DevUnion*) &overlayAdaptor[1];+    overlayAdaptor->pPortPrivates[0].ptr = (pointer) &overlayAdaptor->pPortPrivates[1];+    overlayAdaptor->nAttributes = nElems(NEOVideoAttributes);+    overlayAdaptor->pAttributes = NEOVideoAttributes;+    overlayAdaptor->nImages = nElems(NEOVideoImages);+    overlayAdaptor->pImages = NEOVideoImages;++    overlayAdaptor->PutVideo = NEOPutVideo;+    overlayAdaptor->PutStill = NULL;+    overlayAdaptor->GetVideo = NULL;+    overlayAdaptor->GetStill = NULL;++    overlayAdaptor->StopVideo = NEOStopVideo;+    overlayAdaptor->SetPortAttribute = NEOSetPortAttribute;+    overlayAdaptor->GetPortAttribute = NEOGetPortAttribute;+    overlayAdaptor->QueryBestSize = NEOQueryBestSize;+    overlayAdaptor->PutImage = NEOPutImage;+    overlayAdaptor->QueryImageAttributes = NEOQueryImageAttributes;++    pPriv = (NEOPortPtr)overlayAdaptor->pPortPrivates[0].ptr;+    pPriv->colorKey = nPtr->videoKey;+    pPriv->video_status = 0;+    pPriv->brightness = 0;+    REGION_INIT(pScreen, &pPriv->clip, NullBox, 0);+    nPtr->overlayAdaptor = overlayAdaptor;++    xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");+    xvColorKey = MAKE_ATOM("XV_COLORKEY");++    NEOResetVideo(pScrn);++    return (overlayAdaptor);+}++static void+NEOResetVideo(ScrnInfoPtr pScrn)+{+    NEOPtr nPtr = NEOPTR(pScrn);+    NEOPortPtr pPriv = (NEOPortPtr)nPtr->overlayAdaptor->pPortPrivates[0].ptr;+    int r, g, b;++#ifdef DEBUG+    xf86DrvMsg(pScrn->scrnIndex,X_INFO,"NEOResetVideo\n");+#endif+    switch (pScrn->depth){+    case 8:+	OUTGR(0xc6, pPriv->colorKey & 0xff);+	OUTGR(0xc5, 0x00);+	OUTGR(0xc7, 0x00);+	break;+    default:+	r = (pPriv->colorKey & pScrn->mask.red) >> pScrn->offset.red;+	g = (pPriv->colorKey & pScrn->mask.green) >> pScrn->offset.green;+	b = (pPriv->colorKey & pScrn->mask.blue) >> pScrn->offset.blue;+	OUTGR(0xc5, r);+	OUTGR(0xc6, g);+	OUTGR(0xc7, b);+	break;+    }+    OUTGR(0xc4, pPriv->brightness);+}++static int+NEOPutVideo(ScrnInfoPtr pScrn, +	     short src_x, short src_y, short drw_x, short drw_y,+	     short src_w, short src_h, short drw_w, short drw_h,+	     RegionPtr clipBoxes, pointer data)+{+    NEOPortPtr pPriv = (NEOPortPtr)data;+    NEOPtr nPtr = NEOPTR(pScrn);+    CARD32 src_pitch, offset;+    int xscale, yscale;+    BoxRec dstBox;+    INT32 x1, y1, x2, y2;+    int size, bpp;++#ifdef DEBUG+    xf86DrvMsg(pScrn->scrnIndex,X_INFO,"NEOPutVideo: src: %d %d %d %d\n", src_x, src_y, src_w, src_h);+    xf86DrvMsg(pScrn->scrnIndex,X_INFO,"NEOPutVideo: drw: %d %d %d %d\n", drw_x, drw_y, drw_w, drw_h);+#endif+    x1 = src_x;+    y1 = src_y;+    x2 = src_x + src_w;+    y2 = src_y + src_h;

⌨️ 快捷键说明

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