All pastes #1591651 Raw Edit

Anonymous

public text v1 · immutable
#1591651 ·published 2009-10-04 02:59 UTC
rendered paste body
Index: mythpainter_vdpau.cpp
===================================================================
--- mythpainter_vdpau.cpp	(revision 22228)
+++ mythpainter_vdpau.cpp	(working copy)
@@ -9,6 +9,7 @@
 #include <QApplication>
 #include <QPixmap>
 #include <QPainter>
+#include <QMutex>
 #include <QX11Info>
 
 // Mythdb headers
@@ -87,6 +88,9 @@
     int surfaceNum;
     bool initialized;
 
+    std::list<VdpBitmapSurface> m_surfaceDeleteList;
+    QMutex                      m_surfaceDeleteLock;
+
     VdpOutputSurface curOutput;
     VdpRect outRect;
 
@@ -369,6 +373,19 @@
         initialized = true;
     }
 
+    if (m_surfaceDeleteList.size())
+    {
+        m_surfaceDeleteLock.lock();
+        while (m_surfaceDeleteList.size())
+        {
+            VdpBitmapSurface bitmap = m_surfaceDeleteList.front();
+            m_surfaceDeleteList.pop_front();
+
+            vdp_bitmap_surface_destroy(bitmap);
+        }
+        m_surfaceDeleteLock.unlock();
+    }
+
     curOutput = outputSurfaces[surfaceNum];
     vdp_st = vdp_presentation_queue_block_until_surface_idle(
         vdpFlipQueue,
@@ -411,8 +428,9 @@
 {
     if (m_ImageBitmapMap.contains(im))
     {
-        VdpBitmapSurface bitmap = m_ImageBitmapMap[im];
-        vdp_bitmap_surface_destroy(bitmap);
+        m_surfaceDeleteLock.lock();
+        m_surfaceDeleteList.push_back(m_ImageBitmapMap[im]);
+        m_surfaceDeleteLock.unlock();
 
         m_ImageBitmapMap.remove(im);
         m_ImageExpireList.remove(im);