Index: mythpainter_vdpau.cpp =================================================================== --- mythpainter_vdpau.cpp (revision 22228) +++ mythpainter_vdpau.cpp (working copy) @@ -9,6 +9,7 @@ #include #include #include +#include #include // Mythdb headers @@ -87,6 +88,9 @@ int surfaceNum; bool initialized; + std::list 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);