summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomash <thomash>2006-03-08 14:06:22 +0000
committerthomash <thomash>2006-03-08 14:06:22 +0000
commita1defd236db920497555ecec3ef5e848242bb174 (patch)
treea9d4126c9170fb8fdc0088fa1aca43a0122cb417
parent2bac8f3b563b6cd739770d7d7f3a3ea350dad5eb (diff)
Indent above files after syncing them with openChrome.
-rw-r--r--ChangeLog11
-rw-r--r--src/via_swov.c2135
-rw-r--r--src/via_swov.h49
-rw-r--r--src/via_video.c1403
-rw-r--r--src/via_video.h129
-rw-r--r--src/via_xvmc.c1212
-rw-r--r--src/via_xvmc.h27
-rw-r--r--src/via_xvpriv.h49
8 files changed, 2543 insertions, 2472 deletions
diff --git a/ChangeLog b/ChangeLog
index 8a71478..0d2be10 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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_ */