[PATCH] glamor: Free Xv put image data immediately after use

Keith Packard keithp at keithp.com
Wed Aug 13 11:34:57 PDT 2014


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 at 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



More information about the xorg-devel mailing list