diff -Naur ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile --- ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile 2005-08-25 14:39:55.000000000 -0500 +++ ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/Imakefile 2006-11-04 05:21:36.000000000 -0600 @@ -11,7 +11,7 @@ OBJS = ivtvdev.o ivtvhw.o ivtv_xv.o #if defined(XF86DriverSDK) -INCLUDES = -I. -I../../include +INCLUDES = -I. -I../../include/xorg -I/usr/include/xorg #else INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86OSSRC) \ -I$(SERVERSRC)/mfb -I$(SERVERSRC)/mi \ @@ -21,7 +21,8 @@ -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 + -I$(SERVERSRC)/miext/shadow -I$(EXTINCSRC) -I$(SERVERSRC)/render \ + -I/usr/include/xorg -I/usr/include/X11/extensions #endif #ifdef XF86_VERSION_CURRENT XCOMM We are using Xfree86 diff -Naur ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvdev.c ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvdev.c --- ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvdev.c 2005-08-30 15:27:18.000000000 -0500 +++ ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvdev.c 2006-11-04 06:47:43.000000000 -0600 @@ -5,12 +5,13 @@ * Michel Dänzer, */ +#include #include "ivtvhw.h" #include "ivtvdev.h" /* all driver need this */ #include "xf86.h" #include "xf86_OSproc.h" -#include "xf86_ansic.h" +/*#include "xf86_ansic.h"*/ #include "mipointer.h" #include "mibstore.h" @@ -18,6 +19,7 @@ #include "colormapst.h" #include "xf86cmap.h" #include "shadow.h" +#include "shadowfb.h" /* for visuals */ #include "fb.h" @@ -77,14 +79,14 @@ */ static int pix24bpp = 0; -#define VERSION 4000 +#define IVTVDEV_VERSION 4000 #define IVTVDEV_NAME "IVTVDEV_TST" #define IVTVDEV_DRIVER_NAME "ivtvdev" #define IVTVDEV_MAJOR_VERSION 0 #define IVTVDEV_MINOR_VERSION 10 DriverRec IVTVDEV = { - VERSION, + IVTVDEV_VERSION, IVTVDEV_DRIVER_NAME, #if 0 "driver for linux framebuffer devices", @@ -108,6 +110,11 @@ /* -------------------------------------------------------------------- */ +const char *IVTVDevshadowFBSymbols[] = { + "ShadowFBInit", + NULL +}; + static const char *fbSymbols[] = { "fbScreenInit", "fbPictureInit", @@ -116,11 +123,8 @@ static const char *shadowSymbols[] = { "shadowAdd", - "shadowAlloc", "shadowInit", "shadowSetup", - "shadowUpdatePacked", - "shadowUpdateRotatePacked", NULL }; @@ -133,11 +137,11 @@ MODULEVENDORSTRING, MODINFOSTRING1, MODINFOSTRING2, - XF86_VERSION_CURRENT, + XORG_VERSION_CURRENT, IVTVDEV_MAJOR_VERSION, IVTVDEV_MINOR_VERSION, 6, ABI_CLASS_VIDEODRV, ABI_VIDEODRV_VERSION, - NULL, + MOD_CLASS_VIDEODRV, {0, 0, 0, 0} }; @@ -150,7 +154,8 @@ if (!setupDone) { setupDone = TRUE; xf86AddDriver(&IVTVDEV, module, 0); - LoaderRefSymLists(fbSymbols, shadowSymbols, NULL); + LoaderRefSymLists(fbSymbols, shadowSymbols, + IVTVDevshadowFBSymbols, NULL); return (pointer) 1; } else { if (errmaj) @@ -189,6 +194,29 @@ ivtvHWSendDMA(pScrn, fPtr->shadowmem, x1, x2, y1, y2); } +void +IVTVDevRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox) +{ + IVTVDevPtr fPtr = IVTVDEVPTR(pScrn); + int x1 = pScrn->virtualX; + int x2 = 0; + int y1 = pScrn->virtualY; + int y2 = 0; + while (num--) { + if (pbox->x1 < x1) + x1 = pbox->x1; + if (pbox->x2 > x2) + x2 = pbox->x2; + if (pbox->y1 < y1) + y1 = pbox->y1; + if (pbox->y2 > y2) + y2 = pbox->y2; + pbox++; + }; + + ivtvHWSendDMA(pScrn, fPtr->shadowmem, x1, x2, y1, y2); +} + static Bool IVTVDevGetRec(ScrnInfoPtr pScrn) { if (pScrn->driverPrivate != NULL) @@ -221,10 +249,8 @@ static Bool IVTVDevProbe(DriverPtr drv, int flags) { int i; - ScrnInfoPtr pScrn; GDevPtr *devSections; int numDevSections; - int bus, device, func; char *dev; Bool foundScreen = FALSE; int *usedChips; @@ -258,7 +284,6 @@ } else { for (i = 0; i < numUsed; i++) { ScrnInfoPtr pScrn = xf86AllocateScreen(drv, 0); - EntityInfoPtr pEnt; dev = xf86FindOptionValue(devSections[i]->options, "fbdev"); @@ -275,7 +300,7 @@ if (pScrn) { foundScreen = TRUE; - pScrn->driverVersion = VERSION; + pScrn->driverVersion = IVTVDEV_VERSION; pScrn->driverName = IVTVDEV_DRIVER_NAME; pScrn->name = IVTVDEV_NAME; pScrn->Probe = IVTVDevProbe; @@ -437,9 +462,16 @@ xf86LoaderReqSymLists(syms, NULL); } + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "loading shadowfb"); + if (!xf86LoadSubModule(pScrn, "shadowfb")) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Couldn't load shadowfb module:\n"); + return FALSE; + } + xf86LoaderReqSymLists(IVTVDevshadowFBSymbols, NULL); + /* Load shadow */ - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Using \"Shadow Framebuffer\"\n"); + xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Using \"Shadow Framebuffer\"\n"); if (!xf86LoadSubModule(pScrn, "shadow")) { IVTVDevFreeRec(pScrn); return FALSE; @@ -458,7 +490,6 @@ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; IVTVDevPtr fPtr = IVTVDEVPTR(pScrn); VisualPtr visual; - int init_picture = 0; int ret, flags, width, height; TRACE_ENTER("IVTVDevScreenInit"); @@ -517,7 +548,6 @@ ret = fbScreenInit(pScreen, fPtr->shadowmem, width, height, pScrn->xDpi, pScrn->yDpi, pScrn->displayWidth, pScrn->bitsPerPixel); - init_picture = 1; if (!ret) return FALSE; @@ -538,13 +568,11 @@ } /* must be after RGB ordering fixed */ - if (init_picture && !fbPictureInit(pScreen, NULL, 0)) + if (!fbPictureInit(pScreen, NULL, 0)) xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "RENDER extension initialisation failed.\n"); - if (!shadowSetup(pScreen) || !shadowAdd(pScreen, NULL, - FBshadowUpdatePacked, - NULL, 0, NULL)) { + if (!shadowInit(pScreen, FBshadowUpdatePacked, NULL)) { xf86DrvMsg(scrnIndex, X_ERROR, "Shadow framebuffer initialization failed.\n"); return FALSE; @@ -564,6 +592,8 @@ /* software cursor */ miDCInitialize(pScreen, xf86GetPointerScreenFuncs()); + ShadowFBInit(pScreen, IVTVDevRefreshArea); + /* XXX It would be simpler to use miCreateDefColormap() in all cases. */ if (!miCreateDefColormap(pScreen)) return FALSE; diff -Naur ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvhw.c ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvhw.c --- ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvhw.c 2005-06-12 16:03:21.000000000 -0500 +++ ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtvhw.c 2006-11-04 06:47:25.000000000 -0600 @@ -5,7 +5,6 @@ /* all driver need this */ #include "xf86.h" #include "xf86_OSproc.h" -#include "xf86_ansic.h" /* pci stuff */ #include "xf86PciInfo.h" @@ -15,10 +14,19 @@ #include "fbpriv.h" +#include +#include +#include +#include +#include +#include + +#include + #include "asm/page.h" /* #define for PAGE_* */ #include "globals.h" #define DPMS_SERVER -#include "extensions/dpms.h" +#include "X11/extensions/dpms.h" #define DEBUG 0 @@ -43,7 +51,7 @@ 0, 0, 2, ABI_CLASS_VIDEODRV, ABI_VIDEODRV_VERSION, - MOD_CLASS_NONE, + MOD_CLASS_VIDEODRV, {0, 0, 0, 0} }; @@ -667,8 +675,12 @@ void ivtvHWAdjustFrame(int scrnIndex, int x, int y, int flags) { +#if defined(JOHN) || DEBUG ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; +#endif +#ifdef JOHN ivtvHWPtr fPtr = FBDEVHWPTR(pScrn); +#endif TRACE_ENTER("AdjustFrame"); #ifdef JOHN @@ -701,7 +713,9 @@ void ivtvHWDPMSSet(ScrnInfoPtr pScrn, int mode, int flags) { +#ifdef JOHN ivtvHWPtr fPtr = FBDEVHWPTR(pScrn); +#endif unsigned long fbmode; if (!pScrn->vtSema) @@ -733,16 +747,16 @@ Bool ivtvHWSaveScreen(ScreenPtr pScreen, int mode) { +#ifdef JOHN ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; ivtvHWPtr fPtr = FBDEVHWPTR(pScrn); - unsigned long unblank; + int unblank; if (!pScrn->vtSema) return TRUE; unblank = xf86IsUnblank(mode); -#ifdef JOHN if (-1 == ioctl(fPtr->fd, FBIOBLANK, (void *)(1 - unblank))) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "FBIOBLANK: %s\n", strerror(errno)); diff -Naur ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c --- ivtv_xdriver_0.10.6.old/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c 2005-08-30 15:24:04.000000000 -0500 +++ ivtv_xdriver_0.10.6/ivtvdrv/xc/programs/Xserver/hw/xfree86/drivers/ivtv/ivtv_xv.c 2006-11-04 06:47:30.000000000 -0600 @@ -41,14 +41,22 @@ /* * I N C L U D E S */ +#include +#include +#include +#include + +#include + #include "ivtvhw.h" #include "ivtvdev.h" #include "xf86.h" #include "xf86xv.h" -#include "Xv.h" +#include "X11/extensions/Xv.h" #include "fourcc.h" #include "regionstr.h" +#include typedef struct ivtv_xv_portData { unsigned int colorKey; @@ -59,6 +67,8 @@ #define IVTV_MAX_PORTS 1 #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) +#define IVTV_YUV_TYPE_HME12 0 +#define O_RDWR 0x0002 #if !defined(XvExtension) || !defined(IVTV_IOC_PREP_FRAME_YUV) void IvtvInitVideo(ScreenPtr pScreen) @@ -77,7 +87,7 @@ 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); + short, Bool, RegionPtr, pointer, DrawablePtr); static int IVTVQueryImageAttributes(ScrnInfoPtr, int, unsigned short *, unsigned short *, int *, int *); @@ -88,6 +98,11 @@ XF86VideoAdaptorPtr newAdaptor = NULL; int num_adaptors; ivtvHWPtr fPtr = FBDEVHWPTR(pScrn); + + ErrorF("Here I am with fPtr %p\n", fPtr); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "and YUV dev name %p\n", fPtr->yuvDevName); + if (!fPtr->yuvDevName) return; @@ -166,7 +181,6 @@ 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) { @@ -210,7 +224,6 @@ IVTVGetPortAttributeOverlay(ScrnInfoPtr pScrn, Atom attribute, INT32 * value, pointer data) { - IVTVDevPtr devPtr = IVTVDEVPTR(pScrn); Ivtv_Xv_PortData *pPriv = (Ivtv_Xv_PortData *)data; #ifdef JOHN @@ -251,7 +264,6 @@ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; XF86VideoAdaptorPtr adapt; DevUnion *pPriv; - IVTVDevPtr devPtr = IVTVDEVPTR(pScrn); int i; if (!(adapt = xf86XVAllocateVideoAdaptorRec(pScrn))) @@ -290,9 +302,8 @@ static XF86VideoAdaptorPtr IVTVSetupImageVideoOverlay(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; #ifdef JOHN - IVTVPtr ps3v = IVTVPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; #endif XF86VideoAdaptorPtr adapt; adapt = IVTVAllocAdaptor(pScreen); @@ -452,8 +463,6 @@ 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; @@ -476,7 +485,6 @@ 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) { @@ -525,8 +533,7 @@ 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; + unsigned int h_size; // The uv plane is half the size of the y plane, so 'correct' all dimensions. w /= 2; @@ -603,7 +610,7 @@ } } -static char outbuf[622080]; +static unsigned char outbuf[622080]; static int IVTVPutImage(ScrnInfoPtr pScrn, @@ -613,7 +620,7 @@ short drw_w, short drw_h, int id, unsigned char *buf, short width, short height, - Bool sync, RegionPtr clipBoxes, pointer data) + Bool sync, RegionPtr clipBoxes, pointer data, DrawablePtr pDraw) { ivtvHWPtr fPtr = FBDEVHWPTR(pScrn); Ivtv_Xv_PortData *pPriv = (Ivtv_Xv_PortData *)data; @@ -641,6 +648,8 @@ INT32 x1, x2, y1, y2; unsigned char *dst_start; int top, left, npixels, nlines; + int pitch, dstPitch; + int new_h; BoxRec dstBox; CARD32 tmp; @@ -696,7 +705,6 @@ args.src_h = src_h; args.dst_h = drw_h; args.srcBuf_height = height; - args.yuv_type = IVTV_YUV_TYPE_HME12; } break; default: