int XvdiGetVideo( ClientPtr client, DrawablePtr pDraw, XvPortPtr pPort, GCPtr pGC, INT16 vid_x, INT16 vid_y, CARD16 vid_w, CARD16 vid_h, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h ){ DrawablePtr pOldDraw; CHECK_SIZE(drw_w, drw_h, vid_w, vid_h); /* UPDATE TIME VARIABLES FOR USE IN EVENTS */ UpdateCurrentTime(); /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN INFORM CLIENT OF ITS FAILURE */ if (pPort->grab.client && (pPort->grab.client != client)) { XvdiSendVideoNotify(pPort, pDraw, XvBusy); return Success; } /* CHECK TO SEE IF PORT IS IN USE; IF SO THEN WE MUST DELIVER INTERRUPTED EVENTS TO ANY CLIENTS WHO WANT THEM */ pOldDraw = pPort->pDraw; if ((pOldDraw) && (pOldDraw != pDraw)) { XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted); } (void) (* pPort->pAdaptor->ddGetVideo)(client, pDraw, pPort, pGC, vid_x, vid_y, vid_w, vid_h, drw_x, drw_y, drw_w, drw_h); if ((pPort->pDraw) && (pOldDraw != pDraw)) { pPort->client = client; XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted); } pPort->time = currentTime; return (Success); }
static Bool XvDestroyWindow(WindowPtr pWin) { Bool status; ScreenPtr pScreen; XvScreenPtr pxvs; XvAdaptorPtr pa; int na; XvPortPtr pp; int np; pScreen = pWin->drawable.pScreen; SCREEN_PROLOGUE(pScreen, DestroyWindow); pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr; /* CHECK TO SEE IF THIS PORT IS IN USE */ pa = pxvs->pAdaptors; na = pxvs->nAdaptors; while (na--) { np = pa->nPorts; pp = pa->pPorts; while (np--) { if (pp->pDraw == (DrawablePtr)pWin) { XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted); (void)(* pp->pAdaptor->ddStopVideo)((ClientPtr)NULL, pp, pp->pDraw); pp->pDraw = (DrawablePtr)NULL; pp->client = (ClientPtr)NULL; pp->time = currentTime; } pp++; } pa++; } status = (* pScreen->DestroyWindow)(pWin); SCREEN_EPILOGUE(pScreen, DestroyWindow, XvDestroyWindow); return status; }
static Bool XvDestroyPixmap(PixmapPtr pPix) { Bool status; ScreenPtr pScreen; XvScreenPtr pxvs; XvAdaptorPtr pa; int na; XvPortPtr pp; int np; pScreen = pPix->drawable.pScreen; SCREEN_PROLOGUE(pScreen, DestroyPixmap); pxvs = (XvScreenPtr)dixLookupPrivate(&pScreen->devPrivates, XvScreenKey); /* CHECK TO SEE IF THIS PORT IS IN USE */ pa = pxvs->pAdaptors; na = pxvs->nAdaptors; while (na--) { np = pa->nPorts; pp = pa->pPorts; while (np--) { if (pp->pDraw == (DrawablePtr)pPix) { XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted); (void)(* pp->pAdaptor->ddStopVideo)(NULL, pp, pp->pDraw); pp->pDraw = NULL; pp->client = NULL; pp->time = currentTime; } pp++; } pa++; } status = (* pScreen->DestroyPixmap)(pPix); SCREEN_EPILOGUE(pScreen, DestroyPixmap, XvDestroyPixmap); return status; }
int XvdiStopVideo( ClientPtr client, XvPortPtr pPort, DrawablePtr pDraw ){ int status; /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */ if (!pPort->pDraw || (pPort->pDraw != pDraw)) { XvdiSendVideoNotify(pPort, pDraw, XvStopped); return Success; } /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN INFORM CLIENT OF ITS FAILURE */ if ((client) && (pPort->grab.client) && (pPort->grab.client != client)) { XvdiSendVideoNotify(pPort, pDraw, XvBusy); return Success; } XvdiSendVideoNotify(pPort, pDraw, XvStopped); status = (* pPort->pAdaptor->ddStopVideo)(client, pPort, pDraw); pPort->pDraw = NULL; pPort->client = (ClientPtr)client; pPort->time = currentTime; return status; }
int XvdiVideoStopped(XvPortPtr pPort, int reason) { /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */ if (!pPort->pDraw) return Success; XvdiSendVideoNotify(pPort, pPort->pDraw, reason); pPort->pDraw = (DrawablePtr)NULL; pPort->client = (ClientPtr)NULL; pPort->time = currentTime; return Success; }
int XvdiPreemptVideo( ClientPtr client, XvPortPtr pPort, DrawablePtr pDraw ){ int status; /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */ if (!pPort->pDraw || (pPort->pDraw != pDraw)) return Success; XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted); status = (* pPort->pAdaptor->ddStopVideo)(client, pPort, pPort->pDraw); pPort->pDraw = NULL; pPort->client = (ClientPtr)client; pPort->time = currentTime; return status; }
int XvdiGetStill( ClientPtr client, DrawablePtr pDraw, XvPortPtr pPort, GCPtr pGC, INT16 vid_x, INT16 vid_y, CARD16 vid_w, CARD16 vid_h, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h ){ int status; CHECK_SIZE(drw_w, drw_h, vid_w, vid_h); /* UPDATE TIME VARIABLES FOR USE IN EVENTS */ UpdateCurrentTime(); /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN INFORM CLIENT OF ITS FAILURE */ if (pPort->grab.client && (pPort->grab.client != client)) { XvdiSendVideoNotify(pPort, pDraw, XvBusy); return Success; } status = (* pPort->pAdaptor->ddGetStill)(client, pDraw, pPort, pGC, vid_x, vid_y, vid_w, vid_h, drw_x, drw_y, drw_w, drw_h); pPort->time = currentTime; return status; }
int XvdiPutImage( ClientPtr client, DrawablePtr pDraw, XvPortPtr pPort, GCPtr pGC, INT16 src_x, INT16 src_y, CARD16 src_w, CARD16 src_h, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h, XvImagePtr image, unsigned char* data, Bool sync, CARD16 width, CARD16 height ){ CHECK_SIZE(drw_w, drw_h, src_w, src_h); /* UPDATE TIME VARIABLES FOR USE IN EVENTS */ UpdateCurrentTime(); /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN INFORM CLIENT OF ITS FAILURE */ if (pPort->grab.client && (pPort->grab.client != client)) { XvdiSendVideoNotify(pPort, pDraw, XvBusy); return Success; } pPort->time = currentTime; return (* pPort->pAdaptor->ddPutImage)(client, pDraw, pPort, pGC, src_x, src_y, src_w, src_h, drw_x, drw_y, drw_w, drw_h, image, data, sync, width, height); }