Add a FreePort callback hook to kdrive and implement that in ephyr to call glamor_xv_fini_port.
Signed-off-by: Keith Packard <kei...@keithp.com> --- hw/kdrive/ephyr/ephyr_glamor_xv.c | 8 ++++++++ hw/kdrive/src/kxv.c | 5 +++++ hw/kdrive/src/kxv.h | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/hw/kdrive/ephyr/ephyr_glamor_xv.c b/hw/kdrive/ephyr/ephyr_glamor_xv.c index b9c3464..6d8144d 100644 --- a/hw/kdrive/ephyr/ephyr_glamor_xv.c +++ b/hw/kdrive/ephyr/ephyr_glamor_xv.c @@ -105,6 +105,13 @@ ephyr_glamor_xv_put_image(KdScreenInfo *screen, id, buf, width, height, sync, clipBoxes); } +static void +ephyr_glamor_xv_free_port(KdScreenInfo *screen, + void *data) +{ + glamor_xv_fini_port(data); +} + void ephyr_glamor_xv_init(ScreenPtr screen) { @@ -156,6 +163,7 @@ ephyr_glamor_xv_init(ScreenPtr screen) adaptor->QueryBestSize = ephyr_glamor_xv_query_best_size; adaptor->PutImage = ephyr_glamor_xv_put_image; adaptor->QueryImageAttributes = ephyr_glamor_xv_query_image_attributes; + adaptor->FreePort = ephyr_glamor_xv_free_port; KdXVScreenInit(screen, adaptor, 1); } diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c index 60a8345..8f1889e 100644 --- a/hw/kdrive/src/kxv.c +++ b/hw/kdrive/src/kxv.c @@ -414,6 +414,7 @@ KdXVInitAdaptors(ScreenPtr pScreen, KdVideoAdaptorPtr infoPtr, int number) adaptorPriv->QueryImageAttributes = adaptorPtr->QueryImageAttributes; adaptorPriv->PutImage = adaptorPtr->PutImage; adaptorPriv->ReputImage = adaptorPtr->ReputImage; + adaptorPriv->FreePort = adaptorPtr->FreePort; pa->devPriv.ptr = (void *) adaptorPriv; @@ -1148,6 +1149,10 @@ KdXVAllocatePort(unsigned long port, XvPortPtr pPort, XvPortPtr * ppPort) static int KdXVFreePort(XvPortPtr pPort) { + XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) (pPort->devPriv.ptr); + + if (portPriv->AdaptorRec->FreePort != NULL) + (*portPriv->AdaptorRec->FreePort)(portPriv->screen, portPriv->DevPriv.ptr); return Success; } diff --git a/hw/kdrive/src/kxv.h b/hw/kdrive/src/kxv.h index 3a49a65..70dc51b 100644 --- a/hw/kdrive/src/kxv.h +++ b/hw/kdrive/src/kxv.h @@ -109,6 +109,8 @@ typedef int (*QueryImageAttributesFuncPtr) (KdScreenInfo * screen, int image, unsigned short *height, int *pitches, int *offsets); +typedef void (*FreePortFuncPtr)(KdScreenInfo *screen, void *data); + typedef enum { XV_OFF, XV_PENDING, @@ -154,6 +156,7 @@ typedef struct { PutImageFuncPtr PutImage; ReputImageFuncPtr ReputImage; QueryImageAttributesFuncPtr QueryImageAttributes; + FreePortFuncPtr FreePort; } KdVideoAdaptorRec, *KdVideoAdaptorPtr; Bool @@ -205,6 +208,7 @@ typedef struct { PutImageFuncPtr PutImage; ReputImageFuncPtr ReputImage; QueryImageAttributesFuncPtr QueryImageAttributes; + FreePortFuncPtr FreePort; } XvAdaptorRecPrivate, *XvAdaptorRecPrivatePtr; typedef struct { -- 2.0.1 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel