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

xserver-xorg-video-ivtvdev: Changes to 'upstream-trunk'



 Changelog                                             |    9 
 README                                                |    6 
 configure.ac                                          |    8 
 src/Makefile.am                                       |    3 
 src/TODO                                              |    3 
 src/ivtv_xv.c                                         | 1585 ++++++++----------
 src/ivtvcompat.h                                      |   77 
 src/ivtvdev.c                                         |  945 +++++-----
 src/ivtvdev.h                                         |   29 
 src/ivtvhw.c                                          | 1276 +++++++-------
 src/ivtvhw.h                                          |  103 -
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile |   55 
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/Makefile  |    6 
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/TODO      |   11 
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c |  994 -----------
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvdev.c |  605 ------
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvdev.h |   17 
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvhw.c  |  819 ---------
 xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvhw.h  |   86 
 19 files changed, 2115 insertions(+), 4522 deletions(-)

New commits:
commit d6a3ad7ae2af80470d52e07ab1db0032e0cc418d
Author: hverkuil <hverkuil@f93e8361-94ff-0310-af1b-c9b61a63ab7d>
Date:   Fri Aug 3 18:06:35 2007 +0000

    Remove obsolete text from the README.
    
    
    git-svn-id: http://ivtvdriver.org/svn/xdriver/trunk@3991 f93e8361-94ff-0310-af1b-c9b61a63ab7d

diff --git a/README b/README
index e8333e5..13fc4a1 100644
--- a/README
+++ b/README
@@ -1,9 +1,3 @@
-This version should now build and run with both new Xorg servers based on the 7.x 
-modular architecture.
-
-The source code is now in the src directory & the old xc directory should be ignored
-and will be removed soon.
-
 Xorg 7.x Servers
 ===========
 

commit 2ec471fbe0d82cd33e64fe81607417d215352040
Author: hverkuil <hverkuil@f93e8361-94ff-0310-af1b-c9b61a63ab7d>
Date:   Fri Aug 3 18:04:16 2007 +0000

    Delete obsolete xc directory.
    
    
    git-svn-id: http://ivtvdriver.org/svn/xdriver/trunk@3990 f93e8361-94ff-0310-af1b-c9b61a63ab7d

