xv: Move common code for adaptor cleanup to xvmain.c

Since any DDX XV screen cleanup would need this same code for freeing
the tree of pointers for xv adaptors, move it to the dix.

v2: Unconditionalize the pPorts freeing, to match the block above it.

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Keith Packard <keithp@keithp.com> (v1)
This commit is contained in:
Eric Anholt 2013-12-27 21:54:26 -08:00
parent 8cb0da2940
commit cb42805c66
4 changed files with 42 additions and 57 deletions

View File

@ -235,6 +235,7 @@ extern _X_EXPORT int SProcXvDispatch(ClientPtr);
extern _X_EXPORT int XvScreenInit(ScreenPtr); 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 int XvdiSendPortNotify(XvPortPtr, Atom, INT32); extern _X_EXPORT int XvdiSendPortNotify(XvPortPtr, Atom, INT32);
extern _X_EXPORT int XvdiVideoStopped(XvPortPtr, int); extern _X_EXPORT int XvdiVideoStopped(XvPortPtr, int);

View File

@ -1091,3 +1091,42 @@ WriteSwappedPortNotifyEvent(xvEvent * from, xvEvent * to)
cpswapl(from->u.portNotify.value, to->u.portNotify.value); cpswapl(from->u.portNotify.value, to->u.portNotify.value);
} }
void
XvFreeAdaptor(XvAdaptorPtr pAdaptor)
{
int i;
free(pAdaptor->name);
pAdaptor->name = NULL;
if (pAdaptor->pEncodings) {
XvEncodingPtr pEncode = pAdaptor->pEncodings;
for (i = 0; i < pAdaptor->nEncodings; i++, pEncode++)
free(pEncode->name);
free(pAdaptor->pEncodings);
pAdaptor->pEncodings = NULL;
}
free(pAdaptor->pFormats);
pAdaptor->pFormats = NULL;
free(pAdaptor->pPorts);
pAdaptor->pPorts = NULL;
if (pAdaptor->pAttributes) {
XvAttributePtr pAttribute = pAdaptor->pAttributes;
for (i = 0; i < pAdaptor->nAttributes; i++, pAttribute++)
free(pAttribute->name);
free(pAdaptor->pAttributes);
pAdaptor->pAttributes = NULL;
}
free(pAdaptor->pImages);
pAdaptor->pImages = NULL;
free(pAdaptor->devPriv.ptr);
pAdaptor->devPriv.ptr = NULL;
}

View File

@ -193,19 +193,6 @@ KdXVFreeAdaptor(XvAdaptorPtr pAdaptor)
{ {
int i; int i;
free(pAdaptor->name);
if (pAdaptor->pEncodings) {
XvEncodingPtr pEncode = pAdaptor->pEncodings;
for (i = 0; i < pAdaptor->nEncodings; i++, pEncode++) {
free(pEncode->name);
}
free(pAdaptor->pEncodings);
}
free(pAdaptor->pFormats);
if (pAdaptor->pPorts) { if (pAdaptor->pPorts) {
XvPortPtr pPort = pAdaptor->pPorts; XvPortPtr pPort = pAdaptor->pPorts;
XvPortRecPrivatePtr pPriv; XvPortRecPrivatePtr pPriv;
@ -220,22 +207,9 @@ KdXVFreeAdaptor(XvAdaptorPtr pAdaptor)
free(pPriv); free(pPriv);
} }
} }
free(pAdaptor->pPorts);
} }
if (pAdaptor->nAttributes) { XvFreeAdaptor(pAdaptor);
XvAttributePtr pAttribute = pAdaptor->pAttributes;
for (i = 0; i < pAdaptor->nAttributes; i++, pAttribute++) {
free(pAttribute->name);
}
free(pAdaptor->pAttributes);
}
free(pAdaptor->pImages);
free(pAdaptor->devPriv.ptr);
} }
static Bool static Bool

View File

@ -297,21 +297,6 @@ xf86XVFreeAdaptor(XvAdaptorPtr pAdaptor)
{ {
int i; int i;
free(pAdaptor->name);
pAdaptor->name = NULL;
if (pAdaptor->pEncodings) {
XvEncodingPtr pEncode = pAdaptor->pEncodings;
for (i = 0; i < pAdaptor->nEncodings; i++, pEncode++)
free(pEncode->name);
free(pAdaptor->pEncodings);
pAdaptor->pEncodings = NULL;
}
free(pAdaptor->pFormats);
pAdaptor->pFormats = NULL;
if (pAdaptor->pPorts) { if (pAdaptor->pPorts) {
XvPortPtr pPort = pAdaptor->pPorts; XvPortPtr pPort = pAdaptor->pPorts;
XvPortRecPrivatePtr pPriv; XvPortRecPrivatePtr pPriv;
@ -328,23 +313,9 @@ xf86XVFreeAdaptor(XvAdaptorPtr pAdaptor)
free(pPriv); free(pPriv);
} }
} }
free(pAdaptor->pPorts);
pAdaptor->pPorts = NULL;
} }
if (pAdaptor->pAttributes) { XvFreeAdaptor(pAdaptor);
XvAttributePtr pAttribute = pAdaptor->pAttributes;
for (i = 0; i < pAdaptor->nAttributes; i++, pAttribute++)
free(pAttribute->name);
free(pAdaptor->pAttributes);
pAdaptor->pAttributes = NULL;
}
free(pAdaptor->pImages);
free(pAdaptor->devPriv.ptr);
pAdaptor->pImages = NULL;
pAdaptor->devPriv.ptr = NULL;
} }
static Bool static Bool