[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

X Strike Force XFree86 SVN commit: r1367 - in trunk/debian: . patches



Author: branden
Date: 2004-05-05 14:08:23 -0500 (Wed, 05 May 2004)
New Revision: 1367

Modified:
   trunk/debian/changelog
   trunk/debian/patches/000_stolen_from_HEAD.diff
Log:
Grab updated XVideo (Xv) server-side implementation from XFree86 CVS as of
2003-04-30.
+ Initialise v4l's XVideo adaptors last (Marc La France).
+ Reduce cut&paste effects by adding more helpers to Xv (derived from
  #5645, Bj?\195?\182rn Augustsson, Marc La France).
+ XvExtension driver cleanups (Marc La France).
+ Fix precision problems in xf86XVClipVideoHelper (Marc La France).


Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2004-05-05 18:24:36 UTC (rev 1366)
+++ trunk/debian/changelog	2004-05-05 19:08:23 UTC (rev 1367)
@@ -27,12 +27,20 @@
   * Grab updated XFree86 X server I2C code from XFree86 CVS as of 2003-08-29.
     Implements and exposes xf86I2CGetScreenBuses() function.
 
+  * Grab updated XVideo (Xv) server-side implementation from XFree86 CVS as of
+    2003-04-30.
+    + Initialise v4l's XVideo adaptors last (Marc La France).
+    + Reduce cut&paste effects by adding more helpers to Xv (derived from
+      #5645, Björn Augustsson, Marc La France).
+    + XvExtension driver cleanups (Marc La France).
+    + Fix precision problems in xf86XVClipVideoHelper (Marc La France).
+
   Changes by Fabio Massimo Di Nitto:
 
   * Update xutils's package description to refer to bdftruncate and ucs2any
     programs by their correct names.
 
- -- Branden Robinson <branden@debian.org>  Wed,  5 May 2004 13:15:17 -0500
+ -- Branden Robinson <branden@debian.org>  Wed,  5 May 2004 14:04:36 -0500
 
 xfree86 (4.3.0.dfsg.1-1) unstable; urgency=low
 

Modified: trunk/debian/patches/000_stolen_from_HEAD.diff
===================================================================
--- trunk/debian/patches/000_stolen_from_HEAD.diff	2004-05-05 18:24:36 UTC (rev 1366)
+++ trunk/debian/patches/000_stolen_from_HEAD.diff	2004-05-05 19:08:23 UTC (rev 1367)
@@ -153,6 +153,19 @@
   [This incompatibility is not relevant to Debian as we are "skipping over" the
    misspelled symbol name.]
 
+xc/programs/Xserver/hw/xfree86/common/fourcc.h @ 1.4
+xc/programs/Xserver/hw/xfree86/common/xf86xv.c @ 1.34
+xc/programs/Xserver/hw/xfree86/common/xf86xv.h @ 1.24
+xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c @ 1.4
+xc/programs/Xserver/hw/xfree86/common/xf86xvpriv.h @ 1.1
+   129. Initialise v4l's XVideo adaptors last (Marc La France).
+   128. Reduce cut&paste effects by adding more helpers to Xv
+        (derived from #5645, Bj?rn Augustsson, Marc La France).
+   126. [...] XvExtension driver cleanups (Marc La France).
+
+xc/programs/Xserver/hw/xfree86/common/xf86xv.c @ 1.35
+   156. Fix precision problems in xf86XVClipVideoHelper [...] (Marc La France).
+
 diff -urN xc.orig/config/imake/imake.c xc/config/imake/imake.c
 --- xc.orig/config/imake/imake.c	2002-12-17 09:48:27.000000000 +1100
 +++ xc/config/imake/imake.c	2003-04-09 01:58:14.000000000 +1000
@@ -2231,3 +2244,1706 @@
  
  /* I2C slave devices */
  
+Index: xc/programs/Xserver/hw/xfree86/common/xf86xv.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/common/xf86xv.c,v
+retrieving revision 1.33
+retrieving revision 1.35
+diff -u -r1.33 -r1.35
+--- xc/programs/Xserver/hw/xfree86/common/xf86xv.c	9 Nov 2002 01:18:11 -0000	1.33
++++ xc/programs/Xserver/hw/xfree86/common/xf86xv.c	30 Apr 2003 16:56:25 -0000	1.35
+@@ -1,12 +1,12 @@
+-/* 
++/*
+ 
+-   XFree86 Xv DDX written by Mark Vojkovich (markv@valinux.com) 
++   XFree86 Xv DDX written by Mark Vojkovich (markv@valinux.com)
+ 
+    Copyright (C) 1998, 1999 - The XFree86 Project Inc.
+ 
+ */
+ 
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xv.c,v 1.33 2002/11/09 01:18:11 keithp Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xv.c,v 1.35 2003/04/30 16:56:25 tsi Exp $ */
+ 
+ #include "misc.h"
+ #include "xf86.h"
+@@ -31,7 +31,7 @@
+ #include "xvmodproc.h"
+ #endif
+ 
+-#include "xf86xv.h"
++#include "xf86xvpriv.h"
+ 
+ 
+ /* XvScreenRec fields */
+@@ -44,29 +44,29 @@
+ static int xf86XVAllocatePort(unsigned long, XvPortPtr, XvPortPtr*);
+ static int xf86XVFreePort(XvPortPtr);
+ static int xf86XVPutVideo(ClientPtr, DrawablePtr,XvPortPtr, GCPtr,
+-   				INT16, INT16, CARD16, CARD16, 
++				INT16, INT16, CARD16, CARD16,
+ 				INT16, INT16, CARD16, CARD16);
+ static int xf86XVPutStill(ClientPtr, DrawablePtr,XvPortPtr, GCPtr,
+-   				INT16, INT16, CARD16, CARD16, 
++				INT16, INT16, CARD16, CARD16,
+ 				INT16, INT16, CARD16, CARD16);
+ static int xf86XVGetVideo(ClientPtr, DrawablePtr,XvPortPtr, GCPtr,
+-   				INT16, INT16, CARD16, CARD16, 
++				INT16, INT16, CARD16, CARD16,
+ 				INT16, INT16, CARD16, CARD16);
+ static int xf86XVGetStill(ClientPtr, DrawablePtr,XvPortPtr, GCPtr,
+-   				INT16, INT16, CARD16, CARD16, 
++				INT16, INT16, CARD16, CARD16,
+ 				INT16, INT16, CARD16, CARD16);
+ static int xf86XVStopVideo(ClientPtr, XvPortPtr, DrawablePtr);
+ static int xf86XVSetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32);
+ static int xf86XVGetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32*);
+ static int xf86XVQueryBestSize(ClientPtr, XvPortPtr, CARD8,
+-   				CARD16, CARD16,CARD16, CARD16, 
++				CARD16, CARD16,CARD16, CARD16,
+ 				unsigned int*, unsigned int*);
+ static int xf86XVPutImage(ClientPtr, DrawablePtr, XvPortPtr, GCPtr,
+-   				INT16, INT16, CARD16, CARD16, 
++				INT16, INT16, CARD16, CARD16,
+ 				INT16, INT16, CARD16, CARD16,
+ 				XvImagePtr, unsigned char*, Bool,
+ 				CARD16, CARD16);
+-static int xf86XVQueryImageAttributes(ClientPtr, XvPortPtr, XvImagePtr, 
++static int xf86XVQueryImageAttributes(ClientPtr, XvPortPtr, XvImagePtr,
+ 				CARD16*, CARD16*, int*, int*);
+ 
+ 
+@@ -107,7 +107,7 @@
+ 	((XvScreenPtr)((pScreen)->devPrivates[XF86XvScreenIndex].ptr))
+ 
+ #define GET_XF86XV_SCREEN(pScreen) \
+-  	((XF86XVScreenPtr)(GET_XV_SCREEN(pScreen)->devPriv.ptr))
++	((XF86XVScreenPtr)(GET_XV_SCREEN(pScreen)->devPriv.ptr))
+ 
+ #define GET_XF86XV_WINDOW(pWin) \
+ 	((XF86XVWindowPtr)((pWin)->devPrivates[XF86XVWindowIndex].ptr))
+@@ -121,12 +121,12 @@
+ ){
+   xf86XVInitGenericAdaptorPtr *newdrivers;
+ 
+-  newdrivers = xrealloc(GenDrivers, sizeof(xf86XVInitGenericAdaptorPtr) * 
++  newdrivers = xrealloc(GenDrivers, sizeof(xf86XVInitGenericAdaptorPtr) *
+ 			(1 + NumGenDrivers));
+   if (!newdrivers)
+     return 0;
+   GenDrivers = newdrivers;
+-  
++
+   GenDrivers[NumGenDrivers++] = InitFunc;
+ 
+   return 1;
+@@ -134,7 +134,7 @@
+ 
+ int
+ xf86XVListGenericAdaptors(
+-    ScrnInfoPtr          pScrn,
++    ScrnInfoPtr pScrn,
+     XF86VideoAdaptorPtr **adaptors
+ ){
+     int i,j,n,num;
+@@ -142,8 +142,13 @@
+ 
+     num = 0;
+     *adaptors = NULL;
+-    for (i = 0; i < NumGenDrivers; i++) {
+-	n = GenDrivers[i](pScrn,&DrivAdap);
++    /*
++     * The v4l driver registers itself first, but can use surfaces registered
++     * by other drivers.  So, call the v4l driver last.
++     */
++    for (i = NumGenDrivers; --i >= 0; ) {
++	DrivAdap = NULL;
++	n = (*GenDrivers[i])(pScrn, &DrivAdap);
+ 	if (0 == n)
+ 	    continue;
+ 	new = xrealloc(*adaptors, sizeof(XF86VideoAdaptorPtr) * (num+n));
+@@ -156,6 +161,38 @@
+     return num;
+ }
+ 
++
++/****************  Offscreen surface stuff *******************/
++
++typedef struct {
++   XF86OffscreenImagePtr images;
++   int num;
++} OffscreenImageRec;
++
++static OffscreenImageRec OffscreenImages[MAXSCREENS];
++
++Bool
++xf86XVRegisterOffscreenImages(
++    ScreenPtr pScreen,
++    XF86OffscreenImagePtr images,
++    int num
++){
++    OffscreenImages[pScreen->myNum].num = num;
++    OffscreenImages[pScreen->myNum].images = images;
++
++    return TRUE;
++}
++
++XF86OffscreenImagePtr
++xf86XVQueryOffscreenImages(
++   ScreenPtr pScreen,
++   int *num
++){
++   *num = OffscreenImages[pScreen->myNum].num;
++   return OffscreenImages[pScreen->myNum].images;
++}
++
++
+ XF86VideoAdaptorPtr
+ xf86XVAllocateVideoAdaptorRec(ScrnInfoPtr pScrn)
+ {
+@@ -171,7 +208,7 @@
+ 
+ Bool
+ xf86XVScreenInit(
+-   ScreenPtr pScreen, 
++   ScreenPtr pScreen,
+    XF86VideoAdaptorPtr *adaptors,
+    int num
+ ){
+@@ -181,7 +218,7 @@
+ 
+   if(num <= 0 ||
+      !XvGetScreenIndexProc || !XvGetRTPortProc || !XvScreenInitProc)
+-	return FALSE;  
++	return FALSE;
+ 
+   if(XF86XVGeneration != serverGeneration) {
+ 	if((XF86XVWindowIndex = AllocateWindowPrivateIndex()) < 0)
+@@ -190,7 +227,7 @@
+   }
+ 
+   if(!AllocateWindowPrivate(pScreen,XF86XVWindowIndex,0))
+-        return FALSE;
++	return FALSE;
+ 
+   if(Success != (*XvScreenInitProc)(pScreen)) return FALSE;
+ 
+@@ -245,31 +282,28 @@
+ {
+    int i;
+ 
+-   if(pAdaptor->name)
+-      xfree(pAdaptor->name);
++   xfree(pAdaptor->name);
+ 
+    if(pAdaptor->pEncodings) {
+       XvEncodingPtr pEncode = pAdaptor->pEncodings;
+ 
+-      for(i = 0; i < pAdaptor->nEncodings; i++, pEncode++) {
+-          if(pEncode->name) xfree(pEncode->name);
+-      }
++      for(i = 0; i < pAdaptor->nEncodings; i++, pEncode++)
++	  xfree(pEncode->name);
+       xfree(pAdaptor->pEncodings);
+    }
+ 
+-   if(pAdaptor->pFormats) 
+-      xfree(pAdaptor->pFormats);
++   xfree(pAdaptor->pFormats);
+ 
+    if(pAdaptor->pPorts) {
+       XvPortPtr pPort = pAdaptor->pPorts;
+       XvPortRecPrivatePtr pPriv;
+ 
+       for(i = 0; i < pAdaptor->nPorts; i++, pPort++) {
+-          pPriv = (XvPortRecPrivatePtr)pPort->devPriv.ptr;
++	  pPriv = (XvPortRecPrivatePtr)pPort->devPriv.ptr;
+ 	  if(pPriv) {
+-	     if(pPriv->clientClip) 
++	     if(pPriv->clientClip)
+ 		REGION_DESTROY(pAdaptor->pScreen, pPriv->clientClip);
+-             if(pPriv->pCompositeClip && pPriv->FreeCompositeClip) 
++	     if(pPriv->pCompositeClip && pPriv->FreeCompositeClip)
+ 		REGION_DESTROY(pAdaptor->pScreen, pPriv->pCompositeClip);
+ 	     xfree(pPriv);
+ 	  }
+@@ -280,23 +314,18 @@
+    if(pAdaptor->nAttributes) {
+       XvAttributePtr pAttribute = pAdaptor->pAttributes;
+ 
+-      for(i = 0; i < pAdaptor->nAttributes; i++, pAttribute++) {
+-          if(pAttribute->name) xfree(pAttribute->name);
+-      }
+-
++      for(i = 0; i < pAdaptor->nAttributes; i++, pAttribute++)
++	  xfree(pAttribute->name);
+       xfree(pAdaptor->pAttributes);
+    }
+ 
+-   if(pAdaptor->nImages)
+-      xfree(pAdaptor->pImages);
+-	
+-   if(pAdaptor->devPriv.ptr)
+-      xfree(pAdaptor->devPriv.ptr);
++   xfree(pAdaptor->pImages);
++   xfree(pAdaptor->devPriv.ptr);
+ }
+ 
+ static Bool
+ xf86XVInitAdaptors(
+-   ScreenPtr pScreen, 
++   ScreenPtr pScreen,
+    XF86VideoAdaptorPtr *infoPtr,
+    int number
+ ) {
+@@ -325,7 +354,7 @@
+   pxvs->nAdaptors = 0;
+   pxvs->pAdaptors = NULL;
+ 
+-  if(!(pAdaptor = xcalloc(number, sizeof(XvAdaptorRec)))) 
++  if(!(pAdaptor = xcalloc(number, sizeof(XvAdaptorRec))))
+       return FALSE;
+ 
+   for(pa = pAdaptor, na = 0, numAdaptor = 0; na < number; na++, adaptorPtr++) {
+@@ -339,7 +368,7 @@
+       if(!adaptorPtr->nEncodings || !adaptorPtr->pEncodings)
+ 	   continue;
+ 
+-      pa->type = adaptorPtr->type; 
++      pa->type = adaptorPtr->type;
+ 
+       if(!adaptorPtr->PutVideo && !adaptorPtr->GetVideo)
+ 	 pa->type &= ~XvVideoMask;
+@@ -350,19 +379,19 @@
+       if(!adaptorPtr->PutImage || !adaptorPtr->QueryImageAttributes)
+ 	 pa->type &= ~XvImageMask;
+ 
+-      if(!adaptorPtr->PutVideo && !adaptorPtr->PutImage && 
++      if(!adaptorPtr->PutVideo && !adaptorPtr->PutImage &&
+ 							  !adaptorPtr->PutStill)
+ 	 pa->type &= ~XvInputMask;
+ 
+       if(!adaptorPtr->GetVideo && !adaptorPtr->GetStill)
+ 	 pa->type &= ~XvOutputMask;
+-	 
+-      if(!(adaptorPtr->type & (XvPixmapMask | XvWindowMask))) 
++
++      if(!(adaptorPtr->type & (XvPixmapMask | XvWindowMask)))
+ 	  continue;
+-      if(!(adaptorPtr->type & (XvImageMask | XvVideoMask | XvStillMask))) 
++      if(!(adaptorPtr->type & (XvImageMask | XvVideoMask | XvStillMask)))
+ 	  continue;
+ 
+-      pa->pScreen = pScreen; 
++      pa->pScreen = pScreen;
+       pa->ddAllocatePort = xf86XVAllocatePort;
+       pa->ddFreePort = xf86XVFreePort;
+       pa->ddPutVideo = xf86XVPutVideo;
+@@ -376,33 +405,33 @@
+       pa->ddQueryBestSize = xf86XVQueryBestSize;
+       pa->ddQueryImageAttributes = xf86XVQueryImageAttributes;
+       if((pa->name = xalloc(strlen(adaptorPtr->name) + 1)))
+-          strcpy(pa->name, adaptorPtr->name);
++	  strcpy(pa->name, adaptorPtr->name);
+ 
+       if(adaptorPtr->nEncodings &&
+ 	(pEncode = xcalloc(adaptorPtr->nEncodings, sizeof(XvEncodingRec)))) {
+ 
+-	for(pe = pEncode, encodingPtr = adaptorPtr->pEncodings, i = 0; 
+-	    i < adaptorPtr->nEncodings; pe++, i++, encodingPtr++) 
+-        {
++	for(pe = pEncode, encodingPtr = adaptorPtr->pEncodings, i = 0;
++	    i < adaptorPtr->nEncodings; pe++, i++, encodingPtr++)
++	{
+ 	    pe->id = encodingPtr->id;
+ 	    pe->pScreen = pScreen;
+ 	    if((pe->name = xalloc(strlen(encodingPtr->name) + 1)))
+-                strcpy(pe->name, encodingPtr->name);
++		strcpy(pe->name, encodingPtr->name);
+ 	    pe->width = encodingPtr->width;
+ 	    pe->height = encodingPtr->height;
+ 	    pe->rate.numerator = encodingPtr->rate.numerator;
+ 	    pe->rate.denominator = encodingPtr->rate.denominator;
+ 	}
+ 	pa->nEncodings = adaptorPtr->nEncodings;
+-	pa->pEncodings = pEncode;  
+-      } 
++	pa->pEncodings = pEncode;
++      }
+ 
+       if(adaptorPtr->nImages &&
+-         (pImage = xcalloc(adaptorPtr->nImages, sizeof(XvImageRec)))) {
++	 (pImage = xcalloc(adaptorPtr->nImages, sizeof(XvImageRec)))) {
+ 
+-          for(i = 0, pi = pImage, imagePtr = adaptorPtr->pImages;
+-	      i < adaptorPtr->nImages; i++, pi++, imagePtr++) 
+-  	  {
++	  for(i = 0, pi = pImage, imagePtr = adaptorPtr->pImages;
++	      i < adaptorPtr->nImages; i++, pi++, imagePtr++)
++	  {
+ 	     pi->id = imagePtr->id;
+ 	     pi->type = imagePtr->type;
+ 	     pi->byte_order = imagePtr->byte_order;
+@@ -425,7 +454,7 @@
+ 	     pi->vert_v_period = imagePtr->vert_v_period;
+ 	     memcpy(pi->component_order, imagePtr->component_order, 32);
+ 	     pi->scanline_order = imagePtr->scanline_order;
+-          }
++	  }
+ 	  pa->nImages = adaptorPtr->nImages;
+ 	  pa->pImages = pImage;
+       }
+@@ -433,65 +462,65 @@
+       if(adaptorPtr->nAttributes &&
+ 	(pAttribute = xcalloc(adaptorPtr->nAttributes, sizeof(XvAttributeRec))))
+       {
+-	for(pat = pAttribute, attributePtr = adaptorPtr->pAttributes, i = 0; 
+-	    i < adaptorPtr->nAttributes; pat++, i++, attributePtr++) 
+-        {
++	for(pat = pAttribute, attributePtr = adaptorPtr->pAttributes, i = 0;
++	    i < adaptorPtr->nAttributes; pat++, i++, attributePtr++)
++	{
+ 	    pat->flags = attributePtr->flags;
+ 	    pat->min_value = attributePtr->min_value;
+ 	    pat->max_value = attributePtr->max_value;
+ 	    if((pat->name = xalloc(strlen(attributePtr->name) + 1)))
+-                strcpy(pat->name, attributePtr->name);
++		strcpy(pat->name, attributePtr->name);
+ 	}
+ 	pa->nAttributes = adaptorPtr->nAttributes;
+-	pa->pAttributes = pAttribute;  
+-      } 
++	pa->pAttributes = pAttribute;
++      }
+ 
+ 
+       totFormat = adaptorPtr->nFormats;
+ 
+       if(!(pFormat = xcalloc(totFormat, sizeof(XvFormatRec)))) {
+-          xf86XVFreeAdaptor(pa);
+-          continue;
++	  xf86XVFreeAdaptor(pa);
++	  continue;
+       }
+-      for(pf = pFormat, i = 0, numFormat = 0, formatPtr = adaptorPtr->pFormats; 
+-	  i < adaptorPtr->nFormats; i++, formatPtr++) 
++      for(pf = pFormat, i = 0, numFormat = 0, formatPtr = adaptorPtr->pFormats;
++	  i < adaptorPtr->nFormats; i++, formatPtr++)
+       {
+ 	  numVisuals = pScreen->numVisuals;
+-          pVisual = pScreen->visuals;
++	  pVisual = pScreen->visuals;
+ 
+-          while(numVisuals--) {
+-              if((pVisual->class == formatPtr->class) &&
+-                 (pVisual->nplanes == formatPtr->depth)) {
++	  while(numVisuals--) {
++	      if((pVisual->class == formatPtr->class) &&
++		 (pVisual->nplanes == formatPtr->depth)) {
+ 
+ 		   if(numFormat >= totFormat) {
+-			void *moreSpace; 
++			void *moreSpace;
+ 			totFormat *= 2;
+-			moreSpace = xrealloc(pFormat, 
++			moreSpace = xrealloc(pFormat,
+ 					     totFormat * sizeof(XvFormatRec));
+ 			if(!moreSpace) break;
+ 			pFormat = moreSpace;
+ 			pf = pFormat + numFormat;
+ 		   }
+ 
+-                   pf->visual = pVisual->vid; 
++		   pf->visual = pVisual->vid;
+ 		   pf->depth = formatPtr->depth;
+ 
+ 		   pf++;
+ 		   numFormat++;
+-              }
+-              pVisual++;
+-          }	
++	      }
++	      pVisual++;
++	  }
+       }
+       pa->nFormats = numFormat;
+-      pa->pFormats = pFormat;  
++      pa->pFormats = pFormat;
+       if(!numFormat) {
+-          xf86XVFreeAdaptor(pa);
+-          continue;
++	  xf86XVFreeAdaptor(pa);
++	  continue;
+       }
+ 
+       if(!(adaptorPriv = xcalloc(1, sizeof(XvAdaptorRecPrivate)))) {
+-          xf86XVFreeAdaptor(pa);
+-          continue;
++	  xf86XVFreeAdaptor(pa);
++	  continue;
+       }
+ 
+       adaptorPriv->flags = adaptorPtr->flags;
+@@ -510,47 +539,47 @@
+       pa->devPriv.ptr = (pointer)adaptorPriv;
+ 
+       if(!(pPort = xcalloc(adaptorPtr->nPorts, sizeof(XvPortRec)))) {
+-          xf86XVFreeAdaptor(pa);
+-          continue;
++	  xf86XVFreeAdaptor(pa);
++	  continue;
+       }
+-      for(pp = pPort, i = 0, numPort = 0; 
++      for(pp = pPort, i = 0, numPort = 0;
+ 	  i < adaptorPtr->nPorts; i++) {
+ 
+-          if(!(pp->id = FakeClientID(0))) 
++	  if(!(pp->id = FakeClientID(0)))
+ 		continue;
+ 
+-	  if(!(portPriv = xcalloc(1, sizeof(XvPortRecPrivate)))) 
++	  if(!(portPriv = xcalloc(1, sizeof(XvPortRecPrivate))))
+ 		continue;
+-	  
++
+ 	  if(!AddResource(pp->id, PortResource, pp)) {
+ 		xfree(portPriv);
+ 		continue;
+ 	  }
+ 
+-          pp->pAdaptor = pa;
+-          pp->pNotify = (XvPortNotifyPtr)NULL;
+-          pp->pDraw = (DrawablePtr)NULL;
+-          pp->client = (ClientPtr)NULL;
+-          pp->grab.client = (ClientPtr)NULL;
+-          pp->time = currentTime;
+-          pp->devPriv.ptr = portPriv;
++	  pp->pAdaptor = pa;
++	  pp->pNotify = (XvPortNotifyPtr)NULL;
++	  pp->pDraw = (DrawablePtr)NULL;
++	  pp->client = (ClientPtr)NULL;
++	  pp->grab.client = (ClientPtr)NULL;
++	  pp->time = currentTime;
++	  pp->devPriv.ptr = portPriv;
+ 
+ 	  portPriv->pScrn = pScrn;
+ 	  portPriv->AdaptorRec = adaptorPriv;
+-          portPriv->DevPriv.ptr = adaptorPtr->pPortPrivates[i].ptr;
+-	
+-          pp++;
+-          numPort++;
++	  portPriv->DevPriv.ptr = adaptorPtr->pPortPrivates[i].ptr;
++
++	  pp++;
++	  numPort++;
+       }
+       pa->nPorts = numPort;
+       pa->pPorts = pPort;
+       if(!numPort) {
+-          xf86XVFreeAdaptor(pa);
+-          continue;
++	  xf86XVFreeAdaptor(pa);
++	  continue;
+       }
+ 
+       pa->base_id = pPort->id;
+-      
++
+       pa++;
+       numAdaptor++;
+   }
+@@ -576,18 +605,18 @@
+    the GC and used it's clip list when they needed to reclip the window,
+    even if the client clip was different from the one the video was
+    initialized with.  If the original GC was destroyed, they had to stop
+-   the video.  I like the new method better (MArk). 
++   the video.  I like the new method better (MArk).
+ 
+    This function only works for windows.  Will need to rewrite when
+    (if) we support pixmap rendering.
+ */
+ 
+-static void  
++static void
+ xf86XVUpdateCompositeClip(XvPortRecPrivatePtr portPriv)
+ {
+    RegionPtr	pregWin, pCompositeClip;
+    WindowPtr	pWin;
+-   Bool 	freeCompClip = FALSE;
++   Bool		freeCompClip = FALSE;
+ 
+    if(portPriv->pCompositeClip)
+ 	return;
+@@ -618,8 +647,8 @@
+    portPriv->FreeCompositeClip = TRUE;
+ 
+    if(freeCompClip) {
+-   	REGION_DESTROY(pWin->pScreen, pregWin);
+-   }    
++	REGION_DESTROY(pWin->pScreen, pregWin);
++   }
+ }
+ 
+ /* Save the current clientClip and update the CompositeClip whenever
+@@ -627,7 +656,7 @@
+ 
+ static void
+ xf86XVCopyClip(
+-   XvPortRecPrivatePtr portPriv, 
++   XvPortRecPrivatePtr portPriv,
+    GCPtr pGC
+ ){
+     /* copy the new clip if it exists */
+@@ -670,12 +699,12 @@
+   WinBox.y1 = portPriv->pDraw->y + portPriv->drw_y;
+   WinBox.x2 = WinBox.x1 + portPriv->drw_w;
+   WinBox.y2 = WinBox.y1 + portPriv->drw_h;
+-  
++
+   /* clip to the window composite clip */
+   REGION_INIT(pScreen, &WinRegion, &WinBox, 1);
+   REGION_INIT(pScreen, &ClipRegion, NullBox, 1);
+-  REGION_INTERSECT(Screen, &ClipRegion, &WinRegion, portPriv->pCompositeClip); 
+-  
++  REGION_INTERSECT(Screen, &ClipRegion, &WinRegion, portPriv->pCompositeClip);
++
+   /* that's all if it's totally obscured */
+   if(!REGION_NOTEMPTY(pScreen, &ClipRegion)) {
+ 	clippedAway = TRUE;
+@@ -686,11 +715,11 @@
+      REGION_SUBTRACT(pScreen, &ClipRegion, &WinRegion, &ClipRegion);
+   }
+ 
+-  ret = (*portPriv->AdaptorRec->GetVideo)(portPriv->pScrn, 
+-			portPriv->vid_x, portPriv->vid_y, 
+-			WinBox.x1, WinBox.y1, 
+-			portPriv->vid_w, portPriv->vid_h, 
+-			portPriv->drw_w, portPriv->drw_h, 
++  ret = (*portPriv->AdaptorRec->GetVideo)(portPriv->pScrn,
++			portPriv->vid_x, portPriv->vid_y,
++			WinBox.x1, WinBox.y1,
++			portPriv->vid_w, portPriv->vid_h,
++			portPriv->drw_w, portPriv->drw_h,
+ 			&ClipRegion, portPriv->DevPriv.ptr);
+ 
+   if(ret == Success)
+@@ -734,27 +763,27 @@
+   WinBox.y1 = portPriv->pDraw->y + portPriv->drw_y;
+   WinBox.x2 = WinBox.x1 + portPriv->drw_w;
+   WinBox.y2 = WinBox.y1 + portPriv->drw_h;
+-  
++
+   /* clip to the window composite clip */
+   REGION_INIT(pScreen, &WinRegion, &WinBox, 1);
+   REGION_INIT(pScreen, &ClipRegion, NullBox, 1);
+-  REGION_INTERSECT(Screen, &ClipRegion, &WinRegion, portPriv->pCompositeClip); 
++  REGION_INTERSECT(Screen, &ClipRegion, &WinRegion, portPriv->pCompositeClip);
+ 
+   /* clip and translate to the viewport */
+   if(portPriv->AdaptorRec->flags & VIDEO_CLIP_TO_VIEWPORT) {
+      RegionRec VPReg;
+      BoxRec VPBox;
+ 
+-     VPBox.x1 = portPriv->pScrn->frameX0;	
++     VPBox.x1 = portPriv->pScrn->frameX0;
+      VPBox.y1 = portPriv->pScrn->frameY0;
+-     VPBox.x2 = portPriv->pScrn->frameX1;	
++     VPBox.x2 = portPriv->pScrn->frameX1;
+      VPBox.y2 = portPriv->pScrn->frameY1;
+ 
+      REGION_INIT(pScreen, &VPReg, &VPBox, 1);
+-     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg); 
++     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg);
+      REGION_UNINIT(pScreen, &VPReg);
+   }
+-  
++
+   /* that's all if it's totally obscured */
+   if(!REGION_NOTEMPTY(pScreen, &ClipRegion)) {
+ 	clippedAway = TRUE;
+@@ -765,8 +794,8 @@
+   if(portPriv->AdaptorRec->flags & VIDEO_NO_CLIPPING) {
+      BoxPtr clipBox = REGION_RECTS(&ClipRegion);
+      if(  (REGION_NUM_RECTS(&ClipRegion) != 1) ||
+-	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) || 
+-	  (clipBox->y1 != WinBox.y1) || (clipBox->y2 != WinBox.y2)) 
++	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) ||
++	  (clipBox->y1 != WinBox.y1) || (clipBox->y2 != WinBox.y2))
+      {
+ 	    clippedAway = TRUE;
+ 	    goto CLIP_VIDEO_BAILOUT;
+@@ -777,11 +806,11 @@
+      REGION_SUBTRACT(pScreen, &ClipRegion, &WinRegion, &ClipRegion);
+   }
+ 
+-  ret = (*portPriv->AdaptorRec->PutVideo)(portPriv->pScrn, 
+-			portPriv->vid_x, portPriv->vid_y, 
++  ret = (*portPriv->AdaptorRec->PutVideo)(portPriv->pScrn,
++			portPriv->vid_x, portPriv->vid_y,
+ 			WinBox.x1, WinBox.y1,
+-			portPriv->vid_w, portPriv->vid_h, 
+-			portPriv->drw_w, portPriv->drw_h, 
++			portPriv->vid_w, portPriv->vid_h,
++			portPriv->drw_w, portPriv->drw_h,
+ 			&ClipRegion, portPriv->DevPriv.ptr);
+ 
+   if(ret == Success) portPriv->isOn = XV_ON;
+@@ -823,27 +852,27 @@
+   WinBox.y1 = portPriv->pDraw->y + portPriv->drw_y;
+   WinBox.x2 = WinBox.x1 + portPriv->drw_w;
+   WinBox.y2 = WinBox.y1 + portPriv->drw_h;
+-  
++
+   /* clip to the window composite clip */
+   REGION_INIT(pScreen, &WinRegion, &WinBox, 1);
+   REGION_INIT(pScreen, &ClipRegion, NullBox, 1);
+-  REGION_INTERSECT(Screen, &ClipRegion, &WinRegion, portPriv->pCompositeClip); 
++  REGION_INTERSECT(Screen, &ClipRegion, &WinRegion, portPriv->pCompositeClip);
+ 
+   /* clip and translate to the viewport */
+   if(portPriv->AdaptorRec->flags & VIDEO_CLIP_TO_VIEWPORT) {
+      RegionRec VPReg;
+      BoxRec VPBox;
+ 
+-     VPBox.x1 = portPriv->pScrn->frameX0;	
++     VPBox.x1 = portPriv->pScrn->frameX0;
+      VPBox.y1 = portPriv->pScrn->frameY0;
+-     VPBox.x2 = portPriv->pScrn->frameX1;	
++     VPBox.x2 = portPriv->pScrn->frameX1;
+      VPBox.y2 = portPriv->pScrn->frameY1;
+ 
+      REGION_INIT(pScreen, &VPReg, &VPBox, 1);
+-     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg); 
++     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg);
+      REGION_UNINIT(pScreen, &VPReg);
+   }
+-  
++
+   /* that's all if it's totally obscured */
+   if(!REGION_NOTEMPTY(pScreen, &ClipRegion)) {
+ 	clippedAway = TRUE;
+@@ -854,8 +883,8 @@
+   if(portPriv->AdaptorRec->flags & VIDEO_NO_CLIPPING) {
+      BoxPtr clipBox = REGION_RECTS(&ClipRegion);
+      if(  (REGION_NUM_RECTS(&ClipRegion) != 1) ||
+-	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) || 
+-	  (clipBox->y1 != WinBox.y1) || (clipBox->y2 != WinBox.y2)) 
++	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) ||
++	  (clipBox->y1 != WinBox.y1) || (clipBox->y2 != WinBox.y2))
+      {
+ 	    clippedAway = TRUE;
+ 	    goto CLIP_VIDEO_BAILOUT;
+@@ -866,7 +895,7 @@
+      REGION_SUBTRACT(pScreen, &ClipRegion, &WinRegion, &ClipRegion);
+   }
+ 
+-  ret = (*portPriv->AdaptorRec->ReputImage)(portPriv->pScrn, 
++  ret = (*portPriv->AdaptorRec->ReputImage)(portPriv->pScrn,
+ 			WinBox.x1, WinBox.y1,
+ 			&ClipRegion, portPriv->DevPriv.ptr);
+ 
+@@ -910,7 +939,7 @@
+ static int
+ xf86XVEnlistPortInWindow(WindowPtr pWin, XvPortRecPrivatePtr portPriv)
+ {
+-   XF86XVWindowPtr winPriv, PrivRoot;    
++   XF86XVWindowPtr winPriv, PrivRoot;
+ 
+    winPriv = PrivRoot = GET_XF86XV_WINDOW(pWin);
+ 
+@@ -927,7 +956,7 @@
+ 	winPriv->PortRec = portPriv;
+ 	winPriv->next = PrivRoot;
+ 	pWin->devPrivates[XF86XVWindowIndex].ptr = (pointer)winPriv;
+-   }   
++   }
+    return Success;
+ }
+ 
+@@ -941,15 +970,15 @@
+ 
+      while(winPriv) {
+ 	if(winPriv->PortRec == portPriv) {
+-	    if(prevPriv) 
++	    if(prevPriv)
+ 		prevPriv->next = winPriv->next;
+-	    else 
+-		pWin->devPrivates[XF86XVWindowIndex].ptr = 
++	    else
++		pWin->devPrivates[XF86XVWindowIndex].ptr =
+ 					(pointer)winPriv->next;
+ 	    xfree(winPriv);
+ 	    break;
+ 	}
+-	prevPriv = winPriv; 
++	prevPriv = winPriv;
+ 	winPriv = winPriv->next;
+      }
+      portPriv->pDraw = NULL;
+@@ -1008,7 +1037,7 @@
+ 
+   /* filter out XClearWindow/Area */
+   if (!pWin->valdata) return;
+-   
++
+   pPrev = NULL;
+ 
+   while(WinPriv) {
+@@ -1019,10 +1048,10 @@
+      switch(pPriv->type) {
+      case XvInputMask:
+ 	xf86XVReputVideo(pPriv);
+-	break;	     
++	break;
+      case XvOutputMask:
+-	xf86XVRegetVideo(pPriv);	
+-	break;     
++	xf86XVRegetVideo(pPriv);
++	break;
+      default:  /* overlaid still/image*/
+ 	if (pPriv->AdaptorRec->ReputImage)
+ 	   xf86XVReputImage(pPriv);
+@@ -1036,8 +1065,8 @@
+ 	    }
+ 	    pPriv->pDraw = NULL;
+ 
+-	    if(!pPrev) 
+-	       pWin->devPrivates[XF86XVWindowIndex].ptr = 		
++	    if(!pPrev)
++	       pWin->devPrivates[XF86XVWindowIndex].ptr =
+ 						(pointer)(WinPriv->next);
+ 	    else
+ 	       pPrev->next = WinPriv->next;
+@@ -1054,7 +1083,7 @@
+ }
+ 
+ 
+-static void 
++static void
+ xf86XVClipNotify(WindowPtr pWin, int dx, int dy)
+ {
+   ScreenPtr pScreen = pWin->drawable.pScreen;
+@@ -1073,7 +1102,7 @@
+ 
+      pPriv->pCompositeClip = NULL;
+ 
+-     /* Stop everything except images, but stop them too if the 
++     /* Stop everything except images, but stop them too if the
+ 	window isn't visible.  But we only remove the images. */
+ 
+      if(pPriv->type || !visible) {
+@@ -1086,8 +1115,8 @@
+ 	if(!pPriv->type) {  /* overlaid still/image */
+ 	    pPriv->pDraw = NULL;
+ 
+-	    if(!pPrev) 
+-	       pWin->devPrivates[XF86XVWindowIndex].ptr = 		
++	    if(!pPrev)
++	       pWin->devPrivates[XF86XVWindowIndex].ptr =
+ 						(pointer)(WinPriv->next);
+ 	    else
+ 	       pPrev->next = WinPriv->next;
+@@ -1122,6 +1151,9 @@
+   XvAdaptorPtr pa;
+   int c;
+ 
++  /* Clear offscreen images */
++  (void)memset(&OffscreenImages[pScreen->myNum], 0, sizeof(OffscreenImages[0]));
++
+   if(!ScreenPriv) return TRUE;
+ 
+   if(ScreenPriv->videoGC) {
+@@ -1133,20 +1165,16 @@
+   pScreen->WindowExposures = ScreenPriv->WindowExposures;
+   pScreen->ClipNotify = ScreenPriv->ClipNotify;
+ 
+-  pScrn->EnterVT = ScreenPriv->EnterVT; 
+-  pScrn->LeaveVT = ScreenPriv->LeaveVT; 
++  pScrn->EnterVT = ScreenPriv->EnterVT;
++  pScrn->LeaveVT = ScreenPriv->LeaveVT;
+   pScrn->AdjustFrame = ScreenPriv->AdjustFrame;
+ 
+-  for(c = 0, pa = pxvs->pAdaptors; c < pxvs->nAdaptors; c++, pa++) { 
++  for(c = 0, pa = pxvs->pAdaptors; c < pxvs->nAdaptors; c++, pa++) {
+        xf86XVFreeAdaptor(pa);
+   }
+ 
+-  if(pxvs->pAdaptors)
+-    xfree(pxvs->pAdaptors);
+-
++  xfree(pxvs->pAdaptors);
+   xfree(ScreenPriv);
+-
+-
+   return TRUE;
+ }
+ 
+@@ -1168,7 +1196,7 @@
+ 
+ /**** ScrnInfoRec fields ****/
+ 
+-static Bool 
++static Bool
+ xf86XVEnterVT(int index, int flags)
+ {
+     ScreenPtr pScreen = screenInfo.screens[index];
+@@ -1177,12 +1205,12 @@
+ 
+     ret = (*ScreenPriv->EnterVT)(index, flags);
+ 
+-    if(ret) WalkTree(pScreen, xf86XVReputAllVideo, 0); 
+- 
++    if(ret) WalkTree(pScreen, xf86XVReputAllVideo, 0);
++
+     return ret;
+ }
+ 
+-static void 
++static void
+ xf86XVLeaveVT(int index, int flags)
+ {
+     ScreenPtr pScreen = screenInfo.screens[index];
+@@ -1229,14 +1257,14 @@
+   WindowPtr pWin;
+   XvAdaptorPtr pa;
+   int c, i;
+- 
++
+   if(ScreenPriv->AdjustFrame) {
+ 	pScrn->AdjustFrame = ScreenPriv->AdjustFrame;
+ 	(*pScrn->AdjustFrame)(index, x, y, flags);
+ 	pScrn->AdjustFrame = xf86XVAdjustFrame;
+   }
+-   
+-  for(c = pxvs->nAdaptors, pa = pxvs->pAdaptors; c > 0; c--, pa++) { 
++
++  for(c = pxvs->nAdaptors, pa = pxvs->pAdaptors; c > 0; c--, pa++) {
+       XvPortPtr pPort = pa->pPorts;
+       XvPortRecPrivatePtr pPriv;
+ 
+@@ -1254,7 +1282,7 @@
+ 
+ 	  if ((pPriv->AdaptorRec->ReputImage) &&
+ 	     ((pWin->visibility == VisibilityUnobscured) ||
+-	      (pWin->visibility == VisibilityPartiallyObscured)))   	
++	      (pWin->visibility == VisibilityPartiallyObscured)))
+ 	  {
+ 	      xf86XVReputImage(pPriv);
+ 	  } else {
+@@ -1297,8 +1325,8 @@
+    DrawablePtr pDraw,
+    XvPortPtr pPort,
+    GCPtr pGC,
+-   INT16 vid_x, INT16 vid_y, 
+-   CARD16 vid_w, CARD16 vid_h, 
++   INT16 vid_x, INT16 vid_y,
++   CARD16 vid_w, CARD16 vid_h,
+    INT16 drw_x, INT16 drw_y,
+    CARD16 drw_w, CARD16 drw_h
+ ){
+@@ -1310,7 +1338,7 @@
+       pPort->pDraw = (DrawablePtr)NULL;
+       return BadAlloc;
+   }
+-  
++
+   /* If we are changing windows, unregister our port in the old window */
+   if(portPriv->pDraw && (portPriv->pDraw != pDraw))
+      xf86XVRemovePortFromWindow((WindowPtr)(portPriv->pDraw), portPriv);
+@@ -1333,7 +1361,7 @@
+ 
+   /* To indicate to the DI layer that we were successful */
+   pPort->pDraw = pDraw;
+-  
++
+   if(!portPriv->pScrn->vtSema) return Success; /* Success ? */
+ 
+   return(xf86XVReputVideo(portPriv));
+@@ -1345,8 +1373,8 @@
+    DrawablePtr pDraw,
+    XvPortPtr pPort,
+    GCPtr pGC,
+-   INT16 vid_x, INT16 vid_y, 
+-   CARD16 vid_w, CARD16 vid_h, 
++   INT16 vid_x, INT16 vid_y,
++   CARD16 vid_w, CARD16 vid_h,
+    INT16 drw_x, INT16 drw_y,
+    CARD16 drw_w, CARD16 drw_h
+ ){
+@@ -1369,22 +1397,22 @@
+   WinBox.y1 = pDraw->y + drw_y;
+   WinBox.x2 = WinBox.x1 + drw_w;
+   WinBox.y2 = WinBox.y1 + drw_h;
+-  
++
+   REGION_INIT(pScreen, &WinRegion, &WinBox, 1);
+   REGION_INIT(pScreen, &ClipRegion, NullBox, 1);
+-  REGION_INTERSECT(pScreen, &ClipRegion, &WinRegion, pGC->pCompositeClip);   
++  REGION_INTERSECT(pScreen, &ClipRegion, &WinRegion, pGC->pCompositeClip);
+ 
+   if(portPriv->AdaptorRec->flags & VIDEO_CLIP_TO_VIEWPORT) {
+      RegionRec VPReg;
+      BoxRec VPBox;
+ 
+-     VPBox.x1 = portPriv->pScrn->frameX0;	
++     VPBox.x1 = portPriv->pScrn->frameX0;
+      VPBox.y1 = portPriv->pScrn->frameY0;
+-     VPBox.x2 = portPriv->pScrn->frameX1;	
++     VPBox.x2 = portPriv->pScrn->frameX1;
+      VPBox.y2 = portPriv->pScrn->frameY1;
+ 
+      REGION_INIT(pScreen, &VPReg, &VPBox, 1);
+-     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg); 
++     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg);
+      REGION_UNINIT(pScreen, &VPReg);
+   }
+ 
+@@ -1400,11 +1428,11 @@
+   if(portPriv->AdaptorRec->flags & VIDEO_NO_CLIPPING) {
+      BoxPtr clipBox = REGION_RECTS(&ClipRegion);
+      if(  (REGION_NUM_RECTS(&ClipRegion) != 1) ||
+-	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) || 
++	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) ||
+ 	  (clipBox->y1 != WinBox.y1) || (clipBox->y2 != WinBox.y2))
+      {
+ 	  clippedAway = TRUE;
+-          goto PUT_STILL_BAILOUT;
++	  goto PUT_STILL_BAILOUT;
+      }
+   }
+ 
+@@ -1412,7 +1440,7 @@
+      REGION_SUBTRACT(pScreen, &ClipRegion, &WinRegion, &ClipRegion);
+   }
+ 
+-  ret = (*portPriv->AdaptorRec->PutStill)(portPriv->pScrn, 
++  ret = (*portPriv->AdaptorRec->PutStill)(portPriv->pScrn,
+ 		vid_x, vid_y, WinBox.x1, WinBox.y1,
+ 		vid_w, vid_h, drw_w, drw_h,
+ 		&ClipRegion, portPriv->DevPriv.ptr);
+@@ -1433,9 +1461,9 @@
+ PUT_STILL_BAILOUT:
+ 
+   if((clippedAway || (ret != Success)) && (portPriv->isOn == XV_ON)) {
+-        (*portPriv->AdaptorRec->StopVideo)(
+-                portPriv->pScrn, portPriv->DevPriv.ptr, FALSE);
+-        portPriv->isOn = XV_PENDING;
++	(*portPriv->AdaptorRec->StopVideo)(
++		portPriv->pScrn, portPriv->DevPriv.ptr, FALSE);
++	portPriv->isOn = XV_PENDING;
+   }
+ 
+   REGION_UNINIT(pScreen, &WinRegion);
+@@ -1450,8 +1478,8 @@
+    DrawablePtr pDraw,
+    XvPortPtr pPort,
+    GCPtr pGC,
+-   INT16 vid_x, INT16 vid_y, 
+-   CARD16 vid_w, CARD16 vid_h, 
++   INT16 vid_x, INT16 vid_y,
++   CARD16 vid_w, CARD16 vid_h,
+    INT16 drw_x, INT16 drw_y,
+    CARD16 drw_w, CARD16 drw_h
+ ){
+@@ -1463,7 +1491,7 @@
+       pPort->pDraw = (DrawablePtr)NULL;
+       return BadAlloc;
+   }
+-  
++
+   /* If we are changing windows, unregister our port in the old window */
+   if(portPriv->pDraw && (portPriv->pDraw != pDraw))
+      xf86XVRemovePortFromWindow((WindowPtr)(portPriv->pDraw), portPriv);
+@@ -1486,7 +1514,7 @@
+ 
+   /* To indicate to the DI layer that we were successful */
+   pPort->pDraw = pDraw;
+-  
++
+   if(!portPriv->pScrn->vtSema) return Success; /* Success ? */
+ 
+   return(xf86XVRegetVideo(portPriv));
+@@ -1498,8 +1526,8 @@
+    DrawablePtr pDraw,
+    XvPortPtr pPort,
+    GCPtr pGC,
+-   INT16 vid_x, INT16 vid_y, 
+-   CARD16 vid_w, CARD16 vid_h, 
++   INT16 vid_x, INT16 vid_y,
++   CARD16 vid_w, CARD16 vid_h,
+    INT16 drw_x, INT16 drw_y,
+    CARD16 drw_w, CARD16 drw_h
+ ){
+@@ -1522,10 +1550,10 @@
+   WinBox.y1 = pDraw->y + drw_y;
+   WinBox.x2 = WinBox.x1 + drw_w;
+   WinBox.y2 = WinBox.y1 + drw_h;
+-  
++
+   REGION_INIT(pScreen, &WinRegion, &WinBox, 1);
+   REGION_INIT(pScreen, &ClipRegion, NullBox, 1);
+-  REGION_INTERSECT(pScreen, &ClipRegion, &WinRegion, pGC->pCompositeClip);   
++  REGION_INTERSECT(pScreen, &ClipRegion, &WinRegion, pGC->pCompositeClip);
+ 
+   if(portPriv->pDraw) {
+      xf86XVRemovePortFromWindow((WindowPtr)(portPriv->pDraw), portPriv);
+@@ -1548,9 +1576,9 @@
+ GET_STILL_BAILOUT:
+ 
+   if((clippedAway || (ret != Success)) && (portPriv->isOn == XV_ON)) {
+-        (*portPriv->AdaptorRec->StopVideo)(
+-                portPriv->pScrn, portPriv->DevPriv.ptr, FALSE);
+-        portPriv->isOn = XV_PENDING;
++	(*portPriv->AdaptorRec->StopVideo)(
++		portPriv->pScrn, portPriv->DevPriv.ptr, FALSE);
++	portPriv->isOn = XV_PENDING;
+   }
+ 
+   REGION_UNINIT(pScreen, &WinRegion);
+@@ -1559,7 +1587,7 @@
+   return ret;
+ }
+ 
+- 
++
+ 
+ static int
+ xf86XVStopVideo(
+@@ -1571,7 +1599,7 @@
+ 
+   if(pDraw->type != DRAWABLE_WINDOW)
+       return BadAlloc;
+-  
++
+   xf86XVRemovePortFromWindow((WindowPtr)pDraw, portPriv);
+ 
+   if(!portPriv->pScrn->vtSema) return Success; /* Success ? */
+@@ -1595,8 +1623,8 @@
+    INT32 value
+ ){
+   XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr)(pPort->devPriv.ptr);
+-     
+-  return((*portPriv->AdaptorRec->SetPortAttribute)(portPriv->pScrn, 
++
++  return((*portPriv->AdaptorRec->SetPortAttribute)(portPriv->pScrn,
+ 		attribute, value, portPriv->DevPriv.ptr));
+ }
+ 
+@@ -1609,8 +1637,8 @@
+    INT32 *p_value
+ ){
+   XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr)(pPort->devPriv.ptr);
+-     
+-  return((*portPriv->AdaptorRec->GetPortAttribute)(portPriv->pScrn, 
++
++  return((*portPriv->AdaptorRec->GetPortAttribute)(portPriv->pScrn,
+ 		attribute, p_value, portPriv->DevPriv.ptr));
+ }
+ 
+@@ -1626,8 +1654,8 @@
+    unsigned int *p_w, unsigned int *p_h
+ ){
+   XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr)(pPort->devPriv.ptr);
+-     
+-  (*portPriv->AdaptorRec->QueryBestSize)(portPriv->pScrn, 
++
++  (*portPriv->AdaptorRec->QueryBestSize)(portPriv->pScrn,
+ 		(Bool)motion, vid_w, vid_h, drw_w, drw_h,
+ 		p_w, p_h, portPriv->DevPriv.ptr);
+ 
+@@ -1635,14 +1663,14 @@
+ }
+ 
+ 
+-static int 
++static int
+ xf86XVPutImage(
+-   ClientPtr client, 
+-   DrawablePtr pDraw, 
+-   XvPortPtr pPort, 
++   ClientPtr client,
++   DrawablePtr pDraw,
++   XvPortPtr pPort,
+    GCPtr pGC,
+-   INT16 src_x, INT16 src_y, 
+-   CARD16 src_w, CARD16 src_h, 
++   INT16 src_x, INT16 src_y,
++   CARD16 src_w, CARD16 src_h,
+    INT16 drw_x, INT16 drw_y,
+    CARD16 drw_w, CARD16 drw_h,
+    XvImagePtr format,
+@@ -1669,22 +1697,22 @@
+   WinBox.y1 = pDraw->y + drw_y;
+   WinBox.x2 = WinBox.x1 + drw_w;
+   WinBox.y2 = WinBox.y1 + drw_h;
+-  
++
+   REGION_INIT(pScreen, &WinRegion, &WinBox, 1);
+   REGION_INIT(pScreen, &ClipRegion, NullBox, 1);
+-  REGION_INTERSECT(pScreen, &ClipRegion, &WinRegion, pGC->pCompositeClip);   
++  REGION_INTERSECT(pScreen, &ClipRegion, &WinRegion, pGC->pCompositeClip);
+ 
+   if(portPriv->AdaptorRec->flags & VIDEO_CLIP_TO_VIEWPORT) {
+      RegionRec VPReg;
+      BoxRec VPBox;
+ 
+-     VPBox.x1 = portPriv->pScrn->frameX0;	
++     VPBox.x1 = portPriv->pScrn->frameX0;
+      VPBox.y1 = portPriv->pScrn->frameY0;
+-     VPBox.x2 = portPriv->pScrn->frameX1 + 1;	
++     VPBox.x2 = portPriv->pScrn->frameX1 + 1;
+      VPBox.y2 = portPriv->pScrn->frameY1 + 1;
+ 
+      REGION_INIT(pScreen, &VPReg, &VPBox, 1);
+-     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg); 
++     REGION_INTERSECT(Screen, &ClipRegion, &ClipRegion, &VPReg);
+      REGION_UNINIT(pScreen, &VPReg);
+   }
+ 
+@@ -1700,11 +1728,11 @@
+   if(portPriv->AdaptorRec->flags & VIDEO_NO_CLIPPING) {
+      BoxPtr clipBox = REGION_RECTS(&ClipRegion);
+      if(  (REGION_NUM_RECTS(&ClipRegion) != 1) ||
+-	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) || 
++	  (clipBox->x1 != WinBox.x1) || (clipBox->x2 != WinBox.x2) ||
+ 	  (clipBox->y1 != WinBox.y1) || (clipBox->y2 != WinBox.y2))
+      {
+ 	  clippedAway = TRUE;
+-          goto PUT_IMAGE_BAILOUT;
++	  goto PUT_IMAGE_BAILOUT;
+      }
+   }
+ 
+@@ -1712,7 +1740,7 @@
+      REGION_SUBTRACT(pScreen, &ClipRegion, &WinRegion, &ClipRegion);
+   }
+ 
+-  ret = (*portPriv->AdaptorRec->PutImage)(portPriv->pScrn, 
++  ret = (*portPriv->AdaptorRec->PutImage)(portPriv->pScrn,
+ 		src_x, src_y, WinBox.x1, WinBox.y1,
+ 		src_w, src_h, drw_w, drw_h, format->id, data, width, height,
+ 		sync, &ClipRegion, portPriv->DevPriv.ptr);
+@@ -1733,9 +1761,9 @@
+ PUT_IMAGE_BAILOUT:
+ 
+   if((clippedAway || (ret != Success)) && (portPriv->isOn == XV_ON)) {
+-        (*portPriv->AdaptorRec->StopVideo)(
+-                portPriv->pScrn, portPriv->DevPriv.ptr, FALSE);
+-        portPriv->isOn = XV_PENDING;
++	(*portPriv->AdaptorRec->StopVideo)(
++		portPriv->pScrn, portPriv->DevPriv.ptr, FALSE);
++	portPriv->isOn = XV_PENDING;
+   }
+ 
+   REGION_UNINIT(pScreen, &WinRegion);
+@@ -1745,19 +1773,19 @@
+ }
+ 
+ 
+-static  int 
++static  int
+ xf86XVQueryImageAttributes(
+-   ClientPtr client, 
++   ClientPtr client,
+    XvPortPtr pPort,
+-   XvImagePtr format, 
+-   CARD16 *width, 
+-   CARD16 *height, 
++   XvImagePtr format,
++   CARD16 *width,
++   CARD16 *height,
+    int *pitches,
+    int *offsets
+ ){
+   XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr)(pPort->devPriv.ptr);
+ 
+-  return (*portPriv->AdaptorRec->QueryImageAttributes)(portPriv->pScrn, 
++  return (*portPriv->AdaptorRec->QueryImageAttributes)(portPriv->pScrn,
+ 			format->id, width, height, pitches, offsets);
+ }
+ 
+@@ -1778,7 +1806,7 @@
+        pval[0] = key;
+        pval[1] = IncludeInferiors;
+        ScreenPriv->videoGC = CreateGC(root, GCForeground | GCSubwindowMode,
+-                                      pval, &status);
++				      pval, &status);
+        if(!ScreenPriv->videoGC) return;
+        ValidateGC(root, ScreenPriv->videoGC);
+    } else if (key != ScreenPriv->videoGC->fgPixel){
+@@ -1795,20 +1823,20 @@
+       rects[i].width = pbox->x2 - pbox->x1;
+       rects[i].height = pbox->y2 - pbox->y1;
+    }
+- 
++
+    (*ScreenPriv->videoGC->ops->PolyFillRect)(
+-                             root, ScreenPriv->videoGC, nbox, rects);
++			     root, ScreenPriv->videoGC, nbox, rects);
+ 
+    DEALLOCATE_LOCAL(rects);
+ }
+ 
+-/* xf86XVClipVideoHelper -  
++/* xf86XVClipVideoHelper -
+ 
+    Takes the dst box in standard X BoxRec form (top and left
+    edges inclusive, bottom and right exclusive).  The new dst
+-   box is returned.  The source boundaries are given (x1, y1 
+-   inclusive, x2, y2 exclusive) and returned are the new source 
+-   boundaries in 16.16 fixed point. 
++   box is returned.  The source boundaries are given (x1, y1
++   inclusive, x2, y2 exclusive) and returned are the new source
++   boundaries in 16.16 fixed point.
+ */
+ 
+ #define DummyScreen screenInfo.screens[0]
+@@ -1824,112 +1852,169 @@
+     INT32 width,
+     INT32 height
+ ){
+-    INT32 vscale, hscale, delta;
++    double xsw, xdw, ysw, ydw;
++    INT32 delta;
+     BoxPtr extents = REGION_EXTENTS(DummyScreen, reg);
+     int diff;
+ 
+-    hscale = ((*xb - *xa) << 16) / (dst->x2 - dst->x1);
+-    vscale = ((*yb - *ya) << 16) / (dst->y2 - dst->y1);
++    xsw = (*xb - *xa) << 16;
++    xdw = dst->x2 - dst->x1;
++    ysw = (*yb - *ya) << 16;
++    ydw = dst->y2 - dst->y1;
+ 
+     *xa <<= 16; *xb <<= 16;
+     *ya <<= 16; *yb <<= 16;
+ 
+     diff = extents->x1 - dst->x1;
+-    if(diff > 0) {
+-        dst->x1 = extents->x1;
+-        *xa += diff * hscale;
++    if (diff > 0) {
++	dst->x1 = extents->x1;
++	*xa += (diff * xsw) / xdw;
+     }
+     diff = dst->x2 - extents->x2;
+-    if(diff > 0) {
+-        dst->x2 = extents->x2;
+-        *xb -= diff * hscale;
++    if (diff > 0) {
++	dst->x2 = extents->x2;
++	*xb -= (diff * xsw) / xdw;
+     }
+     diff = extents->y1 - dst->y1;
+-    if(diff > 0) {
+-        dst->y1 = extents->y1;
+-        *ya += diff * vscale;
++    if (diff > 0) {
++	dst->y1 = extents->y1;
++	*ya += (diff * ysw) / ydw;
+     }
+     diff = dst->y2 - extents->y2;
+-    if(diff > 0) {
+-        dst->y2 = extents->y2;
+-        *yb -= diff * vscale;
++    if (diff > 0) {
++	dst->y2 = extents->y2;
++	*yb -= (diff * ysw) / ydw;
+     }
+ 
+-    if(*xa < 0) {
+-        diff =  (- *xa + hscale - 1)/ hscale;
+-        dst->x1 += diff;
+-        *xa += diff * hscale;
++    if (*xa < 0) {
++	diff = (((-*xa) * xdw) + xsw - 1) / xsw;
++	dst->x1 += diff;
++	*xa += (diff * xsw) / xdw;
+     }
+     delta = *xb - (width << 16);
+-    if(delta > 0) {
+-        diff = (delta + hscale - 1)/ hscale;
+-        dst->x2 -= diff;
+-        *xb -= diff * hscale;
++    if (delta > 0) {
++	diff = ((delta * xdw) + xsw - 1) / xsw;
++	dst->x2 -= diff;
++	*xb -= (diff * xsw) / xdw;
+     }
+-    if(*xa >= *xb) return FALSE;
++    if (*xa >= *xb) return FALSE;
+ 
+-    if(*ya < 0) {
+-        diff =  (- *ya + vscale - 1)/ vscale;
+-        dst->y1 += diff;
+-        *ya += diff * vscale;
++    if (*ya < 0) {
++	diff = (((-*ya) * ydw) + ysw - 1) / ysw;
++	dst->y1 += diff;
++	*ya += (diff * ysw) / ydw;
+     }
+     delta = *yb - (height << 16);
+-    if(delta > 0) {
+-        diff = (delta + vscale - 1)/ vscale;
+-        dst->y2 -= diff;
+-        *yb -= diff * vscale;
++    if (delta > 0) {
++	diff = ((delta * ydw) + ysw - 1) / ysw;
++	dst->y2 -= diff;
++	*yb -= (diff * ysw) / ydw;
+     }
+-    if(*ya >= *yb) return FALSE;
++    if (*ya >= *yb) return FALSE;
+ 
+-    if((dst->x1 != extents->x1) || (dst->x2 != extents->x2) ||
+-       (dst->y1 != extents->y1) || (dst->y2 != extents->y2))
++    if ((dst->x1 > extents->x1) || (dst->x2 < extents->x2) ||
++	(dst->y1 > extents->y1) || (dst->y2 < extents->y2))
+     {
+-        RegionRec clipReg;
+-        REGION_INIT(DummyScreen, &clipReg, dst, 1);
+-        REGION_INTERSECT(DummyScreen, reg, reg, &clipReg);
+-        REGION_UNINIT(DummyScreen, &clipReg);
++	RegionRec clipReg;
++	REGION_INIT(DummyScreen, &clipReg, dst, 1);
++	REGION_INTERSECT(DummyScreen, reg, reg, &clipReg);
++	REGION_UNINIT(DummyScreen, &clipReg);
+     }
+     return TRUE;
+ }
+ 
++void
++xf86XVCopyYUV12ToPacked(
++    const void *srcy,
++    const void *srcv,
++    const void *srcu,
++    void *dst,
++    int srcPitchy,
++    int srcPitchuv,
++    int dstPitch,
++    int h,
++    int w
++){
++    CARD32 *Dst;
++    const CARD8 *Y, *U, *V;
++    int i, j;
+ 
+-/****************  Offscreen surface stuff *******************/
++    w >>= 1;
+ 
+-typedef struct {
+-   XF86OffscreenImagePtr images;
+-   int num;
+-} OffscreenImageRec;
++    for (j = 0;  j < h;  j++) {
++	Dst = dst;
++	Y = srcy;  V = srcv;  U = srcu;
++	i = w;
++	while (i >= 4) {
++#if X_BYTE_ORDER == X_LITTLE_ENDIAN
++	    Dst[0] = Y[0] | (Y[1] << 16) | (U[0] << 8) | (V[0] << 24);
++	    Dst[1] = Y[2] | (Y[3] << 16) | (U[1] << 8) | (V[1] << 24);
++	    Dst[2] = Y[4] | (Y[5] << 16) | (U[2] << 8) | (V[2] << 24);
++	    Dst[3] = Y[6] | (Y[7] << 16) | (U[3] << 8) | (V[3] << 24);
++#else
++	    /* This assumes a little-endian framebuffer */
++	    Dst[0] = (Y[0] << 24) | (Y[1] << 8) | (U[0] << 16) | Y[0];
++	    Dst[1] = (Y[2] << 24) | (Y[3] << 8) | (U[1] << 16) | Y[1];
++	    Dst[2] = (Y[4] << 24) | (Y[5] << 8) | (U[2] << 16) | Y[2];
++	    Dst[3] = (Y[6] << 24) | (Y[7] << 8) | (U[3] << 16) | Y[3];
++#endif
++	    Dst += 4;  Y += 8;  V += 4;  U += 4;
++	    i -= 4;
++	}
+ 
+-static OffscreenImageRec OffscreenImages[MAXSCREENS];
+-static Bool offscreenInited = FALSE;
++	while (i--) {
++#if X_BYTE_ORDER == X_LITTLE_ENDIAN
++	    Dst[0] = Y[0] | (Y[1] << 16) | (U[0] << 8) | (V[0] << 24);
++#else
++	    /* This assumes a little-endian framebuffer */
++	    Dst[0] = (Y[0] << 24) | (Y[1] << 8) | (U[0] << 16) | Y[0];
++#endif
++	    Dst++;  Y += 2;  V++;  U++;
++	}
+ 
+-Bool 
+-xf86XVRegisterOffscreenImages(
+-    ScreenPtr pScreen,
+-    XF86OffscreenImagePtr images,
+-    int num
+-){
+-    if(!offscreenInited) {
+-	bzero(OffscreenImages, sizeof(OffscreenImages[MAXSCREENS]));
+-	offscreenInited = TRUE;
++	dst = (CARD8 *)dst + dstPitch;
++	srcy = (const CARD8 *)srcy + srcPitchy;
++	if (j & 1) {
++	    srcu = (const CARD8 *)srcu + srcPitchuv;
++	    srcv = (const CARD8 *)srcv + srcPitchuv;
++	}
+     }
+-  
+-    OffscreenImages[pScreen->myNum].num = num;
+-    OffscreenImages[pScreen->myNum].images = images;
+-
+-    return TRUE;
+ }
+ 
+-XF86OffscreenImagePtr
+-xf86XVQueryOffscreenImages(
+-   ScreenPtr pScreen,
+-   int *num
++void
++xf86XVCopyPacked(
++    const void *src,
++    void *dst,
++    int srcPitch,
++    int dstPitch,
++    int h,
++    int w
+ ){
+-   if(!offscreenInited) {
+-	*num = 0;
+-	return NULL;
+-   }
++    const CARD32 *Src;
++    CARD32 *Dst;
++    int i;
++
++    w >>= 1;
++    while (--h >= 0) {
++	do {
++	    Dst = dst;  Src = src;
++	    i = w;
++	    while (i >= 4) {
++		Dst[0] = Src[0];
++		Dst[1] = Src[1];
++		Dst[2] = Src[2];
++		Dst[3] = Src[3];
++		Dst += 4;  Src += 4;  i -= 4;
++	    }
++	    if (!i) break;
++	    Dst[0] = Src[0];
++	    if (i == 1) break;
++	    Dst[1] = Src[1];
++	    if (i == 2) break;
++	    Dst[2] = Src[2];
++	} while (0);
+ 
+-   *num = OffscreenImages[pScreen->myNum].num;
+-   return OffscreenImages[pScreen->myNum].images;
++	src = (const CARD8 *)src + srcPitch;
++	dst = (CARD8 *)dst + dstPitch;
++    }
+ }
+Index: xc/programs/Xserver/hw/xfree86/common/xf86xv.h
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/common/xf86xv.h,v
+retrieving revision 1.23
+retrieving revision 1.24
+diff -u -r1.23 -r1.24
+--- xc/programs/Xserver/hw/xfree86/common/xf86xv.h	9 Nov 2002 01:18:33 -0000	1.23
++++ xc/programs/Xserver/hw/xfree86/common/xf86xv.h	23 Apr 2003 21:51:25 -0000	1.24
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xv.h,v 1.23 2002/11/09 01:18:33 keithp Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xv.h,v 1.24 2003/04/23 21:51:25 tsi Exp $ */
+ 
+ #ifndef _XF86XV_H_
+ #define _XF86XV_H_
+@@ -218,55 +218,27 @@
+     INT32 height
+ );
+ 
+-/*** These are DDX layer privates ***/
+-
+-extern int XF86XvScreenIndex;
+-
+-typedef struct {
+-   DestroyWindowProcPtr		DestroyWindow;
+-   ClipNotifyProcPtr		ClipNotify;
+-   WindowExposuresProcPtr	WindowExposures;
+-   void                         (*AdjustFrame)(int, int, int, int);
+-   Bool                         (*EnterVT)(int, int);
+-   void                         (*LeaveVT)(int, int);
+-   GCPtr			videoGC;
+-} XF86XVScreenRec, *XF86XVScreenPtr;
+-
+-typedef struct {
+-  int flags;  
+-  PutVideoFuncPtr PutVideo;
+-  PutStillFuncPtr PutStill;
+-  GetVideoFuncPtr GetVideo;
+-  GetStillFuncPtr GetStill;
+-  StopVideoFuncPtr StopVideo;
+-  SetPortAttributeFuncPtr SetPortAttribute;
+-  GetPortAttributeFuncPtr GetPortAttribute;
+-  QueryBestSizeFuncPtr QueryBestSize;
+-  PutImageFuncPtr PutImage;
+-  ReputImageFuncPtr ReputImage;
+-  QueryImageAttributesFuncPtr QueryImageAttributes;
+-} XvAdaptorRecPrivate, *XvAdaptorRecPrivatePtr;
++void
++xf86XVCopyYUV12ToPacked(
++    const void *srcy,
++    const void *srcv,
++    const void *srcu,
++    void *dst,
++    int srcPitchy,
++    int srcPitchuv,
++    int dstPitch,
++    int h,
++    int w
++);
+ 
+-typedef struct {
+-   ScrnInfoPtr pScrn;
+-   DrawablePtr pDraw;
+-   unsigned char type;
+-   unsigned int subWindowMode;
+-   DDXPointRec clipOrg;
+-   RegionPtr clientClip;
+-   RegionPtr pCompositeClip;
+-   Bool FreeCompositeClip;
+-   XvAdaptorRecPrivatePtr AdaptorRec;
+-   XvStatus isOn;
+-   Bool moved;
+-   int vid_x, vid_y, vid_w, vid_h;
+-   int drw_x, drw_y, drw_w, drw_h;
+-   DevUnion DevPriv;
+-} XvPortRecPrivate, *XvPortRecPrivatePtr;
+-
+-typedef struct _XF86XVWindowRec{
+-   XvPortRecPrivatePtr PortRec;
+-   struct _XF86XVWindowRec *next;
+-} XF86XVWindowRec, *XF86XVWindowPtr;
++void
++xf86XVCopyPacked(
++    const void *src,
++    void *dst,
++    int srcPitch,
++    int dstPitch,
++    int h,
++    int w
++);
+ 
+ #endif  /* _XF86XV_H_ */
+Index: xc/programs/Xserver/hw/xfree86/common/xf86xvpriv.h
+===================================================================
+RCS file: xf86xvpriv.h
+diff -N xf86xvpriv.h
+--- xc/programs/Xserver/hw/xfree86/common//dev/null	1 Jan 1970 00:00:00 -0000
++++ xc/programs/Xserver/hw/xfree86/common/xf86xvpriv.h	23 Apr 2003 21:51:25 -0000	1.1
+@@ -0,0 +1,59 @@
++/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xvpriv.h,v 1.1 2003/04/23 21:51:25 tsi Exp $ */
++
++#ifndef _XF86XVPRIV_H_
++#define _XF86XVPRIV_H_
++
++#include "xf86xv.h"
++
++/*** These are DDX layer privates ***/
++
++extern int XF86XvScreenIndex;
++
++typedef struct {
++   DestroyWindowProcPtr		DestroyWindow;
++   ClipNotifyProcPtr		ClipNotify;
++   WindowExposuresProcPtr	WindowExposures;
++   void                         (*AdjustFrame)(int, int, int, int);
++   Bool                         (*EnterVT)(int, int);
++   void                         (*LeaveVT)(int, int);
++   GCPtr			videoGC;
++} XF86XVScreenRec, *XF86XVScreenPtr;
++
++typedef struct {
++  int flags;  
++  PutVideoFuncPtr PutVideo;
++  PutStillFuncPtr PutStill;
++  GetVideoFuncPtr GetVideo;
++  GetStillFuncPtr GetStill;
++  StopVideoFuncPtr StopVideo;
++  SetPortAttributeFuncPtr SetPortAttribute;
++  GetPortAttributeFuncPtr GetPortAttribute;
++  QueryBestSizeFuncPtr QueryBestSize;
++  PutImageFuncPtr PutImage;
++  ReputImageFuncPtr ReputImage;
++  QueryImageAttributesFuncPtr QueryImageAttributes;
++} XvAdaptorRecPrivate, *XvAdaptorRecPrivatePtr;
++
++typedef struct {
++   ScrnInfoPtr pScrn;
++   DrawablePtr pDraw;
++   unsigned char type;
++   unsigned int subWindowMode;
++   DDXPointRec clipOrg;
++   RegionPtr clientClip;
++   RegionPtr pCompositeClip;
++   Bool FreeCompositeClip;
++   XvAdaptorRecPrivatePtr AdaptorRec;
++   XvStatus isOn;
++   Bool moved;
++   int vid_x, vid_y, vid_w, vid_h;
++   int drw_x, drw_y, drw_w, drw_h;
++   DevUnion DevPriv;
++} XvPortRecPrivate, *XvPortRecPrivatePtr;
++
++typedef struct _XF86XVWindowRec{
++   XvPortRecPrivatePtr PortRec;
++   struct _XF86XVWindowRec *next;
++} XF86XVWindowRec, *XF86XVWindowPtr;
++
++#endif  /* _XF86XVPRIV_H_ */
+Index: xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c,v
+retrieving revision 1.3
+retrieving revision 1.4
+diff -u -r1.3 -r1.4
+--- xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c	1 Apr 2001 14:00:08 -0000	1.3
++++ xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c	23 Apr 2003 21:51:25 -0000	1.4
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c,v 1.3 2001/04/01 14:00:08 tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86xvmc.c,v 1.4 2003/04/23 21:51:25 tsi Exp $ */
+ 
+ #include "misc.h"
+ #include "xf86.h"
+@@ -14,6 +14,7 @@
+ #include "xvmodproc.h"
+ #endif
+ 
++#include "xf86xvpriv.h"
+ #include "xf86xvmc.h"
+ 
+ #ifdef XFree86LOADER
+Index: xc/programs/Xserver/hw/xfree86/common/fourcc.h
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/common/fourcc.h,v
+retrieving revision 1.3
+retrieving revision 1.4
+diff -u -r1.3 -r1.4
+--- xc/programs/Xserver/hw/xfree86/common/fourcc.h	3 Dec 2001 22:13:24 -0000	1.3
++++ xc/programs/Xserver/hw/xfree86/common/fourcc.h	23 Apr 2003 21:51:24 -0000	1.4
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/common/fourcc.h,v 1.3 2001/12/03 22:13:24 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/common/fourcc.h,v 1.4 2003/04/23 21:51:24 tsi Exp $ */
+ 
+ /*
+    This header file contains listings of STANDARD guids for video formats.
+@@ -7,6 +7,9 @@
+    For an explanation of fourcc <-> guid mappings see RFC2361.
+ */
+ 
++#ifndef _XF86_FOURCC_H_
++#define _XF86_FOURCC_H_ 1
++
+ #define FOURCC_YUY2 0x32595559
+ #define XVIMAGE_YUY2 \
+    { \
+@@ -128,3 +131,4 @@
+         XvTopToBottom \
+    }
+ 
++#endif /* _XF86_FOURCC_H_ */



Reply to: