rendered paste bodyIndex: 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);