diff --git a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile b/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile
deleted file mode 100644
index 6701ff3..0000000
--- a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile
+++ /dev/null
@@ -1,55 +0,0 @@
-XCOMM
-XCOMM This is an Imakefile for the fbdev driver.  
-XCOMM
-XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/fbdev/Imakefile,v 1.10 2001/04/06 18:16:30 dawes Exp $
-#undef DefaultCCOptions
-#define DefaultCCOptions
-#define IHaveModules
-#include <Server.tmpl>
-
-SRCS = ivtvdev.c ivtvhw.c ivtv_xv.c
-OBJS = ivtvdev.o ivtvhw.o ivtv_xv.o
-
-#if defined(XF86DriverSDK)
-INCLUDES = -I. -I../../include
-#else
-INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86OSSRC) \
-           -I$(SERVERSRC)/mfb -I$(SERVERSRC)/mi \
-           -I$(SERVERSRC)/fb -I$(XF86SRC)/xaa \
-	   -I$(XF86SRC)/fbdevhw -I$(XF86SRC)/ramdac \
-           -I$(XF86SRC)/ddc -I$(XF86SRC)/i2c \
-           -I$(XF86SRC)/rac \
-           -I$(SERVERSRC)/Xext -I$(XF86SRC)/xf24_32bpp\
-           -I$(FONTINCSRC) -I$(SERVERSRC)/include -I$(XINCLUDESRC) \
-	   -I$(SERVERSRC)/miext/shadow -I$(EXTINCSRC) -I$(SERVERSRC)/render
-#endif
-#ifdef XF86_VERSION_CURRENT
-XCOMM We are using Xfree86
-
-#if XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(4,3,99,16,0)
-DEFREGIONNULL = -DX_USE_REGION_NULL
-#endif
-
-#else
-XCOMM We are using X.org
-DEFREGIONNULL = -DX_USE_REGION_NULL
-#endif
-DEFINES = FbdevDefines  $(DEFREGIONNULL)
-
-#if MakeHasPosixVariableSubstitutions
-SubdirLibraryRule($(OBJS))
-#endif
-
-ModuleObjectRule()
-
-ObjectModuleTarget(ivtvdev,$(OBJS))
-
-InstallObjectModule(ivtvdev,$(MODULEDIR),drivers)
-
-
-DependTarget()
-
-InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/drivers/ivtvdev)
-InstallDriverSDKNonExecFile(ivtvdev.c,$(DRIVERSDKDIR)/drivers/ivtvdev)
-
-InstallDriverSDKObjectModule(ivtvdev,$(DRIVERSDKMODULEDIR),drivers)
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Makefile b/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Makefile
deleted file mode 100644
index a4d5ecf..0000000
--- a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-all:
-	echo "Run xmkmf /PATH_TO_X_SOURCE/"
-
-
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/TODO b/xc/programs/Xserver/hw/xfree86/drivers/ivtv/TODO
deleted file mode 100644
index 6a04e20..0000000
--- a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/TODO
+++ /dev/null
@@ -1,11 +0,0 @@
- DONE write to 82c registers from driver
- DONE open /dev/video0 if 48 returns ENODEV and check id.
- DONE Try to fail sensibly in PutImage
- DONE define better structure for ioctl
- DONE Buffer allocation for stream in driver
- DONE Compiler warnings
- DONE Apply to latest ivtv source
- DONE Make ivtv_xv cope with NTSC (don't hard code 576)
- DONE vsync wakeup for dma_to_device_vsync
-make ioctl fail if bad type
-do ioctl with bad type and make sure it fails appropriatly to detect correct driver.
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c b/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c
deleted file mode 100644
index 4e7ebdc..0000000
--- a/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c
+++ /dev/null
@@ -1,994 +0,0 @@
-/* Based on s3virge xv code from XFree86 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_xv.c,v 1.7 2003/02/04 02:20:50 dawes Exp $ */
-/*
-Copyright (C) 2000 The XFree86 Project, Inc.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
-NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the XFree86 Project shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from the XFree86 Project.
-*/
-
-/*
- * s3v_xv.c
- * X Video Extension support
- *
- * S3 ViRGE driver
- *
- * 7/2000 Kevin Brosius
- *
- * Useful references:
- * X Video extension support -> xc/programs/hw/xfree86/common/xf86xv.c
- *
- */
-
-/*
- * I N C L U D E S
- */
-#include "ivtvhw.h"
-#include "ivtvdev.h"
-
-#include "xf86.h"
-#include "xf86xv.h"
-#include "Xv.h"
-#include "fourcc.h"
-#include "regionstr.h"
-typedef struct ivtv_xv_portData
-{
-    unsigned int colorKey;
-    RegionRec    clip;
-    int		 autopaintColorKey;
-}Ivtv_Xv_PortData;
-
-
-#define IVTV_MAX_PORTS 1
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-#if !defined(XvExtension) || !defined(IVTV_IOC_PREP_FRAME_YUV)
-void IvtvInitVideo(ScreenPtr pScreen)
-{
-    ErrorF("XVDriver disabled at compilation time\n");
-}
-#else
-
-static XF86VideoAdaptorPtr IVTVSetupImageVideoOverlay(ScreenPtr);
-static int IVTVSetPortAttributeOverlay(ScrnInfoPtr, Atom, INT32, pointer);
-static int IVTVGetPortAttributeOverlay(ScrnInfoPtr, Atom, INT32 *, pointer);
-
-static void IVTVStopVideo(ScrnInfoPtr, pointer, Bool);
-
-static void IVTVQueryBestSize(ScrnInfoPtr, Bool, short, short, short, short,
-			      unsigned int *, unsigned int *, pointer);
-static int IVTVPutImage(ScrnInfoPtr, short, short, short, short, short,
-			short, short, short, int, unsigned char *, short,
-			short, Bool, RegionPtr, pointer);
-static int IVTVQueryImageAttributes(ScrnInfoPtr, int, unsigned short *,
-				    unsigned short *, int *, int *);
-
-void IvtvInitVideo(ScreenPtr pScreen)
-{
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-	XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
-	XF86VideoAdaptorPtr newAdaptor = NULL;
-	int num_adaptors;
-	ivtvHWPtr fPtr = FBDEVHWPTR(pScrn);
-	if (!fPtr->yuvDevName)
-		return;
-
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Enabling Xv support for PVR350\n");
-	newAdaptor = IVTVSetupImageVideoOverlay(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);
-}
-
-/* client libraries expect an encoding */
-static XF86VideoEncodingRec DummyEncoding[1] = {
-	{			/* overlay limit */
-	 0,
-	 "XV_IMAGE",
-	 1440, 1152,
-	 {1, 1}
-	 }
-};
-
-#define NUM_FORMATS_OVERLAY 4
-#define NUM_FORMATS_TEXTURE 4
-
-static XF86VideoFormatRec Formats[NUM_FORMATS_TEXTURE] = {
-	/*{15, TrueColor}, */ {16, TrueColor}, {24, TrueColor}
-	/* ,
-	   {15, DirectColor} */ , {16, DirectColor}, {24, DirectColor}
-};
-
-#define NUM_IMAGES 1
-
-static XF86ImageRec Images[NUM_IMAGES] = {
-	XVIMAGE_YV12
-	    /* XVIMAGE_UYVY */
-};
-
-#define NUM_ATTRIBUTES_OVERLAY 2
-
-static XF86AttributeRec Attributes[NUM_ATTRIBUTES_OVERLAY] =
-{
-   {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},
-   {XvSettable | XvGettable, 0, 1, "XV_AUTOPAINT_COLORKEY"},
-
-#if 0
-   {XvSettable | XvGettable, -128, 127, "XV_BRIGHTNESS"},
-   {XvSettable | XvGettable, 0, 255, "XV_CONTRAST"}
-#endif
-};
-static Atom  xvColorKey, xvAutopaintColorKey;
-
-static int
-IVTVSetPortAttributeOverlay(ScrnInfoPtr pScrn,
-			    Atom attribute, INT32 value, pointer data)
-{
-	IVTVDevPtr devPtr = IVTVDEVPTR(pScrn);
-        Ivtv_Xv_PortData *pPriv = (Ivtv_Xv_PortData *)data;
-#ifdef JOHN
-	if (attribute == xvBrightness) {
-		if ((value < -128) || (value > 127))
-			return BadValue;
-		pPriv->brightness = value;
-		OUTREG(MGAREG_BESLUMACTL, ((pPriv->brightness & 0xff) << 16) |
-		       (pPriv->contrast & 0xff));
-	} else if (attribute == xvContrast) {
-		if ((value < 0) || (value > 255))
-			return BadValue;
-		pPriv->contrast = value;
-		OUTREG(MGAREG_BESLUMACTL, ((pPriv->brightness & 0xff) << 16) |
-		       (pPriv->contrast & 0xff));
-	} else 
-#endif
-            if (attribute == xvColorKey) {
-		pPriv->colorKey = value;
-#ifdef JOHN
-		outMGAdac(0x55, (pPriv->colorKey & pScrn->mask.red) >>
-			  pScrn->offset.red);
-		outMGAdac(0x56, (pPriv->colorKey & pScrn->mask.green) >>
-			  pScrn->offset.green);
-		outMGAdac(0x57, (pPriv->colorKey & pScrn->mask.blue) >>
-			  pScrn->offset.blue);
-#endif
-		REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
-	}else if (attribute == xvAutopaintColorKey) {
-		pPriv->autopaintColorKey = value;
-        } else
-        {
-            ErrorF("IvtvSetPortAttributeOverlay bad attribute\n");
-
-		return BadMatch;
-        }
-
-	return Success;
-}
-
-static int
-IVTVGetPortAttributeOverlay(ScrnInfoPtr pScrn,
-			    Atom attribute, INT32 * value, pointer data)
-{
-	IVTVDevPtr devPtr = IVTVDEVPTR(pScrn);
-        Ivtv_Xv_PortData *pPriv = (Ivtv_Xv_PortData *)data;
-
-#ifdef JOHN
-	if (attribute == xvBrightness) {
-		*value = pPriv->brightness;
-	} else if (attribute == xvContrast) {
-		*value = pPriv->contrast;
-	} else
-#endif
-            if (attribute == xvColorKey) {
-		*value = pPriv->colorKey;
-	} else if (attribute == xvAutopaintColorKey) {
-		*value = pPriv->autopaintColorKey;
-	} else
-        {
-            ErrorF("IvtvGetPortAttributeOverlay bad attribute\n");
-		return BadMatch;
-        }
-
-	return Success;
-}
-
-static void
-IVTVQueryBestSize(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)
-{
-    ErrorF("Query best vid_w %d vid_h %d drw_w %d drw_h %d\n",
-           vid_w, vid_h, drw_w, drw_h);
-	*p_w = drw_w;
-	*p_h = drw_h;
-}
-
-static XF86VideoAdaptorPtr IVTVAllocAdaptor(ScreenPtr pScreen)
-{
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-	XF86VideoAdaptorPtr adapt;
-	DevUnion *pPriv;
-	IVTVDevPtr devPtr = IVTVDEVPTR(pScrn);
-	int i;
-
-	if (!(adapt = xf86XVAllocateVideoAdaptorRec(pScrn)))
-		return NULL;
-
-	if (!(pPriv = xcalloc(1, sizeof(DevUnion) * IVTV_MAX_PORTS))) {
-		xfree(adapt);
-		return NULL;
-	}
-
-	adapt->pPortPrivates = pPriv;
-
-	for (i = 0; i < IVTV_MAX_PORTS; i++)
-        {
-            Ivtv_Xv_PortData *portData =  (Ivtv_Xv_PortData *)xcalloc(1,sizeof(Ivtv_Xv_PortData));
-            portData->colorKey = 101;
-            portData->autopaintColorKey = 0;
-#ifdef X_USE_REGION_NULL
-            REGION_NULL(pScreen, &portData->clip);
-#else
-            REGION_INIT(pScreen, &portData->clip, NullBox, 0); 
-#endif
-            adapt->pPortPrivates[i].ptr =portData;
-        }
-            
-
-#if 0
-	xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
-	xvContrast = MAKE_ATOM("XV_CONTRAST");
-#endif
-	xvColorKey 		= MAKE_ATOM("XV_COLORKEY");
-        xvAutopaintColorKey 	= MAKE_ATOM("XV_AUTOPAINT_COLORKEY");
-
-	return adapt;
-}
-
-static XF86VideoAdaptorPtr IVTVSetupImageVideoOverlay(ScreenPtr pScreen)
-{
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-#ifdef JOHN
-	IVTVPtr ps3v = IVTVPTR(pScrn);
-#endif
-	XF86VideoAdaptorPtr adapt;
-	adapt = IVTVAllocAdaptor(pScreen);
-
-	adapt->type = XvWindowMask | XvInputMask | XvImageMask;
-	adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
-	adapt->name = "PVR350";
-	adapt->nEncodings = 1;
-	adapt->pEncodings = &DummyEncoding[0];
-	adapt->nFormats = NUM_FORMATS_OVERLAY;
-	adapt->pFormats = Formats;
-	adapt->nPorts = 1;
-	adapt->pAttributes = Attributes /*Attributes */ ;
-	adapt->nImages = 1;
-	adapt->nAttributes = NUM_ATTRIBUTES_OVERLAY;
-	adapt->pImages = Images;
-	adapt->PutVideo = NULL;
-	adapt->PutStill = NULL;
-	adapt->GetVideo = NULL;
-	adapt->GetStill = NULL;
-	adapt->StopVideo = IVTVStopVideo;
-	/* Empty Attrib functions - required anyway */
-	adapt->SetPortAttribute = IVTVSetPortAttributeOverlay;
-	adapt->GetPortAttribute = IVTVGetPortAttributeOverlay;
-	adapt->QueryBestSize = IVTVQueryBestSize;
-	adapt->PutImage = IVTVPutImage;
-	adapt->QueryImageAttributes = IVTVQueryImageAttributes;
-
-	return adapt;
-}
-
-static Bool RegionsEqual(RegionPtr A, RegionPtr B)
-{
-	int *dataA, *dataB;
-	int num;
-
-	num = REGION_NUM_RECTS(A);
-	if (num != REGION_NUM_RECTS(B))
-		return FALSE;
-
-	if ((A->extents.x1 != B->extents.x1) ||
-	    (A->extents.x2 != B->extents.x2) ||
-	    (A->extents.y1 != B->extents.y1) ||
-	    (A->extents.y2 != B->extents.y2))
-		return FALSE;
-
-	dataA = (int *)REGION_RECTS(A);
-	dataB = (int *)REGION_RECTS(B);
-
-	while (num--) {
-		if ((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
-			return FALSE;
-		dataA += 2;
-		dataB += 2;
-	}
-
-	return TRUE;
-}
-
-#ifdef JOHN
-/* Not using this at the moment */
-/* IVTVClipVideo - copied from MGAClipVideo -  
-
-   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. 
-*/
-
-#define DummyScreen screenInfo.screens[0]
-
-static Bool
-IVTVClipVideo(BoxPtr dst,
-	      INT32 * x1,
-	      INT32 * x2,
-	      INT32 * y1, INT32 * y2, RegionPtr reg, INT32 width, INT32 height)
-{
-	INT32 vscale, hscale, delta;
-	BoxPtr extents = REGION_EXTENTS(DummyScreen, reg);
-	int diff;
-
-	hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
-	vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
-
-	*x1 <<= 16;
-	*x2 <<= 16;
-	*y1 <<= 16;
-	*y2 <<= 16;
-
-	diff = extents->x1 - dst->x1;
-	if (diff > 0) {
-		dst->x1 = extents->x1;
-		*x1 += diff * hscale;
-	}
-	diff = dst->x2 - extents->x2;
-	if (diff > 0) {
-		dst->x2 = extents->x2;
-		*x2 -= diff * hscale;
-	}
-	diff = extents->y1 - dst->y1;
-	if (diff > 0) {
-		dst->y1 = extents->y1;
-		*y1 += diff * vscale;
-	}
-	diff = dst->y2 - extents->y2;
-	if (diff > 0) {
-		dst->y2 = extents->y2;
-		*y2 -= diff * vscale;
-	}
-
-	if (*x1 < 0) {
-		diff = (-*x1 + hscale - 1) / hscale;
-		dst->x1 += diff;
-		*x1 += diff * hscale;
-	}
-	delta = *x2 - (width << 16);
-	if (delta > 0) {
-		diff = (delta + hscale - 1) / hscale;
-		dst->x2 -= diff;
-		*x2 -= diff * hscale;
-	}
-	if (*x1 >= *x2)
-		return FALSE;
-
-	if (*y1 < 0) {
-		diff = (-*y1 + vscale - 1) / vscale;
-		dst->y1 += diff;
-		*y1 += diff * vscale;
-	}
-	delta = *y2 - (height << 16);
-	if (delta > 0) {
-		diff = (delta + vscale - 1) / vscale;
-		dst->y2 -= diff;
-		*y2 -= diff * vscale;
-	}
-	if (*y1 >= *y2)
-		return FALSE;
-
-	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);
-	}
-	return TRUE;
-}
-#endif
-
-static void IVTVStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
-{
-	ivtvHWPtr fPtr = FBDEVHWPTR(pScrn);
-        Ivtv_Xv_PortData *pPriv = (Ivtv_Xv_PortData *)data;
-
-	REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
-
-	if (shutdown) {
-		if (fPtr->fd_yuv != -1) {
-                        IVTVDevPtr devPtr = IVTVDEVPTR(pScrn);
-			struct ivtvfb_ioctl_state_info state;
-			close(fPtr->fd_yuv);
-			fPtr->fd_yuv = -1;
-                        struct ivtvfb_ioctl_colorkey colorKey;
-                        colorKey.state = 0;
-                        colorKey.colorKey = pPriv->colorKey;
-                        if (ioctl(fPtr->fd,IVTVFB_IOCTL_SET_COLORKEY, &colorKey) < 0) {
-                            ErrorF
-                                ("IVTVFB_IOCTL_SET_COLORKEY failed (error: %s)\n",
-                                 strerror(errno));
-                        }
-		}
-	}
-
-}
-
-static void de_macro_y(unsigned char *src, unsigned char *dst,
-		       int w, int h, int src_x, int src_y, int height, int width)
-{
-	unsigned int x, y, i;
-	unsigned char *dst_2;
-	unsigned int h_tail, w_tail;
-	unsigned int h_size, w_size;
-	unsigned int h_lead, w_lead;
-
-	// Always round the origin, but compensate by increasing the size
-	if (src_x & 15) {
-		w += src_x & 15;
-		src_x &= ~15;
-	}
-
-	if (src_y & 15) {
-		h += src_y & 15;
-		src_y &= ~15;
-	}
-
-	// The right / bottom edge might not be a multiple of 16
-	h_tail = h & 15;
-	w_tail = w & 15;
-
-	// One block is 16 pixels high
-	h_size = 16;
-
-	// descramble Y plane
-	for (y = 0; y < h; y += 16) {
-
-		// Clip if we've reached the bottom & the size isn't a multiple of 16
-		if (y + 16 > h) h_size = h_tail;
-
-		for (x = 0; x < w; x += 16) {
-			if (x + 16 > w)
-				w_size = w_tail;
-			else
-				w_size = 16;
-
-			dst_2 = dst + (720 * y) + (720 * src_y) + (256 * (src_x>>4)) + (x * 16);
-
-			for (i = 0; i < h_size; i++) {
-				memcpy(dst_2, src + src_x + x + (y + i) * width + (src_y * width), w_size);
-				dst_2 += 16;
-			}
-		}
-	}
-}
-
-static void de_macro_uv(unsigned char *srcu, unsigned char *srcv,
-			unsigned char *dst, int w, int h, int src_x, int src_y,
-		       int height, int width)
-{
-	unsigned int x, y, i, f;
-	unsigned char *dst_2;
-	unsigned int h_tail, w_tail;
-	unsigned int h_size, w_size;
-	unsigned int h_lead, w_lead;
-
-	// The uv plane is half the size of the y plane, so 'correct' all dimensions.
-	w /= 2;
-	h /= 2;
-	src_x /= 2;
-	src_y /= 2;
-	height /= 2;
-	width /= 2;
-
-	// Always round the origin, but compensate by increasing the size
-	if (src_x & 7) {
-		w += src_x & 7;
-		src_x &= ~7;
-	}
-
-	if (src_y & 15) {
-		h += src_y & 15;
-		src_y &= ~15;
-	}
-
-	// The right / bottom edge may not be a multiple of 16
-	h_tail = h & 15;
-	w_tail = w & 7;
-
-	h_size = 16;
-
-	// descramble U/V plane
-	for (y = 0; y < h; y += 16) {
-		if ( y + 16 > h ) h_size = h_tail;
-		for (x = 0; x < w; x += 8) {
-			dst_2 = dst + (720 * y) + (720 * src_y) + (256 * (src_x>>3)) + (x * 32);
-			if (x + 8 <= w) {
-				for (i = 0; i < h_size; i++) {
-					int idx = src_x + x + ((y + i) * width) + (src_y * width);
-					dst_2[0] = srcu[idx + 0];
-					dst_2[1] = srcv[idx + 0];
-					dst_2[2] = srcu[idx + 1];
-					dst_2[3] = srcv[idx + 1];
-					dst_2[4] = srcu[idx + 2];
-					dst_2[5] = srcv[idx + 2];
-					dst_2[6] = srcu[idx + 3];
-					dst_2[7] = srcv[idx + 3];
-					dst_2[8] = srcu[idx + 4];
-					dst_2[9] = srcv[idx + 4];
-					dst_2[10] = srcu[idx + 5];
-					dst_2[11] = srcv[idx + 5];
-					dst_2[12] = srcu[idx + 6];
-					dst_2[13] = srcv[idx + 6];
-					dst_2[14] = srcu[idx + 7];
-					dst_2[15] = srcv[idx + 7];
-					dst_2 += 16;
-				}
-			}
-			else {
-				for (i = 0; i < h_size; i ++) {
-					int idx = src_x + x + ((y + i) * width) + (src_y * width);
-					for (f = 0; f < w_tail; f++) {
-						dst_2[0] = srcu[idx + f];
-						dst_2[1] = srcv[idx + f];
-						dst_2 += 2;
-					}
-/*
-					// Used for testing edge cutoff. Sets colour to Green
-					for (f = w_tail;f < 8;f ++) {
-						dst_2[0] = 0;
-						dst_2[1] = 0;
-						dst_2 += 2;
-					}
-*/
-					dst_2 += 16 - (w_tail << 1);
-				}
-			}
-		}
-	}
-}
-
-static unsigned long scale_yv12(unsigned char *src, unsigned char *dst,
-				int src_w, int src_h, int src_x, int src_y, int height, int width)
-{
-	// The PVR350 is limited to 720x576
-	// Scale the incoming image down to fit
-
-	// Scaled coords (destination)
-	unsigned int sc_x, sc_y;
-	// Unscaled coords (source)
-	unsigned int us_x, us_y;
-	// Offset to the u & v source planes
-	unsigned int u_offset, v_offset;
-	// Offset to the scaled uv plane
-	unsigned int suv_offset;
-	// Used to index into a macro block
-	unsigned int blk_index;
-	// Offset to start of line in source buffer
-	unsigned int src_offset_vert;
-	// Offset to pixel in source buffer
-	unsigned int src_offset;
-	// Used for pixel skipping & blending
-	int xweight, xweight_m, xweight_skip, xskip, xskip_count;
-	int yweight, yweight_m, yweight_skip, yskip, yskip_count;
-
-	// Work out the skip. We don't need to be exact as the hardware will scale anyway.
-	// Aliasing is done via 'weight' Calc the weight stepping as well
-	if ( src_w > 720 ) {
-		xskip = 720 / (src_w - 720);
-		xweight_skip = 720 / xskip;
-	}
-	else {
-		xskip = -1;
-		xweight_skip = 0;
-	}
-
-	// Why 510 instead of 576 ?
-	// Final output quality is better because the hardware
-	// can treat it as a progressive image instead of interlaced
-	// If src if taller than 1020, then we'll have to go for 576
-	if (src_h > 510) {
-		// Scale the image...
-		if (src_h <= 1020) {
-			yskip = 510 / (src_h - 510);
-			yweight_skip = 510 / yskip;
-		}
-		else {
-			yskip = 576 / (src_h - 576);
-			yweight_skip = 576 / yskip;
-		}
-	}
-	else {
-		yskip = -1;
-		yweight_skip = 0;
-	}
-
-//ErrorF("xskip: %d  yskip: %d  xweight: %d  ywieght: %d\n",xskip,yskip,xweight_skip,yweight_skip);
-
-	// Calc the index to the u & v planes
-	u_offset = (width * height);
-	v_offset = u_offset + ((width * height) / 4);
-
-	// Calc the index to the scaled u & v planes
-	suv_offset = (720 * 576);
-
-	// Shrink U/V - Don't alias, Just drop what we don't want
-	sc_y = 0;
-	yskip_count = 1;
-	for (us_y = src_y >> 1; us_y < (src_y+src_h) >> 1; us_y ++) {
-		sc_x = 0;
-		xskip_count = 1;
-		blk_index = 0;
-
-		for (us_x = src_x >> 1; us_x < (src_x+src_w) >> 1; us_x ++) {
-			// Copy v
-			dst[((720*16)*(sc_y >> 4)) + ((blk_index & ~15) << 4) +
-				((sc_y & 15) << 4) + (blk_index++ & 15) + suv_offset] =
-					src[((width >> 1) * us_y)+v_offset+us_x];
-			// Copy u
-			dst[((720*16)*(sc_y >> 4)) + ((blk_index & ~15) << 4) + 
-				((sc_y & 15) << 4) + (blk_index++ & 15) + suv_offset] =
-					src[((width >> 1) * us_y)+u_offset+us_x];
-
-			if (xskip_count != xskip) {
-				// Count towards the next horizontal skip
-				xskip_count ++;
-			}
-			else {
-				// Skip the next column & reset the horizontal skip counter
-				xskip_count = 1;
-				us_x ++;
-			}
-			//  Move onto the next column in the scaled uv output
-			sc_x ++;
-		}
-
-		if (yskip_count != yskip) {
-			// Count towards the next vertical skip
-			yskip_count ++;
-		}
-		else {
-			// Skip the next row & reset te vertical skip counter
-			yskip_count = 1;
-			us_y ++;
-		}
-		// Next row in scaled uv output
-		sc_y ++;
-	}
-
-	// Shrink Y - Full alias over both axis
-
-	sc_y = 0;
-	yskip_count = 1;
-	yweight_m = 0;
-	yweight = 0;
-	for (us_y = src_y; us_y < (src_y+src_h); us_y ++) {
-		sc_x = 0;
-		xskip_count = 1;
-		xweight_m = 0;
-		xweight = 0;
-		
-		// Calc offset to beginning of the source line
-		src_offset_vert = (width * us_y);
-		for (us_x = src_x; us_x < (src_x+src_w); us_x ++) {
-			// Offset to current working point
-			src_offset = src_offset_vert + us_x;
-			// Blend the rows, unless the source height is unscaled, or we're on the last line
-			if ((yskip > 0) && (us_y + 1 != height)) {
-				if (us_x < width -1)
-					dst[(((720*16)*(sc_y >> 4)) + ((sc_x & ~15) << 4) + ((sc_y & 15) << 4) + (sc_x & 15))] =
-							(((((src[src_offset] * (8-xweight)) + (src[src_offset+1] * xweight)) >> 3) * (8 - yweight)) + ((((src[src_offset+width] * (8-xweight)) + (src[src_offset+width+1] * xweight)) >> 3) * (yweight))) >> 3;
-				else
-					dst[(((720*16)*(sc_y >> 4)) + ((sc_x & ~15) << 4) + ((sc_y & 15)<<4) + (sc_x & 15))] =
-							((src[src_offset] * (8 - yweight)) + (src[src_offset+width] * yweight)) >> 3;
-			}
-			else {
-				if (us_x < width -1)
-					dst[(((720*16)*(sc_y >> 4)) + ((sc_x & ~15) << 4) + ((sc_y & 15)<<4) + (sc_x & 15))] =
-							((src[src_offset] * (8-xweight)) + ((src[src_offset+1] * xweight))) >> 3;
-				else
-					dst[(((720*16)*(sc_y >> 4)) + ((sc_x & ~15) << 4) + ((sc_y & 15)<<4) + (sc_x & 15))] =
-							src[src_offset];
-			}
-
-			if (xskip_count != xskip) {
-				// Count towards the next horizontal skip
-				xskip_count ++;
-				// Adjust the pixel weight
-				xweight_m += xweight_skip;
-				if (xweight_m > 720) xweight_m = 720;
-				xweight = xweight_m / 90;
-			}						
-			else {
-				// Skip the next column & reset the skip counter
-				xskip_count = 1;
-				us_x ++;
-				// Also reset the pixel weight
-				if (xskip < 8) {
-					xweight_m = 0;
-					xweight = (8 - xskip) >> 1;
-				}
-				else {
-					xweight = 0;
-					xweight_m = 0;
-				}
-			}
-			//  Move onto the next column in the scaled y output
-			sc_x ++;
-		}
-		
-		if (yskip_count != yskip) {
-			yskip_count ++;
-			yweight_m += yweight_skip;
-			if (yweight_m > 510) yweight_m = 510;
-			yweight = yweight_m / 63;
-		}						
-		else {
-			yskip_count = 1;
-			us_y ++;
-			if (yskip < 8) {
-				yweight_m = 0;
-				yweight = (8 - yskip) >> 1;
-			}
-			else {
-				yweight_m = 0;
-				yweight = 0;
-			}
-		}
-		// Next row in scaled y output
-		sc_y ++;
-	}
-	// Return the new image size
-	return ((sc_x << 16) | sc_y);
-}
-
-static char outbuf[622080];
-
-static int
-IVTVPutImage(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,
-	     int id, unsigned char *buf,
-	     short width, short height,
-	     Bool sync, RegionPtr clipBoxes, pointer data)
-{
-	ivtvHWPtr fPtr = FBDEVHWPTR(pScrn);
-        Ivtv_Xv_PortData *pPriv = (Ivtv_Xv_PortData *)data;
-
-	struct ivtvyuv_ioctl_dma_host_to_ivtv_args args;
-#ifdef JOHN
-        ErrorF("src_w %d src_h %d drw_w %d drw_h %d width %d height %d\n",
-               src_w, src_h, drw_w, drw_h, width, height);
-        ErrorF("src_x %d src_y %d drw_x %d drw_y %d width %d height %d\n",
-               src_x, src_y, drw_x, drw_y, width, height);
-#endif
-
-	// Negative src coords are not yet supported
-	if (src_y < 0) src_y = 0;
-	if (src_x < 0) src_x = 0;
-
-	// FIXME - Is this the correct place for this ?
-
-	// Source coordinates must be even
-	// For origin, round down
-	src_x &= ~1;
-	src_y &= ~1;
-
-	// For size, round up
-	src_w += src_w & 1;
-	src_h += src_h & 1;
-
-#ifdef JOHN
-	INT32 x1, x2, y1, y2;
-	unsigned char *dst_start;
-	int top, left, npixels, nlines;
-
-	BoxRec dstBox;
-	CARD32 tmp;
-	static int once = 1;
-	static int once2 = 1;
-
-	/* Clip */
-	x1 = src_x;



Reply to: