--- xf86-video-nouveau-old/src/nv04_video_overlay.c 2008-03-11 19:56:27.000000000 +0900 +++ xf86-video-nouveau/src/nv04_video_overlay.c 2008-03-11 20:59:50.000000000 +0900 @@ -45,9 +45,26 @@ short drw_w, short drw_h, RegionPtr clipBoxes) { - NVPtr pNv = NVPTR(pScrn); - NVPortPrivPtr pPriv = GET_OVERLAY_PRIVATE(pNv); - + NVPtr pNv = NVPTR(pScrn); + NVPortPrivPtr pPriv = GET_OVERLAY_PRIVATE(pNv); + + /*This may not work with NV04 overlay according to rivatv source*/ + if (!pNv->randr12_enable) { + if (pScrn->currentMode->Flags & V_DBLSCAN) { + dstBox->y1 <<= 1; + dstBox->y2 <<= 1; + drw_h <<= 1; + } + } else { + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); + xf86CrtcPtr crtc = xf86_config->crtc[pPriv->overlayCRTC]; + if (crtc->mode.Flags & V_DBLSCAN) { + dstBox->y1 <<= 1; + dstBox->y2 <<= 1; + drw_h <<= 1; + } + } + /* paint the color key */ if(pPriv->autopaintColorKey && (pPriv->grabbedByV4L || !REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes))) { @@ -58,12 +75,6 @@ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); } } - - if (pScrn->currentMode->Flags & V_DBLSCAN) { /*This may not work with NV04 overlay according to rivatv source*/ - dstBox->y1 <<= 1; - dstBox->y2 <<= 1; - drw_h <<= 1; - } nvWriteVIDEO(pNv, NV_PVIDEO_OE_STATE, 0); nvWriteVIDEO(pNv, NV_PVIDEO_SU_STATE, 0); --- xf86-video-nouveau-old/src/nv10_video_overlay.c 2008-03-11 19:56:27.000000000 +0900 +++ xf86-video-nouveau/src/nv10_video_overlay.c 2008-03-11 21:00:29.000000000 +0900 @@ -68,11 +68,27 @@ short drw_w, short drw_h, RegionPtr clipBoxes) { - NVPtr pNv = NVPTR(pScrn); - NVPortPrivPtr pPriv = GET_OVERLAY_PRIVATE(pNv); - int buffer = pPriv->currentBuffer; - - /* paint the color key */ + NVPtr pNv = NVPTR(pScrn); + NVPortPrivPtr pPriv = GET_OVERLAY_PRIVATE(pNv); + int buffer = pPriv->currentBuffer; + + if (!pNv->randr12_enable) { + if (pScrn->currentMode->Flags & V_DBLSCAN) { + dstBox->y1 <<= 1; + dstBox->y2 <<= 1; + drw_h <<= 1; + } + } else { + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); + xf86CrtcPtr crtc = xf86_config->crtc[pPriv->overlayCRTC]; + if (crtc->mode.Flags & V_DBLSCAN) { + dstBox->y1 <<= 1; + dstBox->y2 <<= 1; + drw_h <<= 1; + } + } + + /* paint the color key */ if(pPriv->autopaintColorKey && (pPriv->grabbedByV4L || !REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes))) { /* we always paint V4L's color key */ @@ -83,12 +99,6 @@ } } - if (pScrn->currentMode->Flags & V_DBLSCAN) { - dstBox->y1 <<= 1; - dstBox->y2 <<= 1; - drw_h <<= 1; - } - //xf86DrvMsg(0, X_INFO, "SIZE_IN h %d w %d, POINT_IN x %d y %d, DS_DX %d DT_DY %d, POINT_OUT x %d y %d SIZE_OUT h %d w %d\n", height, width, x1 >> //16,y1>>16, (src_w << 20) / drw_w, (src_h << 20) / drw_h, (dstBox->x1),(dstBox->y1), (dstBox->y2 - dstBox->y1), (dstBox->x2 - dstBox->x1));