diff options
author | thomash <thomash> | 2006-03-08 14:06:22 +0000 |
---|---|---|
committer | thomash <thomash> | 2006-03-08 14:06:22 +0000 |
commit | a1defd236db920497555ecec3ef5e848242bb174 (patch) | |
tree | a9d4126c9170fb8fdc0088fa1aca43a0122cb417 | |
parent | 2bac8f3b563b6cd739770d7d7f3a3ea350dad5eb (diff) |
Indent above files after syncing them with openChrome.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | src/via_swov.c | 2135 | ||||
-rw-r--r-- | src/via_swov.h | 49 | ||||
-rw-r--r-- | src/via_video.c | 1403 | ||||
-rw-r--r-- | src/via_video.h | 129 | ||||
-rw-r--r-- | src/via_xvmc.c | 1212 | ||||
-rw-r--r-- | src/via_xvmc.h | 27 | ||||
-rw-r--r-- | src/via_xvpriv.h | 49 |
8 files changed, 2543 insertions, 2472 deletions
@@ -1,5 +1,16 @@ 2006-03-08 Thomas Hellstrom <thomas-at-tungstengraphics.com> + * src/via_swov.c: + * src/via_swov.h: + * src/via_video.c: + * src/via_video.h: + * src/via_xvmc.c: + * src/via_xvmc.h: + * src/via_xvpriv.h: + Indent above files after syncing them with openChrome. + +2006-03-08 Thomas Hellstrom <thomas-at-tungstengraphics.com> + * man/via.man: * src/via.h: * src/via_accel.c: (viaExaDownloadFromScreen), diff --git a/src/via_swov.c b/src/via_swov.c index abcad1c..8a1f099 100644 --- a/src/via_swov.c +++ b/src/via_swov.c @@ -63,11 +63,11 @@ * * */ -#define VIDREG_BUFFER_SIZE 100 /* Number of entries in the VidRegBuffer. */ +#define VIDREG_BUFFER_SIZE 100 /* Number of entries in the VidRegBuffer. */ #define IN_VIDEO_DISPLAY (*((unsigned long volatile *)(pVia->VidMapBase+V_FLAGS))&VBI_STATUS) #define VIA_FIRETIMEOUT 40000 -static void +static void viaWaitVideoCommandFire(VIAPtr pVia) { /* @@ -76,67 +76,69 @@ viaWaitVideoCommandFire(VIAPtr pVia) */ unsigned count = 25000; - CARD32 volatile *pdwState = (CARD32 volatile *) (pVia->VidMapBase+V_COMPOSE_MODE); + CARD32 volatile *pdwState = + (CARD32 volatile *)(pVia->VidMapBase + V_COMPOSE_MODE); - while (--count && ((*pdwState & V1_COMMAND_FIRE)||(*pdwState & V3_COMMAND_FIRE))); + while (--count && ((*pdwState & V1_COMMAND_FIRE) + || (*pdwState & V3_COMMAND_FIRE))) ; if (!count) { ErrorF("viaWaitVideoCommandFire: Timeout.\n"); } } -static void +static void viaWaitHQVFlip(VIAPtr pVia) { - unsigned long proReg=0; + unsigned long proReg = 0; CARD32 volatile *pdwState; - + if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; - - pdwState = (CARD32 volatile *) (pVia->VidMapBase+(HQV_CONTROL + proReg)); - + !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; + + pdwState = (CARD32 volatile *)(pVia->VidMapBase + (HQV_CONTROL + proReg)); + if (pVia->ChipId == PCI_CHIP_VT3259) { while (*pdwState & (HQV_SUBPIC_FLIP | HQV_SW_FLIP)) ; } else { - while (!(*pdwState & HQV_FLIP_STATUS) ); + while (!(*pdwState & HQV_FLIP_STATUS)) ; } } - static void viaWaitHQVFlipClear(VIAPtr pVia, unsigned long dwData) { - CARD32 volatile *pdwState = (CARD32 volatile *) (pVia->VidMapBase+HQV_CONTROL); - *pdwState =dwData; + CARD32 volatile *pdwState = + (CARD32 volatile *)(pVia->VidMapBase + HQV_CONTROL); + *pdwState = dwData; - while ((*pdwState & HQV_FLIP_STATUS) ) - { - VIDOutD(HQV_CONTROL, *pdwState|HQV_FLIP_STATUS); + while ((*pdwState & HQV_FLIP_STATUS)) { + VIDOutD(HQV_CONTROL, *pdwState | HQV_FLIP_STATUS); } } static void viaWaitVBI(VIAPtr pVia) { - while (IN_VIDEO_DISPLAY); + while (IN_VIDEO_DISPLAY) ; } static void viaWaitHQVDone(VIAPtr pVia) { CARD32 volatile *pdwState; - unsigned long proReg=0; + unsigned long proReg = 0; + if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; + !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; - pdwState = (CARD32 volatile *) (pVia->VidMapBase+(HQV_CONTROL + proReg)); - if (pVia->swov.MPEG_ON) - { - while ((*pdwState & HQV_SW_FLIP) ); + pdwState = (CARD32 volatile *)(pVia->VidMapBase + (HQV_CONTROL + proReg)); + if (pVia->swov.MPEG_ON) { + while ((*pdwState & HQV_SW_FLIP)) ; } } + /* * Send all data in VidRegBuffer to the hardware. */ @@ -144,14 +146,14 @@ static void FlushVidRegBuffer(VIAPtr pVia) { unsigned int i; - + viaWaitVideoCommandFire(pVia); - for (i = 0; i < pVia->VidRegCursor; i += 2) - { - VIDOutD(pVia->VidRegBuffer[i], pVia->VidRegBuffer[i+1]); - DBG_DD(ErrorF("FlushVideoRegs: [%i] %08lx %08lx\n", - i>>1, pVia->VidRegBuffer[i]+0x200, pVia->VidRegBuffer[i+1])); + for (i = 0; i < pVia->VidRegCursor; i += 2) { + VIDOutD(pVia->VidRegBuffer[i], pVia->VidRegBuffer[i + 1]); + DBG_DD(ErrorF("FlushVideoRegs: [%i] %08lx %08lx\n", + i >> 1, pVia->VidRegBuffer[i] + 0x200, + pVia->VidRegBuffer[i + 1])); } /* BUG: (?) VIA never resets the cursor. @@ -168,7 +170,8 @@ ResetVidRegBuffer(VIAPtr pVia) { /* BUG: (Memory leak) This allocation may need have a corresponding free somewhere... /A */ if (!pVia->VidRegBuffer) - pVia->VidRegBuffer = xnfcalloc(VIDREG_BUFFER_SIZE, sizeof(CARD32) * 2); + pVia->VidRegBuffer = + xnfcalloc(VIDREG_BUFFER_SIZE, sizeof(CARD32) * 2); pVia->VidRegCursor = 0; } @@ -182,11 +185,10 @@ SaveVideoRegister(VIAPtr pVia, CARD32 index, CARD32 data) pVia->VidRegBuffer[pVia->VidRegCursor++] = data; if (pVia->VidRegCursor > VIDREG_BUFFER_SIZE) { - DBG_DD(ErrorF("SaveVideoRegister: Out of video register space")); + DBG_DD(ErrorF("SaveVideoRegister: Out of video register space")); } } - /* * HW Difference Flag * Moved here from via_hwdiff.c @@ -203,69 +205,71 @@ SaveVideoRegister(VIAPtr pVia, CARD32 index, CARD32 data) * The functions depending on this struct are untouched. * */ -void +void VIAVidHWDiffInit(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); VIAHWDiff *HWDiff = &pVia->HWDiff; - switch(pVia->Chipset) - { + switch (pVia->Chipset) { case VIA_CLE266: - if (CLE266_REV_IS_AX(pVia->ChipRev)) { - HWDiff->dwThreeHQVBuffer = VID_HWDIFF_FALSE; - HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_FALSE; - HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; - HWDiff->dwHQVInitPatch = VID_HWDIFF_TRUE; - HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE; - } else { - HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; - HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; - HWDiff->dwSupportTwoColorKey = VID_HWDIFF_TRUE; - HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; - HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; - } - break; + if (CLE266_REV_IS_AX(pVia->ChipRev)) { + HWDiff->dwThreeHQVBuffer = VID_HWDIFF_FALSE; + HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_FALSE; + HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; + HWDiff->dwHQVInitPatch = VID_HWDIFF_TRUE; + HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE; + } else { + HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; + HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; + HWDiff->dwSupportTwoColorKey = VID_HWDIFF_TRUE; + HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; + HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; + } + break; case VIA_KM400: - HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; - HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; - HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; - HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; - HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; - break; + HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; + HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; + HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; + HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; + HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; + break; case VIA_K8M800: - HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; - HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; - HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; - HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; - HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; - break; + HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; + HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; + HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; + HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; + HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; + break; case VIA_PM800: - HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; - HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; - HWDiff->dwSupportTwoColorKey = VID_HWDIFF_TRUE; - HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; - HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE; - break; + HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; + HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; + HWDiff->dwSupportTwoColorKey = VID_HWDIFF_TRUE; + HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; + HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE; + break; case VIA_VM800: - HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; - HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; - HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; - HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; - HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; - break; + HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE; + HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE; + HWDiff->dwSupportTwoColorKey = VID_HWDIFF_FALSE; + HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE; + HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE; + break; default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "VIAVidHWDiffInit: Unhandled ChipSet.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "VIAVidHWDiffInit: Unhandled ChipSet.\n"); } -} +} + /* * Old via_overlay code. * */ -typedef struct _YCBCRREC { - CARD32 dwY ; - CARD32 dwCB; - CARD32 dwCR; +typedef struct _YCBCRREC +{ + CARD32 dwY; + CARD32 dwCB; + CARD32 dwCR; } YCBCRREC; /* Verify that using V1 bit definitions on V3 @@ -292,68 +296,65 @@ typedef struct _YCBCRREC { #endif static BOOL -viaOverlayGetV1V3Format(VIAPtr pVia, int vport, /* 1 or 3, as in V1 or V3 */ - unsigned long videoFlag, - unsigned long * pVidCtl, unsigned long * pHQVCtl) +viaOverlayGetV1V3Format(VIAPtr pVia, int vport, /* 1 or 3, as in V1 or V3 */ + unsigned long videoFlag, unsigned long *pVidCtl, unsigned long *pHQVCtl) { - if (videoFlag & VIDEO_HQV_INUSE) - { - switch (pVia->swov.SrcFourCC) - { - case FOURCC_YV12: - case FOURCC_XVMC: - *pHQVCtl |= HQV_YUV420; - break; - case FOURCC_YUY2: - *pHQVCtl |= HQV_YUV422; - break; - case FOURCC_RV32: - *pVidCtl |= V1_RGB32; - *pHQVCtl |= HQV_RGB32; - break; - case FOURCC_RV15: - *pVidCtl |= V1_RGB15; - *pHQVCtl |= HQV_RGB15; - break; - case FOURCC_RV16: - *pVidCtl |= V1_RGB16; - *pHQVCtl |= HQV_RGB16; - break; - default: - DBG_DD(ErrorF("viaOverlayGetV1V3Format: Invalid FOURCC format (0x%lx).\n", pVia->swov.SrcFourCC)); - return FALSE; - } - *pVidCtl |= V1_SWAP_HW_HQV; - *pHQVCtl |= HQV_SRC_SW|HQV_ENABLE|HQV_SW_FLIP; - } - else - { - switch (pVia->swov.SrcFourCC) - { - case FOURCC_YV12: - case FOURCC_XVMC: - if (vport == 1) - { - *pVidCtl |= V1_YCbCr420; - } - else - { - DBG_DD(ErrorF("viaOverlayGetV1V3Format: V3 does not support planar YUV.\n")); - return FALSE; - } - break; - case FOURCC_YUY2: - *pVidCtl |= V1_YUV422; - break; - case FOURCC_RV32: - case FOURCC_RV15: - case FOURCC_RV16: - ErrorF("viaOverlayGetV1V3Format: Can't display RGB video in this configuration.\n"); - return FALSE; - default: - DBG_DD(ErrorF("viaOverlayGetV1V3Format: Invalid FOURCC format (0x%lx).\n", pVia->swov.SrcFourCC)); - return FALSE; - } + if (videoFlag & VIDEO_HQV_INUSE) { + switch (pVia->swov.SrcFourCC) { + case FOURCC_YV12: + case FOURCC_XVMC: + *pHQVCtl |= HQV_YUV420; + break; + case FOURCC_YUY2: + *pHQVCtl |= HQV_YUV422; + break; + case FOURCC_RV32: + *pVidCtl |= V1_RGB32; + *pHQVCtl |= HQV_RGB32; + break; + case FOURCC_RV15: + *pVidCtl |= V1_RGB15; + *pHQVCtl |= HQV_RGB15; + break; + case FOURCC_RV16: + *pVidCtl |= V1_RGB16; + *pHQVCtl |= HQV_RGB16; + break; + default: + DBG_DD(ErrorF + ("viaOverlayGetV1V3Format: Invalid FOURCC format (0x%lx).\n", + pVia->swov.SrcFourCC)); + return FALSE; + } + *pVidCtl |= V1_SWAP_HW_HQV; + *pHQVCtl |= HQV_SRC_SW | HQV_ENABLE | HQV_SW_FLIP; + } else { + switch (pVia->swov.SrcFourCC) { + case FOURCC_YV12: + case FOURCC_XVMC: + if (vport == 1) { + *pVidCtl |= V1_YCbCr420; + } else { + DBG_DD(ErrorF + ("viaOverlayGetV1V3Format: V3 does not support planar YUV.\n")); + return FALSE; + } + break; + case FOURCC_YUY2: + *pVidCtl |= V1_YUV422; + break; + case FOURCC_RV32: + case FOURCC_RV15: + case FOURCC_RV16: + ErrorF + ("viaOverlayGetV1V3Format: Can't display RGB video in this configuration.\n"); + return FALSE; + default: + DBG_DD(ErrorF + ("viaOverlayGetV1V3Format: Invalid FOURCC format (0x%lx).\n", + pVia->swov.SrcFourCC)); + return FALSE; + } } *pVidCtl |= V1_COLORSPACE_SIGN; return TRUE; @@ -361,297 +362,315 @@ viaOverlayGetV1V3Format(VIAPtr pVia, int vport, /* 1 or 3, as in V1 or V3 */ static unsigned long viaOverlayGetSrcStartAddress(VIAPtr pVia, unsigned long videoFlag, - LPDDUPDATEOVERLAY pUpdate, unsigned long srcPitch, - unsigned long * pHQVoffset) + LPDDUPDATEOVERLAY pUpdate, unsigned long srcPitch, + unsigned long *pHQVoffset) { - unsigned long srcWidth = (unsigned long)(pUpdate->SrcRight - pUpdate->SrcLeft); - unsigned long dstWidth = (unsigned long)(pUpdate->DstRight - pUpdate->DstLeft); - unsigned long srcHeight = (unsigned long)(pUpdate->SrcBottom - pUpdate->SrcTop); - unsigned long dstHeight = (unsigned long)(pUpdate->DstBottom - pUpdate->DstTop); + unsigned long srcWidth = + (unsigned long)(pUpdate->SrcRight - pUpdate->SrcLeft); + unsigned long dstWidth = + (unsigned long)(pUpdate->DstRight - pUpdate->DstLeft); + unsigned long srcHeight = + (unsigned long)(pUpdate->SrcBottom - pUpdate->SrcTop); + unsigned long dstHeight = + (unsigned long)(pUpdate->DstBottom - pUpdate->DstTop); unsigned long offset = 0; unsigned long srcTopOffset = 0; unsigned long srcLeftOffset = 0; - int n=1; + int n = 1; + if ((pUpdate->SrcLeft != 0) || (pUpdate->SrcTop != 0)) { switch (pVia->swov.SrcFourCC) { - case FOURCC_RV32: - n=2; + case FOURCC_RV32: + n = 2; case FOURCC_YUY2: case FOURCC_UYVY: case FOURCC_RV15: case FOURCC_RV16: - + if (videoFlag & VIDEO_HQV_INUSE) { - offset = (((pUpdate->SrcTop & ~3) * srcPitch) + ((pUpdate->SrcLeft << n) & ~31)); - + offset = + (((pUpdate->SrcTop & ~3) * srcPitch) + + ((pUpdate->SrcLeft << n) & ~31)); + if (srcHeight > dstHeight) - srcTopOffset = ((pUpdate->SrcTop & ~3) * dstHeight / srcHeight) * srcPitch; + srcTopOffset = + ((pUpdate->SrcTop & ~3) * dstHeight / srcHeight) * + srcPitch; else srcTopOffset = (pUpdate->SrcTop & ~3) * srcPitch; - + if (srcWidth > dstWidth) - srcLeftOffset = ((pUpdate->SrcLeft << n) & ~31) * dstWidth / srcWidth; + srcLeftOffset = + ((pUpdate->SrcLeft << n) & ~31) * dstWidth / srcWidth; else srcLeftOffset = (pUpdate->SrcLeft << n) & ~31; *pHQVoffset = srcTopOffset + srcLeftOffset; } else - offset = ((pUpdate->SrcTop * srcPitch) + ((pUpdate->SrcLeft << n) & ~15)); + offset = + ((pUpdate->SrcTop * srcPitch) + + ((pUpdate->SrcLeft << n) & ~15)); break; - + case FOURCC_YV12: case FOURCC_XVMC: - + if (videoFlag & VIDEO_HQV_INUSE) - offset = (((pUpdate->SrcTop & ~3) * (srcPitch << 1)) + ((pUpdate->SrcLeft << 1) & ~31)); - else { - offset = ((((pUpdate->SrcTop & ~3) * srcPitch) + pUpdate->SrcLeft) & ~31); - if (pUpdate->SrcTop > 0) - pVia->swov.overlayRecordV1.dwUVoffset = (((((pUpdate->SrcTop & ~3)>>1) * srcPitch) + pUpdate->SrcLeft) & ~31) >> 1; - else - pVia->swov.overlayRecordV1.dwUVoffset = offset >> 1; + offset = + (((pUpdate->SrcTop & ~3) * (srcPitch << 1)) + + ((pUpdate->SrcLeft << 1) & ~31)); + else { + offset = + ((((pUpdate->SrcTop & ~3) * srcPitch) + + pUpdate->SrcLeft) & ~31); + if (pUpdate->SrcTop > 0) + pVia->swov.overlayRecordV1.dwUVoffset = + (((((pUpdate->SrcTop & ~3) >> 1) * srcPitch) + + pUpdate->SrcLeft) & ~31) >> 1; + else + pVia->swov.overlayRecordV1.dwUVoffset = offset >> 1; } break; - + default: - DBG_DD(ErrorF("viaGetSrcStartAddress: Invalid FOURCC format (0x%lx).\n", - pVia->swov.SrcFourCC)); + DBG_DD(ErrorF + ("viaGetSrcStartAddress: Invalid FOURCC format (0x%lx).\n", + pVia->swov.SrcFourCC)); break; } - } - else { - pVia->swov.overlayRecordV1.dwUVoffset = offset = 0; + } else { + pVia->swov.overlayRecordV1.dwUVoffset = offset = 0; } return offset; } static YCBCRREC -viaOverlayGetYCbCrStartAddress(unsigned long videoFlag, unsigned long startAddr, - unsigned long offset, unsigned long UVoffset, - unsigned long srcPitch, unsigned long srcHeight) +viaOverlayGetYCbCrStartAddress(unsigned long videoFlag, + unsigned long startAddr, unsigned long offset, unsigned long UVoffset, + unsigned long srcPitch, unsigned long srcHeight) { YCBCRREC YCbCr; if (videoFlag & VIDEO_HQV_INUSE) { - YCbCr.dwY = startAddr; - YCbCr.dwCB = startAddr + srcPitch * srcHeight; - YCbCr.dwCR = startAddr + srcPitch * srcHeight - + srcPitch * (srcHeight >> 2); - } - else { - YCbCr.dwY = startAddr + offset; - YCbCr.dwCB = startAddr + srcPitch * srcHeight + UVoffset; - YCbCr.dwCR = startAddr + srcPitch * srcHeight + UVoffset - + srcPitch * (srcHeight >> 2); + YCbCr.dwY = startAddr; + YCbCr.dwCB = startAddr + srcPitch * srcHeight; + YCbCr.dwCR = startAddr + srcPitch * srcHeight + + srcPitch * (srcHeight >> 2); + } else { + YCbCr.dwY = startAddr + offset; + YCbCr.dwCB = startAddr + srcPitch * srcHeight + UVoffset; + YCbCr.dwCR = startAddr + srcPitch * srcHeight + UVoffset + + srcPitch * (srcHeight >> 2); } return YCbCr; } static unsigned long viaOverlayHQVCalcZoomWidth(VIAPtr pVia, unsigned long videoFlag, - unsigned long srcWidth, unsigned long dstWidth, - unsigned long * pZoomCtl, unsigned long * pMiniCtl, - unsigned long * pHQVfilterCtl, unsigned long * pHQVminiCtl, - unsigned long * pHQVzoomflag) + unsigned long srcWidth, unsigned long dstWidth, + unsigned long *pZoomCtl, unsigned long *pMiniCtl, + unsigned long *pHQVfilterCtl, unsigned long *pHQVminiCtl, + unsigned long *pHQVzoomflag) { unsigned long tmp, sw1, d, falign, mdiv; Bool zoom_ok = TRUE; CARD32 HQVfilter[5] = { - HQV_H_FILTER_DEFAULT, HQV_H_TAP4_121, HQV_H_TAP4_121, - HQV_H_TAP8_12221, HQV_H_TAP8_12221 + HQV_H_FILTER_DEFAULT, HQV_H_TAP4_121, HQV_H_TAP4_121, + HQV_H_TAP8_12221, HQV_H_TAP8_12221 }; /* CARD HQVmini[5] = { 0, 0xc00, 0xa00, 0x900, 0x8800 }; */ falign = 0; mdiv = 1; - if (srcWidth == dstWidth) { /* No zoom */ - *pHQVfilterCtl |= HQV_H_FILTER_DEFAULT; - } - else if (srcWidth < dstWidth) { /* Zoom in */ - - tmp = srcWidth * 0x800 / dstWidth; - *pZoomCtl = ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE; - *pMiniCtl |= V1_X_INTERPOLY; - zoom_ok = !(tmp > 0x7ff); - - *pHQVzoomflag = 1; - *pHQVfilterCtl |= HQV_H_FILTER_DEFAULT; - - } else { /* srcWidth > dstWidth - Zoom out */ - - /*HQV rounding patch - //tmp = dstWidth*0x0800 / srcWidth;*/ - tmp = dstWidth * 0x800 * 0x400 / srcWidth; - tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0); - - *pHQVminiCtl = (tmp & 0x7ff) | HQV_H_MINIFY_ENABLE | HQV_H_MINIFY_DOWN; - - /* Scale down the picture by a factor mdiv = (1 << d) = {2, 4, 8 or 16} */ - - sw1 = srcWidth; - for (d = 1; d < 5; d++) { - sw1 >>= 1; - if (sw1 <= dstWidth) break; - } - if (d == 5) { /* Too small. */ - d = 4; - zoom_ok = FALSE; - } - mdiv = 1 << d; /* <= {2,4,8,16} */ - falign = ((mdiv<<1)-1) & 0xf; /* <= {3,7,15,15} */ - *pMiniCtl |= V1_X_INTERPOLY; - *pMiniCtl |= ((d<<1)-1) << 24; /* <= {1,3,5,7} << 24 */ - - *pHQVfilterCtl |= HQVfilter[d]; - /* *pHQVminiCtl = HQVmini[d]; */ - *pHQVminiCtl |= HQV_HDEBLOCK_FILTER; - - /* Scale to arbitrary size, on top of previous scaling by (1 << d). */ - - if (sw1 < dstWidth) { - /* CLE bug - *pZoomCtl = sw1 * 0x0800 / dstWidth;*/ - *pZoomCtl = (sw1 - 2) * 0x0800 / dstWidth; - *pZoomCtl = ((*pZoomCtl & 0x7ff) << 16) | V1_X_ZOOM_ENABLE; - } + if (srcWidth == dstWidth) { /* No zoom */ + *pHQVfilterCtl |= HQV_H_FILTER_DEFAULT; + } else if (srcWidth < dstWidth) { /* Zoom in */ + + tmp = srcWidth * 0x800 / dstWidth; + *pZoomCtl = ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE; + *pMiniCtl |= V1_X_INTERPOLY; + zoom_ok = !(tmp > 0x7ff); + + *pHQVzoomflag = 1; + *pHQVfilterCtl |= HQV_H_FILTER_DEFAULT; + + } else { /* srcWidth > dstWidth - Zoom out */ + + /*HQV rounding patch + * //tmp = dstWidth*0x0800 / srcWidth; */ + tmp = dstWidth * 0x800 * 0x400 / srcWidth; + tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0); + + *pHQVminiCtl = + (tmp & 0x7ff) | HQV_H_MINIFY_ENABLE | HQV_H_MINIFY_DOWN; + + /* Scale down the picture by a factor mdiv = (1 << d) = {2, 4, 8 or 16} */ + + sw1 = srcWidth; + for (d = 1; d < 5; d++) { + sw1 >>= 1; + if (sw1 <= dstWidth) + break; + } + if (d == 5) { /* Too small. */ + d = 4; + zoom_ok = FALSE; + } + mdiv = 1 << d; /* <= {2,4,8,16} */ + falign = ((mdiv << 1) - 1) & 0xf; /* <= {3,7,15,15} */ + *pMiniCtl |= V1_X_INTERPOLY; + *pMiniCtl |= ((d << 1) - 1) << 24; /* <= {1,3,5,7} << 24 */ + + *pHQVfilterCtl |= HQVfilter[d]; + /* *pHQVminiCtl = HQVmini[d]; */ + *pHQVminiCtl |= HQV_HDEBLOCK_FILTER; + + /* Scale to arbitrary size, on top of previous scaling by (1 << d). */ + + if (sw1 < dstWidth) { + /* CLE bug + *pZoomCtl = sw1 * 0x0800 / dstWidth;*/ + *pZoomCtl = (sw1 - 2) * 0x0800 / dstWidth; + *pZoomCtl = ((*pZoomCtl & 0x7ff) << 16) | V1_X_ZOOM_ENABLE; + } } if (videoFlag & VIDEO_1_INUSE) { - pVia->swov.overlayRecordV1.dwFetchAlignment = falign; - pVia->swov.overlayRecordV1.dwminifyH = mdiv; - } - else { - pVia->swov.overlayRecordV3.dwFetchAlignment = falign; - pVia->swov.overlayRecordV3.dwminifyH = mdiv; + pVia->swov.overlayRecordV1.dwFetchAlignment = falign; + pVia->swov.overlayRecordV1.dwminifyH = mdiv; + } else { + pVia->swov.overlayRecordV3.dwFetchAlignment = falign; + pVia->swov.overlayRecordV3.dwminifyH = mdiv; } return zoom_ok; } -static unsigned long +static unsigned long viaOverlayHQVCalcZoomHeight(VIAPtr pVia, unsigned long srcHeight, - unsigned long dstHeight, unsigned long * pZoomCtl, - unsigned long * pMiniCtl, unsigned long * pHQVfilterCtl, - unsigned long * pHQVminiCtl, unsigned long * pHQVzoomflag) + unsigned long dstHeight, unsigned long *pZoomCtl, + unsigned long *pMiniCtl, unsigned long *pHQVfilterCtl, + unsigned long *pHQVminiCtl, unsigned long *pHQVzoomflag) { unsigned long tmp, sh1, d; Bool zoom_ok = TRUE; CARD32 HQVfilter[5] = { - HQV_V_TAP4_121, HQV_V_TAP4_121, HQV_V_TAP4_121, - HQV_V_TAP8_12221, HQV_V_TAP8_12221 + HQV_V_TAP4_121, HQV_V_TAP4_121, HQV_V_TAP4_121, + HQV_V_TAP8_12221, HQV_V_TAP8_12221 }; /* CARD32 HQVmini[5] = { 0, 0x0c000000, 0x0a000000, 0x09000000, 0x08800000 }; */ /*if (pVia->pBIOSInfo->scaleY) - { - dstHeight = dstHeight + 1; - }*/ + * { + * dstHeight = dstHeight + 1; + * } */ + + if (srcHeight == dstHeight) { /* No zoom */ + *pHQVfilterCtl |= HQV_V_TAP4_121; + } else if (srcHeight < dstHeight) { /* Zoom in */ + + tmp = srcHeight * 0x0400 / dstHeight; + *pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE); + *pMiniCtl |= (V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY); + + *pHQVzoomflag = 1; + *pHQVfilterCtl |= HQV_V_TAP4_121; + } else { /* srcHeight > dstHeight - Zoom out */ + + /*HQV rounding patch + * //tmp = dstHeight*0x0800 / srcHeight; */ + tmp = dstHeight * 0x0800 * 0x400 / srcHeight; + tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0); + *pHQVminiCtl |= + ((tmp & 0x7ff) << 16) | HQV_V_MINIFY_ENABLE | HQV_V_MINIFY_DOWN; + + /* Scale down the picture by a factor (1 << d) = {2, 4, 8 or 16} */ + + sh1 = srcHeight; + for (d = 1; d < 5; d++) { + sh1 >>= 1; + if (sh1 <= dstHeight) + break; + } + if (d == 5) { /* Too small. */ + d = 4; + zoom_ok = FALSE; + } - if (srcHeight == dstHeight) { /* No zoom */ - *pHQVfilterCtl |= HQV_V_TAP4_121; - } - else if (srcHeight < dstHeight) { /* Zoom in */ - - tmp = srcHeight * 0x0400 / dstHeight; - *pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE); - *pMiniCtl |= (V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY); - - *pHQVzoomflag = 1; - *pHQVfilterCtl |= HQV_V_TAP4_121; - } - else { /* srcHeight > dstHeight - Zoom out */ - - /*HQV rounding patch - //tmp = dstHeight*0x0800 / srcHeight;*/ - tmp = dstHeight * 0x0800 * 0x400 / srcHeight; - tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0); - *pHQVminiCtl |= ((tmp& 0x7ff) << 16) | HQV_V_MINIFY_ENABLE | HQV_V_MINIFY_DOWN; - - /* Scale down the picture by a factor (1 << d) = {2, 4, 8 or 16} */ - - sh1 = srcHeight; - for (d = 1; d < 5; d++) { - sh1 >>= 1; - if (sh1 <= dstHeight) break; - } - if (d == 5) { /* Too small. */ - d = 4; - zoom_ok = FALSE; - } - - *pMiniCtl |= ((d<<1)-1) << 16; /* <= {1,3,5,7} << 16 */ - - *pHQVfilterCtl |= HQVfilter[d]; - /* *pHQVminiCtl |= HQVmini[d]; */ - *pHQVminiCtl |= HQV_VDEBLOCK_FILTER; - - /* Scale to arbitrary size, on top of previous scaling by (1 << d). */ - - if (sh1 < dstHeight) { - tmp = sh1 * 0x0400 / dstHeight; - *pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE); - *pMiniCtl |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY; - } + *pMiniCtl |= ((d << 1) - 1) << 16; /* <= {1,3,5,7} << 16 */ + + *pHQVfilterCtl |= HQVfilter[d]; + /* *pHQVminiCtl |= HQVmini[d]; */ + *pHQVminiCtl |= HQV_VDEBLOCK_FILTER; + + /* Scale to arbitrary size, on top of previous scaling by (1 << d). */ + + if (sh1 < dstHeight) { + tmp = sh1 * 0x0400 / dstHeight; + *pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE); + *pMiniCtl |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY; + } } return zoom_ok; } -static unsigned long +static unsigned long viaOverlayGetFetch(VIAPtr pVia, unsigned long videoFlag, - unsigned long srcWidth, unsigned long dstWidth, - unsigned long oriSrcWidth, unsigned long * pHQVsrcFetch) + unsigned long srcWidth, unsigned long dstWidth, + unsigned long oriSrcWidth, unsigned long *pHQVsrcFetch) { unsigned long fetch = 0; - int n = 2; /* 2^n bytes per pixel. */ + int n = 2; /* 2^n bytes per pixel. */ switch (pVia->swov.SrcFourCC) { case FOURCC_YV12: case FOURCC_XVMC: - n = 0; /* 2^n = 1 byte per pixel (Y channel in planar YUV) */ + n = 0; /* 2^n = 1 byte per pixel (Y channel in planar YUV) */ break; case FOURCC_UYVY: case FOURCC_YUY2: case FOURCC_RV15: case FOURCC_RV16: - n = 1; /* 2^n = 2 bytes per pixel (packed YUV) */ + n = 1; /* 2^n = 2 bytes per pixel (packed YUV) */ break; case FOURCC_RV32: - n = 2; - break; + n = 2; + break; default: DBG_DD(ErrorF("viaOverlayGetFetch: Invalid FOURCC format (0x%lx).\n", - pVia->swov.SrcFourCC)); + pVia->swov.SrcFourCC)); break; } if (videoFlag & VIDEO_HQV_INUSE) { - *pHQVsrcFetch = oriSrcWidth << n; - if (n == 0) { - /* Assume n == 0 <=> Planar YUV. - * The V1/V3 pixelformat is always packed YUV when we use HQV, - * so we switch from 8-bit to 16-bit pixels here. - */ - n = 1; - } - if (dstWidth >= srcWidth) - fetch = (ALIGN_TO(srcWidth << n, 16) >> 4) + 1; - else - fetch = (ALIGN_TO(dstWidth << n, 16) >> 4) + 1; + *pHQVsrcFetch = oriSrcWidth << n; + if (n == 0) { + /* Assume n == 0 <=> Planar YUV. + * The V1/V3 pixelformat is always packed YUV when we use HQV, + * so we switch from 8-bit to 16-bit pixels here. + */ + n = 1; + } + if (dstWidth >= srcWidth) + fetch = (ALIGN_TO(srcWidth << n, 16) >> 4) + 1; + else + fetch = (ALIGN_TO(dstWidth << n, 16) >> 4) + 1; } else { - if (n == 0) - fetch = (ALIGN_TO(srcWidth, 32) >> 4); - else - fetch = (ALIGN_TO(srcWidth << n, 16) >> 4) + 1; + if (n == 0) + fetch = (ALIGN_TO(srcWidth, 32) >> 4); + else + fetch = (ALIGN_TO(srcWidth << n, 16) >> 4) + 1; } /* Fix planar mode problem. */ - if (fetch < 4) fetch = 4; + if (fetch < 4) + fetch = 4; return fetch; } @@ -659,35 +678,40 @@ viaOverlayGetFetch(VIAPtr pVia, unsigned long videoFlag, /* * This function uses quadratic mapping to adjust the midpoint of the scaling. */ -static float rangeEqualize(float inLow,float inHigh,float outLow,float outHigh,float outMid, - float inValue) +static float +rangeEqualize(float inLow, float inHigh, float outLow, float outHigh, + float outMid, float inValue) { float - inRange = inHigh - inLow, - outRange = outHigh - outLow, - normIn = ((inValue - inLow) / inRange)*2.-1., - delta = outMid - outRange*0.5 - outLow; - return (inValue - inLow) * outRange / inRange + outLow + (1. - normIn*normIn)*delta; + inRange = inHigh - inLow, + outRange = outHigh - outLow, + normIn = ((inValue - inLow) / inRange) * 2. - 1., + delta = outMid - outRange * 0.5 - outLow; + return (inValue - inLow) * outRange / inRange + outLow + (1. - + normIn * normIn) * delta; } -static unsigned vPackFloat(float val, float hiLimit, float loLimit, float mult, int shift, - Bool doSign) +static unsigned +vPackFloat(float val, float hiLimit, float loLimit, float mult, int shift, + Bool doSign) { - unsigned packed,mask,sign; + unsigned packed, mask, sign; + val = (val > hiLimit) ? hiLimit : val; val = (val < loLimit) ? loLimit : val; - sign = (val < 0) ? 1:0; + sign = (val < 0) ? 1 : 0; val = (sign) ? -val : val; - packed = ((unsigned)(val*mult + 1.)) >> 1; + packed = ((unsigned)(val * mult + 1.)) >> 1; mask = (1 << shift) - 1; - return (((packed >= mask) ? mask : packed) | ((doSign) ? (sign << shift) : 0)); + return (((packed >= + mask) ? mask : packed) | ((doSign) ? (sign << shift) : 0)); } - typedef float colorCoeff[5]; -static colorCoeff colorCTable[] = {{1.1875,1.625,0.875,0.375,2.0}, - {1.164,1.596,0.54,0.45,2.2}}; +static colorCoeff colorCTable[] = { {1.1875, 1.625, 0.875, 0.375, 2.0}, +{1.164, 1.596, 0.54, 0.45, 2.2} +}; /* * This function is a partial rewrite of the overlay.c file of the original VIA drivers, @@ -696,134 +720,138 @@ static colorCoeff colorCTable[] = {{1.1875,1.625,0.875,0.375,2.0}, */ static void -viaCalculateVideoColor(VIAPtr pVia, int hue, int saturation, int brightness, - int contrast,Bool reset,CARD32 *col1,CARD32 *col2) +viaCalculateVideoColor(VIAPtr pVia, int hue, int saturation, int brightness, + int contrast, Bool reset, CARD32 * col1, CARD32 * col2) { - float fA,fB1,fC1,fD,fB2,fC2,fB3,fC3; - float fPI,fContrast,fSaturation,fHue,fBrightness; - const float *mCoeff; - unsigned long dwA,dwB1,dwC1,dwD,dwB2,dwC2,dwB3,dwC3,dwS; - unsigned long dwD_Int,dwD_Dec; + float fA, fB1, fC1, fD, fB2, fC2, fB3, fC3; + float fPI, fContrast, fSaturation, fHue, fBrightness; + const float *mCoeff; + unsigned long dwA, dwB1, dwC1, dwD, dwB2, dwC2, dwB3, dwC3, dwS; + unsigned long dwD_Int, dwD_Dec; int intD; int model; - fPI = (float)(M_PI/180.); - if ( reset ) { - saturation = 10000; - brightness = 5000; - contrast = 10000; + fPI = (float)(M_PI / 180.); + + if (reset) { + saturation = 10000; + brightness = 5000; + contrast = 10000; } - switch ( pVia->ChipId ) - { + switch (pVia->ChipId) { case PCI_CHIP_VT3205: case PCI_CHIP_VT3204: case PCI_CHIP_VT3259: case PCI_CHIP_VT3314: - model = 0; - break; + model = 0; + break; case PCI_CHIP_CLE3122: - model = (CLE266_REV_IS_CX(pVia->ChipRev) ? 0 : 1); - break; + model = (CLE266_REV_IS_CX(pVia->ChipRev) ? 0 : 1); + break; default: - ErrorF("Unknown Chip ID\n"); - model = 0; + ErrorF("Unknown Chip ID\n"); + model = 0; } - switch( model ) - { + switch (model) { case 0: - fBrightness = rangeEqualize(0.,10000.,-128.,128.,-16.,(float) brightness); - fContrast = rangeEqualize(0.,20000.,0.,1.6645,1.0,(float) contrast); - fSaturation = rangeEqualize(0.,20000,0.,2.,1.,(float) saturation); - break; + fBrightness = + rangeEqualize(0., 10000., -128., 128., -16., (float)brightness); + fContrast = + rangeEqualize(0., 20000., 0., 1.6645, 1.0, (float)contrast); + fSaturation = rangeEqualize(0., 20000, 0., 2., 1., (float)saturation); + break; default: - fBrightness = rangeEqualize(0.,10000.,-128.,128.,-12.,(float) brightness); - fContrast = rangeEqualize(0.,20000.,0.,1.6645,1.1,(float) contrast); - fSaturation = rangeEqualize(0.,20000,0.,2.,1.15,(float) saturation); - break; + fBrightness = + rangeEqualize(0., 10000., -128., 128., -12., (float)brightness); + fContrast = + rangeEqualize(0., 20000., 0., 1.6645, 1.1, (float)contrast); + fSaturation = + rangeEqualize(0., 20000, 0., 2., 1.15, (float)saturation); + break; } fHue = (float)hue; mCoeff = colorCTable[model]; - fA = (float)(mCoeff[0]*fContrast); - fB1 = (float)(-mCoeff[1]*fContrast*fSaturation*sin(fHue*fPI)); - fC1 = (float)(mCoeff[1]*fContrast*fSaturation*cos(fHue*fPI)); - fD = (float)(mCoeff[0]*(fBrightness)); - fB2 = (float)((mCoeff[2]*sin(fHue*fPI)- - mCoeff[3]*cos(fHue*fPI))*fContrast*fSaturation); - fC2 = (float)(-(mCoeff[2]*cos(fHue*fPI)+ - mCoeff[3]*sin(fHue*fPI))*fContrast*fSaturation); - fB3 = (float)(mCoeff[4]*fContrast*fSaturation*cos(fHue*fPI)); - fC3 = (float)(mCoeff[4]*fContrast*fSaturation*sin(fHue*fPI)); - - switch(model) - { + fA = (float)(mCoeff[0] * fContrast); + fB1 = (float)(-mCoeff[1] * fContrast * fSaturation * sin(fHue * fPI)); + fC1 = (float)(mCoeff[1] * fContrast * fSaturation * cos(fHue * fPI)); + fD = (float)(mCoeff[0] * (fBrightness)); + fB2 = (float)((mCoeff[2] * sin(fHue * fPI) - + mCoeff[3] * cos(fHue * fPI)) * fContrast * fSaturation); + fC2 = (float)(-(mCoeff[2] * cos(fHue * fPI) + + mCoeff[3] * sin(fHue * fPI)) * fContrast * fSaturation); + fB3 = (float)(mCoeff[4] * fContrast * fSaturation * cos(fHue * fPI)); + fC3 = (float)(mCoeff[4] * fContrast * fSaturation * sin(fHue * fPI)); + + switch (model) { case 0: - dwA = vPackFloat(fA,1.9375,0.,32.,5,0); - dwB1 = vPackFloat(fB1,2.125,-2.125,16.,5,1); - dwC1 = vPackFloat(fC1,2.125,-2.125,16.,5,1); - - if (fD>=0) { - intD=(int)fD; - if (intD>127) - intD = 127; - dwD_Int = ((unsigned long)intD)&0xff; - dwD = ((unsigned long)(fD*16+1))>>1; - dwD_Dec= dwD&0x7; - } else { - intD=(int)fD; - if (intD< -128) - intD = -128; - intD = intD+256; - dwD_Int = ((unsigned long)intD)&0xff; - fD = -fD; - dwD = ((unsigned long)(fD*16+1))>>1; - dwD_Dec= dwD&0x7; - } - - dwB2 = vPackFloat(fB2,1.875,-1.875,16,4,1); - dwC2 = vPackFloat(fC2,1.875,-1.875,16,4,1); - dwB3 = vPackFloat(fB3,3.875,-3.875,16,5,1); - dwC3 = vPackFloat(fC3,3.875,-3.875,16,5,1); - *col1 = (dwA<<24)|(dwB1<<16)|(dwC1<<8)|dwD_Int; - *col2 = (dwD_Dec<<29|dwB2<<24)|(dwC2<<16)|(dwB3<<8)|(dwC3); - break; + dwA = vPackFloat(fA, 1.9375, 0., 32., 5, 0); + dwB1 = vPackFloat(fB1, 2.125, -2.125, 16., 5, 1); + dwC1 = vPackFloat(fC1, 2.125, -2.125, 16., 5, 1); + + if (fD >= 0) { + intD = (int)fD; + if (intD > 127) + intD = 127; + dwD_Int = ((unsigned long)intD) & 0xff; + dwD = ((unsigned long)(fD * 16 + 1)) >> 1; + dwD_Dec = dwD & 0x7; + } else { + intD = (int)fD; + if (intD < -128) + intD = -128; + intD = intD + 256; + dwD_Int = ((unsigned long)intD) & 0xff; + fD = -fD; + dwD = ((unsigned long)(fD * 16 + 1)) >> 1; + dwD_Dec = dwD & 0x7; + } + + dwB2 = vPackFloat(fB2, 1.875, -1.875, 16, 4, 1); + dwC2 = vPackFloat(fC2, 1.875, -1.875, 16, 4, 1); + dwB3 = vPackFloat(fB3, 3.875, -3.875, 16, 5, 1); + dwC3 = vPackFloat(fC3, 3.875, -3.875, 16, 5, 1); + *col1 = (dwA << 24) | (dwB1 << 16) | (dwC1 << 8) | dwD_Int; + *col2 = + (dwD_Dec << 29 | dwB2 << 24) | (dwC2 << 16) | (dwB3 << 8) | + (dwC3); + break; default: - dwA = vPackFloat(fA,1.9375,-0.,32,5,0); - dwB1 = vPackFloat(fB1,0.75,-0.75,8.,2,1); - dwC1 = vPackFloat(fC1,2.875,1.,16.,5,0); - - if (fD>=127) - fD=127; - - if (fD<=-128) - fD=-128; - - if (fD>=0) { - dwS = 0; - } - else { - dwS = 1; - fD = fD+128; - } - - dwD = ((unsigned long)(fD*2+1))>>1; - if (dwD>=0x7f) { - dwD = 0x7f|(dwS<<7); - } else { - dwD = (dwD&0x7f)|(dwS<<7); - } - - dwB2 = vPackFloat(fB2,0.,-0.875,16.,3,0); - dwC2 = vPackFloat(fC2,0.,-1.875,16.,4,0); - dwB3 = vPackFloat(fB3,3.75,0.,8.,4,0); - dwC3 = vPackFloat(fC3,1.25,-1.25,8.,3,1); - *col1 = (dwA<<24)|(dwB1<<18)|(dwC1<<9)|dwD; - *col2 = (dwB2<<25)|(dwC2<<17)|(dwB3<<10)|(dwC3<<2); - break; + dwA = vPackFloat(fA, 1.9375, -0., 32, 5, 0); + dwB1 = vPackFloat(fB1, 0.75, -0.75, 8., 2, 1); + dwC1 = vPackFloat(fC1, 2.875, 1., 16., 5, 0); + + if (fD >= 127) + fD = 127; + + if (fD <= -128) + fD = -128; + + if (fD >= 0) { + dwS = 0; + } else { + dwS = 1; + fD = fD + 128; + } + + dwD = ((unsigned long)(fD * 2 + 1)) >> 1; + if (dwD >= 0x7f) { + dwD = 0x7f | (dwS << 7); + } else { + dwD = (dwD & 0x7f) | (dwS << 7); + } + + dwB2 = vPackFloat(fB2, 0., -0.875, 16., 3, 0); + dwC2 = vPackFloat(fC2, 0., -1.875, 16., 4, 0); + dwB3 = vPackFloat(fB3, 3.75, 0., 8., 4, 0); + dwC3 = vPackFloat(fC3, 1.25, -1.25, 8., 3, 1); + *col1 = (dwA << 24) | (dwB1 << 18) | (dwC1 << 9) | dwD; + *col2 = (dwB2 << 25) | (dwC2 << 17) | (dwB3 << 10) | (dwC3 << 2); + break; } } @@ -831,92 +859,94 @@ viaCalculateVideoColor(VIAPtr pVia, int hue, int saturation, int brightness, * * */ -void viaSetColorSpace(VIAPtr pVia, int hue, int saturation, int brightness, int contrast, - Bool reset) +void +viaSetColorSpace(VIAPtr pVia, int hue, int saturation, int brightness, + int contrast, Bool reset) { - CARD32 col1,col2; + CARD32 col1, col2; - viaCalculateVideoColor(pVia,hue,saturation,brightness, contrast,reset,&col1,&col2); - switch ( pVia->ChipId ) { + viaCalculateVideoColor(pVia, hue, saturation, brightness, contrast, reset, + &col1, &col2); + switch (pVia->ChipId) { case PCI_CHIP_VT3205: case PCI_CHIP_VT3204: case PCI_CHIP_VT3259: case PCI_CHIP_VT3314: - VIDOutD(V3_ColorSpaceReg_1, col1); - VIDOutD(V3_ColorSpaceReg_2, col2); - DBG_DD(ErrorF("000002C4 %08lx\n",col1)); - DBG_DD(ErrorF("000002C8 %08lx\n",col2)); - break; + VIDOutD(V3_ColorSpaceReg_1, col1); + VIDOutD(V3_ColorSpaceReg_2, col2); + DBG_DD(ErrorF("000002C4 %08lx\n", col1)); + DBG_DD(ErrorF("000002C8 %08lx\n", col2)); + break; case PCI_CHIP_CLE3122: - VIDOutD(V1_ColorSpaceReg_2, col2); - VIDOutD(V1_ColorSpaceReg_1, col1); - VIDOutD(V3_ColorSpaceReg_2, col2); - VIDOutD(V3_ColorSpaceReg_1, col1); - - DBG_DD(ErrorF("00000288 %08lx\n",col2)); - DBG_DD(ErrorF("00000284 %08lx\n",col1)); - break; + VIDOutD(V1_ColorSpaceReg_2, col2); + VIDOutD(V1_ColorSpaceReg_1, col1); + VIDOutD(V3_ColorSpaceReg_2, col2); + VIDOutD(V3_ColorSpaceReg_1, col1); + + DBG_DD(ErrorF("00000288 %08lx\n", col2)); + DBG_DD(ErrorF("00000284 %08lx\n", col1)); + break; default: - DBG_DD(ErrorF("Unknown DeviceID\n")); - break; + DBG_DD(ErrorF("Unknown DeviceID\n")); + break; } } -static unsigned long ViaInitVideoStatusFlag(VIAPtr pVia) +static unsigned long +ViaInitVideoStatusFlag(VIAPtr pVia) { - switch ( pVia->ChipId ) { + switch (pVia->ChipId) { case PCI_CHIP_VT3205: case PCI_CHIP_VT3204: case PCI_CHIP_VT3259: case PCI_CHIP_VT3314: - return VIDEO_HQV_INUSE | SW_USE_HQV | VIDEO_3_INUSE; + return VIDEO_HQV_INUSE | SW_USE_HQV | VIDEO_3_INUSE; case PCI_CHIP_CLE3122: - return VIDEO_HQV_INUSE | SW_USE_HQV | VIDEO_1_INUSE; + return VIDEO_HQV_INUSE | SW_USE_HQV | VIDEO_1_INUSE; default: - DBG_DD(ErrorF("Unknown DeviceID\n")); - break; + DBG_DD(ErrorF("Unknown DeviceID\n")); + break; } return 0UL; } -static unsigned long ViaSetVidCtl(VIAPtr pVia, unsigned int videoFlag) +static unsigned long +ViaSetVidCtl(VIAPtr pVia, unsigned int videoFlag) { if (videoFlag & VIDEO_1_INUSE) { - /*=* Modify for C1 FIFO *=*/ - /* WARNING: not checking Chipset! */ - if (CLE266_REV_IS_CX(pVia->ChipRev)) - return V1_ENABLE | V1_EXPIRE_NUM_F; - else { - /* Overlay source format for V1 */ - if (pVia->swov.gdwUseExtendedFIFO) - return V1_ENABLE | V1_EXPIRE_NUM_A | V1_FIFO_EXTENDED; - else - return V1_ENABLE | V1_EXPIRE_NUM; - } - } - else { - switch (pVia->ChipId) - { - case PCI_CHIP_VT3205: - case PCI_CHIP_VT3204: - case PCI_CHIP_VT3259: - case PCI_CHIP_VT3314: - return V3_ENABLE | V3_EXPIRE_NUM_3205; - - case PCI_CHIP_CLE3122: - if (CLE266_REV_IS_CX(pVia->ChipRev)) - return V3_ENABLE | V3_EXPIRE_NUM_F; - else - return V3_ENABLE | V3_EXPIRE_NUM; - break; - - default: - DBG_DD(ErrorF("Unknown DeviceID\n")); - break; - } + /*=* Modify for C1 FIFO *=*/ + /* WARNING: not checking Chipset! */ + if (CLE266_REV_IS_CX(pVia->ChipRev)) + return V1_ENABLE | V1_EXPIRE_NUM_F; + else { + /* Overlay source format for V1 */ + if (pVia->swov.gdwUseExtendedFIFO) + return V1_ENABLE | V1_EXPIRE_NUM_A | V1_FIFO_EXTENDED; + else + return V1_ENABLE | V1_EXPIRE_NUM; + } + } else { + switch (pVia->ChipId) { + case PCI_CHIP_VT3205: + case PCI_CHIP_VT3204: + case PCI_CHIP_VT3259: + case PCI_CHIP_VT3314: + return V3_ENABLE | V3_EXPIRE_NUM_3205; + + case PCI_CHIP_CLE3122: + if (CLE266_REV_IS_CX(pVia->ChipRev)) + return V3_ENABLE | V3_EXPIRE_NUM_F; + else + return V3_ENABLE | V3_EXPIRE_NUM; + break; + + default: + DBG_DD(ErrorF("Unknown DeviceID\n")); + break; + } } return 0; -}/*End of DeviceID*/ +} /*End of DeviceID */ /* * Fill the buffer with 0x8000 (YUV2 black) @@ -924,13 +954,13 @@ static unsigned long ViaSetVidCtl(VIAPtr pVia, unsigned int videoFlag) static void ViaYUVFillBlack(VIAPtr pVia, int offset, int num) { - CARD16 *ptr = (CARD16 *)(pVia->FBBase + offset); + CARD16 *ptr = (CARD16 *) (pVia->FBBase + offset); - while(num-- > 0) + while (num-- > 0) #if X_BYTE_ORDER == X_LITTLE_ENDIAN - *ptr++ = 0x0080; + *ptr++ = 0x0080; #else - *ptr++ = 0x8000; + *ptr++ = 0x8000; #endif } @@ -939,38 +969,41 @@ ViaYUVFillBlack(VIAPtr pVia, int offset, int num) * numbuf: number of buffers, 1, 2 or 3 * fourcc: FOURCC code of the current (already existing) surface */ -static long AddHQVSurface(ScrnInfoPtr pScrn, unsigned int numbuf, CARD32 fourcc) +static long +AddHQVSurface(ScrnInfoPtr pScrn, unsigned int numbuf, CARD32 fourcc) { unsigned int i, width, height, pitch, fbsize, addr; unsigned long retCode; BOOL isplanar; VIAPtr pVia = VIAPTR(pScrn); - CARD32 AddrReg[3] = {HQV_DST_STARTADDR0, HQV_DST_STARTADDR1, HQV_DST_STARTADDR2}; - unsigned long proReg=0; + CARD32 AddrReg[3] = + { HQV_DST_STARTADDR0, HQV_DST_STARTADDR1, HQV_DST_STARTADDR2 }; + unsigned long proReg = 0; if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; + !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; isplanar = ((fourcc == FOURCC_YV12) || (fourcc == FOURCC_XVMC)); - width = pVia->swov.SWDevice.gdwSWSrcWidth; + width = pVia->swov.SWDevice.gdwSWSrcWidth; height = pVia->swov.SWDevice.gdwSWSrcHeight; - pitch = pVia->swov.SWDevice.dwPitch; + pitch = pVia->swov.SWDevice.dwPitch; fbsize = pitch * height * (isplanar ? 2 : 1); VIAFreeLinear(&pVia->swov.HQVMem); retCode = VIAAllocLinear(&pVia->swov.HQVMem, pScrn, fbsize * numbuf); - if(retCode != Success) return retCode; + if (retCode != Success) + return retCode; addr = pVia->swov.HQVMem.base; ViaYUVFillBlack(pVia, addr, fbsize); for (i = 0; i < numbuf; i++) { - pVia->swov.overlayRecordV1.dwHQVAddr[i] = addr; - VIDOutD(AddrReg[i] + proReg, addr); - addr += fbsize; + pVia->swov.overlayRecordV1.dwHQVAddr[i] = addr; + VIDOutD(AddrReg[i] + proReg, addr); + addr += fbsize; } return Success; @@ -980,11 +1013,11 @@ static long AddHQVSurface(ScrnInfoPtr pScrn, unsigned int numbuf, CARD32 fourcc) * Create a FOURCC surface (Supported: YUY2, YV12 or VIA) * doalloc: set true to actually allocate memory for the framebuffers */ -static long +static long CreateSurface(ScrnInfoPtr pScrn, CARD32 FourCC, CARD16 Width, - CARD16 Height, BOOL doalloc) + CARD16 Height, BOOL doalloc) { - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); unsigned long pitch, fbsize, addr; unsigned long retCode; BOOL isplanar; @@ -993,49 +1026,50 @@ CreateSurface(ScrnInfoPtr pScrn, CARD32 FourCC, CARD16 Width, pVia->swov.gdwVideoFlagSW = ViaInitVideoStatusFlag(pVia); isplanar = FALSE; - switch (FourCC) - { - case FOURCC_YV12: - case FOURCC_XVMC: - isplanar = TRUE; - pitch = ALIGN_TO(Width, 32); - fbsize = pitch * Height * 1.5; - break; - case FOURCC_RV32: - pitch = ALIGN_TO(Width<<2, 32); - fbsize = pitch * Height; - break; - default: - pitch = ALIGN_TO(Width<<1, 32); - fbsize = pitch * Height; - break; + switch (FourCC) { + case FOURCC_YV12: + case FOURCC_XVMC: + isplanar = TRUE; + pitch = ALIGN_TO(Width, 32); + fbsize = pitch * Height * 1.5; + break; + case FOURCC_RV32: + pitch = ALIGN_TO(Width << 2, 32); + fbsize = pitch * Height; + break; + default: + pitch = ALIGN_TO(Width << 1, 32); + fbsize = pitch * Height; + break; } - + if (doalloc) { - VIAFreeLinear(&pVia->swov.SWfbMem); - retCode = VIAAllocLinear(&pVia->swov.SWfbMem, pScrn, fbsize * 2); - if(retCode != Success) + VIAFreeLinear(&pVia->swov.SWfbMem); + retCode = VIAAllocLinear(&pVia->swov.SWfbMem, pScrn, fbsize * 2); + if (retCode != Success) return retCode; - addr = pVia->swov.SWfbMem.base; - - ViaYUVFillBlack(pVia, addr, fbsize); - - pVia->swov.SWDevice.dwSWPhysicalAddr[0] = addr; - pVia->swov.SWDevice.dwSWPhysicalAddr[1] = addr + fbsize; - pVia->swov.SWDevice.lpSWOverlaySurface[0] = pVia->FBBase + addr; - pVia->swov.SWDevice.lpSWOverlaySurface[1] = - pVia->swov.SWDevice.lpSWOverlaySurface[0] + fbsize; - - if (isplanar) { - pVia->swov.SWDevice.dwSWCrPhysicalAddr[0] = - pVia->swov.SWDevice.dwSWPhysicalAddr[0] + (pitch*Height); - pVia->swov.SWDevice.dwSWCrPhysicalAddr[1] = - pVia->swov.SWDevice.dwSWPhysicalAddr[1] + (pitch*Height); - pVia->swov.SWDevice.dwSWCbPhysicalAddr[0] = - pVia->swov.SWDevice.dwSWCrPhysicalAddr[0] + ((pitch>>1)*(Height>>1)); - pVia->swov.SWDevice.dwSWCbPhysicalAddr[1] = - pVia->swov.SWDevice.dwSWCrPhysicalAddr[1] + ((pitch>>1)*(Height>>1)); - } + addr = pVia->swov.SWfbMem.base; + + ViaYUVFillBlack(pVia, addr, fbsize); + + pVia->swov.SWDevice.dwSWPhysicalAddr[0] = addr; + pVia->swov.SWDevice.dwSWPhysicalAddr[1] = addr + fbsize; + pVia->swov.SWDevice.lpSWOverlaySurface[0] = pVia->FBBase + addr; + pVia->swov.SWDevice.lpSWOverlaySurface[1] = + pVia->swov.SWDevice.lpSWOverlaySurface[0] + fbsize; + + if (isplanar) { + pVia->swov.SWDevice.dwSWCrPhysicalAddr[0] = + pVia->swov.SWDevice.dwSWPhysicalAddr[0] + (pitch * Height); + pVia->swov.SWDevice.dwSWCrPhysicalAddr[1] = + pVia->swov.SWDevice.dwSWPhysicalAddr[1] + (pitch * Height); + pVia->swov.SWDevice.dwSWCbPhysicalAddr[0] = + pVia->swov.SWDevice.dwSWCrPhysicalAddr[0] + + ((pitch >> 1) * (Height >> 1)); + pVia->swov.SWDevice.dwSWCbPhysicalAddr[1] = + pVia->swov.SWDevice.dwSWCrPhysicalAddr[1] + + ((pitch >> 1) * (Height >> 1)); + } } pVia->swov.SWDevice.gdwSWSrcWidth = Width; @@ -1054,9 +1088,9 @@ CreateSurface(ScrnInfoPtr pScrn, CARD32 FourCC, CARD16 Width, */ int ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, CARD32 FourCC, - CARD16 Width, CARD16 Height) + CARD16 Width, CARD16 Height) { - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); unsigned long retCode = Success; int numbuf = pVia->HWDiff.dwThreeHQVBuffer ? 3 : 2; @@ -1064,7 +1098,7 @@ ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, CARD32 FourCC, if ((pVia->VideoStatus & VIDEO_SWOV_SURFACE_CREATED) && (FourCC == pPriv->FourCC)) - return Success; + return Success; pPriv->FourCC = FourCC; switch (FourCC) { @@ -1073,39 +1107,43 @@ ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, CARD32 FourCC, case FOURCC_RV16: case FOURCC_RV32: retCode = CreateSurface(pScrn, FourCC, Width, Height, TRUE); - if (retCode != Success) + if (retCode != Success) break; - if ((pVia->swov.gdwVideoFlagSW & SW_USE_HQV)) + if ((pVia->swov.gdwVideoFlagSW & SW_USE_HQV)) retCode = AddHQVSurface(pScrn, numbuf, FourCC); - break; + break; case FOURCC_HQVSW: - retCode = AddHQVSurface(pScrn, numbuf, FOURCC_YUY2); - break; + retCode = AddHQVSurface(pScrn, numbuf, FOURCC_YUY2); + break; case FOURCC_YV12: - retCode = CreateSurface(pScrn, FourCC, Width, Height, TRUE); - if (retCode == Success) - retCode = AddHQVSurface(pScrn, numbuf, FOURCC_YV12); - break; + retCode = CreateSurface(pScrn, FourCC, Width, Height, TRUE); + if (retCode == Success) + retCode = AddHQVSurface(pScrn, numbuf, FOURCC_YV12); + break; case FOURCC_XVMC: - retCode = CreateSurface(pScrn, FourCC, Width, Height, FALSE); - if (retCode == Success) - retCode = AddHQVSurface(pScrn, numbuf, FOURCC_XVMC); - break; + retCode = CreateSurface(pScrn, FourCC, Width, Height, FALSE); + if (retCode == Success) + retCode = AddHQVSurface(pScrn, numbuf, FOURCC_XVMC); + break; default: - break; + break; } if (retCode == Success) { - pVia->swov.SWDevice.lpSWOverlaySurface[0] = pVia->FBBase + pVia->swov.SWDevice.dwSWPhysicalAddr[0]; - pVia->swov.SWDevice.lpSWOverlaySurface[1] = pVia->FBBase + pVia->swov.SWDevice.dwSWPhysicalAddr[1]; - - DBG_DD(ErrorF(" lpSWOverlaySurface[0]: %p\n", pVia->swov.SWDevice.lpSWOverlaySurface[0])); - DBG_DD(ErrorF(" lpSWOverlaySurface[1]: %p\n", pVia->swov.SWDevice.lpSWOverlaySurface[1])); - + pVia->swov.SWDevice.lpSWOverlaySurface[0] = + pVia->FBBase + pVia->swov.SWDevice.dwSWPhysicalAddr[0]; + pVia->swov.SWDevice.lpSWOverlaySurface[1] = + pVia->FBBase + pVia->swov.SWDevice.dwSWPhysicalAddr[1]; + + DBG_DD(ErrorF(" lpSWOverlaySurface[0]: %p\n", + pVia->swov.SWDevice.lpSWOverlaySurface[0])); + DBG_DD(ErrorF(" lpSWOverlaySurface[1]: %p\n", + pVia->swov.SWDevice.lpSWOverlaySurface[1])); + pVia->VideoStatus |= VIDEO_SWOV_SURFACE_CREATED | VIDEO_SWOV_ON; } return retCode; @@ -1117,37 +1155,37 @@ ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, CARD32 FourCC, void ViaSwovSurfaceDestroy(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv) { - VIAPtr pVia = VIAPTR(pScrn); - DBG_DD(ErrorF("ViaSwovSurfaceDestroy: FourCC =0x%08lx\n", - pPriv->FourCC)); + VIAPtr pVia = VIAPTR(pScrn); + + DBG_DD(ErrorF("ViaSwovSurfaceDestroy: FourCC =0x%08lx\n", pPriv->FourCC)); if (pVia->VideoStatus & VIDEO_SWOV_SURFACE_CREATED) { - DBG_DD(ErrorF("ViaSwovSurfaceDestroy: VideoStatus =0x%08lx\n", - pVia->VideoStatus)); - + DBG_DD(ErrorF("ViaSwovSurfaceDestroy: VideoStatus =0x%08lx\n", + pVia->VideoStatus)); + switch (pPriv->FourCC) { case FOURCC_YUY2: case FOURCC_RV16: case FOURCC_RV32: case FOURCC_RV15: pVia->swov.SrcFourCC = 0; - + VIAFreeLinear(&pVia->swov.SWfbMem); if ((pVia->swov.gdwVideoFlagSW & SW_USE_HQV)) VIAFreeLinear(&pVia->swov.HQVMem); pVia->swov.gdwVideoFlagSW = 0; break; - + case FOURCC_HQVSW: VIAFreeLinear(&pVia->swov.HQVMem); pVia->swov.gdwVideoFlagSW = 0; break; - + case FOURCC_YV12: VIAFreeLinear(&pVia->swov.SWfbMem); case FOURCC_XVMC: pVia->swov.SrcFourCC = 0; - + VIAFreeLinear(&pVia->swov.HQVMem); pVia->swov.gdwVideoFlagSW = 0; break; @@ -1157,325 +1195,308 @@ ViaSwovSurfaceDestroy(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv) pVia->VideoStatus &= ~VIDEO_SWOV_SURFACE_CREATED; } else - DBG_DD(ErrorF("ViaSwovSurfaceDestroy: No SW Overlay Surface Destroyed," - " VideoStatus =0x%08lx\n", pVia->VideoStatus)); + DBG_DD(ErrorF + ("ViaSwovSurfaceDestroy: No SW Overlay Surface Destroyed," + " VideoStatus =0x%08lx\n", pVia->VideoStatus)); } -static void SetFIFO_V1(VIAPtr pVia, CARD8 depth, CARD8 prethreshold, CARD8 threshold) +static void +SetFIFO_V1(VIAPtr pVia, CARD8 depth, CARD8 prethreshold, CARD8 threshold) { - SaveVideoRegister(pVia, V_FIFO_CONTROL, ((depth-1) & 0x7f) | - ((prethreshold & 0x7f) << 24) | ((threshold & 0x7f) << 8)); + SaveVideoRegister(pVia, V_FIFO_CONTROL, ((depth - 1) & 0x7f) | + ((prethreshold & 0x7f) << 24) | ((threshold & 0x7f) << 8)); } -static void SetFIFO_V3(VIAPtr pVia, CARD8 depth, CARD8 prethreshold, CARD8 threshold) +static void +SetFIFO_V3(VIAPtr pVia, CARD8 depth, CARD8 prethreshold, CARD8 threshold) { - if (pVia->ChipId == PCI_CHIP_VT3314) - { - SaveVideoRegister(pVia, ALPHA_V3_FIFO_CONTROL, - (VIDInD(ALPHA_V3_FIFO_CONTROL) & ALPHA_FIFO_MASK) | - ((depth - 1) & 0xff) | ((threshold & 0xff) << 8)); - SaveVideoRegister(pVia, ALPHA_V3_PREFIFO_CONTROL, - (VIDInD(ALPHA_V3_PREFIFO_CONTROL) & ~V3_FIFO_MASK_3314) | - (prethreshold & 0xff)); - } - else - { - SaveVideoRegister(pVia, ALPHA_V3_FIFO_CONTROL, - (VIDInD(ALPHA_V3_FIFO_CONTROL) & ALPHA_FIFO_MASK) | - ((depth - 1) & 0xff) | ((threshold & 0xff) << 8)); - SaveVideoRegister(pVia, ALPHA_V3_PREFIFO_CONTROL, - (VIDInD(ALPHA_V3_PREFIFO_CONTROL) & ~V3_FIFO_MASK) | - (prethreshold & 0x7f)); + if (pVia->ChipId == PCI_CHIP_VT3314) { + SaveVideoRegister(pVia, ALPHA_V3_FIFO_CONTROL, + (VIDInD(ALPHA_V3_FIFO_CONTROL) & ALPHA_FIFO_MASK) | + ((depth - 1) & 0xff) | ((threshold & 0xff) << 8)); + SaveVideoRegister(pVia, ALPHA_V3_PREFIFO_CONTROL, + (VIDInD(ALPHA_V3_PREFIFO_CONTROL) & ~V3_FIFO_MASK_3314) | + (prethreshold & 0xff)); + } else { + SaveVideoRegister(pVia, ALPHA_V3_FIFO_CONTROL, + (VIDInD(ALPHA_V3_FIFO_CONTROL) & ALPHA_FIFO_MASK) | + ((depth - 1) & 0xff) | ((threshold & 0xff) << 8)); + SaveVideoRegister(pVia, ALPHA_V3_PREFIFO_CONTROL, + (VIDInD(ALPHA_V3_PREFIFO_CONTROL) & ~V3_FIFO_MASK) | + (prethreshold & 0x7f)); } } -static void SetFIFO_64or32(VIAPtr pVia) +static void +SetFIFO_64or32(VIAPtr pVia) { /*=* Modify for C1 FIFO *=*/ /* WARNING: not checking Chipset! */ if (CLE266_REV_IS_CX(pVia->ChipRev)) - SetFIFO_V1(pVia, 64, 56, 56); + SetFIFO_V1(pVia, 64, 56, 56); else - SetFIFO_V1(pVia, 32, 29, 16); + SetFIFO_V1(pVia, 32, 29, 16); } -static void SetFIFO_64or16(VIAPtr pVia) +static void +SetFIFO_64or16(VIAPtr pVia) { /*=* Modify for C1 FIFO *=*/ /* WARNING: not checking Chipset! */ if (CLE266_REV_IS_CX(pVia->ChipRev)) - SetFIFO_V1(pVia, 64, 56, 56); + SetFIFO_V1(pVia, 64, 56, 56); else - SetFIFO_V1(pVia, 16, 12, 8); + SetFIFO_V1(pVia, 16, 12, 8); } -static void SetFIFO_64or48or32(VIAPtr pVia) +static void +SetFIFO_64or48or32(VIAPtr pVia) { /*=* Modify for C1 FIFO *=*/ /* WARNING: not checking Chipset! */ if (CLE266_REV_IS_CX(pVia->ChipRev)) - SetFIFO_V1(pVia, 64, 56, 56); + SetFIFO_V1(pVia, 64, 56, 56); else { - if (pVia->swov.gdwUseExtendedFIFO) - SetFIFO_V1(pVia, 48, 40, 40); - else - SetFIFO_V1(pVia, 32, 29, 16); - } + if (pVia->swov.gdwUseExtendedFIFO) + SetFIFO_V1(pVia, 48, 40, 40); + else + SetFIFO_V1(pVia, 32, 29, 16); + } } -static void SetFIFO_V3_64or32or32(VIAPtr pVia) +static void +SetFIFO_V3_64or32or32(VIAPtr pVia) { - switch (pVia->ChipId) - { + switch (pVia->ChipId) { case PCI_CHIP_VT3204: - SetFIFO_V3(pVia, 100, 89, 89); - break; + SetFIFO_V3(pVia, 100, 89, 89); + break; case PCI_CHIP_VT3314: - SetFIFO_V3(pVia, 64, 61, 61); - break; + SetFIFO_V3(pVia, 64, 61, 61); + break; case PCI_CHIP_VT3205: case PCI_CHIP_VT3259: - SetFIFO_V3(pVia, 32, 29, 29); - break; + SetFIFO_V3(pVia, 32, 29, 29); + break; case PCI_CHIP_CLE3122: - if (CLE266_REV_IS_CX(pVia->ChipRev)) - SetFIFO_V3(pVia, 64, 56, 56); - else - SetFIFO_V3(pVia, 32, 16, 16); - break; + if (CLE266_REV_IS_CX(pVia->ChipRev)) + SetFIFO_V3(pVia, 64, 56, 56); + else + SetFIFO_V3(pVia, 32, 16, 16); + break; default: - break; + break; } } -static void SetFIFO_V3_64or32or16(VIAPtr pVia) +static void +SetFIFO_V3_64or32or16(VIAPtr pVia) { - switch (pVia->ChipId) - { + switch (pVia->ChipId) { case PCI_CHIP_VT3204: - SetFIFO_V3(pVia, 100, 89, 89); - break; + SetFIFO_V3(pVia, 100, 89, 89); + break; case PCI_CHIP_VT3314: - SetFIFO_V3(pVia, 64, 61, 61); - break; + SetFIFO_V3(pVia, 64, 61, 61); + break; case PCI_CHIP_VT3205: case PCI_CHIP_VT3259: - SetFIFO_V3(pVia, 32, 29, 29); - break; + SetFIFO_V3(pVia, 32, 29, 29); + break; case PCI_CHIP_CLE3122: - if (CLE266_REV_IS_CX(pVia->ChipRev)) - SetFIFO_V3(pVia, 64, 56, 56); - else - SetFIFO_V3(pVia, 16, 16, 8); - break; + if (CLE266_REV_IS_CX(pVia->ChipRev)) + SetFIFO_V3(pVia, 64, 56, 56); + else + SetFIFO_V3(pVia, 16, 16, 8); + break; default: - break; + break; } } static void SetupFIFOs(VIAPtr pVia, unsigned long videoFlag, unsigned long miniCtl, - unsigned long srcWidth) + unsigned long srcWidth) { - if (miniCtl & V1_Y_INTERPOLY) - { - if (pVia->swov.SrcFourCC == FOURCC_YV12 || - pVia->swov.SrcFourCC == FOURCC_XVMC) - { - if (videoFlag & VIDEO_HQV_INUSE) - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_64or32(pVia); - else - SetFIFO_V3_64or32or16(pVia); - } - else - { - /* Minified video will be skewed without this workaround. */ - if (srcWidth <= 80) /* Fetch count <= 5 */ - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_V1(pVia, 16, 0, 0); - else - SetFIFO_V3(pVia, 16, 16, 0); - } - else - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_64or16(pVia); - else - SetFIFO_V3_64or32or16(pVia); - } - } - } - else - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_64or48or32(pVia); - else - { - /* Fix V3 bug. */ - if (srcWidth <= 8) - SetFIFO_V3(pVia, 1, 0, 0); - else - SetFIFO_V3_64or32or32(pVia); - } - } - } - else - { - if (pVia->swov.SrcFourCC == FOURCC_YV12 || - pVia->swov.SrcFourCC == FOURCC_XVMC) - { - if (videoFlag & VIDEO_HQV_INUSE) - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_64or32(pVia); - else - SetFIFO_V3_64or32or16(pVia); - } - else - { - /* Minified video will be skewed without this workaround. */ - if (srcWidth <= 80) /* Fetch count <= 5 */ - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_V1(pVia, 16, 0, 0); - else - SetFIFO_V3(pVia, 16, 16, 0); - } - else - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_64or16(pVia); - else - SetFIFO_V3_64or32or16(pVia); - } - } - } - else - { - if (videoFlag & VIDEO_1_INUSE) - SetFIFO_64or48or32(pVia); - else - { - /* Fix V3 bug. */ - if (srcWidth <= 8) - SetFIFO_V3(pVia, 1, 0, 0); - else - SetFIFO_V3_64or32or32(pVia); - } - } + if (miniCtl & V1_Y_INTERPOLY) { + if (pVia->swov.SrcFourCC == FOURCC_YV12 || + pVia->swov.SrcFourCC == FOURCC_XVMC) { + if (videoFlag & VIDEO_HQV_INUSE) { + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_64or32(pVia); + else + SetFIFO_V3_64or32or16(pVia); + } else { + /* Minified video will be skewed without this workaround. */ + if (srcWidth <= 80) { /* Fetch count <= 5 */ + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_V1(pVia, 16, 0, 0); + else + SetFIFO_V3(pVia, 16, 16, 0); + } else { + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_64or16(pVia); + else + SetFIFO_V3_64or32or16(pVia); + } + } + } else { + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_64or48or32(pVia); + else { + /* Fix V3 bug. */ + if (srcWidth <= 8) + SetFIFO_V3(pVia, 1, 0, 0); + else + SetFIFO_V3_64or32or32(pVia); + } + } + } else { + if (pVia->swov.SrcFourCC == FOURCC_YV12 || + pVia->swov.SrcFourCC == FOURCC_XVMC) { + if (videoFlag & VIDEO_HQV_INUSE) { + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_64or32(pVia); + else + SetFIFO_V3_64or32or16(pVia); + } else { + /* Minified video will be skewed without this workaround. */ + if (srcWidth <= 80) { /* Fetch count <= 5 */ + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_V1(pVia, 16, 0, 0); + else + SetFIFO_V3(pVia, 16, 16, 0); + } else { + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_64or16(pVia); + else + SetFIFO_V3_64or32or16(pVia); + } + } + } else { + if (videoFlag & VIDEO_1_INUSE) + SetFIFO_64or48or32(pVia); + else { + /* Fix V3 bug. */ + if (srcWidth <= 8) + SetFIFO_V3(pVia, 1, 0, 0); + else + SetFIFO_V3_64or32or32(pVia); + } + } } } -static CARD32 SetColorKey(VIAPtr pVia, unsigned long videoFlag, - CARD32 keyLow, CARD32 keyHigh, CARD32 compose) +static CARD32 +SetColorKey(VIAPtr pVia, unsigned long videoFlag, + CARD32 keyLow, CARD32 keyHigh, CARD32 compose) { keyLow &= 0x00FFFFFF; if (pVia->ChipId == PCI_CHIP_VT3259) - keyLow |= 0x40000000; + keyLow |= 0x40000000; - /*SaveVideoRegister(pVia, V_COLOR_KEY, keyLow);*/ + /*SaveVideoRegister(pVia, V_COLOR_KEY, keyLow); */ if (videoFlag & VIDEO_1_INUSE) { - SaveVideoRegister(pVia, V_COLOR_KEY, keyLow); - } - else { - if (pVia->HWDiff.dwSupportTwoColorKey ) /*CLE_C0*/ - SaveVideoRegister(pVia, V3_COLOR_KEY, keyLow); + SaveVideoRegister(pVia, V_COLOR_KEY, keyLow); + } else { + if (pVia->HWDiff.dwSupportTwoColorKey) /*CLE_C0 */ + SaveVideoRegister(pVia, V3_COLOR_KEY, keyLow); } - /*compose = (compose & ~0x0f) | SELECT_VIDEO_IF_COLOR_KEY;*/ - /*CLE_C0*/ - compose = (compose & ~0x0f) | SELECT_VIDEO_IF_COLOR_KEY | SELECT_VIDEO3_IF_COLOR_KEY; - /*compose = (compose & ~0x0f) ;*/ + /*compose = (compose & ~0x0f) | SELECT_VIDEO_IF_COLOR_KEY; */ + /*CLE_C0 */ + compose = + (compose & ~0x0f) | SELECT_VIDEO_IF_COLOR_KEY | + SELECT_VIDEO3_IF_COLOR_KEY; + /*compose = (compose & ~0x0f) ; */ return compose; } - -static CARD32 SetChromaKey(VIAPtr pVia, unsigned long videoFlag, - CARD32 chromaLow, CARD32 chromaHigh, - CARD32 miniCtl, CARD32 compose) +static CARD32 +SetChromaKey(VIAPtr pVia, unsigned long videoFlag, + CARD32 chromaLow, CARD32 chromaHigh, CARD32 miniCtl, CARD32 compose) { - chromaLow &= CHROMA_KEY_LOW; + chromaLow &= CHROMA_KEY_LOW; chromaHigh &= CHROMA_KEY_HIGH; - chromaLow |= (VIDInD(V_CHROMAKEY_LOW) & ~CHROMA_KEY_LOW); - chromaHigh |= (VIDInD(V_CHROMAKEY_HIGH)& ~CHROMA_KEY_HIGH); + chromaLow |= (VIDInD(V_CHROMAKEY_LOW) & ~CHROMA_KEY_LOW); + chromaHigh |= (VIDInD(V_CHROMAKEY_HIGH) & ~CHROMA_KEY_HIGH); if (pVia->ChipId == PCI_CHIP_VT3259) - chromaLow |= 0x40000000; - + chromaLow |= 0x40000000; SaveVideoRegister(pVia, V_CHROMAKEY_HIGH, chromaHigh); - if (videoFlag & VIDEO_1_INUSE) - { - SaveVideoRegister(pVia, V_CHROMAKEY_LOW, chromaLow & ~V_CHROMAKEY_V3); - /*Temporarily solve the H/W Interpolation error when using Chroma Key*/ - SaveVideoRegister(pVia, V1_MINI_CONTROL, miniCtl & 0xFFFFFFF8); - } - else - { - SaveVideoRegister(pVia, V_CHROMAKEY_LOW, chromaLow | V_CHROMAKEY_V3); - SaveVideoRegister(pVia, V3_MINI_CONTROL, miniCtl & 0xFFFFFFF8); + if (videoFlag & VIDEO_1_INUSE) { + SaveVideoRegister(pVia, V_CHROMAKEY_LOW, chromaLow & ~V_CHROMAKEY_V3); + /*Temporarily solve the H/W Interpolation error when using Chroma Key */ + SaveVideoRegister(pVia, V1_MINI_CONTROL, miniCtl & 0xFFFFFFF8); + } else { + SaveVideoRegister(pVia, V_CHROMAKEY_LOW, chromaLow | V_CHROMAKEY_V3); + SaveVideoRegister(pVia, V3_MINI_CONTROL, miniCtl & 0xFFFFFFF8); } - /*Modified by Scottie[2001.12.5] for select video if (color key & chroma key)*/ + /*Modified by Scottie[2001.12.5] for select video if (color key & chroma key) */ if (compose == SELECT_VIDEO_IF_COLOR_KEY) - compose = SELECT_VIDEO_IF_COLOR_KEY | SELECT_VIDEO_IF_CHROMA_KEY; + compose = SELECT_VIDEO_IF_COLOR_KEY | SELECT_VIDEO_IF_CHROMA_KEY; else - compose = (compose & ~0x0f) | SELECT_VIDEO_IF_CHROMA_KEY; + compose = (compose & ~0x0f) | SELECT_VIDEO_IF_CHROMA_KEY; return compose; } -static void SetVideoStart(VIAPtr pVia, unsigned long videoFlag, - unsigned int numbufs, CARD32 a1, CARD32 a2, CARD32 a3) +static void +SetVideoStart(VIAPtr pVia, unsigned long videoFlag, + unsigned int numbufs, CARD32 a1, CARD32 a2, CARD32 a3) { - CARD32 V1Addr[3] = {V1_STARTADDR_0, V1_STARTADDR_1, V1_STARTADDR_2}; - CARD32 V3Addr[3] = {V3_STARTADDR_0, V3_STARTADDR_1, V3_STARTADDR_2}; - CARD32* VideoAddr = (videoFlag & VIDEO_1_INUSE) ? V1Addr : V3Addr; + CARD32 V1Addr[3] = { V1_STARTADDR_0, V1_STARTADDR_1, V1_STARTADDR_2 }; + CARD32 V3Addr[3] = { V3_STARTADDR_0, V3_STARTADDR_1, V3_STARTADDR_2 }; + CARD32 *VideoAddr = (videoFlag & VIDEO_1_INUSE) ? V1Addr : V3Addr; SaveVideoRegister(pVia, VideoAddr[0], a1); - if (numbufs > 1) SaveVideoRegister(pVia, VideoAddr[1], a2); - if (numbufs > 2) SaveVideoRegister(pVia, VideoAddr[2], a3); + if (numbufs > 1) + SaveVideoRegister(pVia, VideoAddr[1], a2); + if (numbufs > 2) + SaveVideoRegister(pVia, VideoAddr[2], a3); } -static void SetHQVFetch(VIAPtr pVia, CARD32 srcFetch, unsigned long srcHeight) +static void +SetHQVFetch(VIAPtr pVia, CARD32 srcFetch, unsigned long srcHeight) { - unsigned long proReg=0; + unsigned long proReg = 0; + if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; + !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; - if (!pVia->HWDiff.dwHQVFetchByteUnit) { /* CLE_C0 */ - srcFetch >>= 3; /* fetch unit is 8-byte */ + if (!pVia->HWDiff.dwHQVFetchByteUnit) { /* CLE_C0 */ + srcFetch >>= 3; /* fetch unit is 8-byte */ } - SaveVideoRegister(pVia, HQV_SRC_FETCH_LINE + proReg, - ((srcFetch - 1) << 16) | (srcHeight - 1)); + SaveVideoRegister(pVia, HQV_SRC_FETCH_LINE + proReg, + ((srcFetch - 1) << 16) | (srcHeight - 1)); } -static void SetFetch(VIAPtr pVia, unsigned long videoFlag, CARD32 fetch) +static void +SetFetch(VIAPtr pVia, unsigned long videoFlag, CARD32 fetch) { fetch <<= 20; if (videoFlag & VIDEO_1_INUSE) { - SaveVideoRegister(pVia, V12_QWORD_PER_LINE, fetch); - } - else { - fetch |= VIDInD(V3_ALPHA_QWORD_PER_LINE) & ~V3_FETCH_COUNT; - SaveVideoRegister(pVia, V3_ALPHA_QWORD_PER_LINE, fetch); + SaveVideoRegister(pVia, V12_QWORD_PER_LINE, fetch); + } else { + fetch |= VIDInD(V3_ALPHA_QWORD_PER_LINE) & ~V3_FETCH_COUNT; + SaveVideoRegister(pVia, V3_ALPHA_QWORD_PER_LINE, fetch); } } -static void SetDisplayCount(VIAPtr pVia, unsigned long videoFlag, - unsigned long srcWidth, unsigned long srcHeight) +static void +SetDisplayCount(VIAPtr pVia, unsigned long videoFlag, + unsigned long srcWidth, unsigned long srcHeight) { unsigned long DisplayCount; @@ -1485,47 +1506,51 @@ static void SetDisplayCount(VIAPtr pVia, unsigned long videoFlag, */ if (videoFlag & VIDEO_HQV_INUSE) - DisplayCount = srcWidth - 1; + DisplayCount = srcWidth - 1; else - DisplayCount = srcWidth - pVia->swov.overlayRecordV1.dwminifyH; + DisplayCount = srcWidth - pVia->swov.overlayRecordV1.dwminifyH; if (videoFlag & VIDEO_1_INUSE) - SaveVideoRegister(pVia, V1_SOURCE_HEIGHT, (srcHeight << 16) | DisplayCount); + SaveVideoRegister(pVia, V1_SOURCE_HEIGHT, + (srcHeight << 16) | DisplayCount); else - SaveVideoRegister(pVia, V3_SOURCE_WIDTH, DisplayCount); + SaveVideoRegister(pVia, V3_SOURCE_WIDTH, DisplayCount); } -static void SetMiniAndZoom(VIAPtr pVia, unsigned long videoFlag, - CARD32 miniCtl, CARD32 zoomCtl) +static void +SetMiniAndZoom(VIAPtr pVia, unsigned long videoFlag, + CARD32 miniCtl, CARD32 zoomCtl) { if (videoFlag & VIDEO_1_INUSE) { - SaveVideoRegister(pVia, V1_MINI_CONTROL, miniCtl); - SaveVideoRegister(pVia, V1_ZOOM_CONTROL, zoomCtl); - } - else { - SaveVideoRegister(pVia, V3_MINI_CONTROL, miniCtl); - SaveVideoRegister(pVia, V3_ZOOM_CONTROL, zoomCtl); + SaveVideoRegister(pVia, V1_MINI_CONTROL, miniCtl); + SaveVideoRegister(pVia, V1_ZOOM_CONTROL, zoomCtl); + } else { + SaveVideoRegister(pVia, V3_MINI_CONTROL, miniCtl); + SaveVideoRegister(pVia, V3_ZOOM_CONTROL, zoomCtl); } } -static void SetVideoControl(VIAPtr pVia, unsigned long videoFlag, CARD32 vidCtl) +static void +SetVideoControl(VIAPtr pVia, unsigned long videoFlag, CARD32 vidCtl) { if (videoFlag & VIDEO_1_INUSE) - SaveVideoRegister(pVia, V1_CONTROL, vidCtl); + SaveVideoRegister(pVia, V1_CONTROL, vidCtl); else - SaveVideoRegister(pVia, V3_CONTROL, vidCtl); + SaveVideoRegister(pVia, V3_CONTROL, vidCtl); } -static void FireVideoCommand(VIAPtr pVia, unsigned long videoFlag, CARD32 compose) +static void +FireVideoCommand(VIAPtr pVia, unsigned long videoFlag, CARD32 compose) { if (videoFlag & VIDEO_1_INUSE) - SaveVideoRegister(pVia, V_COMPOSE_MODE, compose | V1_COMMAND_FIRE); + SaveVideoRegister(pVia, V_COMPOSE_MODE, compose | V1_COMMAND_FIRE); else - SaveVideoRegister(pVia, V_COMPOSE_MODE, compose | V3_COMMAND_FIRE); + SaveVideoRegister(pVia, V_COMPOSE_MODE, compose | V3_COMMAND_FIRE); } -static void -SetVideoWindow(ScrnInfoPtr pScrn, unsigned long videoFlag, LPDDUPDATEOVERLAY pUpdate) +static void +SetVideoWindow(ScrnInfoPtr pScrn, unsigned long videoFlag, + LPDDUPDATEOVERLAY pUpdate) { VIAPtr pVia = VIAPTR(pScrn); VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; @@ -1535,7 +1560,7 @@ SetVideoWindow(ScrnInfoPtr pScrn, unsigned long videoFlag, LPDDUPDATEOVERLAY pUp CARD32 bottom = pUpdate->DstBottom - 1; DBG_DD(ErrorF("SetVideoWindow: X (%ld,%ld) Y (%ld,%ld)\n", - left, right, top, bottom)); + left, right, top, bottom)); /* modify for HW DVI limitation, * When we enable the CRT and DVI both, then change resolution. @@ -1544,9 +1569,13 @@ SetVideoWindow(ScrnInfoPtr pScrn, unsigned long videoFlag, LPDDUPDATEOVERLAY pUp * So, we need to adjust the Y top and bottom position. */ if (videoFlag & VIDEO_1_INUSE) { - if (pBIOSInfo->SetDVI && pBIOSInfo->scaleY) { - top = pUpdate->DstTop * pBIOSInfo->panelY / pScrn->currentMode->VDisplay; - bottom = pUpdate->DstBottom * pBIOSInfo->panelY / pScrn->currentMode->VDisplay; + if (pBIOSInfo->SetDVI && pBIOSInfo->scaleY) { + top = + pUpdate->DstTop * pBIOSInfo->panelY / + pScrn->currentMode->VDisplay; + bottom = + pUpdate->DstBottom * pBIOSInfo->panelY / + pScrn->currentMode->VDisplay; } } @@ -1571,32 +1600,30 @@ SetVideoWindow(ScrnInfoPtr pScrn, unsigned long videoFlag, LPDDUPDATEOVERLAY pUp right = 2047; if (videoFlag & VIDEO_1_INUSE) { - SaveVideoRegister(pVia, V1_WIN_END_Y, (right << 16) | bottom); - SaveVideoRegister(pVia, V1_WIN_START_Y, (left << 16) | top); + SaveVideoRegister(pVia, V1_WIN_END_Y, (right << 16) | bottom); + SaveVideoRegister(pVia, V1_WIN_START_Y, (left << 16) | top); } else { - SaveVideoRegister(pVia, V3_WIN_END_Y, (right << 16) | bottom); - SaveVideoRegister(pVia, V3_WIN_START_Y, (left << 16) | top); + SaveVideoRegister(pVia, V3_WIN_END_Y, (right << 16) | bottom); + SaveVideoRegister(pVia, V3_WIN_START_Y, (left << 16) | top); } } - - /**************************************************************************** * * Upd_Video() * ***************************************************************************/ -static Bool +static Bool Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, - unsigned long startAddr, LPDDUPDATEOVERLAY pUpdate, - unsigned long srcPitch, - unsigned long oriSrcWidth, unsigned long oriSrcHeight, - unsigned long deinterlaceMode, - unsigned long haveColorKey, unsigned long haveChromaKey, - unsigned long colorKeyLow, unsigned long colorKeyHigh, - unsigned long chromaKeyLow, unsigned long chromaKeyHigh) + unsigned long startAddr, LPDDUPDATEOVERLAY pUpdate, + unsigned long srcPitch, + unsigned long oriSrcWidth, unsigned long oriSrcHeight, + unsigned long deinterlaceMode, + unsigned long haveColorKey, unsigned long haveChromaKey, + unsigned long colorKeyLow, unsigned long colorKeyHigh, + unsigned long chromaKeyLow, unsigned long chromaKeyHigh) { - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); VIAHWDiff *hwDiff = &pVia->HWDiff; @@ -1609,63 +1636,70 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, unsigned long haveHQVzoomH = 0, haveHQVzoomV = 0; unsigned long hqvSrcWidth = 0, hqvDstWidth = 0; unsigned long hqvSrcFetch = 0, hqvOffset = 0; - unsigned long dwOffset = 0,fetch = 0,tmp = 0; - unsigned long proReg=0; + unsigned long dwOffset = 0, fetch = 0, tmp = 0; + unsigned long proReg = 0; - if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(videoFlag & VIDEO_1_INUSE)) + if ((pVia->ChipId == PCI_CHIP_VT3259) && !(videoFlag & VIDEO_1_INUSE)) proReg = PRO_HQV1_OFFSET; - - compose = (VIDInD(V_COMPOSE_MODE) & - ~(SELECT_VIDEO_IF_COLOR_KEY | V1_COMMAND_FIRE | V3_COMMAND_FIRE)) | V_COMMAND_LOAD_VBI; + + compose = (VIDInD(V_COMPOSE_MODE) & + ~(SELECT_VIDEO_IF_COLOR_KEY | V1_COMMAND_FIRE | V3_COMMAND_FIRE)) | + V_COMMAND_LOAD_VBI; DBG_DD(ErrorF("// Upd_Video:\n")); DBG_DD(ErrorF("Modified rSrc X (%ld,%ld) Y (%ld,%ld)\n", - pUpdate->SrcLeft, pUpdate->SrcRight, - pUpdate->SrcTop, pUpdate->SrcBottom)); + pUpdate->SrcLeft, pUpdate->SrcRight, + pUpdate->SrcTop, pUpdate->SrcBottom)); DBG_DD(ErrorF("Modified rDest X (%ld,%ld) Y (%ld,%ld)\n", - pUpdate->DstLeft, pUpdate->DstRight, - pUpdate->DstTop, pUpdate->DstBottom)); - - pVia->swov.overlayRecordV1.dwWidth = dstWidth = pUpdate->DstRight - pUpdate->DstLeft; - pVia->swov.overlayRecordV1.dwHeight = dstHeight = pUpdate->DstBottom - pUpdate->DstTop; - srcWidth = (unsigned long) pUpdate->SrcRight - pUpdate->SrcLeft; - srcHeight = (unsigned long) pUpdate->SrcBottom - pUpdate->SrcTop; + pUpdate->DstLeft, pUpdate->DstRight, + pUpdate->DstTop, pUpdate->DstBottom)); + + pVia->swov.overlayRecordV1.dwWidth = dstWidth = + pUpdate->DstRight - pUpdate->DstLeft; + pVia->swov.overlayRecordV1.dwHeight = dstHeight = + pUpdate->DstBottom - pUpdate->DstTop; + srcWidth = (unsigned long)pUpdate->SrcRight - pUpdate->SrcLeft; + srcHeight = (unsigned long)pUpdate->SrcBottom - pUpdate->SrcTop; DBG_DD(ErrorF("===srcWidth= %ld \n", srcWidth)); DBG_DD(ErrorF("===srcHeight= %ld \n", srcHeight)); - + vidCtl = ViaSetVidCtl(pVia, videoFlag); viaOverlayGetV1V3Format(pVia, (videoFlag & VIDEO_1_INUSE) ? 1 : 3, - videoFlag, &vidCtl, &hqvCtl); - - if (hwDiff->dwThreeHQVBuffer) { /* CLE_C0: HQV supports triple-buffering */ + videoFlag, &vidCtl, &hqvCtl); + + if (hwDiff->dwThreeHQVBuffer) { /* CLE_C0: HQV supports triple-buffering */ hqvCtl &= ~HQV_SW_FLIP; - hqvCtl |= HQV_TRIPLE_BUFF | HQV_FLIP_STATUS; + hqvCtl |= HQV_TRIPLE_BUFF | HQV_FLIP_STATUS; } - - /* Starting address of source and Source offset*/ - dwOffset = viaOverlayGetSrcStartAddress(pVia, videoFlag, pUpdate, srcPitch, &hqvOffset); + + /* Starting address of source and Source offset */ + dwOffset = + viaOverlayGetSrcStartAddress(pVia, videoFlag, pUpdate, srcPitch, + &hqvOffset); DBG_DD(ErrorF("===dwOffset= 0x%lx \n", dwOffset)); - + pVia->swov.overlayRecordV1.dwOffset = dwOffset; - + if (pVia->swov.SrcFourCC == FOURCC_YV12 || pVia->swov.SrcFourCC == FOURCC_XVMC) { YCBCRREC YCbCr; + if (videoFlag & VIDEO_HQV_INUSE) { SetVideoStart(pVia, videoFlag, hwDiff->dwThreeHQVBuffer ? 3 : 2, - pVia->swov.overlayRecordV1.dwHQVAddr[0]+dwOffset, - pVia->swov.overlayRecordV1.dwHQVAddr[1]+dwOffset, - pVia->swov.overlayRecordV1.dwHQVAddr[2]+dwOffset); - + pVia->swov.overlayRecordV1.dwHQVAddr[0] + dwOffset, + pVia->swov.overlayRecordV1.dwHQVAddr[1] + dwOffset, + pVia->swov.overlayRecordV1.dwHQVAddr[2] + dwOffset); + if (pVia->swov.SrcFourCC != FOURCC_XVMC) { YCbCr = viaOverlayGetYCbCrStartAddress(videoFlag, startAddr, - pVia->swov.overlayRecordV1.dwOffset, - pVia->swov.overlayRecordV1.dwUVoffset, - srcPitch,oriSrcHeight); + pVia->swov.overlayRecordV1.dwOffset, + pVia->swov.overlayRecordV1.dwUVoffset, + srcPitch, oriSrcHeight); if (pVia->ChipId == PCI_CHIP_VT3259) { - SaveVideoRegister(pVia, HQV_SRC_STARTADDR_Y + proReg, YCbCr.dwY); - SaveVideoRegister(pVia, HQV_SRC_STARTADDR_U + proReg, YCbCr.dwCB); + SaveVideoRegister(pVia, HQV_SRC_STARTADDR_Y + proReg, + YCbCr.dwY); + SaveVideoRegister(pVia, HQV_SRC_STARTADDR_U + proReg, + YCbCr.dwCB); } else { SaveVideoRegister(pVia, HQV_SRC_STARTADDR_Y, YCbCr.dwY); SaveVideoRegister(pVia, HQV_SRC_STARTADDR_U, YCbCr.dwCR); @@ -1674,32 +1708,33 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, } } else { YCbCr = viaOverlayGetYCbCrStartAddress(videoFlag, startAddr, - pVia->swov.overlayRecordV1.dwOffset, - pVia->swov.overlayRecordV1.dwUVoffset, - srcPitch, oriSrcHeight); - + pVia->swov.overlayRecordV1.dwOffset, + pVia->swov.overlayRecordV1.dwUVoffset, + srcPitch, oriSrcHeight); + if (videoFlag & VIDEO_1_INUSE) { SaveVideoRegister(pVia, V1_STARTADDR_0, YCbCr.dwY); SaveVideoRegister(pVia, V1_STARTADDR_CB0, YCbCr.dwCR); SaveVideoRegister(pVia, V1_STARTADDR_CR0, YCbCr.dwCB); } else - DBG_DD(ErrorF("Upd_Video() : We do not support YV12 with V3!\n")); + DBG_DD(ErrorF + ("Upd_Video() : We do not support YV12 with V3!\n")); } } else { if (videoFlag & VIDEO_HQV_INUSE) { - hqvSrcWidth = (unsigned long) pUpdate->SrcRight - pUpdate->SrcLeft; - hqvDstWidth = (unsigned long) pUpdate->DstRight - pUpdate->DstLeft; - + hqvSrcWidth = (unsigned long)pUpdate->SrcRight - pUpdate->SrcLeft; + hqvDstWidth = (unsigned long)pUpdate->DstRight - pUpdate->DstLeft; + if (hqvSrcWidth > hqvDstWidth) dwOffset = dwOffset * hqvDstWidth / hqvSrcWidth; - + SetVideoStart(pVia, videoFlag, hwDiff->dwThreeHQVBuffer ? 3 : 2, - pVia->swov.overlayRecordV1.dwHQVAddr[0] + hqvOffset, - pVia->swov.overlayRecordV1.dwHQVAddr[1] + hqvOffset, - pVia->swov.overlayRecordV1.dwHQVAddr[2] + hqvOffset); - + pVia->swov.overlayRecordV1.dwHQVAddr[0] + hqvOffset, + pVia->swov.overlayRecordV1.dwHQVAddr[1] + hqvOffset, + pVia->swov.overlayRecordV1.dwHQVAddr[2] + hqvOffset); + if (pVia->ChipId == PCI_CHIP_VT3259) - SaveVideoRegister(pVia, 0x1cc + proReg, dwOffset); + SaveVideoRegister(pVia, 0x1cc + proReg, dwOffset); SaveVideoRegister(pVia, HQV_SRC_STARTADDR_Y + proReg, startAddr); } else { startAddr += dwOffset; @@ -1708,12 +1743,13 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, } fetch = viaOverlayGetFetch(pVia, videoFlag, - srcWidth, dstWidth, oriSrcWidth, &hqvSrcFetch); + srcWidth, dstWidth, oriSrcWidth, &hqvSrcFetch); DBG_DD(ErrorF("===fetch= 0x%lx\n", fetch)); #if 0 /* For DCT450 test-BOB INTERLEAVE */ - if ((deinterlaceMode & DDOVER_INTERLEAVED) && (deinterlaceMode & DDOVER_BOB)) { + if ((deinterlaceMode & DDOVER_INTERLEAVED) + && (deinterlaceMode & DDOVER_BOB)) { if (videoFlag & VIDEO_HQV_INUSE) hqvCtl |= HQV_FIELD_2_FRAME | HQV_FRAME_2_FIELD | HQV_DEINTERLACE; else @@ -1726,67 +1762,71 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, vidCtl |= V1_BOB_ENABLE; } #endif - + if (videoFlag & VIDEO_HQV_INUSE) { - if (!(deinterlaceMode & DDOVER_INTERLEAVED) && (deinterlaceMode & DDOVER_BOB)) + if (!(deinterlaceMode & DDOVER_INTERLEAVED) + && (deinterlaceMode & DDOVER_BOB)) SetHQVFetch(pVia, hqvSrcFetch, oriSrcHeight << 1); else SetHQVFetch(pVia, hqvSrcFetch, oriSrcHeight); - + if (pVia->swov.SrcFourCC == FOURCC_YV12 || pVia->swov.SrcFourCC == FOURCC_XVMC) { if (videoFlag & VIDEO_1_INUSE) SaveVideoRegister(pVia, V1_STRIDE, srcPitch << 1); else SaveVideoRegister(pVia, V3_STRIDE, srcPitch << 1); - + if (pVia->HWDiff.dwHQVFetchByteUnit) - SaveVideoRegister(pVia, HQV_SRC_STRIDE + proReg, ((srcPitch >> 1) << 16) | srcPitch | HQV_FIFO_DEPTH_1); + SaveVideoRegister(pVia, HQV_SRC_STRIDE + proReg, + ((srcPitch >> 1) << 16) | srcPitch | HQV_FIFO_DEPTH_1); else - SaveVideoRegister(pVia, HQV_SRC_STRIDE + proReg, ((srcPitch >> 1) << 16) | srcPitch); - + SaveVideoRegister(pVia, HQV_SRC_STRIDE + proReg, + ((srcPitch >> 1) << 16) | srcPitch); + SaveVideoRegister(pVia, HQV_DST_STRIDE + proReg, (srcPitch << 1)); } else { if (videoFlag & VIDEO_1_INUSE) SaveVideoRegister(pVia, V1_STRIDE, srcPitch); else SaveVideoRegister(pVia, V3_STRIDE, srcPitch); - + SaveVideoRegister(pVia, HQV_SRC_STRIDE + proReg, srcPitch); SaveVideoRegister(pVia, HQV_DST_STRIDE + proReg, srcPitch); } - + } else { if (videoFlag & VIDEO_1_INUSE) SaveVideoRegister(pVia, V1_STRIDE, srcPitch | (srcPitch << 15)); else SaveVideoRegister(pVia, V3_STRIDE, srcPitch | (srcPitch << 15)); } - + /* Set destination window */ SetVideoWindow(pScrn, videoFlag, pUpdate); - + compose |= ALWAYS_SELECT_VIDEO; - - /* Setup X zoom factor*/ - + + /* Setup X zoom factor */ + pVia->swov.overlayRecordV1.dwFetchAlignment = 0; - if (!viaOverlayHQVCalcZoomWidth(pVia, videoFlag, srcWidth, dstWidth, &zoomCtl, &miniCtl, - &hqvFilterCtl, &hqvMiniCtl, &haveHQVzoomH)) { + if (!viaOverlayHQVCalcZoomWidth(pVia, videoFlag, srcWidth, dstWidth, + &zoomCtl, &miniCtl, &hqvFilterCtl, &hqvMiniCtl, &haveHQVzoomH)) { /* Need to scale (minify) too much - can't handle it. */ SetFetch(pVia, videoFlag, fetch); FireVideoCommand(pVia, videoFlag, compose); FlushVidRegBuffer(pVia); return FALSE; } - + SetFetch(pVia, videoFlag, fetch); - + /* Setup Y zoom factor */ - + /* For DCT450 test-BOB INTERLEAVE */ - if ((deinterlaceMode & DDOVER_INTERLEAVED) && (deinterlaceMode & DDOVER_BOB)) { + if ((deinterlaceMode & DDOVER_INTERLEAVED) + && (deinterlaceMode & DDOVER_BOB)) { if (!(videoFlag & VIDEO_HQV_INUSE)) { srcHeight /= 2; if (videoFlag & VIDEO_1_INUSE) @@ -1808,19 +1848,19 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, } SetDisplayCount(pVia, videoFlag, srcWidth, srcHeight); - - if (!viaOverlayHQVCalcZoomHeight(pVia, srcHeight, dstHeight, &zoomCtl, &miniCtl, - &hqvFilterCtl, &hqvMiniCtl ,&haveHQVzoomV)) { + + if (!viaOverlayHQVCalcZoomHeight(pVia, srcHeight, dstHeight, &zoomCtl, + &miniCtl, &hqvFilterCtl, &hqvMiniCtl, &haveHQVzoomV)) { /* Need to scale (minify) too much - can't handle it. */ FireVideoCommand(pVia, videoFlag, compose); FlushVidRegBuffer(pVia); return FALSE; } - + SetupFIFOs(pVia, videoFlag, miniCtl, srcWidth); - + if (videoFlag & VIDEO_HQV_INUSE) { - miniCtl=0; + miniCtl = 0; if (haveHQVzoomH || haveHQVzoomV) { tmp = 0; @@ -1835,11 +1875,11 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, tmp |= zoomCtl & 0x0000ffff; hqvFilterCtl &= 0xfffdffff; } - - /* Temporary fix for 2D bandwidth problem. 2002/08/01*/ + + /* Temporary fix for 2D bandwidth problem. 2002/08/01 */ if (pVia->swov.gdwUseExtendedFIFO) miniCtl &= ~V1_Y_INTERPOLY; - + SetMiniAndZoom(pVia, videoFlag, miniCtl, tmp); } else { if (srcHeight == dstHeight) @@ -1851,35 +1891,39 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, SaveVideoRegister(pVia, HQV_FILTER_CONTROL + proReg, hqvFilterCtl); } else SetMiniAndZoom(pVia, videoFlag, miniCtl, zoomCtl); - + if (haveColorKey) - compose = SetColorKey(pVia, videoFlag, colorKeyLow, colorKeyHigh, compose); + compose = + SetColorKey(pVia, videoFlag, colorKeyLow, colorKeyHigh, compose); if (haveChromaKey) compose = SetChromaKey(pVia, videoFlag, chromaKeyLow, chromaKeyHigh, - miniCtl, compose); - - /* Setup video control*/ + miniCtl, compose); + + /* Setup video control */ if (videoFlag & VIDEO_HQV_INUSE) { if (!pVia->swov.SWVideo_ON) { DBG_DD(ErrorF(" First HQV\n")); - + FlushVidRegBuffer(pVia); - + DBG_DD(ErrorF(" Wait flips")); - + if (hwDiff->dwHQVInitPatch) { DBG_DD(ErrorF(" Initializing HQV twice ...")); for (i = 0; i < 2; i++) { - viaWaitHQVFlipClear(pVia, ((hqvCtl & ~HQV_SW_FLIP) | HQV_FLIP_STATUS) & ~HQV_ENABLE); + viaWaitHQVFlipClear(pVia, + ((hqvCtl & ~HQV_SW_FLIP) | HQV_FLIP_STATUS) & + ~HQV_ENABLE); VIDOutD(HQV_CONTROL + proReg, hqvCtl); viaWaitHQVFlip(pVia); } DBG_DD(ErrorF(" done.\n")); - } else { /* CLE_C0 */ + } else { /* CLE_C0 */ CARD32 volatile *HQVCtrl = - (CARD32 volatile *) (pVia->VidMapBase + HQV_CONTROL + proReg); - + (CARD32 volatile *)(pVia->VidMapBase + HQV_CONTROL + + proReg); + /* check HQV is idle */ DBG_DD(ErrorF("HQV control wf - %08lx\n", *HQVCtrl)); while (!(*HQVCtrl & HQV_IDLE)) { @@ -1892,13 +1936,14 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, VIDOutD(HQV_CONTROL + proReg, hqvCtl & ~HQV_SW_FLIP); VIDOutD(HQV_CONTROL + proReg, hqvCtl | HQV_SW_FLIP); - + DBG_DD(ErrorF("HQV control wf5 - %08lx\n", *HQVCtrl)); - DBG_DD(ErrorF(" Wait flips5")); - + DBG_DD(ErrorF(" Wait flips5")); + if (pVia->ChipId != PCI_CHIP_VT3259) { - for (i = 0; (i < 50) && !(*HQVCtrl & HQV_FLIP_STATUS); i++) { - DBG_DD(ErrorF(" HQV wait %d %08lx\n",i, *HQVCtrl)); + for (i = 0; (i < 50) && !(*HQVCtrl & HQV_FLIP_STATUS); + i++) { + DBG_DD(ErrorF(" HQV wait %d %08lx\n", i, *HQVCtrl)); *HQVCtrl |= HQV_SW_FLIP | HQV_FLIP_STATUS; usleep(1); } @@ -1908,12 +1953,12 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, DBG_DD(ErrorF(" Wait flips6")); } - + if (videoFlag & VIDEO_1_INUSE) { VIDOutD(V1_CONTROL, vidCtl); VIDOutD(V_COMPOSE_MODE, compose | V1_COMMAND_FIRE); if (pVia->swov.gdwUseExtendedFIFO) { - /*Set Display FIFO*/ + /*Set Display FIFO */ DBG_DD(ErrorF(" Wait flips7")); viaWaitVBI(pVia); DBG_DD(ErrorF(" Wait flips 8")); @@ -1930,16 +1975,17 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, DBG_DD(ErrorF(" Done flips")); } else { DBG_DD(ErrorF(" Normal called\n")); - SaveVideoRegister(pVia, HQV_CONTROL + proReg, hqvCtl | HQV_FLIP_STATUS); + SaveVideoRegister(pVia, HQV_CONTROL + proReg, + hqvCtl | HQV_FLIP_STATUS); SetVideoControl(pVia, videoFlag, vidCtl); FireVideoCommand(pVia, videoFlag, compose); - viaWaitHQVDone(pVia); + viaWaitHQVDone(pVia); FlushVidRegBuffer(pVia); } } else { SetVideoControl(pVia, videoFlag, vidCtl); FireVideoCommand(pVia, videoFlag, compose); - viaWaitHQVDone(pVia); + viaWaitHQVDone(pVia); FlushVidRegBuffer(pVia); } pVia->swov.SWVideo_ON = TRUE; @@ -1948,7 +1994,7 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, return TRUE; -} /* Upd_Video */ +} /* Upd_Video */ /* * VIAVidUpdateOverlay @@ -1959,68 +2005,64 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag, Bool VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY pUpdate) { - VIAPtr pVia = VIAPTR(pScrn); - OVERLAYRECORD* ovlV1 = &pVia->swov.overlayRecordV1; + VIAPtr pVia = VIAPTR(pScrn); + OVERLAYRECORD *ovlV1 = &pVia->swov.overlayRecordV1; unsigned long flags = pUpdate->dwFlags; unsigned long videoFlag = 0; unsigned long startAddr = 0; - unsigned long deinterlaceMode=0; + unsigned long deinterlaceMode = 0; unsigned long haveColorKey = 0, haveChromaKey = 0; unsigned long colorKeyLow = 0, colorKeyHigh = 0; unsigned long chromaKeyLow = 0, chromaKeyHigh = 0; - unsigned long scrnWidth, scrnHeight; int dstTop, dstBottom, dstLeft, dstRight; - int panDX,panDY; /* Panning delta */ + int panDX, panDY; /* Panning delta */ unsigned long proReg = 0; - - panDX = pVia->swov.panning_x; - panDY = pVia->swov.panning_y; + panDX = pVia->swov.panning_x; + panDY = pVia->swov.panning_y; pVia->swov.oldPanningX = pVia->swov.panning_x; pVia->swov.oldPanningY = pVia->swov.panning_y; - pUpdate->DstLeft -= panDX; - pUpdate->DstTop -= panDY; - pUpdate->DstRight -= panDX; + pUpdate->DstLeft -= panDX; + pUpdate->DstTop -= panDY; + pUpdate->DstRight -= panDX; pUpdate->DstBottom -= panDY; DBG_DD(ErrorF("Raw rSrc X (%ld,%ld) Y (%ld,%ld)\n", - pUpdate->SrcLeft, pUpdate->SrcRight, - pUpdate->SrcTop, pUpdate->SrcBottom)); + pUpdate->SrcLeft, pUpdate->SrcRight, + pUpdate->SrcTop, pUpdate->SrcBottom)); DBG_DD(ErrorF("Raw rDest X (%ld,%ld) Y (%ld,%ld)\n", - pUpdate->DstLeft, pUpdate->DstRight, - pUpdate->DstTop, pUpdate->DstBottom)); + pUpdate->DstLeft, pUpdate->DstRight, + pUpdate->DstTop, pUpdate->DstBottom)); if ((pVia->swov.SrcFourCC == FOURCC_YUY2) || - (pVia->swov.SrcFourCC == FOURCC_RV15) || - (pVia->swov.SrcFourCC == FOURCC_RV16) || - (pVia->swov.SrcFourCC == FOURCC_RV32) || - (pVia->swov.SrcFourCC == FOURCC_YV12) || - (pVia->swov.SrcFourCC == FOURCC_XVMC)) - { - videoFlag = pVia->swov.gdwVideoFlagSW; + (pVia->swov.SrcFourCC == FOURCC_RV15) || + (pVia->swov.SrcFourCC == FOURCC_RV16) || + (pVia->swov.SrcFourCC == FOURCC_RV32) || + (pVia->swov.SrcFourCC == FOURCC_YV12) || + (pVia->swov.SrcFourCC == FOURCC_XVMC)) { + videoFlag = pVia->swov.gdwVideoFlagSW; } - if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(videoFlag & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; + if ((pVia->ChipId == PCI_CHIP_VT3259) && !(videoFlag & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; flags |= DDOVER_INTERLEAVED; /* Disable destination color keying if the alpha window is in use. */ if (pVia->swov.gdwAlphaEnabled) - flags &= ~DDOVER_KEYDEST; + flags &= ~DDOVER_KEYDEST; ResetVidRegBuffer(pVia); - /*for SW decode HW overlay use*/ + /*for SW decode HW overlay use */ startAddr = VIDInD(HQV_SRC_STARTADDR_Y + proReg); - + if (flags & DDOVER_KEYDEST) { haveColorKey = 1; colorKeyLow = pUpdate->dwColorSpaceLowValue; @@ -2031,85 +2073,90 @@ VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY pUpdate) if (flags & DDOVER_BOB) deinterlaceMode |= DDOVER_BOB; - - if ((pVia->ChipId == PCI_CHIP_CLE3122) && (pScrn->currentMode->HDisplay > 1024)) { + + if ((pVia->ChipId == PCI_CHIP_CLE3122) + && (pScrn->currentMode->HDisplay > 1024)) { DBG_DD(ErrorF("UseExtendedFIFO\n")); pVia->swov.gdwUseExtendedFIFO = 1; } else pVia->swov.gdwUseExtendedFIFO = 0; - + /* Figure out actual rSrc rectangle */ - + dstLeft = pUpdate->DstLeft; dstTop = pUpdate->DstTop; dstRight = pUpdate->DstRight; dstBottom = pUpdate->DstBottom; - - scrnWidth = pScrn->currentMode->HDisplay; + + scrnWidth = pScrn->currentMode->HDisplay; scrnHeight = pScrn->currentMode->VDisplay; - + if (dstLeft < 0) { pUpdate->SrcLeft = (((-dstLeft) * ovlV1->dwV1OriWidth) + - ((dstRight - dstLeft) >> 1)) / (dstRight - dstLeft); + ((dstRight - dstLeft) >> 1)) / (dstRight - dstLeft); } if (dstRight > scrnWidth) { pUpdate->SrcRight = (((scrnWidth - dstLeft) * ovlV1->dwV1OriWidth) + - ((dstRight - dstLeft) >> 1)) / (dstRight - dstLeft); + ((dstRight - dstLeft) >> 1)) / (dstRight - dstLeft); } if (dstTop < 0) { pUpdate->SrcTop = (((-dstTop) * ovlV1->dwV1OriHeight) + - ((dstBottom - dstTop) >> 1)) / (dstBottom - dstTop); + ((dstBottom - dstTop) >> 1)) / (dstBottom - dstTop); } if (dstBottom > scrnHeight) { pUpdate->SrcBottom = (((scrnHeight - dstTop) * ovlV1->dwV1OriHeight) + - ((dstBottom - dstTop) >> 1)) / (dstBottom - dstTop); + ((dstBottom - dstTop) >> 1)) / (dstBottom - dstTop); } - + /* Save modified src & original dest rectangle param. */ - + if ((pVia->swov.SrcFourCC == FOURCC_YUY2) || - (pVia->swov.SrcFourCC == FOURCC_RV15) || - (pVia->swov.SrcFourCC == FOURCC_RV16) || - (pVia->swov.SrcFourCC == FOURCC_RV32) || + (pVia->swov.SrcFourCC == FOURCC_RV15) || + (pVia->swov.SrcFourCC == FOURCC_RV16) || + (pVia->swov.SrcFourCC == FOURCC_RV32) || (pVia->swov.SrcFourCC == FOURCC_YV12) || - (pVia->swov.SrcFourCC == FOURCC_XVMC)) { - pVia->swov.SWDevice.gdwSWDstLeft = pUpdate->DstLeft + panDX; - pVia->swov.SWDevice.gdwSWDstTop = pUpdate->DstTop + panDY; - pVia->swov.SWDevice.gdwSWDstWidth = pUpdate->DstRight - pUpdate->DstLeft; - pVia->swov.SWDevice.gdwSWDstHeight = pUpdate->DstBottom - pUpdate->DstTop; - - pVia->swov.SWDevice.gdwSWSrcWidth = + (pVia->swov.SrcFourCC == FOURCC_XVMC)) { + pVia->swov.SWDevice.gdwSWDstLeft = pUpdate->DstLeft + panDX; + pVia->swov.SWDevice.gdwSWDstTop = pUpdate->DstTop + panDY; + pVia->swov.SWDevice.gdwSWDstWidth = + pUpdate->DstRight - pUpdate->DstLeft; + pVia->swov.SWDevice.gdwSWDstHeight = + pUpdate->DstBottom - pUpdate->DstTop; + + pVia->swov.SWDevice.gdwSWSrcWidth = ovlV1->dwV1SrcWidth = pUpdate->SrcRight - pUpdate->SrcLeft; pVia->swov.SWDevice.gdwSWSrcHeight = ovlV1->dwV1SrcHeight = pUpdate->SrcBottom - pUpdate->SrcTop; } - - ovlV1->dwV1SrcLeft = pUpdate->SrcLeft; + + ovlV1->dwV1SrcLeft = pUpdate->SrcLeft; ovlV1->dwV1SrcRight = pUpdate->SrcRight; - ovlV1->dwV1SrcTop = pUpdate->SrcTop; - ovlV1->dwV1SrcBot = pUpdate->SrcBottom; - + ovlV1->dwV1SrcTop = pUpdate->SrcTop; + ovlV1->dwV1SrcBot = pUpdate->SrcBottom; + /* Figure out actual rDest rectangle */ - + pUpdate->DstLeft = (dstLeft < 0) ? 0 : dstLeft; pUpdate->DstTop = (dstTop < 0) ? 0 : dstTop; - if (pUpdate->DstTop >= scrnHeight) pUpdate->DstTop = scrnHeight-1; + if (pUpdate->DstTop >= scrnHeight) + pUpdate->DstTop = scrnHeight - 1; pUpdate->DstRight = (dstRight > scrnWidth) ? scrnWidth : dstRight; pUpdate->DstBottom = (dstBottom > scrnHeight) ? scrnHeight : dstBottom; - + /* Update the overlay */ - + if (!Upd_Video(pScrn, videoFlag, startAddr, pUpdate, - pVia->swov.SWDevice.dwPitch, ovlV1->dwV1OriWidth, - ovlV1->dwV1OriHeight, deinterlaceMode, haveColorKey, haveChromaKey, - colorKeyLow, colorKeyHigh, chromaKeyLow, chromaKeyHigh)) + pVia->swov.SWDevice.dwPitch, ovlV1->dwV1OriWidth, + ovlV1->dwV1OriHeight, deinterlaceMode, haveColorKey, + haveChromaKey, colorKeyLow, colorKeyHigh, chromaKeyLow, + chromaKeyHigh)) return FALSE; pVia->swov.SWVideo_ON = FALSE; - + return TRUE; -} /*VIAVidUpdateOverlay*/ +} /*VIAVidUpdateOverlay */ /* * @@ -2117,49 +2164,49 @@ VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY pUpdate) void ViaOverlayHide(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); CARD32 videoFlag = 0; unsigned long proReg = 0; if ((pVia->swov.SrcFourCC == FOURCC_YUY2) || - (pVia->swov.SrcFourCC == FOURCC_RV15) || - (pVia->swov.SrcFourCC == FOURCC_RV16) || - (pVia->swov.SrcFourCC == FOURCC_RV32) || - (pVia->swov.SrcFourCC == FOURCC_YV12) || - (pVia->swov.SrcFourCC == FOURCC_XVMC)) - videoFlag = pVia->swov.gdwVideoFlagSW; + (pVia->swov.SrcFourCC == FOURCC_RV15) || + (pVia->swov.SrcFourCC == FOURCC_RV16) || + (pVia->swov.SrcFourCC == FOURCC_RV32) || + (pVia->swov.SrcFourCC == FOURCC_YV12) || + (pVia->swov.SrcFourCC == FOURCC_XVMC)) + videoFlag = pVia->swov.gdwVideoFlagSW; + + if ((pVia->ChipId == PCI_CHIP_VT3259) && !(videoFlag & VIDEO_1_INUSE)) + proReg = PRO_HQV1_OFFSET; - if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(videoFlag & VIDEO_1_INUSE)) - proReg = PRO_HQV1_OFFSET; - ResetVidRegBuffer(pVia); - + if (pVia->HWDiff.dwHQVDisablePatch) ViaSeqMask(hwp, 0x2E, 0x00, 0x10); - + SaveVideoRegister(pVia, V_FIFO_CONTROL, V1_FIFO_PRETHRESHOLD12 | - V1_FIFO_THRESHOLD8 | V1_FIFO_DEPTH16); + V1_FIFO_THRESHOLD8 | V1_FIFO_DEPTH16); SaveVideoRegister(pVia, ALPHA_V3_FIFO_CONTROL, ALPHA_FIFO_THRESHOLD4 - | ALPHA_FIFO_DEPTH8 | V3_FIFO_THRESHOLD24 | V3_FIFO_DEPTH32); - + | ALPHA_FIFO_DEPTH8 | V3_FIFO_THRESHOLD24 | V3_FIFO_DEPTH32); + if (videoFlag & VIDEO_HQV_INUSE) - SaveVideoRegister(pVia, HQV_CONTROL + proReg, VIDInD(HQV_CONTROL + proReg) & ~HQV_ENABLE); - + SaveVideoRegister(pVia, HQV_CONTROL + proReg, + VIDInD(HQV_CONTROL + proReg) & ~HQV_ENABLE); + if (videoFlag & VIDEO_1_INUSE) SaveVideoRegister(pVia, V1_CONTROL, VIDInD(V1_CONTROL) & ~V1_ENABLE); else SaveVideoRegister(pVia, V3_CONTROL, VIDInD(V3_CONTROL) & ~V3_ENABLE); - + FireVideoCommand(pVia, videoFlag, VIDInD(V_COMPOSE_MODE)); FlushVidRegBuffer(pVia); - + if (pVia->HWDiff.dwHQVDisablePatch) ViaSeqMask(hwp, 0x2E, 0x10, 0x10); - + pVia->swov.SWVideo_ON = FALSE; - + if (pVia->swov.gdwUseExtendedFIFO) ViaSetPrimaryFIFO(pScrn, pScrn->currentMode); diff --git a/src/via_swov.h b/src/via_swov.h index ac84d6d..10569a1 100644 --- a/src/via_swov.h +++ b/src/via_swov.h @@ -26,7 +26,7 @@ #ifndef _VIA_SWOV_H_ #define _VIA_SWOV_H_ 1 -/* #define XV_DEBUG 1 */ /* write log msg to /var/log/XFree86.0.log */ + /* #define XV_DEBUG 1 *//* write log msg to /var/log/XFree86.0.log */ #ifdef XV_DEBUG # define DBG_DD(x) (x) @@ -51,31 +51,32 @@ */ typedef struct __VIAHWDiff { - unsigned long dwThreeHQVBuffer; /* Use Three HQV Buffers*/ - /* unsigned long dwV3SrcHeightSetting;*/ /* Set Video Source Width and Height*/ - /* unsigned long dwSupportExtendFIFO;*/ /* Support Extand FIFO*/ - unsigned long dwHQVFetchByteUnit; /* HQV Fetch Count unit is byte*/ - unsigned long dwHQVInitPatch; /* Initialize HQV Engine 2 times*/ - /*unsigned long dwSupportV3Gamma;*/ /* Support V3 Gamma */ - /*unsigned long dwUpdFlip;*/ /* Set HQV3D0[15] to flip video*/ - unsigned long dwHQVDisablePatch; /* Change Video Engine Clock setting for HQV disable bug*/ - /*unsigned long dwSUBFlip;*/ /* Set HQV3D0[15] to flip video for sub-picture blending*/ - /*unsigned long dwNeedV3Prefetch;*/ /* V3 pre-fetch function for K8*/ - /*unsigned long dwNeedV4Prefetch;*/ /* V4 pre-fetch function for K8*/ - /*unsigned long dwUseSystemMemory;*/ /* Use system memory for DXVA compressed data buffers*/ - /*unsigned long dwExpandVerPatch;*/ /* Patch video HW bug in expand SIM mode or same display path*/ - /*unsigned long dwExpandVerHorPatch;*/ /* Patch video HW bug in expand SAMM mode or same display path*/ - /*unsigned long dwV3ExpireNumTune;*/ /* Change V3 expire number setting for V3 bandwidth issue*/ - /*unsigned long dwV3FIFOThresholdTune;*/ /* Change V3 FIFO, Threshold and Pre-threshold setting for V3 bandwidth issue*/ - /*unsigned long dwCheckHQVFIFOEmpty;*/ /* HW Flip path, need to check HQV FIFO status */ - /*unsigned long dwUseMPEGAGP;*/ /* Use MPEG AGP function*/ - /*unsigned long dwV3FIFOPatch;*/ /* For CLE V3 FIFO Bug (srcWidth <= 8)*/ - unsigned long dwSupportTwoColorKey; /* Support two color key*/ - /* unsigned long dwCxColorSpace; */ /* CLE_Cx ColorSpace*/ + unsigned long dwThreeHQVBuffer; /* Use Three HQV Buffers */ + /* unsigned long dwV3SrcHeightSetting; *//* Set Video Source Width and Height */ + /* unsigned long dwSupportExtendFIFO; *//* Support Extand FIFO */ + unsigned long dwHQVFetchByteUnit; /* HQV Fetch Count unit is byte */ + unsigned long dwHQVInitPatch; /* Initialize HQV Engine 2 times */ + /*unsigned long dwSupportV3Gamma; *//* Support V3 Gamma */ + /*unsigned long dwUpdFlip; *//* Set HQV3D0[15] to flip video */ + unsigned long dwHQVDisablePatch; /* Change Video Engine Clock setting for HQV disable bug */ + /*unsigned long dwSUBFlip; *//* Set HQV3D0[15] to flip video for sub-picture blending */ + /*unsigned long dwNeedV3Prefetch; *//* V3 pre-fetch function for K8 */ + /*unsigned long dwNeedV4Prefetch; *//* V4 pre-fetch function for K8 */ + /*unsigned long dwUseSystemMemory; *//* Use system memory for DXVA compressed data buffers */ + /*unsigned long dwExpandVerPatch; *//* Patch video HW bug in expand SIM mode or same display path */ + /*unsigned long dwExpandVerHorPatch; *//* Patch video HW bug in expand SAMM mode or same display path */ + /*unsigned long dwV3ExpireNumTune; *//* Change V3 expire number setting for V3 bandwidth issue */ + /*unsigned long dwV3FIFOThresholdTune; *//* Change V3 FIFO, Threshold and Pre-threshold setting for V3 bandwidth issue */ + /*unsigned long dwCheckHQVFIFOEmpty; *//* HW Flip path, need to check HQV FIFO status */ + /*unsigned long dwUseMPEGAGP; *//* Use MPEG AGP function */ + /*unsigned long dwV3FIFOPatch; *//* For CLE V3 FIFO Bug (srcWidth <= 8) */ + unsigned long dwSupportTwoColorKey; /* Support two color key */ + /* unsigned long dwCxColorSpace; *//* CLE_Cx ColorSpace */ } VIAHWDiff; -void VIAVidHWDiffInit(ScrnInfoPtr pScrn); -int ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, CARD32 FourCC, CARD16 Width, CARD16 Height); +void VIAVidHWDiffInit(ScrnInfoPtr pScrn); +int ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, + CARD32 FourCC, CARD16 Width, CARD16 Height); void ViaSwovSurfaceDestroy(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv); Bool VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY pUpdate); void ViaOverlayHide(ScrnInfoPtr pScrn); diff --git a/src/via_video.c b/src/via_video.c index 7c4bb2f..d334e8c 100644 --- a/src/via_video.c +++ b/src/via_video.c @@ -58,10 +58,10 @@ /* * D E F I N E */ -#define OFF_DELAY 200 /* milliseconds */ +#define OFF_DELAY 200 /* milliseconds */ #define FREE_DELAY 60000 #define PARAMSIZE 1024 -#define SLICESIZE 65536 +#define SLICESIZE 65536 #define OFF_TIMER 0x01 #define FREE_TIMER 0x02 #define TIMER_MASK (OFF_TIMER | FREE_TIMER) @@ -75,166 +75,180 @@ #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) #ifndef XvExtension -void viaInitVideo(ScreenPtr pScreen) {} -void viaExitVideo(ScrnInfoPtr pScrn) {} -void viaSaveVideo(ScrnInfoPtr pScrn) {} -void viaRestoreVideo(ScrnInfoPtr pScrn) {} -void VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y) {} +void +viaInitVideo(ScreenPtr pScreen) +{ +} + +void +viaExitVideo(ScrnInfoPtr pScrn) +{ +} +void +viaSaveVideo(ScrnInfoPtr pScrn) +{ +} +void +viaRestoreVideo(ScrnInfoPtr pScrn) +{ +} +void +VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y) +{ +} #else static vidCopyFunc viaFastVidCpy = NULL; - /* * F U N C T I O N D E C L A R A T I O N */ -static unsigned viaSetupAdaptors(ScreenPtr pScreen, XF86VideoAdaptorPtr **adaptors); +static unsigned viaSetupAdaptors(ScreenPtr pScreen, + XF86VideoAdaptorPtr ** adaptors); static void viaStopVideo(ScrnInfoPtr, pointer, Bool); static void viaQueryBestSize(ScrnInfoPtr, Bool, - short, short, short, short, unsigned int *, unsigned int *, pointer); -static int viaQueryImageAttributes(ScrnInfoPtr, - int, unsigned short *, unsigned short *, int *, int *); -static int viaGetPortAttribute(ScrnInfoPtr, Atom ,INT32 *, pointer); + short, short, short, short, unsigned int *, unsigned int *, pointer); +static int viaQueryImageAttributes(ScrnInfoPtr, + int, unsigned short *, unsigned short *, int *, int *); +static int viaGetPortAttribute(ScrnInfoPtr, Atom, INT32 *, pointer); static int viaSetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer); -static int viaPutImage(ScrnInfoPtr, short, short, short, short, short, short, - short, short,int, unsigned char*, short, short, Bool, - RegionPtr, pointer); +static int viaPutImage(ScrnInfoPtr, short, short, short, short, short, short, + short, short, int, unsigned char *, short, short, Bool, + RegionPtr, pointer); static void nv12Blit(unsigned char *nv12Chroma, - const unsigned char *uBuffer, - const unsigned char *vBuffer, - unsigned width, unsigned srcPitch, - unsigned dstPitch, unsigned lines); + const unsigned char *uBuffer, + const unsigned char *vBuffer, + unsigned width, unsigned srcPitch, unsigned dstPitch, unsigned lines); -static Atom xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation, xvAutoPaint; +static Atom xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation, + xvAutoPaint; /* * S T R U C T S */ /* client libraries expect an encoding */ -static XF86VideoEncodingRec DummyEncoding[1] = -{ - { XV_IMAGE , "XV_IMAGE",VIA_MAX_XVIMAGE_X,VIA_MAX_XVIMAGE_Y,{1, 1}}, +static XF86VideoEncodingRec DummyEncoding[1] = { + {XV_IMAGE, "XV_IMAGE", VIA_MAX_XVIMAGE_X, VIA_MAX_XVIMAGE_Y, {1, 1}}, }; #define NUM_FORMATS_G 9 -static XF86VideoFormatRec FormatsG[NUM_FORMATS_G] = -{ - { 8, TrueColor }, /* Dithered */ - { 8, PseudoColor }, /* Using .. */ - { 8, StaticColor }, - { 8, GrayScale }, - { 8, StaticGray }, /* .. TexelLUT */ - {16, TrueColor}, - {24, TrueColor}, - {16, DirectColor}, - {24, DirectColor} +static XF86VideoFormatRec FormatsG[NUM_FORMATS_G] = { + {8, TrueColor}, /* Dithered */ + {8, PseudoColor}, /* Using .. */ + {8, StaticColor}, + {8, GrayScale}, + {8, StaticGray}, /* .. TexelLUT */ + {16, TrueColor}, + {24, TrueColor}, + {16, DirectColor}, + {24, DirectColor} }; #define NUM_ATTRIBUTES_G 6 -static XF86AttributeRec AttributesG[NUM_ATTRIBUTES_G] = -{ - {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"}, - {XvSettable | XvGettable, 0, 10000, "XV_BRIGHTNESS"}, - {XvSettable | XvGettable, 0, 20000, "XV_CONTRAST"}, - {XvSettable | XvGettable, 0, 20000,"XV_SATURATION"}, - {XvSettable | XvGettable,-180,180,"XV_HUE"}, - {XvSettable | XvGettable,0,1,"XV_AUTOPAINT_COLORKEY"} +static XF86AttributeRec AttributesG[NUM_ATTRIBUTES_G] = { + {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"}, + {XvSettable | XvGettable, 0, 10000, "XV_BRIGHTNESS"}, + {XvSettable | XvGettable, 0, 20000, "XV_CONTRAST"}, + {XvSettable | XvGettable, 0, 20000, "XV_SATURATION"}, + {XvSettable | XvGettable, -180, 180, "XV_HUE"}, + {XvSettable | XvGettable, 0, 1, "XV_AUTOPAINT_COLORKEY"} }; #define NUM_IMAGES_G 6 -static XF86ImageRec ImagesG[NUM_IMAGES_G] = -{ +static XF86ImageRec ImagesG[NUM_IMAGES_G] = { XVIMAGE_YUY2, XVIMAGE_YV12, { - /* - * Below, a dummy picture type that is used in XvPutImage only to do - * an overlay update. Introduced for the XvMC client lib. - * Defined to have a zero data size. - */ - - FOURCC_XVMC, - XvYUV, - LSBFirst, - {'V','I','A',0x00, - 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71}, - 12, - XvPlanar, - 1, - 0, 0, 0, 0 , - 8, 8, 8, - 1, 2, 2, - 1, 2, 2, - {'Y','V','U', - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - XvTopToBottom - }, - { /* RGB 555 */ - FOURCC_RV15, - XvRGB, - LSBFirst, - {'R','V','1','5', - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - 16, - XvPacked, - 1, - 15, 0x7C00, 0x03E0, 0x001F, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - {'R', 'V', 'B',0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - XvTopToBottom - }, - { /* RGB 565 */ - FOURCC_RV16, - XvRGB, - LSBFirst, - {'R','V','1','6', - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - 16, - XvPacked, - 1, - 16, 0xF800, 0x07E0, 0x001F, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - {'R', 'V', 'B',0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - XvTopToBottom - }, - { /* RGB 888 */ - FOURCC_RV32, - XvRGB, - LSBFirst, - {'R','V','3','2', - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - 32, - XvPacked, - 1, - 24, 0xff0000, 0x00ff00, 0x0000ff, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - {'R', 'V', 'B',0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - XvTopToBottom - } + /* + * Below, a dummy picture type that is used in XvPutImage only to do + * an overlay update. Introduced for the XvMC client lib. + * Defined to have a zero data size. + */ + + FOURCC_XVMC, + XvYUV, + LSBFirst, + {'V', 'I', 'A', 0x00, + 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0xAA, 0x00, + 0x38, 0x9B, 0x71}, + 12, + XvPlanar, + 1, + 0, 0, 0, 0, + 8, 8, 8, + 1, 2, 2, + 1, 2, 2, + {'Y', 'V', 'U', + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + XvTopToBottom}, + { /* RGB 555 */ + FOURCC_RV15, + XvRGB, + LSBFirst, + {'R', 'V', '1', '5', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}, + 16, + XvPacked, + 1, + 15, 0x7C00, 0x03E0, 0x001F, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + {'R', 'V', 'B', 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0}, + XvTopToBottom}, + { /* RGB 565 */ + FOURCC_RV16, + XvRGB, + LSBFirst, + {'R', 'V', '1', '6', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}, + 16, + XvPacked, + 1, + 16, 0xF800, 0x07E0, 0x001F, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + {'R', 'V', 'B', 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0}, + XvTopToBottom}, + { /* RGB 888 */ + FOURCC_RV32, + XvRGB, + LSBFirst, + {'R', 'V', '3', '2', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}, + 32, + XvPacked, + 1, + 24, 0xff0000, 0x00ff00, 0x0000ff, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + {'R', 'V', 'B', 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0}, + XvTopToBottom} }; -static char * XvAdaptorName[XV_ADAPT_NUM] = -{ - "XV_SWOV" +static char *XvAdaptorName[XV_ADAPT_NUM] = { + "XV_SWOV" }; static XF86VideoAdaptorPtr viaAdaptPtr[XV_ADAPT_NUM]; static XF86VideoAdaptorPtr *allAdaptors; -static unsigned numAdaptPort[XV_ADAPT_NUM] = - {1}; +static unsigned numAdaptPort[XV_ADAPT_NUM] = { 1 }; /* * F U N C T I O N @@ -245,42 +259,42 @@ static unsigned numAdaptPort[XV_ADAPT_NUM] = * of the mode and the type of RAM available. */ -static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) +static Bool +DecideOverlaySupport(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); DisplayModePtr mode = pScrn->currentMode; /* Small trick here. We keep the height in 16's of lines and width in 32's - to avoid numeric overflow */ + * to avoid numeric overflow */ - if ( pVia->ChipId != PCI_CHIP_VT3205 && - pVia->ChipId != PCI_CHIP_VT3204 && - pVia->ChipId != PCI_CHIP_VT3259 && - pVia->ChipId != PCI_CHIP_VT3314) { + if (pVia->ChipId != PCI_CHIP_VT3205 && + pVia->ChipId != PCI_CHIP_VT3204 && + pVia->ChipId != PCI_CHIP_VT3259 && pVia->ChipId != PCI_CHIP_VT3314) { CARD32 bandwidth = (mode->HDisplay >> 4) * (mode->VDisplay >> 5) * pScrn->bitsPerPixel * mode->VRefresh; - + switch (pVia->MemClk) { - case VIA_MEM_SDR100: /* No overlay without DDR */ + case VIA_MEM_SDR100: /* No overlay without DDR */ case VIA_MEM_SDR133: return FALSE; case VIA_MEM_DDR200: /* Basic limit for DDR200 is about this */ - if(bandwidth > 1800000) + if (bandwidth > 1800000) return FALSE; /* But we have constraints at higher than 800x600 */ if (mode->HDisplay > 800) { - if(pScrn->bitsPerPixel != 8) + if (pScrn->bitsPerPixel != 8) return FALSE; - if(mode->VDisplay > 768) + if (mode->VDisplay > 768) return FALSE; - if(mode->VRefresh > 60) + if (mode->VRefresh > 60) return FALSE; } return TRUE; - case 0: /* FIXME: Why does my CLE266 report 0? */ + case 0: /* FIXME: Why does my CLE266 report 0? */ case VIA_MEM_DDR266: - if(bandwidth > 7901250) + if (bandwidth > 7901250) return FALSE; return TRUE; } @@ -288,19 +302,19 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) } else { VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - unsigned width,height,refresh,dClock; - float mClock,memEfficiency,needBandWidth,totalBandWidth; + unsigned width, height, refresh, dClock; + float mClock, memEfficiency, needBandWidth, totalBandWidth; int bTV = 0; - switch(pVia->MemClk) { + switch (pVia->MemClk) { case VIA_MEM_SDR100: - mClock = 50; /*HW base on 128 bit*/ + mClock = 50; /*HW base on 128 bit */ break; case VIA_MEM_SDR133: - mClock = 66.5 ; + mClock = 66.5; break; case VIA_MEM_DDR200: - mClock = 100; + mClock = 100; break; case VIA_MEM_DDR266: mClock = 133; @@ -309,13 +323,13 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) mClock = 166; break; default: - /*Unknow DRAM Type*/ + /*Unknow DRAM Type */ DBG_DD(ErrorF("Unknow DRAM Type!\n")); mClock = 166; break; } - - switch(pVia->MemClk) { + + switch (pVia->MemClk) { case VIA_MEM_SDR100: case VIA_MEM_SDR133: case VIA_MEM_DDR200: @@ -326,12 +340,12 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) memEfficiency = (float)SINGLE_3205_133; break; default: - /*Unknow DRAM Type .*/ + /*Unknow DRAM Type . */ DBG_DD(ErrorF("Unknow DRAM Type!\n")); memEfficiency = (float)SINGLE_3205_133; break; } - + width = mode->HDisplay; height = mode->VDisplay; refresh = mode->VRefresh; @@ -342,7 +356,7 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) if (pVia->pVbe) { refresh = 100; - if (pBIOSInfo->PanelActive) + if (pBIOSInfo->PanelActive) refresh = 70; if (pBIOSInfo->TVActive) refresh = 60; @@ -358,8 +372,8 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) } else if (pBIOSInfo->TVActive) { bTV = 1; } - } - if (bTV) { + } + if (bTV) { /* * Approximative, VERY conservative formula in some cases. @@ -368,44 +382,49 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) * lay in some cases where VIA's driver don't. */ - dClock = (width * height * 60) / 580000; + dClock = (width * height * 60) / 580000; } else { /* * Approximative, slightly conservative formula. See above. */ - + dClock = (width * height * refresh) / 680000; } if (dClock) { - needBandWidth = (float)(((pScrn->bitsPerPixel >> 3) + VIDEO_BPP)*dClock); - totalBandWidth = (float)(mClock*16.*memEfficiency); - - DBG_DD(ErrorF(" via_video.c : cBitsPerPel= %d : \n",pScrn->bitsPerPixel)); - DBG_DD(ErrorF(" via_video.c : Video_Bpp= %d : \n",VIDEO_BPP)); - DBG_DD(ErrorF(" via_video.c : refresh = %d : \n",refresh)); - DBG_DD(ErrorF(" via_video.c : dClock= %d : \n",dClock)); - DBG_DD(ErrorF(" via_video.c : mClk= %f : \n",mClock)); - DBG_DD(ErrorF(" via_video.c : memEfficiency= %f : \n",memEfficiency)); - DBG_DD(ErrorF(" via_video.c : needBandwidth= %f : \n",needBandWidth)); - DBG_DD(ErrorF(" via_video.c : totalBandwidth= %f : \n",totalBandWidth)); + needBandWidth = + (float)(((pScrn->bitsPerPixel >> 3) + VIDEO_BPP) * dClock); + totalBandWidth = (float)(mClock * 16. * memEfficiency); + + DBG_DD(ErrorF(" via_video.c : cBitsPerPel= %d : \n", + pScrn->bitsPerPixel)); + DBG_DD(ErrorF(" via_video.c : Video_Bpp= %d : \n", VIDEO_BPP)); + DBG_DD(ErrorF(" via_video.c : refresh = %d : \n", refresh)); + DBG_DD(ErrorF(" via_video.c : dClock= %d : \n", dClock)); + DBG_DD(ErrorF(" via_video.c : mClk= %f : \n", mClock)); + DBG_DD(ErrorF(" via_video.c : memEfficiency= %f : \n", + memEfficiency)); + DBG_DD(ErrorF(" via_video.c : needBandwidth= %f : \n", + needBandWidth)); + DBG_DD(ErrorF(" via_video.c : totalBandwidth= %f : \n", + totalBandWidth)); if (needBandWidth < totalBandWidth) return TRUE; - } + } return FALSE; } return FALSE; } -static const char *viaXvErrMsg[xve_numerr] = - {"No Error.", - "Bandwidth is insufficient. Check bios memory settings.", - "PCI DMA blit failed. You probably encountered a bug.", - "Not enough resources to complete the request. Probably out of memory.", - "General Error. I wish I could be more specific.", - "Wrong adaptor used. Try another port number."}; +static const char *viaXvErrMsg[xve_numerr] = { "No Error.", + "Bandwidth is insufficient. Check bios memory settings.", + "PCI DMA blit failed. You probably encountered a bug.", + "Not enough resources to complete the request. Probably out of memory.", + "General Error. I wish I could be more specific.", + "Wrong adaptor used. Try another port number." +}; static void viaXvError(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, XvError error) @@ -416,60 +435,61 @@ viaXvError(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, XvError error) } if (error == pPriv->xvErr) { return; - } + } pPriv->xvErr = error; - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[Xv] Port %d: %s\n", pPriv->xv_portnum, - viaXvErrMsg[error]); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[Xv] Port %d: %s\n", + pPriv->xv_portnum, viaXvErrMsg[error]); } static void -viaResetVideo(ScrnInfoPtr pScrn) +viaResetVideo(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); - vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + VIAPtr pVia = VIAPTR(pScrn); + vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; DBG_DD(ErrorF(" via_video.c : viaResetVideo: \n")); viaVidEng->video1_ctl = 0; viaVidEng->video3_ctl = 0; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->compose = 0x80000000; + viaVidEng->compose = 0x40000000; viaVidEng->color_key = 0x821; viaVidEng->snd_color_key = 0x821; } -void viaSaveVideo(ScrnInfoPtr pScrn) +void +viaSaveVideo(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); - vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + VIAPtr pVia = VIAPTR(pScrn); + vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; - pVia->dwV1 = ((vmmtr)viaVidEng)->video1_ctl; - pVia->dwV3 = ((vmmtr)viaVidEng)->video3_ctl; + pVia->dwV1 = ((vmmtr) viaVidEng)->video1_ctl; + pVia->dwV3 = ((vmmtr) viaVidEng)->video3_ctl; viaVidEng->video1_ctl = 0; viaVidEng->video3_ctl = 0; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->compose = 0x80000000; + viaVidEng->compose = 0x40000000; } -void viaRestoreVideo(ScrnInfoPtr pScrn) +void +viaRestoreVideo(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); - vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + VIAPtr pVia = VIAPTR(pScrn); + vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; - viaVidEng->video1_ctl = pVia->dwV1 ; - viaVidEng->video3_ctl = pVia->dwV3 ; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->video1_ctl = pVia->dwV1; + viaVidEng->video3_ctl = pVia->dwV3; + viaVidEng->compose = 0x80000000; + viaVidEng->compose = 0x40000000; } - - -void viaExitVideo(ScrnInfoPtr pScrn) +void +viaExitVideo(ScrnInfoPtr pScrn) { - VIAPtr pVia = VIAPTR(pScrn); - vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + VIAPtr pVia = VIAPTR(pScrn); + vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; XF86VideoAdaptorPtr curAdapt; int i, j, numPorts; @@ -481,21 +501,23 @@ void viaExitVideo(ScrnInfoPtr pScrn) viaVidEng->video1_ctl = 0; viaVidEng->video3_ctl = 0; - viaVidEng->compose = 0x80000000; - viaVidEng->compose = 0x40000000; + viaVidEng->compose = 0x80000000; + viaVidEng->compose = 0x40000000; /* * Free all adaptor info allocated in viaInitVideo. */ - for (i=0; i<XV_ADAPT_NUM; ++i) { + for (i = 0; i < XV_ADAPT_NUM; ++i) { curAdapt = viaAdaptPtr[i]; if (curAdapt) { if (curAdapt->pPortPrivates) { if (curAdapt->pPortPrivates->ptr) { numPorts = numAdaptPort[i]; - for (j=0; j<numPorts; ++j) { - viaStopVideo(pScrn, (viaPortPrivPtr)curAdapt->pPortPrivates->ptr + j, TRUE); + for (j = 0; j < numPorts; ++j) { + viaStopVideo(pScrn, + (viaPortPrivPtr) curAdapt->pPortPrivates->ptr + j, + TRUE); } xfree(curAdapt->pPortPrivates->ptr); } @@ -504,67 +526,66 @@ void viaExitVideo(ScrnInfoPtr pScrn) xfree(curAdapt); } } - if (allAdaptors) + if (allAdaptors) xfree(allAdaptors); -} +} -void viaInitVideo(ScreenPtr pScreen) +void +viaInitVideo(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - VIAPtr pVia = VIAPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); XF86VideoAdaptorPtr *adaptors, *newAdaptors; int num_adaptors, num_new; - DBG_DD(ErrorF(" via_video.c : viaInitVideo : \n")); allAdaptors = NULL; newAdaptors = NULL; num_new = 0; - + pVia->useDmaBlit = FALSE; #ifdef XF86DRI pVia->useDmaBlit = pVia->directRenderingEnabled && - ((pVia->Chipset == VIA_CLE266) || - (pVia->Chipset == VIA_KM400) || - (pVia->Chipset == VIA_K8M800) || - (pVia->Chipset == VIA_PM800) || - (pVia->Chipset == VIA_VM800)); - if ((pVia->drmVerMajor < 2) || - ((pVia->drmVerMajor == 2) && - (pVia->drmVerMinor < 9))) + ((pVia->Chipset == VIA_CLE266) || + (pVia->Chipset == VIA_KM400) || + (pVia->Chipset == VIA_K8M800) || + (pVia->Chipset == VIA_PM800) || (pVia->Chipset == VIA_VM800)); + if ((pVia->drmVerMajor < 2) || + ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor < 9))) pVia->useDmaBlit = FALSE; #endif pVia->useDmaBlit = pVia->useDmaBlit && pVia->dmaXV; if (pVia->useDmaBlit) - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[Xv] Using PCI DMA for Xv image transfer.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[Xv] Using PCI DMA for Xv image transfer.\n"); if (!viaFastVidCpy) viaFastVidCpy = viaVidCopyInit("video", pScreen); - if ( (pVia->Chipset == VIA_CLE266) || (pVia->Chipset == VIA_KM400) || - (pVia->Chipset == VIA_K8M800) || (pVia->Chipset == VIA_PM800) /* || - (pVia->Chipset == VIA_VM800) */) { + if ((pVia->Chipset == VIA_CLE266) || (pVia->Chipset == VIA_KM400) || (pVia->Chipset == VIA_K8M800) || (pVia->Chipset == VIA_PM800) /* || + * (pVia->Chipset == VIA_VM800) */ ) { num_new = viaSetupAdaptors(pScreen, &newAdaptors); num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors); } else { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[Xv] Unsupported Chipset. X video functionality disabled.\n"); - num_adaptors=0; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[Xv] Unsupported Chipset. X video functionality disabled.\n"); + num_adaptors = 0; } - DBG_DD(ErrorF(" via_video.c : num_adaptors : %d\n",num_adaptors)); - if(newAdaptors) { - allAdaptors = xalloc((num_adaptors + num_new) * - sizeof(XF86VideoAdaptorPtr*)); - if(allAdaptors) { + DBG_DD(ErrorF(" via_video.c : num_adaptors : %d\n", num_adaptors)); + if (newAdaptors) { + allAdaptors = xalloc((num_adaptors + num_new) * + sizeof(XF86VideoAdaptorPtr *)); + if (allAdaptors) { if (num_adaptors) - memcpy(allAdaptors, adaptors, num_adaptors * sizeof(XF86VideoAdaptorPtr)); - memcpy(allAdaptors + num_adaptors, newAdaptors, - num_new * sizeof(XF86VideoAdaptorPtr)); + memcpy(allAdaptors, adaptors, + num_adaptors * sizeof(XF86VideoAdaptorPtr)); + memcpy(allAdaptors + num_adaptors, newAdaptors, + num_new * sizeof(XF86VideoAdaptorPtr)); num_adaptors += num_new; - } + } } if (num_adaptors) { @@ -572,7 +593,7 @@ void viaInitVideo(ScreenPtr pScreen) #ifdef XF86DRI ViaInitXVMC(pScreen); #endif - viaSetColorSpace(pVia,0,0,0,0,TRUE); + viaSetColorSpace(pVia, 0, 0, 0, 0, TRUE); pVia->swov.panning_x = 0; pVia->swov.panning_y = 0; pVia->swov.oldPanningX = 0; @@ -587,51 +608,46 @@ RegionsEqual(RegionPtr A, RegionPtr B) 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; + 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; } - /* * This one gets called, for example, on panning. */ static int viaReputImage(ScrnInfoPtr pScrn, - short drw_x, - short drw_y, - RegionPtr clipBoxes, - pointer data) + short drw_x, short drw_y, RegionPtr clipBoxes, pointer data) { - DDUPDATEOVERLAY UpdateOverlay_Video; - LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video; - viaPortPrivPtr pPriv = (viaPortPrivPtr)data; - VIAPtr pVia = VIAPTR(pScrn); + DDUPDATEOVERLAY UpdateOverlay_Video; + LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video; + viaPortPrivPtr pPriv = (viaPortPrivPtr) data; + VIAPtr pVia = VIAPTR(pScrn); - if(!RegionsEqual(&pPriv->clip, clipBoxes)) { - REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); - if (pPriv->autoPaint) - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); - } + if (!RegionsEqual(&pPriv->clip, clipBoxes)) { + REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); + if (pPriv->autoPaint) + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); + } if (drw_x == pPriv->old_drw_x && drw_y == pPriv->old_drw_y && @@ -640,7 +656,7 @@ viaReputImage(ScrnInfoPtr pScrn, viaXvError(pScrn, pPriv, xve_none); return Success; } - + lpUpdateOverlay->SrcLeft = pPriv->old_src_x; lpUpdateOverlay->SrcTop = pPriv->old_src_y; lpUpdateOverlay->SrcRight = pPriv->old_src_x + pPriv->old_src_w; @@ -659,113 +675,107 @@ viaReputImage(ScrnInfoPtr pScrn, lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff; else lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey; - + VIAVidUpdateOverlay(pScrn, lpUpdateOverlay); viaXvError(pScrn, pPriv, xve_none); return Success; } - - - static unsigned -viaSetupAdaptors(ScreenPtr pScreen, XF86VideoAdaptorPtr **adaptors) +viaSetupAdaptors(ScreenPtr pScreen, XF86VideoAdaptorPtr ** adaptors) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; viaPortPrivRec *viaPortPriv; - DevUnion *pdevUnion; - int i,j, usedPorts, numPorts; - + DevUnion *pdevUnion; + int i, j, usedPorts, numPorts; + DBG_DD(ErrorF(" via_video.c : viaSetupImageVideo: \n")); - xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); - xvContrast = MAKE_ATOM("XV_CONTRAST"); - xvColorKey = MAKE_ATOM("XV_COLORKEY"); - xvHue = MAKE_ATOM("XV_HUE"); - xvSaturation = MAKE_ATOM("XV_SATURATION"); - xvAutoPaint = MAKE_ATOM("XV_AUTOPAINT_COLORKEY"); + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvContrast = MAKE_ATOM("XV_CONTRAST"); + xvColorKey = MAKE_ATOM("XV_COLORKEY"); + xvHue = MAKE_ATOM("XV_HUE"); + xvSaturation = MAKE_ATOM("XV_SATURATION"); + xvAutoPaint = MAKE_ATOM("XV_AUTOPAINT_COLORKEY"); *adaptors = NULL; usedPorts = 0; - - for ( i = 0; i < XV_ADAPT_NUM; i ++ ) { - if(!(viaAdaptPtr[i] = xf86XVAllocateVideoAdaptorRec(pScrn))) - return 0; + for (i = 0; i < XV_ADAPT_NUM; i++) { + if (!(viaAdaptPtr[i] = xf86XVAllocateVideoAdaptorRec(pScrn))) + return 0; numPorts = numAdaptPort[i]; - - viaPortPriv = (viaPortPrivPtr)xnfcalloc(numPorts, sizeof(viaPortPrivRec) ); - pdevUnion = (DevUnion *)xnfcalloc(numPorts, sizeof(DevUnion)); - if(i == XV_ADAPT_SWOV) /* Overlay engine */ - { - viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvImageMask | + viaPortPriv = + (viaPortPrivPtr) xnfcalloc(numPorts, sizeof(viaPortPrivRec)); + pdevUnion = (DevUnion *) xnfcalloc(numPorts, sizeof(DevUnion)); + + if (i == XV_ADAPT_SWOV) { /* Overlay engine */ + viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvImageMask | XvVideoMask | XvStillMask; - viaAdaptPtr[i]->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; - } - else - { - viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvVideoMask; - viaAdaptPtr[i]->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; - } - viaAdaptPtr[i]->name = XvAdaptorName[i]; - viaAdaptPtr[i]->nEncodings = 1; - viaAdaptPtr[i]->pEncodings = DummyEncoding; - viaAdaptPtr[i]->nFormats = sizeof(FormatsG) / sizeof(FormatsG[0]); - viaAdaptPtr[i]->pFormats = FormatsG; - - /* The adapter can handle 1 port simultaneously */ - viaAdaptPtr[i]->nPorts = numPorts; - viaAdaptPtr[i]->pPortPrivates = pdevUnion; - viaAdaptPtr[i]->pPortPrivates->ptr = (pointer) viaPortPriv; + viaAdaptPtr[i]->flags = + VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; + } else { + viaAdaptPtr[i]->type = XvInputMask | XvWindowMask | XvVideoMask; + viaAdaptPtr[i]->flags = + VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; + } + viaAdaptPtr[i]->name = XvAdaptorName[i]; + viaAdaptPtr[i]->nEncodings = 1; + viaAdaptPtr[i]->pEncodings = DummyEncoding; + viaAdaptPtr[i]->nFormats = sizeof(FormatsG) / sizeof(FormatsG[0]); + viaAdaptPtr[i]->pFormats = FormatsG; + + /* The adapter can handle 1 port simultaneously */ + viaAdaptPtr[i]->nPorts = numPorts; + viaAdaptPtr[i]->pPortPrivates = pdevUnion; + viaAdaptPtr[i]->pPortPrivates->ptr = (pointer) viaPortPriv; viaAdaptPtr[i]->nAttributes = NUM_ATTRIBUTES_G; viaAdaptPtr[i]->pAttributes = AttributesG; - viaAdaptPtr[i]->nImages = NUM_IMAGES_G; - viaAdaptPtr[i]->pImages = ImagesG; - viaAdaptPtr[i]->PutVideo = NULL; - viaAdaptPtr[i]->StopVideo = viaStopVideo; - viaAdaptPtr[i]->QueryBestSize = viaQueryBestSize; - viaAdaptPtr[i]->GetPortAttribute = viaGetPortAttribute; - viaAdaptPtr[i]->SetPortAttribute = viaSetPortAttribute; - viaAdaptPtr[i]->PutImage = viaPutImage; - viaAdaptPtr[i]->ReputImage = viaReputImage; - viaAdaptPtr[i]->QueryImageAttributes = viaQueryImageAttributes; - for (j=0; j<numPorts; ++j) { + viaAdaptPtr[i]->nImages = NUM_IMAGES_G; + viaAdaptPtr[i]->pImages = ImagesG; + viaAdaptPtr[i]->PutVideo = NULL; + viaAdaptPtr[i]->StopVideo = viaStopVideo; + viaAdaptPtr[i]->QueryBestSize = viaQueryBestSize; + viaAdaptPtr[i]->GetPortAttribute = viaGetPortAttribute; + viaAdaptPtr[i]->SetPortAttribute = viaSetPortAttribute; + viaAdaptPtr[i]->PutImage = viaPutImage; + viaAdaptPtr[i]->ReputImage = viaReputImage; + viaAdaptPtr[i]->QueryImageAttributes = viaQueryImageAttributes; + for (j = 0; j < numPorts; ++j) { viaPortPriv[j].dmaBounceBuffer = NULL; viaPortPriv[j].dmaBounceStride = 0; viaPortPriv[j].dmaBounceLines = 0; - viaPortPriv[j].colorKey = 0x0821; - viaPortPriv[j].autoPaint = TRUE; - viaPortPriv[j].brightness = 5000.; - viaPortPriv[j].saturation = 10000; - viaPortPriv[j].contrast = 10000; - viaPortPriv[j].hue = 0; + viaPortPriv[j].colorKey = 0x0821; + viaPortPriv[j].autoPaint = TRUE; + viaPortPriv[j].brightness = 5000.; + viaPortPriv[j].saturation = 10000; + viaPortPriv[j].contrast = 10000; + viaPortPriv[j].hue = 0; viaPortPriv[j].FourCC = 0; - viaPortPriv[j].xv_portnum = j + usedPorts; + viaPortPriv[j].xv_portnum = j + usedPorts; viaPortPriv[j].xvErr = xve_none; REGION_NULL(pScreen, &viaPortPriv[j].clip); - } - usedPorts += j; - - #ifdef XF86DRI - viaXvMCInitXv(pScrn, viaAdaptPtr[i]); - #endif + } + usedPorts += j; +#ifdef XF86DRI + viaXvMCInitXv(pScrn, viaAdaptPtr[i]); +#endif - } /* End of for */ + } /* End of for */ viaResetVideo(pScrn); *adaptors = viaAdaptPtr; return XV_ADAPT_NUM; } - -static void +static void viaStopVideo(ScrnInfoPtr pScrn, pointer data, Bool exit) { - VIAPtr pVia = VIAPTR(pScrn); - viaPortPrivPtr pPriv = (viaPortPrivPtr)data; + VIAPtr pVia = VIAPTR(pScrn); + viaPortPrivPtr pPriv = (viaPortPrivPtr) data; DBG_DD(ErrorF(" via_video.c : viaStopVideo: exit=%d\n", exit)); @@ -773,36 +783,33 @@ viaStopVideo(ScrnInfoPtr pScrn, pointer data, Bool exit) if (exit) { ViaOverlayHide(pScrn); ViaSwovSurfaceDestroy(pScrn, pPriv); - if (pPriv->dmaBounceBuffer) xfree(pPriv->dmaBounceBuffer); + if (pPriv->dmaBounceBuffer) + xfree(pPriv->dmaBounceBuffer); pPriv->dmaBounceBuffer = 0; pPriv->dmaBounceStride = 0; pPriv->dmaBounceLines = 0; - pVia->dwFrameNum = 0; - pPriv->old_drw_x= 0; - pPriv->old_drw_y= 0; - pPriv->old_drw_w= 0; - pPriv->old_drw_h= 0; - } + pVia->dwFrameNum = 0; + pPriv->old_drw_x = 0; + pPriv->old_drw_y = 0; + pPriv->old_drw_w = 0; + pPriv->old_drw_h = 0; + } } -static int -viaSetPortAttribute( - ScrnInfoPtr pScrn, - Atom attribute, - INT32 value, - pointer data - ){ - VIAPtr pVia = VIAPTR(pScrn); - vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; - viaPortPrivPtr pPriv = (viaPortPrivPtr)data; +static int +viaSetPortAttribute(ScrnInfoPtr pScrn, + Atom attribute, INT32 value, pointer data) +{ + VIAPtr pVia = VIAPTR(pScrn); + vmmtr viaVidEng = (vmmtr) pVia->VidMapBase; + viaPortPrivPtr pPriv = (viaPortPrivPtr) data; int attr, avalue; DBG_DD(ErrorF(" via_video.c : viaSetPortAttribute : \n")); - /* Color Key */ - if(attribute == xvColorKey) { - DBG_DD(ErrorF(" V4L Disable xvColorKey = %08lx\n",value)); + if (attribute == xvColorKey) { + DBG_DD(ErrorF(" V4L Disable xvColorKey = %08lx\n", value)); pPriv->colorKey = value; /* All assume color depth is 16 */ @@ -810,159 +817,149 @@ viaSetPortAttribute( viaVidEng->color_key = value; viaVidEng->snd_color_key = value; REGION_EMPTY(pScrn->pScreen, &pPriv->clip); - DBG_DD(ErrorF(" V4L Disable done xvColorKey = %08lx\n",value)); + DBG_DD(ErrorF(" V4L Disable done xvColorKey = %08lx\n", value)); } else if (attribute == xvAutoPaint) { pPriv->autoPaint = value; - DBG_DD(ErrorF(" xvAutoPaint = %08lx\n",value)); + DBG_DD(ErrorF(" xvAutoPaint = %08lx\n", value)); /* Color Control */ } else if (attribute == xvBrightness || - attribute == xvContrast || - attribute == xvSaturation || - attribute == xvHue) { - if (attribute == xvBrightness) - { - DBG_DD(ErrorF(" xvBrightness = %08ld\n",value)); - pPriv->brightness = value; - } - if (attribute == xvContrast) - { - DBG_DD(ErrorF(" xvContrast = %08ld\n",value)); - pPriv->contrast = value; - } - if (attribute == xvSaturation) - { - DBG_DD(ErrorF(" xvSaturation = %08ld\n",value)); - pPriv->saturation = value; - } - if (attribute == xvHue) - { - DBG_DD(ErrorF(" xvHue = %08ld\n",value)); - pPriv->hue = value; - } + attribute == xvContrast || + attribute == xvSaturation || attribute == xvHue) { + if (attribute == xvBrightness) { + DBG_DD(ErrorF(" xvBrightness = %08ld\n", value)); + pPriv->brightness = value; + } + if (attribute == xvContrast) { + DBG_DD(ErrorF(" xvContrast = %08ld\n", value)); + pPriv->contrast = value; + } + if (attribute == xvSaturation) { + DBG_DD(ErrorF(" xvSaturation = %08ld\n", value)); + pPriv->saturation = value; + } + if (attribute == xvHue) { + DBG_DD(ErrorF(" xvHue = %08ld\n", value)); + pPriv->hue = value; + } viaSetColorSpace(pVia, pPriv->hue, pPriv->saturation, - pPriv->brightness, pPriv->contrast, FALSE); - }else{ - DBG_DD(ErrorF(" via_video.c : viaSetPortAttribute : is not supported the attribute")); + pPriv->brightness, pPriv->contrast, FALSE); + } else { + DBG_DD(ErrorF + (" via_video.c : viaSetPortAttribute : is not supported the attribute")); return BadMatch; } - + /* attr,avalue hardware processing goes here */ (void)attr; (void)avalue; - + return Success; } -static int -viaGetPortAttribute( - ScrnInfoPtr pScrn, - Atom attribute, - INT32 *value, - pointer data -){ - viaPortPrivPtr pPriv = (viaPortPrivPtr)data; +static int +viaGetPortAttribute(ScrnInfoPtr pScrn, + Atom attribute, INT32 * value, pointer data) +{ + viaPortPrivPtr pPriv = (viaPortPrivPtr) data; DBG_DD(ErrorF(" via_video.c : viaGetPortAttribute : port %d %ld\n", - pPriv->xv_portnum, attribute)); + pPriv->xv_portnum, attribute)); *value = 0; - if (attribute == xvColorKey ) { - *value =(INT32) pPriv->colorKey; - DBG_DD(ErrorF(" via_video.c : ColorKey 0x%lx\n",pPriv->colorKey)); - } else if (attribute == xvAutoPaint ) { - *value = (INT32) pPriv->autoPaint; - DBG_DD(ErrorF(" AutoPaint = %08ld\n", *value)); - /* Color Control */ + if (attribute == xvColorKey) { + *value = (INT32) pPriv->colorKey; + DBG_DD(ErrorF(" via_video.c : ColorKey 0x%lx\n", pPriv->colorKey)); + } else if (attribute == xvAutoPaint) { + *value = (INT32) pPriv->autoPaint; + DBG_DD(ErrorF(" AutoPaint = %08ld\n", *value)); + /* Color Control */ } else if (attribute == xvBrightness || - attribute == xvContrast || - attribute == xvSaturation || - attribute == xvHue) { - if (attribute == xvBrightness) - { - *value = pPriv->brightness; - DBG_DD(ErrorF(" xvBrightness = %08ld\n", *value)); - } - if (attribute == xvContrast) - { - *value = pPriv->contrast; - DBG_DD(ErrorF(" xvContrast = %08ld\n", *value)); - } - if (attribute == xvSaturation) - { - *value = pPriv->saturation; - DBG_DD(ErrorF(" xvSaturation = %08ld\n", *value)); - } - if (attribute == xvHue) - { - *value = pPriv->hue; - DBG_DD(ErrorF(" xvHue = %08ld\n", *value)); - } - - }else { - /*return BadMatch*/ ; - } + attribute == xvContrast || + attribute == xvSaturation || attribute == xvHue) { + if (attribute == xvBrightness) { + *value = pPriv->brightness; + DBG_DD(ErrorF(" xvBrightness = %08ld\n", *value)); + } + if (attribute == xvContrast) { + *value = pPriv->contrast; + DBG_DD(ErrorF(" xvContrast = %08ld\n", *value)); + } + if (attribute == xvSaturation) { + *value = pPriv->saturation; + DBG_DD(ErrorF(" xvSaturation = %08ld\n", *value)); + } + if (attribute == xvHue) { + *value = pPriv->hue; + DBG_DD(ErrorF(" xvHue = %08ld\n", *value)); + } + + } else { + /*return BadMatch */ ; + } return Success; } -static void -viaQueryBestSize( - ScrnInfoPtr pScrn, +static void +viaQueryBestSize(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 -){ + unsigned int *p_w, unsigned int *p_h, pointer data) +{ DBG_DD(ErrorF(" via_video.c : viaQueryBestSize :\n")); *p_w = drw_w; *p_h = drw_h; - if(*p_w > 2048 ) - *p_w = 2048; + if (*p_w > 2048) + *p_w = 2048; } /* * To do SW Flip */ -static void Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc, unsigned long DisplayBufferIndex) +static void +Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc, + unsigned long DisplayBufferIndex) { - unsigned long proReg=0; + unsigned long proReg = 0; + if ((pVia->ChipId == PCI_CHIP_VT3259) && - !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) + !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE)) proReg = PRO_HQV1_OFFSET; - - switch(fourcc) - { - case FOURCC_UYVY: - case FOURCC_YUY2: - case FOURCC_RV15: - case FOURCC_RV16: - case FOURCC_RV32: - while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP) ); - VIDOutD(HQV_SRC_STARTADDR_Y + proReg, - pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); - VIDOutD(HQV_CONTROL + proReg,( VIDInD(HQV_CONTROL + proReg)&~HQV_FLIP_ODD) | - HQV_SW_FLIP|HQV_FLIP_STATUS); - break; - - case FOURCC_YV12: - default: - while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP) ); - VIDOutD(HQV_SRC_STARTADDR_Y + proReg, - pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); - if (pVia->ChipId == PCI_CHIP_VT3259) { - VIDOutD(HQV_SRC_STARTADDR_U + proReg, - pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); - } else { - VIDOutD(HQV_SRC_STARTADDR_U, - pVia->swov.SWDevice.dwSWCbPhysicalAddr[DisplayBufferIndex]); - VIDOutD(HQV_SRC_STARTADDR_V, - pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); - } - VIDOutD(HQV_CONTROL + proReg, - ( VIDInD(HQV_CONTROL + proReg)&~HQV_FLIP_ODD) |HQV_SW_FLIP|HQV_FLIP_STATUS); - break; + + switch (fourcc) { + case FOURCC_UYVY: + case FOURCC_YUY2: + case FOURCC_RV15: + case FOURCC_RV16: + case FOURCC_RV32: + while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)) ; + VIDOutD(HQV_SRC_STARTADDR_Y + proReg, + pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); + VIDOutD(HQV_CONTROL + proReg, + (VIDInD(HQV_CONTROL + + proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS); + break; + + case FOURCC_YV12: + default: + while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)) ; + VIDOutD(HQV_SRC_STARTADDR_Y + proReg, + pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]); + if (pVia->ChipId == PCI_CHIP_VT3259) { + VIDOutD(HQV_SRC_STARTADDR_U + proReg, + pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); + } else { + VIDOutD(HQV_SRC_STARTADDR_U, + pVia->swov.SWDevice.dwSWCbPhysicalAddr[DisplayBufferIndex]); + VIDOutD(HQV_SRC_STARTADDR_V, + pVia->swov.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]); + } + VIDOutD(HQV_CONTROL + proReg, + (VIDInD(HQV_CONTROL + + proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS); + break; } } @@ -970,35 +967,26 @@ static void Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc, unsigned long Di * Slow and dirty. NV12 blit. */ -static void +static void nv12cp(unsigned char *dst, - const unsigned char *src, - int dstPitch, - int w, - int h, int yuv422) + const unsigned char *src, int dstPitch, int w, int h, int yuv422) { /* * Blit luma component as a fake YUY2 assembler blit. - */ - + */ - (*viaFastVidCpy)(dst, src, dstPitch, w >> 1, h, TRUE); - nv12Blit( dst + dstPitch*h, src + w*h + (w >> 1)*(h >> 1), src + w*h, - w >> 1, w >> 1, dstPitch, h >> 1); + (*viaFastVidCpy) (dst, src, dstPitch, w >> 1, h, TRUE); + nv12Blit(dst + dstPitch * h, src + w * h + (w >> 1) * (h >> 1), + src + w * h, w >> 1, w >> 1, dstPitch, h >> 1); } - #ifdef XF86DRI static int viaDmaBlitImage(VIAPtr pVia, - viaPortPrivPtr pPort, - unsigned char *src, - CARD32 dst, - unsigned width, - unsigned height, - unsigned lumaStride, - int id) + viaPortPrivPtr pPort, + unsigned char *src, + CARD32 dst, unsigned width, unsigned height, unsigned lumaStride, int id) { Bool bounceBuffer; drm_via_dmablit_t blit; @@ -1009,33 +997,34 @@ viaDmaBlitImage(VIAPtr pVia, unsigned bounceStride; unsigned bounceLines; unsigned size; - int err=0; + int err = 0; Bool nv12Conversion; bounceBuffer = ((unsigned long)src & 15); - nv12Conversion = ((pVia->ChipId == PCI_CHIP_VT3259) && (id == FOURCC_YV12)); - - switch(id) { + nv12Conversion = ((pVia->ChipId == PCI_CHIP_VT3259) + && (id == FOURCC_YV12)); + + switch (id) { case FOURCC_YUY2: case FOURCC_RV15: case FOURCC_RV16: - bounceStride = ALIGN_TO(2*width, 16); + bounceStride = ALIGN_TO(2 * width, 16); bounceLines = height; break; case FOURCC_RV32: - bounceStride = ALIGN_TO(4*width, 16); + bounceStride = ALIGN_TO(4 * width, 16); bounceLines = height; break; - + case FOURCC_YV12: default: - bounceStride = ALIGN_TO(width,16); + bounceStride = ALIGN_TO(width, 16); bounceLines = height; break; } - - if (bounceBuffer || nv12Conversion) { - if (!pPort->dmaBounceBuffer || + + if (bounceBuffer || nv12Conversion) { + if (!pPort->dmaBounceBuffer || pPort->dmaBounceStride != bounceStride || pPort->dmaBounceLines != bounceLines) { if (pPort->dmaBounceBuffer) { @@ -1043,18 +1032,22 @@ viaDmaBlitImage(VIAPtr pVia, pPort->dmaBounceBuffer = 0; } size = bounceStride * bounceLines + 16; - if (FOURCC_YV12 == id) size += ALIGN_TO(bounceStride >> 1, 16) * bounceLines; + if (FOURCC_YV12 == id) + size += ALIGN_TO(bounceStride >> 1, 16) * bounceLines; pPort->dmaBounceBuffer = (unsigned char *)malloc(size); pPort->dmaBounceLines = bounceLines; pPort->dmaBounceStride = bounceStride; } } - bounceBase = (unsigned char *)ALIGN_TO((unsigned long)(pPort->dmaBounceBuffer), 16); + bounceBase = + (unsigned char *)ALIGN_TO((unsigned long)(pPort->dmaBounceBuffer), + 16); base = (bounceBuffer) ? bounceBase : src; - - if(bounceBuffer) { - (*viaFastVidCpy)(base, src, bounceStride, bounceStride >> 1, height, 1); + + if (bounceBuffer) { + (*viaFastVidCpy) (base, src, bounceStride, bounceStride >> 1, height, + 1); } blit.num_lines = height; @@ -1068,122 +1061,125 @@ viaDmaBlitImage(VIAPtr pVia, blit.flags = 0; #else blit.bounce_buffer = 0; -#endif +#endif #ifdef XV_DEBUG - ErrorF("Addr: 0x%lx, Offset 0x%lx\n Fb_stride: %u, Mem_stride: %u\n width: %u num_lines: %u\n", - (unsigned long)blit.mem_addr, (unsigned long)blit.fb_addr, - (unsigned)blit.fb_stride,(unsigned)blit.mem_stride, - (unsigned)blit.line_length,(unsigned)blit.num_lines); + ErrorF + ("Addr: 0x%lx, Offset 0x%lx\n Fb_stride: %u, Mem_stride: %u\n width: %u num_lines: %u\n", + (unsigned long)blit.mem_addr, (unsigned long)blit.fb_addr, + (unsigned)blit.fb_stride, (unsigned)blit.mem_stride, + (unsigned)blit.line_length, (unsigned)blit.num_lines); #endif - while(-EAGAIN == (err = drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, - &blit, sizeof(blit)))); - if (err < 0) + while (-EAGAIN == (err = + drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, + sizeof(blit)))) ; + if (err < 0) return -1; lumaSync = blit.sync; if (id == FOURCC_YV12) { - unsigned tmp = ALIGN_TO(width >> 1, 16); + unsigned tmp = ALIGN_TO(width >> 1, 16); if (nv12Conversion) { - nv12Blit(bounceBase + bounceStride*height, - src + bounceStride*height + tmp*(height >> 1), - src + bounceStride*height, width >> 1, tmp, - bounceStride, height >> 1); + nv12Blit(bounceBase + bounceStride * height, + src + bounceStride * height + tmp * (height >> 1), + src + bounceStride * height, width >> 1, tmp, + bounceStride, height >> 1); } else if (bounceBuffer) { - (*viaFastVidCpy)(base + bounceStride*height,src + bounceStride*height, - tmp, tmp >> 1,height, 1); + (*viaFastVidCpy) (base + bounceStride * height, + src + bounceStride * height, tmp, tmp >> 1, height, 1); } if (nv12Conversion) { blit.num_lines = height >> 1; blit.line_length = bounceStride; - blit.mem_addr = bounceBase + bounceStride*height; + blit.mem_addr = bounceBase + bounceStride * height; blit.fb_stride = lumaStride; blit.mem_stride = bounceStride; } else { blit.num_lines = height; blit.line_length = tmp; - blit.mem_addr = base + bounceStride*height; + blit.mem_addr = base + bounceStride * height; blit.fb_stride = lumaStride >> 1; blit.mem_stride = tmp; } - blit.fb_addr = dst + lumaStride*height; + blit.fb_addr = dst + lumaStride * height; blit.to_fb = 1; #if (VIA_DRM_DRIVER_VERSION >= ((2 << 16) | 9)) blit.flags = 0; #else blit.bounce_buffer = 0; -#endif +#endif - while(-EAGAIN == (err = drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, - &blit, sizeof(blit)))); - if (err < 0) + while (-EAGAIN == (err = + drmCommandWriteRead(pVia->drmFD, DRM_VIA_DMA_BLIT, &blit, + sizeof(blit)))) ; + if (err < 0) return -1; - } + } - while(-EAGAIN == (err = drmCommandWrite(pVia->drmFD, DRM_VIA_BLIT_SYNC, - chromaSync, sizeof(*chromaSync)))); - if (err < 0) + while (-EAGAIN == (err = drmCommandWrite(pVia->drmFD, DRM_VIA_BLIT_SYNC, + chromaSync, sizeof(*chromaSync)))) ; + if (err < 0) return -1; - return Success; + return Success; } - -#endif + +#endif static int -viaPutImage( - ScrnInfoPtr pScrn, +viaPutImage(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 - ){ - VIAPtr pVia = VIAPTR(pScrn); - viaPortPrivPtr pPriv = (viaPortPrivPtr)data; + int id, unsigned char *buf, + short width, short height, Bool sync, RegionPtr clipBoxes, pointer data) +{ + VIAPtr pVia = VIAPTR(pScrn); + viaPortPrivPtr pPriv = (viaPortPrivPtr) data; unsigned long retCode; # ifdef XV_DEBUG ErrorF(" via_video.c : viaPutImage : called\n"); - ErrorF(" via_video.c : FourCC=0x%x width=%d height=%d sync=%d\n",id,width,height,sync); - ErrorF(" via_video.c : src_x=%d src_y=%d src_w=%d src_h=%d colorkey=0x%lx\n",src_x, src_y, src_w, src_h, pPriv->colorKey); - ErrorF(" via_video.c : drw_x=%d drw_y=%d drw_w=%d drw_h=%d\n",drw_x,drw_y,drw_w,drw_h); + ErrorF(" via_video.c : FourCC=0x%x width=%d height=%d sync=%d\n", id, + width, height, sync); + ErrorF + (" via_video.c : src_x=%d src_y=%d src_w=%d src_h=%d colorkey=0x%lx\n", + src_x, src_y, src_w, src_h, pPriv->colorKey); + ErrorF(" via_video.c : drw_x=%d drw_y=%d drw_w=%d drw_h=%d\n", drw_x, + drw_y, drw_w, drw_h); # endif - switch ( pPriv->xv_adaptor ) - { - case XV_ADAPT_SWOV: + switch (pPriv->xv_adaptor) { + case XV_ADAPT_SWOV: { - DDUPDATEOVERLAY UpdateOverlay_Video; - LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video; + DDUPDATEOVERLAY UpdateOverlay_Video; + LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video; int dstPitch; - unsigned long dwUseExtendedFIFO=0; + unsigned long dwUseExtendedFIFO = 0; DBG_DD(ErrorF(" via_video.c : : S/W Overlay! \n")); /* Allocate video memory(CreateSurface), * add codes to judge if need to re-create surface */ - if ( (pPriv->old_src_w != src_w) || (pPriv->old_src_h != src_h) ) { + if ((pPriv->old_src_w != src_w) || (pPriv->old_src_h != src_h)) { ViaSwovSurfaceDestroy(pScrn, pPriv); } - - if (Success != ( retCode = ViaSwovSurfaceCreate(pScrn, pPriv, id, width, height) )) - { - DBG_DD(ErrorF(" : Fail to Create SW Video Surface\n")); - viaXvError(pScrn, pPriv, xve_mem); - return retCode; - } - - + + if (Success != (retCode = + ViaSwovSurfaceCreate(pScrn, pPriv, id, width, height))) { + DBG_DD(ErrorF + (" : Fail to Create SW Video Surface\n")); + viaXvError(pScrn, pPriv, xve_mem); + return retCode; + } + /* Copy image data from system memory to video memory * TODO: use DRM's DMA feature to accelerate data copy */ @@ -1192,47 +1188,53 @@ viaPutImage( if (pVia->useDmaBlit) { #ifdef XF86DRI - if (viaDmaBlitImage(pVia, pPriv, buf, - (unsigned char *)pVia->swov.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1] - - (unsigned char *)pVia->FBBase, - width, height, dstPitch, id)) { + if (viaDmaBlitImage(pVia, pPriv, buf, + (unsigned char *)pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1] - + (unsigned char *)pVia->FBBase, width, height, + dstPitch, id)) { viaXvError(pScrn, pPriv, xve_dmablit); return BadAccess; } #endif } else { - switch(id) { + switch (id) { case FOURCC_YV12: if (pVia->ChipId == PCI_CHIP_VT3259) { - nv12cp(pVia->swov.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1], - buf,dstPitch,width,height,0); + nv12cp(pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, + dstPitch, width, height, 0); } else { - (*viaFastVidCpy)(pVia->swov.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1], - buf,dstPitch,width,height,0); + (*viaFastVidCpy) (pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, + dstPitch, width, height, 0); } break; case FOURCC_RV32: - (*viaFastVidCpy)(pVia->swov.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1], - buf,dstPitch,width<<1,height,1); + (*viaFastVidCpy) (pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, + dstPitch, width << 1, height, 1); break; case FOURCC_UYVY: case FOURCC_YUY2: case FOURCC_RV15: case FOURCC_RV16: default: - (*viaFastVidCpy)(pVia->swov.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1], - buf,dstPitch,width,height,1); + (*viaFastVidCpy) (pVia->swov.SWDevice. + lpSWOverlaySurface[pVia->dwFrameNum & 1], buf, + dstPitch, width, height, 1); break; } } - } + } /* If there is bandwidth issue, block the H/W overlay */ - if (!pVia->OverlaySupported && + if (!pVia->OverlaySupported && !(pVia->OverlaySupported = DecideOverlaySupport(pScrn))) { - DBG_DD(ErrorF(" via_video.c : Xv Overlay rejected due to insufficient " - "memory bandwidth.\n")); + DBG_DD(ErrorF + (" via_video.c : Xv Overlay rejected due to insufficient " + "memory bandwidth.\n")); viaXvError(pScrn, pPriv, xve_bandwidth); return BadAlloc; } @@ -1253,15 +1255,15 @@ viaPutImage( lpUpdateOverlay->dwFlags = DDOVER_KEYDEST; if (pScrn->bitsPerPixel == 8) - lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff; + lpUpdateOverlay->dwColorSpaceLowValue = + pPriv->colorKey & 0xff; else lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey; /* If use extend FIFO mode */ - if (pScrn->currentMode->HDisplay > 1024) - { - dwUseExtendedFIFO = 1; - } + if (pScrn->currentMode->HDisplay > 1024) { + dwUseExtendedFIFO = 1; + } if (FOURCC_XVMC != id) { @@ -1270,24 +1272,23 @@ viaPutImage( */ DBG_DD(ErrorF(" : Flip\n")); - Flip(pVia, pPriv, id, pVia->dwFrameNum&1); + Flip(pVia, pPriv, id, pVia->dwFrameNum & 1); } - - pVia->dwFrameNum ++; - + + pVia->dwFrameNum++; + /* If the dest rec. & extendFIFO doesn't change, don't do UpdateOverlay - unless the surface clipping has changed */ - if ( (pPriv->old_drw_x == drw_x) && (pPriv->old_drw_y == drw_y) - && (pPriv->old_drw_w == drw_w) && (pPriv->old_drw_h == drw_h) - && (pPriv->old_src_x == src_x) && (pPriv->old_src_y == src_y) - && (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h) - && (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO) - && (pVia->VideoStatus & VIDEO_SWOV_ON) && - RegionsEqual(&pPriv->clip, clipBoxes)) - { - viaXvError(pScrn, pPriv, xve_none); - return Success; - } + * unless the surface clipping has changed */ + if ((pPriv->old_drw_x == drw_x) && (pPriv->old_drw_y == drw_y) + && (pPriv->old_drw_w == drw_w) && (pPriv->old_drw_h == drw_h) + && (pPriv->old_src_x == src_x) && (pPriv->old_src_y == src_y) + && (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h) + && (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO) + && (pVia->VideoStatus & VIDEO_SWOV_ON) && + RegionsEqual(&pPriv->clip, clipBoxes)) { + viaXvError(pScrn, pPriv, xve_none); + return Success; + } pPriv->old_src_x = src_x; pPriv->old_src_y = src_y; @@ -1302,125 +1303,135 @@ viaPutImage( pVia->VideoStatus |= VIDEO_SWOV_ON; /* BitBlt: Draw the colorkey rectangle */ - if(!RegionsEqual(&pPriv->clip, clipBoxes)) { - REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); - if (pPriv->autoPaint) - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); - } - + if (!RegionsEqual(&pPriv->clip, clipBoxes)) { + REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); + if (pPriv->autoPaint) + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, + clipBoxes); + } + /* * Update video overlay */ if (!VIAVidUpdateOverlay(pScrn, lpUpdateOverlay)) { - DBG_DD(ErrorF(" via_video.c : call v4l updateoverlay fail. \n")); + DBG_DD(ErrorF + (" via_video.c : call v4l updateoverlay fail. \n")); } else { DBG_DD(ErrorF(" via_video.c : PutImage done OK\n")); viaXvError(pScrn, pPriv, xve_none); return Success; } - break; - } - default: - DBG_DD(ErrorF(" via_video.c : XVPort not supported\n")); - viaXvError(pScrn, pPriv, xve_adaptor); - break; + break; } + default: + DBG_DD(ErrorF(" via_video.c : XVPort not supported\n")); + viaXvError(pScrn, pPriv, xve_adaptor); + break; + } DBG_DD(ErrorF(" via_video.c : PutImage done OK\n")); viaXvError(pScrn, pPriv, xve_none); return Success; } -static int -viaQueryImageAttributes( - ScrnInfoPtr pScrn, - int id, - unsigned short *w, unsigned short *h, - int *pitches, int *offsets -){ +static int +viaQueryImageAttributes(ScrnInfoPtr pScrn, + int id, unsigned short *w, unsigned short *h, int *pitches, int *offsets) +{ int size, tmp; - VIAPtr pVia = VIAPTR(pScrn); - - DBG_DD(ErrorF(" via_video.c : viaQueryImageAttributes : FourCC=0x%x, ", id)); - - if ( (!w) || (!h) ) - return 0; - - if(*w > VIA_MAX_XVIMAGE_X) *w = VIA_MAX_XVIMAGE_X; - if(*h > VIA_MAX_XVIMAGE_Y) *h = VIA_MAX_XVIMAGE_Y; - - *w = (*w + 1) & ~1; - if(offsets) - offsets[0] = 0; - - switch(id) { - case FOURCC_YV12: /*Planar format : YV12 -4:2:0*/ - *h = (*h + 1) & ~1; - size = *w; - if (pVia->useDmaBlit) - size = (size + 15) & ~15; - if(pitches) pitches[0] = size; - size *= *h; - if(offsets) offsets[1] = size; - tmp = (*w >> 1); - if (pVia->useDmaBlit) - tmp = (tmp + 15) & ~15; - if(pitches) pitches[1] = pitches[2] = tmp; - tmp *= (*h >> 1); - size += tmp; - if(offsets) offsets[2] = size; - size += tmp; - break; + VIAPtr pVia = VIAPTR(pScrn); + + DBG_DD(ErrorF(" via_video.c : viaQueryImageAttributes : FourCC=0x%x, ", + id)); + + if ((!w) || (!h)) + return 0; + + if (*w > VIA_MAX_XVIMAGE_X) + *w = VIA_MAX_XVIMAGE_X; + if (*h > VIA_MAX_XVIMAGE_Y) + *h = VIA_MAX_XVIMAGE_Y; + + *w = (*w + 1) & ~1; + if (offsets) + offsets[0] = 0; + + switch (id) { + case FOURCC_YV12: /*Planar format : YV12 -4:2:0 */ + *h = (*h + 1) & ~1; + size = *w; + if (pVia->useDmaBlit) + size = (size + 15) & ~15; + if (pitches) + pitches[0] = size; + size *= *h; + if (offsets) + offsets[1] = size; + tmp = (*w >> 1); + if (pVia->useDmaBlit) + tmp = (tmp + 15) & ~15; + if (pitches) + pitches[1] = pitches[2] = tmp; + tmp *= (*h >> 1); + size += tmp; + if (offsets) + offsets[2] = size; + size += tmp; + break; case FOURCC_XVMC: - *h = (*h + 1) & ~1; + *h = (*h + 1) & ~1; #ifdef XF86DRI size = viaXvMCPutImageSize(pScrn); #else size = 0; #endif - if (pitches) pitches[0] = size; + if (pitches) + pitches[0] = size; break; case FOURCC_AI44: case FOURCC_IA44: - size = *w * *h; - if (pitches) pitches[0] = *w; - if (offsets) offsets[0] = 0; - break; + size = *w * *h; + if (pitches) + pitches[0] = *w; + if (offsets) + offsets[0] = 0; + break; case FOURCC_RV32: - size = *w << 2; + size = *w << 2; if (pVia->useDmaBlit) size = (size + 15) & ~15; - if(pitches) - pitches[0] = size; - size *= *h; - break; - case FOURCC_UYVY: /*Packed format : UYVY -4:2:2*/ - case FOURCC_YUY2: /*Packed format : YUY2 -4:2:2*/ + if (pitches) + pitches[0] = size; + size *= *h; + break; + case FOURCC_UYVY: /*Packed format : UYVY -4:2:2 */ + case FOURCC_YUY2: /*Packed format : YUY2 -4:2:2 */ case FOURCC_RV15: case FOURCC_RV16: default: - size = *w << 1; + size = *w << 1; if (pVia->useDmaBlit) size = (size + 15) & ~15; - if(pitches) - pitches[0] = size; - size *= *h; - break; + if (pitches) + pitches[0] = size; + size *= *h; + break; } - if ( pitches ) - DBG_DD(ErrorF(" pitches[0]=%d, pitches[1]=%d, pitches[2]=%d, ", pitches[0], pitches[1], pitches[2])); - if ( offsets ) - DBG_DD(ErrorF(" offsets[0]=%d, offsets[1]=%d, offsets[2]=%d, ", offsets[0], offsets[1], offsets[2])); + if (pitches) + DBG_DD(ErrorF(" pitches[0]=%d, pitches[1]=%d, pitches[2]=%d, ", + pitches[0], pitches[1], pitches[2])); + if (offsets) + DBG_DD(ErrorF(" offsets[0]=%d, offsets[1]=%d, offsets[2]=%d, ", + offsets[0], offsets[1], offsets[2])); DBG_DD(ErrorF(" width=%d, height=%d \n", *w, *h)); return size; } - /* * */ -void +void VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y) { VIAPtr pVia = VIAPTR(pScrn); @@ -1434,11 +1445,11 @@ VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y) * YV12 to NV12. */ -static void nv12Blit(unsigned char *nv12Chroma, - const unsigned char *uBuffer, - const unsigned char *vBuffer, - unsigned width, unsigned srcPitch, - unsigned dstPitch, unsigned lines) +static void +nv12Blit(unsigned char *nv12Chroma, + const unsigned char *uBuffer, + const unsigned char *vBuffer, + unsigned width, unsigned srcPitch, unsigned dstPitch, unsigned lines) { int x; int dstAdd; @@ -1447,35 +1458,35 @@ static void nv12Blit(unsigned char *nv12Chroma, dstAdd = dstPitch - (width << 1); srcAdd = srcPitch - width; - while(lines--) { - x=width; - while(x > 3) { - register CARD32 + while (lines--) { + x = width; + while (x > 3) { + register CARD32 dst32, src32 = *((CARD32 *) vBuffer), src32_2 = *((CARD32 *) uBuffer); - dst32 = + dst32 = (src32_2 & 0xff) | ((src32 & 0xff) << 8) | ((src32_2 & 0x0000ff00) << 8) | ((src32 & 0x0000ff00) << 16); *((CARD32 *) nv12Chroma) = dst32; - nv12Chroma +=4; - dst32 = + nv12Chroma += 4; + dst32 = ((src32_2 & 0x00ff0000) >> 16) | ((src32 & 0x00ff0000) >> 8) | ((src32_2 & 0xff000000) >> 8) | (src32 & 0xff000000); *((CARD32 *) nv12Chroma) = dst32; - nv12Chroma +=4; + nv12Chroma += 4; x -= 4; vBuffer += 4; uBuffer += 4; } - while(x--) { + while (x--) { *nv12Chroma++ = *uBuffer++; *nv12Chroma++ = *vBuffer++; - } + } nv12Chroma += dstAdd; vBuffer += srcAdd; uBuffer += srcAdd; } } -#endif /* !XvExtension */ +#endif /* !XvExtension */ diff --git a/src/via_video.h b/src/via_video.h index dbd6dd0..6ca7da1 100644 --- a/src/via_video.h +++ b/src/via_video.h @@ -29,8 +29,8 @@ * I N C L U D E S */ -/*#define XV_DEBUG 1*/ /* write log msg to /var/log/XFree86.0.log */ -#define COLOR_KEY 1 /* set color key value from driver layer*/ + /*#define XV_DEBUG 1*//* write log msg to /var/log/XFree86.0.log */ +#define COLOR_KEY 1 /* set color key value from driver layer */ #define HW_3123 @@ -44,68 +44,69 @@ #define VIDEO_BPP 2 -typedef struct{ - CARD32 interruptflag; /* 200 */ - CARD32 ramtab; /* 204 */ - CARD32 alphawin_hvstart; /* 208 */ - CARD32 alphawin_size; /* 20c */ - CARD32 alphawin_ctl; /* 210 */ - CARD32 crt_startaddr; /* 214 */ - CARD32 crt_startaddr_2; /* 218 */ - CARD32 alphafb_stride ; /* 21c */ - CARD32 color_key; /* 220 */ - CARD32 alphafb_addr; /* 224 */ - CARD32 chroma_low; /* 228 */ - CARD32 chroma_up; /* 22c */ - CARD32 video1_ctl; /* 230 */ - CARD32 video1_fetch; /* 234 */ - CARD32 video1y_addr1; /* 238 */ - CARD32 video1_stride; /* 23c */ - CARD32 video1_hvstart; /* 240 */ - CARD32 video1_size; /* 244 */ - CARD32 video1y_addr2; /* 248 */ - CARD32 video1_zoom; /* 24c */ - CARD32 video1_mictl; /* 250 */ - CARD32 video1y_addr0; /* 254 */ - CARD32 video1_fifo; /* 258 */ - CARD32 video1y_addr3; /* 25c */ - CARD32 hi_control; /* 260 */ - CARD32 snd_color_key; /* 264 */ - CARD32 v3alpha_prefifo; /* 268 */ - CARD32 v1_source_w_h; /* 26c */ - CARD32 hi_transparent_color; /* 270 */ - CARD32 v_display_temp; /* 274 :No use */ - CARD32 v3alpha_fifo; /* 278 */ - CARD32 v3_source_width; /* 27c */ - CARD32 dummy1; /* 280 */ - CARD32 video1_CSC1; /* 284 */ - CARD32 video1_CSC2; /* 288 */ - CARD32 video1u_addr0; /* 28c */ - CARD32 video1_opqctl; /* 290 */ - CARD32 video3_opqctl; /* 294 */ - CARD32 compose; /* 298 */ - CARD32 dummy2; /* 29c */ - CARD32 video3_ctl; /* 2a0 */ - CARD32 video3_addr0; /* 2a4 */ - CARD32 video3_addr1; /* 2a8 */ - CARD32 video3_stribe; /* 2ac */ - CARD32 video3_hvstart; /* 2b0 */ - CARD32 video3_size; /* 2b4 */ - CARD32 v3alpha_fetch; /* 2b8 */ - CARD32 video3_zoom; /* 2bc */ - CARD32 video3_mictl; /* 2c0 */ - CARD32 video3_CSC1; /* 2c4 */ - CARD32 video3_CSC2; /* 2c8 */ - CARD32 v3_display_temp; /* 2cc */ - CARD32 reserved[5]; /* 2d0 */ - CARD32 video1u_addr1; /* 2e4 */ - CARD32 video1u_addr2; /* 2e8 */ - CARD32 video1u_addr3; /* 2ec */ - CARD32 video1v_addr0; /* 2f0 */ - CARD32 video1v_addr1; /* 2f4 */ - CARD32 video1v_addr2; /* 2f8 */ - CARD32 video1v_addr3; /* 2fc */ -} video_via_regs; +typedef struct +{ + CARD32 interruptflag; /* 200 */ + CARD32 ramtab; /* 204 */ + CARD32 alphawin_hvstart; /* 208 */ + CARD32 alphawin_size; /* 20c */ + CARD32 alphawin_ctl; /* 210 */ + CARD32 crt_startaddr; /* 214 */ + CARD32 crt_startaddr_2; /* 218 */ + CARD32 alphafb_stride; /* 21c */ + CARD32 color_key; /* 220 */ + CARD32 alphafb_addr; /* 224 */ + CARD32 chroma_low; /* 228 */ + CARD32 chroma_up; /* 22c */ + CARD32 video1_ctl; /* 230 */ + CARD32 video1_fetch; /* 234 */ + CARD32 video1y_addr1; /* 238 */ + CARD32 video1_stride; /* 23c */ + CARD32 video1_hvstart; /* 240 */ + CARD32 video1_size; /* 244 */ + CARD32 video1y_addr2; /* 248 */ + CARD32 video1_zoom; /* 24c */ + CARD32 video1_mictl; /* 250 */ + CARD32 video1y_addr0; /* 254 */ + CARD32 video1_fifo; /* 258 */ + CARD32 video1y_addr3; /* 25c */ + CARD32 hi_control; /* 260 */ + CARD32 snd_color_key; /* 264 */ + CARD32 v3alpha_prefifo; /* 268 */ + CARD32 v1_source_w_h; /* 26c */ + CARD32 hi_transparent_color; /* 270 */ + CARD32 v_display_temp; /* 274 :No use */ + CARD32 v3alpha_fifo; /* 278 */ + CARD32 v3_source_width; /* 27c */ + CARD32 dummy1; /* 280 */ + CARD32 video1_CSC1; /* 284 */ + CARD32 video1_CSC2; /* 288 */ + CARD32 video1u_addr0; /* 28c */ + CARD32 video1_opqctl; /* 290 */ + CARD32 video3_opqctl; /* 294 */ + CARD32 compose; /* 298 */ + CARD32 dummy2; /* 29c */ + CARD32 video3_ctl; /* 2a0 */ + CARD32 video3_addr0; /* 2a4 */ + CARD32 video3_addr1; /* 2a8 */ + CARD32 video3_stribe; /* 2ac */ + CARD32 video3_hvstart; /* 2b0 */ + CARD32 video3_size; /* 2b4 */ + CARD32 v3alpha_fetch; /* 2b8 */ + CARD32 video3_zoom; /* 2bc */ + CARD32 video3_mictl; /* 2c0 */ + CARD32 video3_CSC1; /* 2c4 */ + CARD32 video3_CSC2; /* 2c8 */ + CARD32 v3_display_temp; /* 2cc */ + CARD32 reserved[5]; /* 2d0 */ + CARD32 video1u_addr1; /* 2e4 */ + CARD32 video1u_addr2; /* 2e8 */ + CARD32 video1u_addr3; /* 2ec */ + CARD32 video1v_addr0; /* 2f0 */ + CARD32 video1v_addr1; /* 2f4 */ + CARD32 video1v_addr2; /* 2f8 */ + CARD32 video1v_addr3; /* 2fc */ +} video_via_regs; #define vmmtr volatile video_via_regs * diff --git a/src/via_xvmc.c b/src/via_xvmc.c index ebe99fe..008b7e0 100644 --- a/src/via_xvmc.c +++ b/src/via_xvmc.c @@ -66,7 +66,6 @@ #define MAKE_ATOM(a) MakeAtom(a, strlen(a), TRUE) - /* * List Attributes for the XvMC extension to handle: * As long as the attribute is supported by the Xv adaptor, it needs only to @@ -74,20 +73,21 @@ * Currently, only colorkey seems to be supported by Xv for Putimage. */ -static char *attrXvMC[VIA_NUM_XVMC_ATTRIBUTES] = - {"XV_COLORKEY", - "XV_AUTOPAINT_COLORKEY", - "XV_BRIGHTNESS", - "XV_CONTRAST", - "XV_SATURATION", - "XV_HUE"}; +static char *attrXvMC[VIA_NUM_XVMC_ATTRIBUTES] = { "XV_COLORKEY", + "XV_AUTOPAINT_COLORKEY", + "XV_BRIGHTNESS", + "XV_CONTRAST", + "XV_SATURATION", + "XV_HUE" +}; static Atom attrAtoms[VIA_NUM_XVMC_ATTRIBUTES]; /* * Xv Port private structure for XvMC. */ -typedef struct{ +typedef struct +{ unsigned ctxDisplaying; int xvmc_port; ViaXvMCAttrHolder xvAttr; @@ -96,9 +96,8 @@ typedef struct{ SetPortAttributeFuncPtr SetPortAttribute; GetPortAttributeFuncPtr GetPortAttribute; PutImageFuncPtr PutImage; -}ViaXvMCXVPriv; - - +} ViaXvMCXVPriv; + /* * Proposed XvMC via driver extension: */ @@ -109,50 +108,51 @@ typedef struct{ * Function declarations. */ - -static int ViaXvMCCreateContext (ScrnInfoPtr pScrn, XvMCContextPtr pContext, - int *num_priv, INT32 **priv ); -static void ViaXvMCDestroyContext (ScrnInfoPtr pScrn, XvMCContextPtr pContext); -static int ViaXvMCCreateSurface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf, - int *num_priv, INT32 **priv ); -static void ViaXvMCDestroySurface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf); -static int ViaXvMCCreateSubpicture (ScrnInfoPtr pScrn, XvMCSubpicturePtr pSurf, - int *num_priv, INT32 **priv ); -static void ViaXvMCDestroySubpicture (ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp); -static int viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 value,pointer data); -static int viaXvMCInterceptPutImage(ScrnInfoPtr, short, short, short, short, short, - short, short, short,int, unsigned char*, short, - short, Bool, RegionPtr, pointer); -static int viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 *value,pointer data); +static int ViaXvMCCreateContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext, + int *num_priv, INT32 ** priv); +static void ViaXvMCDestroyContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext); +static int ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf, + int *num_priv, INT32 ** priv); +static void ViaXvMCDestroySurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf); +static int ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSurf, + int *num_priv, INT32 ** priv); +static void ViaXvMCDestroySubpicture(ScrnInfoPtr pScrn, + XvMCSubpicturePtr pSubp); +static int viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, + INT32 value, pointer data); +static int viaXvMCInterceptPutImage(ScrnInfoPtr, short, short, short, short, + short, short, short, short, int, unsigned char *, short, short, Bool, + RegionPtr, pointer); +static int viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, + INT32 * value, pointer data); /* * Init and clean up the screen private parts of XvMC. */ -static void initViaXvMC(ViaXvMCPtr vXvMC) +static void +initViaXvMC(ViaXvMCPtr vXvMC) { unsigned i; - for (i=0; i < VIA_XVMC_MAX_CONTEXTS; ++i) { + for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; ++i) { vXvMC->contexts[i] = 0; vXvMC->cPrivs[i] = 0; } - for (i=0; i < VIA_XVMC_MAX_SURFACES; ++i) { + for (i = 0; i < VIA_XVMC_MAX_SURFACES; ++i) { vXvMC->surfaces[i] = 0; vXvMC->sPrivs[i] = 0; } } - -static void -cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr *XvAdaptors, - int XvAdaptorCount) + +static void +cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr * XvAdaptors, + int XvAdaptorCount) { unsigned i; - for (i=0; i < VIA_XVMC_MAX_CONTEXTS; ++i) { + for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; ++i) { vXvMC->contexts[i] = 0; if (vXvMC->cPrivs[i]) { xfree(vXvMC->cPrivs[i]); @@ -160,7 +160,7 @@ cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr *XvAdaptors, } } - for (i=0; i < VIA_XVMC_MAX_SURFACES; ++i) { + for (i = 0; i < VIA_XVMC_MAX_SURFACES; ++i) { vXvMC->surfaces[i] = 0; if (vXvMC->sPrivs[i]) { xfree(vXvMC->sPrivs[i]); @@ -169,38 +169,38 @@ cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr *XvAdaptors, } } -static unsigned stride(int w) +static unsigned +stride(int w) { return (w + 31) & ~31; } -static unsigned long size_yuv420(int w, int h) +static unsigned long +size_yuv420(int w, int h) { unsigned yPitch = stride(w); - return h* (yPitch + (yPitch >> 1)); -} -static unsigned long size_xx44(int w, int h) + return h * (yPitch + (yPitch >> 1)); +} + +static unsigned long +size_xx44(int w, int h) { return h * stride(w); -} - +} -static int yv12_subpicture_index_list[2] = -{ - FOURCC_IA44, - FOURCC_AI44 +static int yv12_subpicture_index_list[2] = { + FOURCC_IA44, + FOURCC_AI44 }; -static XF86MCImageIDList yv12_subpicture_list = -{ - 2, - yv12_subpicture_index_list +static XF86MCImageIDList yv12_subpicture_list = { + 2, + yv12_subpicture_index_list }; - -static XF86MCSurfaceInfoRec Via_YV12_mpg2_surface = -{ - FOURCC_YV12, + +static XF86MCSurfaceInfoRec Via_YV12_mpg2_surface = { + FOURCC_YV12, XVMC_CHROMA_FORMAT_420, 0, 1024, @@ -212,9 +212,8 @@ static XF86MCSurfaceInfoRec Via_YV12_mpg2_surface = &yv12_subpicture_list }; -static XF86MCSurfaceInfoRec Via_pga_mpg2_surface = -{ - FOURCC_YV12, +static XF86MCSurfaceInfoRec Via_pga_mpg2_surface = { + FOURCC_YV12, XVMC_CHROMA_FORMAT_420, 0, 2048, @@ -226,9 +225,8 @@ static XF86MCSurfaceInfoRec Via_pga_mpg2_surface = &yv12_subpicture_list }; -static XF86MCSurfaceInfoRec Via_YV12_mpg1_surface = -{ - FOURCC_YV12, +static XF86MCSurfaceInfoRec Via_YV12_mpg1_surface = { + FOURCC_YV12, XVMC_CHROMA_FORMAT_420, 0, 1024, @@ -240,9 +238,8 @@ static XF86MCSurfaceInfoRec Via_YV12_mpg1_surface = &yv12_subpicture_list }; -static XF86MCSurfaceInfoRec Via_pga_mpg1_surface = -{ - FOURCC_YV12, +static XF86MCSurfaceInfoRec Via_pga_mpg1_surface = { + FOURCC_YV12, XVMC_CHROMA_FORMAT_420, 0, 2048, @@ -254,28 +251,23 @@ static XF86MCSurfaceInfoRec Via_pga_mpg1_surface = &yv12_subpicture_list }; -static XF86MCSurfaceInfoPtr ppSI[2] = -{ - (XF86MCSurfaceInfoPtr)&Via_YV12_mpg2_surface, - (XF86MCSurfaceInfoPtr)&Via_YV12_mpg1_surface +static XF86MCSurfaceInfoPtr ppSI[2] = { + (XF86MCSurfaceInfoPtr) & Via_YV12_mpg2_surface, + (XF86MCSurfaceInfoPtr) & Via_YV12_mpg1_surface }; - -static XF86MCSurfaceInfoPtr ppSI_pga[2] = -{ - (XF86MCSurfaceInfoPtr)&Via_pga_mpg2_surface, - (XF86MCSurfaceInfoPtr)&Via_pga_mpg1_surface +static XF86MCSurfaceInfoPtr ppSI_pga[2] = { + (XF86MCSurfaceInfoPtr) & Via_pga_mpg2_surface, + (XF86MCSurfaceInfoPtr) & Via_pga_mpg1_surface }; - /* List of subpicture types that we support */ static XF86ImageRec ia44_subpicture = XVIMAGE_IA44; static XF86ImageRec ai44_subpicture = XVIMAGE_AI44; -static XF86ImagePtr Via_subpicture_list[2] = -{ - (XF86ImagePtr)&ia44_subpicture, - (XF86ImagePtr)&ai44_subpicture +static XF86ImagePtr Via_subpicture_list[2] = { + (XF86ImagePtr) & ia44_subpicture, + (XF86ImagePtr) & ai44_subpicture }; /* @@ -287,575 +279,573 @@ static XF86ImagePtr Via_subpicture_list[2] = * Function pointers to functions below */ -static XF86MCAdaptorRec pAdapt = -{ - "XV_SWOV", /* name */ - 2, /* num_surfaces */ - ppSI, /* surfaces */ - 2, /* num_subpictures */ - Via_subpicture_list, /* subpictures */ - (xf86XvMCCreateContextProcPtr)ViaXvMCCreateContext, - (xf86XvMCDestroyContextProcPtr)ViaXvMCDestroyContext, - (xf86XvMCCreateSurfaceProcPtr)ViaXvMCCreateSurface, - (xf86XvMCDestroySurfaceProcPtr)ViaXvMCDestroySurface, - (xf86XvMCCreateSubpictureProcPtr)ViaXvMCCreateSubpicture, - (xf86XvMCDestroySubpictureProcPtr)ViaXvMCDestroySubpicture +static XF86MCAdaptorRec pAdapt = { + "XV_SWOV", /* name */ + 2, /* num_surfaces */ + ppSI, /* surfaces */ + 2, /* num_subpictures */ + Via_subpicture_list, /* subpictures */ + (xf86XvMCCreateContextProcPtr) ViaXvMCCreateContext, + (xf86XvMCDestroyContextProcPtr) ViaXvMCDestroyContext, + (xf86XvMCCreateSurfaceProcPtr) ViaXvMCCreateSurface, + (xf86XvMCDestroySurfaceProcPtr) ViaXvMCDestroySurface, + (xf86XvMCCreateSubpictureProcPtr) ViaXvMCCreateSubpicture, + (xf86XvMCDestroySubpictureProcPtr) ViaXvMCDestroySubpicture }; -static XF86MCAdaptorRec pAdapt_pga = -{ - "XV_SWOV", /* name */ - 2, /* num_surfaces */ - ppSI_pga, /* surfaces */ - 2, /* num_subpictures */ - Via_subpicture_list, /* subpictures */ - (xf86XvMCCreateContextProcPtr)ViaXvMCCreateContext, - (xf86XvMCDestroyContextProcPtr)ViaXvMCDestroyContext, - (xf86XvMCCreateSurfaceProcPtr)ViaXvMCCreateSurface, - (xf86XvMCDestroySurfaceProcPtr)ViaXvMCDestroySurface, - (xf86XvMCCreateSubpictureProcPtr)ViaXvMCCreateSubpicture, - (xf86XvMCDestroySubpictureProcPtr)ViaXvMCDestroySubpicture +static XF86MCAdaptorRec pAdapt_pga = { + "XV_SWOV", /* name */ + 2, /* num_surfaces */ + ppSI_pga, /* surfaces */ + 2, /* num_subpictures */ + Via_subpicture_list, /* subpictures */ + (xf86XvMCCreateContextProcPtr) ViaXvMCCreateContext, + (xf86XvMCDestroyContextProcPtr) ViaXvMCDestroyContext, + (xf86XvMCCreateSurfaceProcPtr) ViaXvMCCreateSurface, + (xf86XvMCDestroySurfaceProcPtr) ViaXvMCDestroySurface, + (xf86XvMCCreateSubpictureProcPtr) ViaXvMCCreateSubpicture, + (xf86XvMCDestroySubpictureProcPtr) ViaXvMCDestroySubpicture }; -static XF86MCAdaptorPtr ppAdapt[1] = {(XF86MCAdaptorPtr)&pAdapt}; -static XF86MCAdaptorPtr ppAdapt_pga[1] = {(XF86MCAdaptorPtr)&pAdapt_pga}; - -static void mpegDisable(VIAPtr pVia,CARD32 val) +static XF86MCAdaptorPtr ppAdapt[1] = { (XF86MCAdaptorPtr) & pAdapt }; +static XF86MCAdaptorPtr ppAdapt_pga[1] = { (XF86MCAdaptorPtr) & pAdapt_pga }; +static void +mpegDisable(VIAPtr pVia, CARD32 val) { MPGOutD(0x0c, MPGInD(0x0c) & (val ^ 0xffffffff)); } - void ViaInitXVMC(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - volatile ViaXvMCSAreaPriv *saPriv; - - pVia->XvMCEnabled = 0; - - if (!(pVia->Chipset == VIA_CLE266) && !(pVia->Chipset == VIA_K8M800) && - !(pVia->Chipset == VIA_PM800) && !(pVia->Chipset == VIA_VM800)) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Not supported on this chipset.\n"); - return; - } - - if (!pVia->directRenderingEnabled) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Cannot use XvMC without DRI!\n"); - return; - } - - if (((pVia->drmVerMajor <= 2) && (pVia->drmVerMinor< 4))) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Kernel drm is not compatible with XvMC.\n"); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Kernel drm version: %d.%d.%d " - "and need at least version 2.4.0.\n", - pVia->drmVerMajor, - pVia->drmVerMinor, - pVia->drmVerPL); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Please update. Disabling XvMC.\n"); - return; - } - if ((pVia->drmVerMajor >= 3)) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] XvMC X driver may not be compatible " - "with kernel drm.\n"); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "[XvMC] Continuing, but strange things may happen.\n"); - } - - vXvMC->mmioBase = pVia->registerHandle; - - if (drmAddMap(pVia->drmFD, - (drm_handle_t)pVia->FrameBufferBase, - pVia->videoRambytes, DRM_FRAME_BUFFER, - 0 , &(vXvMC->fbBase)) < 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] drmAddMap(FB) failed. Disabling XvMC.\n"); - return; - } - - initViaXvMC(vXvMC); - - if (! xf86XvMCScreenInit(pScreen, 1, - (pVia->Chipset == VIA_PM800) ? - ppAdapt_pga : ppAdapt)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] XvMCScreenInit failed. Disabling XvMC.\n"); - drmRmMap(pVia->drmFD,vXvMC->fbBase); - return; - } + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + volatile ViaXvMCSAreaPriv *saPriv; + + pVia->XvMCEnabled = 0; + + if (!(pVia->Chipset == VIA_CLE266) && !(pVia->Chipset == VIA_K8M800) && + !(pVia->Chipset == VIA_PM800) && !(pVia->Chipset == VIA_VM800)) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Not supported on this chipset.\n"); + return; + } + + if (!pVia->directRenderingEnabled) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Cannot use XvMC without DRI!\n"); + return; + } + if (((pVia->drmVerMajor <= 2) && (pVia->drmVerMinor < 4))) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Kernel drm is not compatible with XvMC.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Kernel drm version: %d.%d.%d " + "and need at least version 2.4.0.\n", + pVia->drmVerMajor, pVia->drmVerMinor, pVia->drmVerPL); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Please update. Disabling XvMC.\n"); + return; + } + if ((pVia->drmVerMajor >= 3)) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] XvMC X driver may not be compatible " + "with kernel drm.\n"); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] Continuing, but strange things may happen.\n"); + } + + vXvMC->mmioBase = pVia->registerHandle; + + if (drmAddMap(pVia->drmFD, + (drm_handle_t) pVia->FrameBufferBase, + pVia->videoRambytes, DRM_FRAME_BUFFER, 0, &(vXvMC->fbBase)) < 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] drmAddMap(FB) failed. Disabling XvMC.\n"); + return; + } + + initViaXvMC(vXvMC); + + if (!xf86XvMCScreenInit(pScreen, 1, + (pVia->Chipset == VIA_PM800) ? ppAdapt_pga : ppAdapt)) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] XvMCScreenInit failed. Disabling XvMC.\n"); + drmRmMap(pVia->drmFD, vXvMC->fbBase); + return; + } #if (XvMCVersion > 1) || (XvMCRevision > 0) - { - DRIInfoPtr pDRIInfo = pVia->pDRIInfo; - if (pVia->ChipId != PCI_CHIP_VT3259) - { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Registering viaXvMC.\n"); - xf86XvMCRegisterDRInfo(pScreen, "viaXvMC",pDRIInfo->busIdString, - VIAXVMC_MAJOR, VIAXVMC_MINOR, VIAXVMC_PL); - } - else - { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Registering viaXvMCPro.\n"); - xf86XvMCRegisterDRInfo(pScreen, "viaXvMCPro",pDRIInfo->busIdString, - VIAXVMC_MAJOR, VIAXVMC_MINOR, VIAXVMC_PL); + { + DRIInfoPtr pDRIInfo = pVia->pDRIInfo; + + if (pVia->ChipId != PCI_CHIP_VT3259) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[XvMC] Registering viaXvMC.\n"); + xf86XvMCRegisterDRInfo(pScreen, "viaXvMC", pDRIInfo->busIdString, + VIAXVMC_MAJOR, VIAXVMC_MINOR, VIAXVMC_PL); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[XvMC] Registering viaXvMCPro.\n"); + xf86XvMCRegisterDRInfo(pScreen, "viaXvMCPro", + pDRIInfo->busIdString, VIAXVMC_MAJOR, VIAXVMC_MINOR, + VIAXVMC_PL); } - } + } #endif - - vXvMC->activePorts = 0; - saPriv=(ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScreen); - saPriv->XvMCCtxNoGrabbed = ~0; - XVMCLOCKPTR(saPriv,UNICHROME_LOCK_DECODER1)->lock = 0; + vXvMC->activePorts = 0; + saPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScreen); + saPriv->XvMCCtxNoGrabbed = ~0; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Initialized XvMC extension.\n"); - pVia->XvMCEnabled = 1; + XVMCLOCKPTR(saPriv, UNICHROME_LOCK_DECODER1)->lock = 0; + + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "[XvMC] Initialized XvMC extension.\n"); + pVia->XvMCEnabled = 1; } -void ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr *XvAdaptors, - int XvAdaptorCount) +void +ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr * XvAdaptors, + int XvAdaptorCount) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCPtr vXvMC = &(pVia->xvmc); - int i,j; + int i, j; if (pVia->XvMCEnabled) { - mpegDisable(pVia,0); - drmRmMap(pVia->drmFD,vXvMC->mmioBase); + mpegDisable(pVia, 0); + drmRmMap(pVia->drmFD, vXvMC->mmioBase); cleanupViaXvMC(vXvMC, XvAdaptors, XvAdaptorCount); } - for (i=0; i<XvAdaptorCount; ++i) { - for (j=0; j<XvAdaptors[i]->nPorts; ++j) { + for (i = 0; i < XvAdaptorCount; ++i) { + for (j = 0; j < XvAdaptors[i]->nPorts; ++j) { viaPortPrivPtr pPriv = XvAdaptors[i]->pPortPrivates[j].ptr; + if (pPriv->xvmc_priv) xfree(pPriv->xvmc_priv); } - } + } pVia->XvMCEnabled = 0; } static int -ViaXvMCCreateContext (ScrnInfoPtr pScrn, XvMCContextPtr pContext, - int *num_priv, INT32 **priv ) +ViaXvMCCreateContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext, + int *num_priv, INT32 ** priv) { - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - DRIInfoPtr pDRIInfo = pVia->pDRIInfo; - VIADRIPtr pViaDRI = pDRIInfo->devPrivate; - ViaXvMCCreateContextRec *contextRec; - unsigned ctxNo; - ViaXvMCContextPriv *cPriv; - XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; - viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; - ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - volatile ViaXvMCSAreaPriv *sAPriv; - - sAPriv = (ViaXvMCSAreaPriv*) DRIGetSAREAPrivate(pScrn->pScreen); - - if (-1 == vx->xvmc_port) { - vx->xvmc_port = (vXvMC->activePorts++); - sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; - sAPriv->XvMCDisplaying[vx->xvmc_port] = 0; - } - - if(vXvMC->nContexts >= VIA_XVMC_MAX_CONTEXTS) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateContext: Out of contexts.\n"); - return BadAlloc; - } - - *priv = xcalloc(1,sizeof(ViaXvMCCreateContextRec)); - contextRec = (ViaXvMCCreateContextRec *)*priv; - - if(!*priv) { - *num_priv = 0; - return BadAlloc; - } - - *num_priv = sizeof(ViaXvMCCreateContextRec) >> 2; - - for (ctxNo = 0; ctxNo < VIA_XVMC_MAX_CONTEXTS; ++ctxNo) { - if (0 == vXvMC->contexts[ctxNo] ) break; - } - - cPriv = (ViaXvMCContextPriv *) xcalloc(1,sizeof(ViaXvMCContextPriv)); - - if(!cPriv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateContext: Unable to allocate memory!\n"); - xfree(*priv); - *num_priv = 0; - return BadAlloc; - } - - /* - * Export framebuffer and mmio to non-root clients. - */ - - contextRec->ctxNo = ctxNo; - contextRec->xvmc_port = vx->xvmc_port; - contextRec->fbOffset = vXvMC->fbBase; - contextRec->fbSize = pVia->videoRambytes; - contextRec->mmioOffset = vXvMC->mmioBase; - contextRec->mmioSize = VIA_MMIO_REGSIZE; - contextRec->sAreaSize = pDRIInfo->SAREASize; - contextRec->sAreaPrivOffset = sizeof(XF86DRISAREARec); - contextRec->major = VIAXVMC_MAJOR; - contextRec->minor = VIAXVMC_MINOR; - contextRec->pl = VIAXVMC_PL; - contextRec->initAttrs = vx->xvAttr; - contextRec->useAGP = pViaDRI->ringBufActive && - ((pVia->Chipset == VIA_CLE266) || - (pVia->Chipset == VIA_KM400) || - (pVia->Chipset == VIA_PM800) || - (pVia->Chipset == VIA_VM800)); - contextRec->chipId = pVia->ChipId; - contextRec->screen = pScrn->pScreen->myNum; - contextRec->depth = pScrn->bitsPerPixel; - contextRec->stride = pVia->Bpp * pScrn->virtualX; - - vXvMC->nContexts++; - vXvMC->contexts[ctxNo] = pContext->context_id; - vXvMC->cPrivs[ctxNo] = cPriv; - - return Success; -} + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + DRIInfoPtr pDRIInfo = pVia->pDRIInfo; + VIADRIPtr pViaDRI = pDRIInfo->devPrivate; + ViaXvMCCreateContextRec *contextRec; + unsigned ctxNo; + ViaXvMCContextPriv *cPriv; + XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; + viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; + ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; + volatile ViaXvMCSAreaPriv *sAPriv; + + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + + if (-1 == vx->xvmc_port) { + vx->xvmc_port = (vXvMC->activePorts++); + sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; + sAPriv->XvMCDisplaying[vx->xvmc_port] = 0; + } + + if (vXvMC->nContexts >= VIA_XVMC_MAX_CONTEXTS) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateContext: Out of contexts.\n"); + return BadAlloc; + } + + *priv = xcalloc(1, sizeof(ViaXvMCCreateContextRec)); + contextRec = (ViaXvMCCreateContextRec *) * priv; + + if (!*priv) { + *num_priv = 0; + return BadAlloc; + } + + *num_priv = sizeof(ViaXvMCCreateContextRec) >> 2; + + for (ctxNo = 0; ctxNo < VIA_XVMC_MAX_CONTEXTS; ++ctxNo) { + if (0 == vXvMC->contexts[ctxNo]) + break; + } + + cPriv = (ViaXvMCContextPriv *) xcalloc(1, sizeof(ViaXvMCContextPriv)); + if (!cPriv) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateContext: Unable to allocate memory!\n"); + xfree(*priv); + *num_priv = 0; + return BadAlloc; + } + + /* + * Export framebuffer and mmio to non-root clients. + */ + + contextRec->ctxNo = ctxNo; + contextRec->xvmc_port = vx->xvmc_port; + contextRec->fbOffset = vXvMC->fbBase; + contextRec->fbSize = pVia->videoRambytes; + contextRec->mmioOffset = vXvMC->mmioBase; + contextRec->mmioSize = VIA_MMIO_REGSIZE; + contextRec->sAreaSize = pDRIInfo->SAREASize; + contextRec->sAreaPrivOffset = sizeof(XF86DRISAREARec); + contextRec->major = VIAXVMC_MAJOR; + contextRec->minor = VIAXVMC_MINOR; + contextRec->pl = VIAXVMC_PL; + contextRec->initAttrs = vx->xvAttr; + contextRec->useAGP = pViaDRI->ringBufActive && + ((pVia->Chipset == VIA_CLE266) || + (pVia->Chipset == VIA_KM400) || + (pVia->Chipset == VIA_PM800) || (pVia->Chipset == VIA_VM800)); + contextRec->chipId = pVia->ChipId; + contextRec->screen = pScrn->pScreen->myNum; + contextRec->depth = pScrn->bitsPerPixel; + contextRec->stride = pVia->Bpp * pScrn->virtualX; + + vXvMC->nContexts++; + vXvMC->contexts[ctxNo] = pContext->context_id; + vXvMC->cPrivs[ctxNo] = cPriv; + + return Success; +} static int -ViaXvMCCreateSurface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf, - int *num_priv, INT32 **priv ) +ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf, + int *num_priv, INT32 ** priv) { - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - unsigned srfNo,numBuffers,i; - ViaXvMCSurfacePriv *sPriv; - XvMCContextPtr ctx; - unsigned bufSize,yBufSize; - - if (VIA_XVMC_MAX_SURFACES == vXvMC->nSurfaces) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSurface: Too many surfaces !\n"); - return BadAlloc; - } - - sPriv = (ViaXvMCSurfacePriv *) xcalloc(1,sizeof(ViaXvMCSurfacePriv)); - - if(!sPriv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); - *num_priv = 0; - return BadAlloc; - } - - numBuffers = 1; - - /* - * Some chips require more than one buffer per surface (and a special - * flipping procedure; See Ivor Hewitt's ddmpeg.c version 1.6). The client - * lib will detect the number of buffers allocated and determine the - * flipping method from that. - */ -#if 0 /* Not enabled yet. */ - switch(pVia->ChipSet) { - case VIA_CLE266: - switch(pVia->ChipRev) { - case 0x10: /* CLE266 C0 only? or all C? */ - numBuffers = 2; - break; - default: - break; - } - break; - default: - break; - } + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + unsigned srfNo, numBuffers, i; + ViaXvMCSurfacePriv *sPriv; + XvMCContextPtr ctx; + unsigned bufSize, yBufSize; + + if (VIA_XVMC_MAX_SURFACES == vXvMC->nSurfaces) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSurface: Too many surfaces !\n"); + return BadAlloc; + } + + sPriv = (ViaXvMCSurfacePriv *) xcalloc(1, sizeof(ViaXvMCSurfacePriv)); + + if (!sPriv) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); + *num_priv = 0; + return BadAlloc; + } + + numBuffers = 1; + + /* + * Some chips require more than one buffer per surface (and a special + * flipping procedure; See Ivor Hewitt's ddmpeg.c version 1.6). The client + * lib will detect the number of buffers allocated and determine the + * flipping method from that. + */ +#if 0 /* Not enabled yet. */ + switch (pVia->ChipSet) { + case VIA_CLE266: + switch (pVia->ChipRev) { + case 0x10: /* CLE266 C0 only? or all C? */ + numBuffers = 2; + break; + default: + break; + } + break; + default: + break; + } #endif - *num_priv = numBuffers + 2; - - *priv = (INT32 *)xcalloc(*num_priv,sizeof(INT32)); - - if(!*priv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); - *num_priv = 0; - xfree(sPriv); - return BadAlloc; - } - - for (srfNo = 0; srfNo < VIA_XVMC_MAX_SURFACES; ++srfNo) { - if (0 == vXvMC->sPrivs[srfNo] ) break; - } - - (*priv)[0] = srfNo; - - ctx = pSurf->context; - bufSize = size_yuv420(ctx->width, ctx->height); - sPriv->memory_ref.pool = 0; - if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, numBuffers * bufSize + 32)) { - xfree(*priv); - xfree(sPriv); - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSurface: " - "Unable to allocate frambuffer memory!\n"); - return BadAlloc; - } - - (*priv)[1] = numBuffers; - (*priv)[2] = sPriv->offsets[0] = ALIGN_TO(sPriv->memory_ref.base, 32); - for (i = 1; i < numBuffers; ++i) { - (*priv)[i+2] = sPriv->offsets[i] = sPriv->offsets[i-1] + bufSize; - } - - yBufSize = stride(ctx->width)*ctx->height; - for (i = 0; i < numBuffers; ++i) { - memset((CARD8 *)(pVia->FBBase) + sPriv->offsets[i], 0, yBufSize); - memset((CARD8 *)(pVia->FBBase) + sPriv->offsets[i] + yBufSize, 0x80, - yBufSize >> 1); - } - - vXvMC->sPrivs[srfNo] = sPriv; - vXvMC->surfaces[srfNo] = pSurf->surface_id; - vXvMC->nSurfaces++; - return Success; + *num_priv = numBuffers + 2; + + *priv = (INT32 *) xcalloc(*num_priv, sizeof(INT32)); + + if (!*priv) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n"); + *num_priv = 0; + xfree(sPriv); + return BadAlloc; + } + + for (srfNo = 0; srfNo < VIA_XVMC_MAX_SURFACES; ++srfNo) { + if (0 == vXvMC->sPrivs[srfNo]) + break; + } + + (*priv)[0] = srfNo; + + ctx = pSurf->context; + bufSize = size_yuv420(ctx->width, ctx->height); + sPriv->memory_ref.pool = 0; + if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, + numBuffers * bufSize + 32)) { + xfree(*priv); + xfree(sPriv); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSurface: " + "Unable to allocate frambuffer memory!\n"); + return BadAlloc; + } + + (*priv)[1] = numBuffers; + (*priv)[2] = sPriv->offsets[0] = ALIGN_TO(sPriv->memory_ref.base, 32); + for (i = 1; i < numBuffers; ++i) { + (*priv)[i + 2] = sPriv->offsets[i] = sPriv->offsets[i - 1] + bufSize; + } + + yBufSize = stride(ctx->width) * ctx->height; + for (i = 0; i < numBuffers; ++i) { + memset((CARD8 *) (pVia->FBBase) + sPriv->offsets[i], 0, yBufSize); + memset((CARD8 *) (pVia->FBBase) + sPriv->offsets[i] + yBufSize, 0x80, + yBufSize >> 1); + } + + vXvMC->sPrivs[srfNo] = sPriv; + vXvMC->surfaces[srfNo] = pSurf->surface_id; + vXvMC->nSurfaces++; + return Success; } static int -ViaXvMCCreateSubpicture (ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp, - int *num_priv, INT32 **priv ) +ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp, + int *num_priv, INT32 ** priv) { - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - unsigned srfNo; - ViaXvMCSurfacePriv *sPriv; - XvMCContextPtr ctx; - unsigned bufSize; - - if (VIA_XVMC_MAX_SURFACES == vXvMC->nSurfaces) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Too many surfaces !\n"); - return BadAlloc; - } - - sPriv = (ViaXvMCSurfacePriv *) xcalloc(1,sizeof(ViaXvMCSurfacePriv)); - - if(!sPriv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate memory!\n"); - *num_priv = 0; - return BadAlloc; - } - - *priv = (INT32 *)xcalloc(3,sizeof(INT32)); - - if(!*priv) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate memory!\n"); - *num_priv = 0; - xfree(sPriv); - return BadAlloc; - } - - *num_priv = 2; - - for (srfNo = 0; srfNo < VIA_XVMC_MAX_SURFACES; ++srfNo) { - if (0 == vXvMC->sPrivs[srfNo] ) break; - } - - (*priv)[0] = srfNo; - - ctx = pSubp->context; - bufSize = size_xx44(ctx->width,ctx->height); - sPriv->memory_ref.pool = 0; - if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, - 1 * bufSize + 32)) { - xfree(*priv); - xfree(sPriv); - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate " - "framebuffer memory!\n"); - return BadAlloc; - } - (*priv)[1] = sPriv->offsets[0] = ALIGN_TO(sPriv->memory_ref.base, 32); - - vXvMC->sPrivs[srfNo] = sPriv; - vXvMC->surfaces[srfNo] = pSubp->subpicture_id; - vXvMC->nSurfaces++; - - return Success; + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + unsigned srfNo; + ViaXvMCSurfacePriv *sPriv; + XvMCContextPtr ctx; + unsigned bufSize; + + if (VIA_XVMC_MAX_SURFACES == vXvMC->nSurfaces) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSubpicture: Too many surfaces !\n"); + return BadAlloc; + } + + sPriv = (ViaXvMCSurfacePriv *) xcalloc(1, sizeof(ViaXvMCSurfacePriv)); + + if (!sPriv) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate memory!\n"); + *num_priv = 0; + return BadAlloc; + } + + *priv = (INT32 *) xcalloc(3, sizeof(INT32)); + + if (!*priv) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate memory!\n"); + *num_priv = 0; + xfree(sPriv); + return BadAlloc; + } + + *num_priv = 2; + + for (srfNo = 0; srfNo < VIA_XVMC_MAX_SURFACES; ++srfNo) { + if (0 == vXvMC->sPrivs[srfNo]) + break; + } + + (*priv)[0] = srfNo; + + ctx = pSubp->context; + bufSize = size_xx44(ctx->width, ctx->height); + sPriv->memory_ref.pool = 0; + if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, 1 * bufSize + 32)) { + xfree(*priv); + xfree(sPriv); + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[XvMC] ViaXvMCCreateSubpicture: Unable to allocate " + "framebuffer memory!\n"); + return BadAlloc; + } + (*priv)[1] = sPriv->offsets[0] = ALIGN_TO(sPriv->memory_ref.base, 32); + + vXvMC->sPrivs[srfNo] = sPriv; + vXvMC->surfaces[srfNo] = pSubp->subpicture_id; + vXvMC->nSurfaces++; + + return Success; } -static void ViaXvMCDestroyContext (ScrnInfoPtr pScrn, XvMCContextPtr pContext) +static void +ViaXvMCDestroyContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext) { - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - int i; - volatile ViaXvMCSAreaPriv *sAPriv; - viaPortPrivPtr pPriv; - XvPortRecPrivatePtr portPriv; - ViaXvMCXVPriv *vx; - - for(i=0; i < VIA_XVMC_MAX_CONTEXTS; i++) { - if(vXvMC->contexts[i] == pContext->context_id) { - - sAPriv=(ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); - portPriv = (XvPortRecPrivatePtr) pContext->port_priv; - pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; - vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + int i; + volatile ViaXvMCSAreaPriv *sAPriv; + viaPortPrivPtr pPriv; + XvPortRecPrivatePtr portPriv; + ViaXvMCXVPriv *vx; - if ((i | VIA_XVMC_VALID) == vx->ctxDisplaying) { - vx->ctxDisplaying = 0; - } + for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; i++) { + if (vXvMC->contexts[i] == pContext->context_id) { - xfree(vXvMC->cPrivs[i]); - vXvMC->cPrivs[i] = 0; - vXvMC->nContexts--; - vXvMC->contexts[i] = 0; - return; + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + portPriv = (XvPortRecPrivatePtr) pContext->port_priv; + pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; + vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; + + if ((i | VIA_XVMC_VALID) == vx->ctxDisplaying) { + vx->ctxDisplaying = 0; + } + + xfree(vXvMC->cPrivs[i]); + vXvMC->cPrivs[i] = 0; + vXvMC->nContexts--; + vXvMC->contexts[i] = 0; + return; + } } - } - return; + return; } -static void ViaXvMCDestroySurface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf) +static void +ViaXvMCDestroySurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf) { - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - int i; - volatile ViaXvMCSAreaPriv *sAPriv; - XvMCContextPtr pContext = pSurf->context; - XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; - viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; - ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - - for(i=0; i < VIA_XVMC_MAX_SURFACES; i++) { - if(vXvMC->surfaces[i] == pSurf->surface_id) { - - sAPriv=(ViaXvMCSAreaPriv*) DRIGetSAREAPrivate(pScrn->pScreen); - { - DRM_CAS_RESULT(__ret); - DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), - i|VIA_XVMC_VALID,0,__ret); - if (!__ret) - ViaOverlayHide(pScrn); - } + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + int i; + volatile ViaXvMCSAreaPriv *sAPriv; + XvMCContextPtr pContext = pSurf->context; + XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; + viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; + ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); - xfree(vXvMC->sPrivs[i]); - vXvMC->nSurfaces--; - vXvMC->sPrivs[i] = 0; - vXvMC->surfaces[i] = 0; - return; + for (i = 0; i < VIA_XVMC_MAX_SURFACES; i++) { + if (vXvMC->surfaces[i] == pSurf->surface_id) { + + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + { + DRM_CAS_RESULT(__ret); + DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), + i | VIA_XVMC_VALID, 0, __ret); + if (!__ret) + ViaOverlayHide(pScrn); + } + + VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); + xfree(vXvMC->sPrivs[i]); + vXvMC->nSurfaces--; + vXvMC->sPrivs[i] = 0; + vXvMC->surfaces[i] = 0; + return; + } } - } - return; + return; } - -static void ViaXvMCDestroySubpicture (ScrnInfoPtr pScrn, - XvMCSubpicturePtr pSubp) +static void +ViaXvMCDestroySubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp) { - VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCPtr vXvMC = &(pVia->xvmc); - int i; - volatile ViaXvMCSAreaPriv *sAPriv; - XvMCContextPtr pContext = pSubp->context; - XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; - viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; - ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; - - for(i=0; i < VIA_XVMC_MAX_SURFACES; i++) { - if(vXvMC->surfaces[i] == pSubp->subpicture_id) { - - sAPriv=(ViaXvMCSAreaPriv*) DRIGetSAREAPrivate(pScrn->pScreen); - - { - DRM_CAS_RESULT(__ret); - - DRM_CAS(&(sAPriv->XvMCSubPicOn[vx->xvmc_port]), - i|VIA_XVMC_VALID,0,__ret); - if (!__ret) { - - /* - * Turn subpicture off. - */ - - while (VIDInD(V_COMPOSE_MODE) & - (V1_COMMAND_FIRE | V3_COMMAND_FIRE)); - VIDOutD(SUBP_CONTROL_STRIDE, VIDInD(SUBP_CONTROL_STRIDE) & + VIAPtr pVia = VIAPTR(pScrn); + ViaXvMCPtr vXvMC = &(pVia->xvmc); + int i; + volatile ViaXvMCSAreaPriv *sAPriv; + XvMCContextPtr pContext = pSubp->context; + XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; + viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; + ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; + + for (i = 0; i < VIA_XVMC_MAX_SURFACES; i++) { + if (vXvMC->surfaces[i] == pSubp->subpicture_id) { + + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + + { + DRM_CAS_RESULT(__ret); + + DRM_CAS(&(sAPriv->XvMCSubPicOn[vx->xvmc_port]), + i | VIA_XVMC_VALID, 0, __ret); + if (!__ret) { + + /* + * Turn subpicture off. + */ + + while (VIDInD(V_COMPOSE_MODE) & + (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; + VIDOutD(SUBP_CONTROL_STRIDE, VIDInD(SUBP_CONTROL_STRIDE) & ~SUBP_HQV_ENABLE); + } } - } - VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); - xfree(vXvMC->sPrivs[i]); - vXvMC->nSurfaces--; - vXvMC->sPrivs[i] = 0; - vXvMC->surfaces[i] = 0; + VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref)); + xfree(vXvMC->sPrivs[i]); + vXvMC->nSurfaces--; + vXvMC->sPrivs[i] = 0; + vXvMC->surfaces[i] = 0; - return; + return; + } } - } - return; + return; } /* * Tell XvMC clients that Xv is currently displaying. * return 1 if another client was displaying before. - */ + */ -static int viaXvMCSetDisplayLock(ScrnInfoPtr pScrn, ViaXvMCXVPriv *vx) +static int +viaXvMCSetDisplayLock(ScrnInfoPtr pScrn, ViaXvMCXVPriv * vx) { VIAPtr pVia = VIAPTR(pScrn); - ViaXvMCSAreaPriv *sAPriv =(ViaXvMCSAreaPriv*) + ViaXvMCSAreaPriv *sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); if (vx->xvmc_port > 0) { - if ((VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID) != + if ((VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID) != sAPriv->XvMCDisplaying[vx->xvmc_port]) { - sAPriv->XvMCDisplaying[vx->xvmc_port] = + sAPriv->XvMCDisplaying[vx->xvmc_port] = (VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID); } if (sAPriv->XvMCSubPicOn[vx->xvmc_port] & VIA_XVMC_VALID) { sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; - - while (VIDInD(V_COMPOSE_MODE) & - (V1_COMMAND_FIRE | V3_COMMAND_FIRE)); - VIDOutD(SUBP_CONTROL_STRIDE, VIDInD(SUBP_CONTROL_STRIDE) & - ~SUBP_HQV_ENABLE); - + + while (VIDInD(V_COMPOSE_MODE) & + (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; + VIDOutD(SUBP_CONTROL_STRIDE, VIDInD(SUBP_CONTROL_STRIDE) & + ~SUBP_HQV_ENABLE); + } } return 0; } - -int viaXvMCInitXv(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt) +int +viaXvMCInitXv(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt) { - viaPortPrivPtr pPriv; + viaPortPrivPtr pPriv; ViaXvMCXVPriv *vx; - unsigned i,j; + unsigned i, j; - for (j=0; j < XvAdapt->nPorts; ++j) { - pPriv= (viaPortPrivPtr) XvAdapt->pPortPrivates[j].ptr; - - if (NULL == (pPriv->xvmc_priv = xcalloc(1,sizeof(ViaXvMCXVPriv)))) { + for (j = 0; j < XvAdapt->nPorts; ++j) { + pPriv = (viaPortPrivPtr) XvAdapt->pPortPrivates[j].ptr; + + if (NULL == (pPriv->xvmc_priv = xcalloc(1, sizeof(ViaXvMCXVPriv)))) { return BadAlloc; } - for (i=0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { + for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { attrAtoms[i] = MAKE_ATOM(attrXvMC[i]); } @@ -873,30 +863,31 @@ int viaXvMCInitXv(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt) XvAdapt->GetPortAttribute = viaXvMCInterceptXvGetAttribute; XvAdapt->SetPortAttribute = viaXvMCInterceptXvAttribute; - XvAdapt->PutImage = viaXvMCInterceptPutImage; + XvAdapt->PutImage = viaXvMCInterceptPutImage; for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) { vx->xvAttr.attributes[i].attribute = attrAtoms[i]; vx->xvAttr.attributes[i].value = 0; - vx->GetPortAttribute( pScrn, attrAtoms[i] , - &(vx->xvAttr.attributes[i].value), pPriv); - } + vx->GetPortAttribute(pScrn, attrAtoms[i], + &(vx->xvAttr.attributes[i].value), pPriv); + } } return Success; } -static int -viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 value,pointer data) +static int +viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, + INT32 value, pointer data) { unsigned i; viaPortPrivPtr pPriv = (viaPortPrivPtr) data; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; + if (VIAPTR(pScrn)->XvMCEnabled) { - for (i=0; i< vx->xvAttr.numAttr; ++i) { + for (i = 0; i < vx->xvAttr.numAttr; ++i) { if (vx->xvAttr.attributes[i].attribute == attribute) { vx->xvAttr.attributes[i].value = value; - if (vx->ctxDisplaying != + if (vx->ctxDisplaying != (VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID)) { vx->newAttribute = 1; return 0; @@ -907,16 +898,16 @@ viaXvMCInterceptXvAttribute(ScrnInfoPtr pScrn, Atom attribute, return vx->SetPortAttribute(pScrn, attribute, value, data); } -static int -viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, - INT32 *value,pointer data) +static int +viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, + INT32 * value, pointer data) { unsigned i; viaPortPrivPtr pPriv = (viaPortPrivPtr) data; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; if (VIAPTR(pScrn)->XvMCEnabled) { - for (i=0; i< vx->xvAttr.numAttr; ++i) { + for (i = 0; i < vx->xvAttr.numAttr; ++i) { if (vx->xvAttr.attributes[i].attribute == attribute) { *value = vx->xvAttr.attributes[i].value; return Success; @@ -924,33 +915,32 @@ viaXvMCInterceptXvGetAttribute(ScrnInfoPtr pScrn, Atom attribute, } } - return vx->GetPortAttribute( pScrn, attribute, value, data); + return vx->GetPortAttribute(pScrn, attribute, value, data); } - -static int viaXvMCDisplayAttributes(ScrnInfoPtr pScrn, - const ViaXvMCAttrHolder *ah, viaPortPrivPtr pPriv) +static int +viaXvMCDisplayAttributes(ScrnInfoPtr pScrn, + const ViaXvMCAttrHolder * ah, viaPortPrivPtr pPriv) { ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; unsigned i; int ret; - for (i=0; i< ah->numAttr; ++i) { - ret = vx->SetPortAttribute(pScrn, ah->attributes[i].attribute, - ah->attributes[i].value, pPriv); - if (ret) return ret; + for (i = 0; i < ah->numAttr; ++i) { + ret = vx->SetPortAttribute(pScrn, ah->attributes[i].attribute, + ah->attributes[i].value, pPriv); + if (ret) + return ret; } return Success; } - static int -viaXvMCInterceptPutImage( 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) +viaXvMCInterceptPutImage(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) { viaPortPrivPtr pPriv = (viaPortPrivPtr) data; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; @@ -959,55 +949,59 @@ viaXvMCInterceptPutImage( ScrnInfoPtr pScrn,short src_x, short src_y, if (FOURCC_XVMC == id) { volatile ViaXvMCSAreaPriv *sAPriv; ViaXvMCCommandBuffer *vXvMCData = (ViaXvMCCommandBuffer *) buf; - sAPriv=(ViaXvMCSAreaPriv*) DRIGetSAREAPrivate(pScrn->pScreen); - - switch(vXvMCData->command) { + + sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); + + switch (vXvMCData->command) { case VIA_XVMC_COMMAND_ATTRIBUTES: if ((vXvMCData->ctxNo | VIA_XVMC_VALID) != vx->ctxDisplaying) return 1; - viaXvMCDisplayAttributes( pScrn, &vXvMCData->attrib, pPriv); + viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); return 0; case VIA_XVMC_COMMAND_FDISPLAY: - if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) return 1; - viaXvMCDisplayAttributes( pScrn, &vXvMCData->attrib, pPriv); - vx->ctxDisplaying = vXvMCData->ctxNo; + if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) + return 1; + viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, pPriv); + vx->ctxDisplaying = vXvMCData->ctxNo; break; case VIA_XVMC_COMMAND_DISPLAY: if ((vXvMCData->ctxNo | VIA_XVMC_VALID) != vx->ctxDisplaying) { - viaXvMCDisplayAttributes( pScrn, &vXvMCData->attrib, pPriv); + viaXvMCDisplayAttributes(pScrn, &vXvMCData->attrib, + pPriv); } - if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) return 1; + if (sAPriv->XvMCDisplaying[vx->xvmc_port] != vXvMCData->srfNo) + return 1; vx->ctxDisplaying = vXvMCData->ctxNo; break; case VIA_XVMC_COMMAND_UNDISPLAY: - { - DRM_CAS_RESULT(__ret); - DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), - vXvMCData->srfNo, 0,__ret); - if (!__ret) - ViaOverlayHide(pScrn); - } - return Success; + { + DRM_CAS_RESULT(__ret); + DRM_CAS(&(sAPriv->XvMCDisplaying[vx->xvmc_port]), + vXvMCData->srfNo, 0, __ret); + if (!__ret) + ViaOverlayHide(pScrn); + } + return Success; default: break; - } + } } else { if ((VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID) != vx->ctxDisplaying) { - viaXvMCDisplayAttributes( pScrn, &vx->xvAttr, pPriv); + viaXvMCDisplayAttributes(pScrn, &vx->xvAttr, pPriv); vx->ctxDisplaying = VIA_XVMC_MAX_CONTEXTS | VIA_XVMC_VALID; } else if (vx->newAttribute) { vx->newAttribute = 0; - viaXvMCDisplayAttributes( pScrn, &vx->xvAttr, pPriv); - } - viaXvMCSetDisplayLock( pScrn, vx ); + viaXvMCDisplayAttributes(pScrn, &vx->xvAttr, pPriv); + } + viaXvMCSetDisplayLock(pScrn, vx); } } return vx->PutImage(pScrn, src_x, src_y, drw_x, drw_y, src_w, src_h, - drw_w, drw_h, id, buf, width, height, sync, - clipBoxes, data); + drw_w, drw_h, id, buf, width, height, sync, clipBoxes, data); } - -unsigned long viaXvMCPutImageSize(ScrnInfoPtr pScrn) + +unsigned long +viaXvMCPutImageSize(ScrnInfoPtr pScrn) { if (VIAPTR(pScrn)->XvMCEnabled) return sizeof(ViaXvMCCommandBuffer); diff --git a/src/via_xvmc.h b/src/via_xvmc.h index 62f63af..6bae5ba 100644 --- a/src/via_xvmc.h +++ b/src/via_xvmc.h @@ -32,8 +32,7 @@ * This file contains the common definitions between the XvMC lib and the * X server side. It is referenced also by the XvMC lib. Make sure any * structure change is reflected also in a change in minor version number!! - */ - + */ #define VIAXVMC_MAJOR 0 #define VIAXVMC_MINOR 10 @@ -43,7 +42,7 @@ /* * Commands that client submits through XvPutImage: - */ + */ #define VIA_XVMC_COMMAND_FDISPLAY 0 #define VIA_XVMC_COMMAND_DISPLAY 1 @@ -52,36 +51,40 @@ typedef drm_via_sarea_t ViaXvMCSAreaPriv; -typedef struct{ +typedef struct +{ INT32 attribute; INT32 value; -}ViaAttrPair; +} ViaAttrPair; -typedef struct { +typedef struct +{ unsigned numAttr; ViaAttrPair attributes[VIA_NUM_XVMC_ATTRIBUTES]; -}ViaXvMCAttrHolder; +} ViaXvMCAttrHolder; /* * Passed from client to X server during overlay updates. */ -typedef struct{ +typedef struct +{ unsigned command; unsigned ctxNo; unsigned srfNo; unsigned subPicNo; ViaXvMCAttrHolder attrib; unsigned pad; -}ViaXvMCCommandBuffer; +} ViaXvMCCommandBuffer; /* * Passed from X server to client at context creation. */ -typedef struct { +typedef struct +{ unsigned int ctxNo; - unsigned int major,minor,pl; + unsigned int major, minor, pl; unsigned xvmc_port; unsigned int fbOffset; unsigned int fbSize; @@ -95,7 +98,7 @@ typedef struct { unsigned int screen; unsigned int depth; unsigned int stride; - unsigned int pad; + unsigned int pad; } ViaXvMCCreateContextRec; #endif diff --git a/src/via_xvpriv.h b/src/via_xvpriv.h index d4808ba..b6c796b 100644 --- a/src/via_xvpriv.h +++ b/src/via_xvpriv.h @@ -27,34 +27,38 @@ #include "xf86xv.h" -enum{ XV_ADAPT_SWOV=0, - XV_ADAPT_NUM}; +enum +{ XV_ADAPT_SWOV = 0, + XV_ADAPT_NUM +}; -typedef enum{ - xve_none = 0, - xve_bandwidth, - xve_dmablit, - xve_mem, - xve_general, - xve_adaptor, - xve_numerr +typedef enum +{ + xve_none = 0, + xve_bandwidth, + xve_dmablit, + xve_mem, + xve_general, + xve_adaptor, + xve_numerr } XvError; #define VIA_MAX_XV_PORTS 1 -typedef struct { - unsigned char xv_adaptor; - unsigned char xv_portnum; - int adaptor; - int brightness; - int saturation; - int contrast; - int hue; +typedef struct +{ + unsigned char xv_adaptor; + unsigned char xv_portnum; + int adaptor; + int brightness; + int saturation; + int contrast; + int hue; RegionRec clip; - CARD32 colorKey; - Bool autoPaint; + CARD32 colorKey; + Bool autoPaint; - CARD32 FourCC; /* from old SurfaceDesc -- passed down from viaPutImageG */ + CARD32 FourCC; /* from old SurfaceDesc -- passed down from viaPutImageG */ /* store old video source & dst data */ short old_src_x; @@ -68,7 +72,7 @@ typedef struct { short old_drw_h; void *xvmc_priv; - + /* * For PCI DMA image transfer to frame-buffer memory. */ @@ -83,5 +87,4 @@ typedef struct { extern viaPortPrivPtr viaPortPriv[]; extern unsigned viaNumXvPorts; - #endif /* _VIA_XVPRIV_H_ */ |