xfree86: use screen privates for Xv offscreen images.

This replaces a globally-allocated array that depended on MAXSCREENS.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Acked-by: Tiago Vignatti <tiago.vignatti@nokia.com>
This commit is contained in:
Jamey Sharp 2010-04-23 06:41:00 +02:00 committed by Tiago Vignatti
parent 35d208125f
commit 7c9733d063

View File

@ -186,7 +186,9 @@ typedef struct {
int num; int num;
} OffscreenImageRec; } OffscreenImageRec;
static OffscreenImageRec OffscreenImages[MAXSCREENS]; static int OffscreenPrivateKeyIndex;
static DevPrivateKey OffscreenPrivateKey = &OffscreenPrivateKeyIndex;
#define GetOffscreenImage(pScreen) ((OffscreenImageRec *) dixLookupPrivate(&(pScreen)->devPrivates, OffscreenPrivateKey))
Bool Bool
xf86XVRegisterOffscreenImages( xf86XVRegisterOffscreenImages(
@ -194,9 +196,15 @@ xf86XVRegisterOffscreenImages(
XF86OffscreenImagePtr images, XF86OffscreenImagePtr images,
int num int num
){ ){
OffscreenImages[pScreen->myNum].num = num; OffscreenImageRec *OffscreenImage;
OffscreenImages[pScreen->myNum].images = images; if(!dixRequestPrivate(OffscreenPrivateKey, sizeof(OffscreenImageRec)) ||
!(OffscreenImage = GetOffscreenImage(pScreen)))
/* Every X.org driver assumes this function always succeeds, so
* just die on allocation failure. */
FatalError("Could not allocate private storage for XV offscreen images.\n");
OffscreenImage->num = num;
OffscreenImage->images = images;
return TRUE; return TRUE;
} }
@ -205,8 +213,9 @@ xf86XVQueryOffscreenImages(
ScreenPtr pScreen, ScreenPtr pScreen,
int *num int *num
){ ){
*num = OffscreenImages[pScreen->myNum].num; OffscreenImageRec *OffscreenImage = GetOffscreenImage(pScreen);
return OffscreenImages[pScreen->myNum].images; *num = OffscreenImage->num;
return OffscreenImage->images;
} }
@ -1177,9 +1186,6 @@ xf86XVCloseScreen(int i, ScreenPtr pScreen)
XvAdaptorPtr pa; XvAdaptorPtr pa;
int c; int c;
/* Clear offscreen images */
memset(&OffscreenImages[pScreen->myNum], 0, sizeof(OffscreenImages[0]));
if(!ScreenPriv) return TRUE; if(!ScreenPriv) return TRUE;
if(ScreenPriv->videoGC) { if(ScreenPriv->videoGC) {