Xext: xv: use PixmapDestroy hook
Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new pixmap destroy notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									63485bcc02
								
							
						
					
					
						commit
						8264e0ae21
					
				|  | @ -173,7 +173,6 @@ typedef struct { | |||
|     int version, revision; | ||||
|     int nAdaptors; | ||||
|     XvAdaptorPtr pAdaptors; | ||||
|     DestroyPixmapProcPtr DestroyPixmap; | ||||
| } XvScreenRec, *XvScreenPtr; | ||||
| 
 | ||||
| extern _X_EXPORT int XvScreenInit(ScreenPtr); | ||||
|  |  | |||
|  | @ -143,7 +143,6 @@ static void WriteSwappedPortNotifyEvent(xvEvent *, xvEvent *); | |||
| static Bool CreateResourceTypes(void); | ||||
| 
 | ||||
| static void XvScreenClose(CallbackListPtr *pcbl, ScreenPtr, void *arg); | ||||
| static Bool XvDestroyPixmap(PixmapPtr); | ||||
| static void XvResetProc(ExtensionEntry *); | ||||
| static int XvdiDestroyGrab(void *, XID); | ||||
| static int XvdiDestroyEncoding(void *, XID); | ||||
|  | @ -263,6 +262,11 @@ static void XvWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr | |||
|     XvStopAdaptors(&pWin->drawable); | ||||
| } | ||||
| 
 | ||||
| static void XvPixmapDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, PixmapPtr pPixmap) | ||||
| { | ||||
|     XvStopAdaptors(&pPixmap->drawable); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| XvScreenInit(ScreenPtr pScreen) | ||||
| { | ||||
|  | @ -296,12 +300,9 @@ XvScreenInit(ScreenPtr pScreen) | |||
| 
 | ||||
|     dixSetPrivate(&pScreen->devPrivates, XvScreenKey, pxvs); | ||||
| 
 | ||||
|     pxvs->DestroyPixmap = pScreen->DestroyPixmap; | ||||
| 
 | ||||
|     dixScreenHookWindowDestroy(pScreen, XvWindowDestroy); | ||||
|     dixScreenHookClose(pScreen, XvScreenClose); | ||||
| 
 | ||||
|     pScreen->DestroyPixmap = XvDestroyPixmap; | ||||
|     dixScreenHookPixmapDestroy(pScreen, XvPixmapDestroy); | ||||
| 
 | ||||
|     return Success; | ||||
| } | ||||
|  | @ -314,8 +315,7 @@ static void XvScreenClose(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused | |||
| 
 | ||||
|     dixScreenUnhookWindowDestroy(pScreen, XvWindowDestroy); | ||||
|     dixScreenUnhookClose(pScreen, XvScreenClose); | ||||
| 
 | ||||
|     pScreen->DestroyPixmap = pxvs->DestroyPixmap; | ||||
|     dixScreenUnhookPixmapDestroy(pScreen, XvPixmapDestroy); | ||||
| 
 | ||||
|     free(pxvs); | ||||
| 
 | ||||
|  | @ -369,25 +369,6 @@ XvStopAdaptors(DrawablePtr pDrawable) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| static Bool | ||||
| XvDestroyPixmap(PixmapPtr pPix) | ||||
| { | ||||
|     ScreenPtr pScreen = pPix->drawable.pScreen; | ||||
|     Bool status = TRUE; | ||||
| 
 | ||||
|     if (pPix->refcnt == 1) | ||||
|         XvStopAdaptors(&pPix->drawable); | ||||
| 
 | ||||
|     SCREEN_PROLOGUE(pScreen, DestroyPixmap); | ||||
|     if (pScreen->DestroyPixmap) | ||||
|         status = pScreen->DestroyPixmap(pPix); | ||||
|     SCREEN_EPILOGUE(pScreen, DestroyPixmap, XvDestroyPixmap); | ||||
| 
 | ||||
|     return status; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static int | ||||
| XvdiDestroyPort(void *pPort, XID id) | ||||
| { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue