summaryrefslogtreecommitdiff
path: root/glamor
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-08-13 11:30:11 -0700
committerKeith Packard <keithp@keithp.com>2014-08-17 14:17:30 -0700
commitd4111239e698f0126123830429d74da7d24910ed (patch)
tree4418278d959406bd0485dfb3f2967c89cb0f98ab /glamor
parentc47ee880e742e15fdbd5f5ac3eba64db6228c09f (diff)
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>
Diffstat (limited to 'glamor')
-rw-r--r--glamor/glamor_xv.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index 3f3e064d5..26bdef66b 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;