xv: Move xf86 XV color key helper to core.
Color key overlay implementations want to reuse this code, and XF86's had bugs (to be fixed in the next commit). Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
b01cfe5f23
commit
ea3f3b0786
|
@ -233,6 +233,8 @@ extern _X_EXPORT int XvScreenInit(ScreenPtr);
|
||||||
extern _X_EXPORT DevPrivateKey XvGetScreenKey(void);
|
extern _X_EXPORT DevPrivateKey XvGetScreenKey(void);
|
||||||
extern _X_EXPORT unsigned long XvGetRTPort(void);
|
extern _X_EXPORT unsigned long XvGetRTPort(void);
|
||||||
extern _X_EXPORT void XvFreeAdaptor(XvAdaptorPtr pAdaptor);
|
extern _X_EXPORT void XvFreeAdaptor(XvAdaptorPtr pAdaptor);
|
||||||
|
extern void _X_EXPORT XvFillColorKey(DrawablePtr pDraw, CARD32 key,
|
||||||
|
RegionPtr region);
|
||||||
extern _X_EXPORT int XvdiSendPortNotify(XvPortPtr, Atom, INT32);
|
extern _X_EXPORT int XvdiSendPortNotify(XvPortPtr, Atom, INT32);
|
||||||
|
|
||||||
extern _X_EXPORT int XvdiPutVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr,
|
extern _X_EXPORT int XvdiPutVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr,
|
||||||
|
|
|
@ -1082,3 +1082,34 @@ XvFreeAdaptor(XvAdaptorPtr pAdaptor)
|
||||||
free(pAdaptor->devPriv.ptr);
|
free(pAdaptor->devPriv.ptr);
|
||||||
pAdaptor->devPriv.ptr = NULL;
|
pAdaptor->devPriv.ptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
XvFillColorKey(DrawablePtr pDraw, CARD32 key, RegionPtr region)
|
||||||
|
{
|
||||||
|
ScreenPtr pScreen = pDraw->pScreen;
|
||||||
|
ChangeGCVal pval[2];
|
||||||
|
BoxPtr pbox = RegionRects(region);
|
||||||
|
int i, nbox = RegionNumRects(region);
|
||||||
|
xRectangle *rects;
|
||||||
|
GCPtr gc;
|
||||||
|
|
||||||
|
gc = GetScratchGC(pDraw->depth, pScreen);
|
||||||
|
pval[0].val = key;
|
||||||
|
pval[1].val = IncludeInferiors;
|
||||||
|
(void) ChangeGC(NullClient, gc, GCForeground | GCSubwindowMode, pval);
|
||||||
|
ValidateGC(pDraw, gc);
|
||||||
|
|
||||||
|
rects = malloc(nbox * sizeof(xRectangle));
|
||||||
|
|
||||||
|
for (i = 0; i < nbox; i++, pbox++) {
|
||||||
|
rects[i].x = pbox->x1 - pDraw->x;
|
||||||
|
rects[i].y = pbox->y1 - pDraw->y;
|
||||||
|
rects[i].width = pbox->x2 - pbox->x1;
|
||||||
|
rects[i].height = pbox->y2 - pbox->y1;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*gc->ops->PolyFillRect) (pDraw, gc, nbox, rects);
|
||||||
|
|
||||||
|
free(rects);
|
||||||
|
FreeScratchGC(gc);
|
||||||
|
}
|
||||||
|
|
|
@ -1736,34 +1736,11 @@ void
|
||||||
xf86XVFillKeyHelperDrawable(DrawablePtr pDraw, CARD32 key, RegionPtr fillboxes)
|
xf86XVFillKeyHelperDrawable(DrawablePtr pDraw, CARD32 key, RegionPtr fillboxes)
|
||||||
{
|
{
|
||||||
ScreenPtr pScreen = pDraw->pScreen;
|
ScreenPtr pScreen = pDraw->pScreen;
|
||||||
ChangeGCVal pval[2];
|
|
||||||
BoxPtr pbox = RegionRects(fillboxes);
|
|
||||||
int i, nbox = RegionNumRects(fillboxes);
|
|
||||||
xRectangle *rects;
|
|
||||||
GCPtr gc;
|
|
||||||
|
|
||||||
if (!xf86ScreenToScrn(pScreen)->vtSema)
|
if (!xf86ScreenToScrn(pScreen)->vtSema)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gc = GetScratchGC(pDraw->depth, pScreen);
|
XvFillColorKey(pDraw, key, fillboxes);
|
||||||
pval[0].val = key;
|
|
||||||
pval[1].val = IncludeInferiors;
|
|
||||||
(void) ChangeGC(NullClient, gc, GCForeground | GCSubwindowMode, pval);
|
|
||||||
ValidateGC(pDraw, gc);
|
|
||||||
|
|
||||||
rects = malloc(nbox * sizeof(xRectangle));
|
|
||||||
|
|
||||||
for (i = 0; i < nbox; i++, pbox++) {
|
|
||||||
rects[i].x = pbox->x1 - pDraw->x;
|
|
||||||
rects[i].y = pbox->y1 - pDraw->y;
|
|
||||||
rects[i].width = pbox->x2 - pbox->x1;
|
|
||||||
rects[i].height = pbox->y2 - pbox->y1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*gc->ops->PolyFillRect) (pDraw, gc, nbox, rects);
|
|
||||||
|
|
||||||
free(rects);
|
|
||||||
FreeScratchGC(gc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue