diff --git a/mythtv/libs/libmythtv/videoout_d3d.cpp b/mythtv/libs/libmythtv/videoout_d3d.cpp index 8669c42..f8af475 100644 --- a/mythtv/libs/libmythtv/videoout_d3d.cpp +++ b/mythtv/libs/libmythtv/videoout_d3d.cpp @@ -81,14 +81,16 @@ void VideoOutputD3D::TearDown(void) m_pauseFrame.buf = NULL; } - delete m_osd_painter; + if (m_osd_painter) { // Hack to ensure that the osd painter is not // deleted while image load thread is still busy // loading images with that painter + m_osd_painter->Teardown(); if (invalid_osd_painter) delete invalid_osd_painter; invalid_osd_painter = m_osd_painter; + m_osd_painter = NULL; } DeleteDecoder(); diff --git a/mythtv/libs/libmythtv/videoout_opengl.cpp b/mythtv/libs/libmythtv/videoout_opengl.cpp index 56b264c..7a13935 100644 --- a/mythtv/libs/libmythtv/videoout_opengl.cpp +++ b/mythtv/libs/libmythtv/videoout_opengl.cpp @@ -156,6 +156,7 @@ void VideoOutputOpenGL::DestroyGPUResources(void) // Hack to ensure that the osd painter is not // deleted while image load thread is still busy // loading images with that painter + gl_painter->Teardown(); if (invalid_osd_painter) delete invalid_osd_painter; invalid_osd_painter = gl_painter; diff --git a/mythtv/libs/libmythtv/videoout_vdpau.cpp b/mythtv/libs/libmythtv/videoout_vdpau.cpp index 2d8a521..3b2153e 100644 --- a/mythtv/libs/libmythtv/videoout_vdpau.cpp +++ b/mythtv/libs/libmythtv/videoout_vdpau.cpp @@ -162,6 +162,7 @@ void VideoOutputVDPAU::DeleteRender(void) // Hack to ensure that the osd painter is not // deleted while image load thread is still busy // loading images with that painter + m_osd_painter->Teardown(); if (invalid_osd_painter) delete invalid_osd_painter; invalid_osd_painter = m_osd_painter; diff --git a/mythtv/libs/libmythui/mythpainter_d3d9.h b/mythtv/libs/libmythui/mythpainter_d3d9.h index d548ed4..52f458c 100644 --- a/mythtv/libs/libmythui/mythpainter_d3d9.h +++ b/mythtv/libs/libmythui/mythpainter_d3d9.h @@ -12,6 +12,7 @@ class MythRenderD3D9; class MUI_PUBLIC MythD3D9Painter : public MythPainter { + friend class VideoOutputD3D; public: explicit MythD3D9Painter(MythRenderD3D9 *render = NULL); ~MythD3D9Painter(); diff --git a/mythtv/libs/libmythui/mythpainter_ogl.h b/mythtv/libs/libmythui/mythpainter_ogl.h index 13af273..2ae8ee0 100644 --- a/mythtv/libs/libmythui/mythpainter_ogl.h +++ b/mythtv/libs/libmythui/mythpainter_ogl.h @@ -13,6 +13,7 @@ class MythRenderOpenGL; class MUI_PUBLIC MythOpenGLPainter : public MythPainter { + friend class VideoOutputOpenGL; public: MythOpenGLPainter(MythRenderOpenGL *render = NULL, QWidget *parent = NULL); ~MythOpenGLPainter(); diff --git a/mythtv/libs/libmythui/mythpainter_vdpau.h b/mythtv/libs/libmythui/mythpainter_vdpau.h index dd64ffe..238f47f 100644 --- a/mythtv/libs/libmythui/mythpainter_vdpau.h +++ b/mythtv/libs/libmythui/mythpainter_vdpau.h @@ -12,6 +12,7 @@ class MythRenderVDPAU; class MUI_PUBLIC MythVDPAUPainter : public MythPainter { + friend class VideoOutputVDPAU; public: explicit MythVDPAUPainter(MythRenderVDPAU *render = NULL); ~MythVDPAUPainter();