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 <kei...@keithp.com> --- glamor/glamor_xv.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c index 3f3e064..26bdef6 100644 --- a/glamor/glamor_xv.c +++ b/glamor/glamor_xv.c @@ -136,6 +136,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; for (i = 0; i < 3; 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; -- 2.0.1 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel