glamor: Free Xv put image data immediately after use

The Xv StopVideo callback is not invoked on textured video ports, so
the temporary pixmaps allocated for the video planes are never freed.

Freeing the storage immediately after use is a simple solution to this
problem which doesn't appear to have any visible performance impact.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Keith Packard 2014-08-13 11:30:11 -07:00
parent c47ee880e7
commit d4111239e6

View File

@ -135,6 +135,11 @@ glamor_init_xv_shader(ScreenPtr screen)
void
glamor_xv_stop_video(glamor_port_private *port_priv)
{
}
static void
glamor_xv_free_port_data(glamor_port_private *port_priv)
{
int i;
@ -144,6 +149,8 @@ glamor_xv_stop_video(glamor_port_private *port_priv)
port_priv->src_pix[i] = NULL;
}
}
RegionUninit(&port_priv->clip);
RegionNull(&port_priv->clip);
}
int
@ -381,6 +388,8 @@ glamor_xv_render(glamor_port_private *port_priv)
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
DamageDamageRegion(port_priv->pDraw, &port_priv->clip);
glamor_xv_free_port_data(port_priv);
}
int
@ -468,9 +477,7 @@ glamor_xv_put_image(glamor_port_private *port_priv,
else
port_priv->pPixmap = (PixmapPtr) pDrawable;
if (!RegionEqual(&port_priv->clip, clipBoxes)) {
RegionCopy(&port_priv->clip, clipBoxes);
}
RegionCopy(&port_priv->clip, clipBoxes);
port_priv->src_x = src_x;
port_priv->src_y = src_y;