Release resource allocated for surface/subpicture
This commit is contained in:
parent
a9bf7e28b9
commit
d038ffdfff
|
|
@ -757,6 +757,7 @@ static void I915XvMCDestroySurface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf)
|
|||
|
||||
for (i = 0; i < I915_XVMC_MAX_SURFACES; i++) {
|
||||
if (pXvMC->surfaces[i] == pSurf->surface_id) {
|
||||
drmRmMap(pI830->drmSubFD, pXvMC->sfprivs[i]->surface_handle);
|
||||
i830_free_memory(pScrn, pXvMC->sfprivs[i]->surface);
|
||||
xfree(pXvMC->sfprivs[i]);
|
||||
pXvMC->nsurfaces--;
|
||||
|
|
@ -777,6 +778,7 @@ static void I915XvMCDestroySubpicture (ScrnInfoPtr pScrn, XvMCSubpicturePtr pSub
|
|||
|
||||
for (i = 0; i < I915_XVMC_MAX_SURFACES; i++) {
|
||||
if (pXvMC->surfaces[i] == pSubp->subpicture_id) {
|
||||
drmRmMap(pI830->drmSubFD, pXvMC->sfprivs[i]->surface_handle);
|
||||
i830_free_memory(pScrn, pXvMC->sfprivs[i]->surface);
|
||||
xfree(pXvMC->sfprivs[i]);
|
||||
pXvMC->nsurfaces--;
|
||||
|
|
|
|||
|
|
@ -1912,7 +1912,7 @@ Status XvMCCreateSurface(Display *display, XvMCContext *context, XvMCSurface *su
|
|||
pI915Surface->height = context->height;
|
||||
pI915Surface->privContext = pI915XvMC;
|
||||
pI915Surface->privSubPic = NULL;
|
||||
|
||||
pI915Surface->srf.map = NULL;
|
||||
XLockDisplay(display);
|
||||
|
||||
if ((ret = _xvmc_create_surface(display, context, surface,
|
||||
|
|
@ -1984,8 +1984,11 @@ Status XvMCDestroySurface(Display *display, XvMCSurface *surface)
|
|||
if (pI915Surface->last_flip)
|
||||
XvMCSyncSurface(display,surface);
|
||||
|
||||
if (pI915Surface->srf.map)
|
||||
drmUnmap(pI915Surface->srf.map, pI915Surface->srf.size);
|
||||
|
||||
XLockDisplay(display);
|
||||
_xvmc_destroy_surface(display,surface);
|
||||
_xvmc_destroy_surface(display, surface);
|
||||
XUnlockDisplay(display);
|
||||
|
||||
free(pI915Surface);
|
||||
|
|
@ -2626,6 +2629,7 @@ Status XvMCCreateSubpicture(Display *display, XvMCContext *context,
|
|||
&priv_count, &priv_data))) {
|
||||
printf("Unable to create XvMCSubpicture.\n");
|
||||
free(pI915Subpicture);
|
||||
subpicture->privData = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -2674,6 +2678,8 @@ Status XvMCCreateSubpicture(Display *display, XvMCContext *context,
|
|||
break;
|
||||
|
||||
default:
|
||||
drmUnmap(pI915Subpicture->srf.map, pI915Subpicture->srf.size);
|
||||
_xvmc_destroy_subpicture(display, subpicture);
|
||||
free(pI915Subpicture);
|
||||
subpicture->privData = NULL;
|
||||
return BadMatch;
|
||||
|
|
@ -2802,6 +2808,9 @@ Status XvMCDestroySubpicture(Display *display, XvMCSubpicture *subpicture)
|
|||
if (pI915Subpicture->last_render)
|
||||
XvMCSyncSubpicture(display, subpicture);
|
||||
|
||||
if (pI915Subpicture->srf.map)
|
||||
drmUnmap(pI915Subpicture->srf.map, pI915Subpicture->srf.size);
|
||||
|
||||
XLockDisplay(display);
|
||||
_xvmc_destroy_subpicture(display,subpicture);
|
||||
XUnlockDisplay(display);
|
||||
|
|
|
|||
Loading…
Reference in New Issue