Ticket #9268: ogl-thrd.diff

File ogl-thrd.diff, 3.2 KB (added by Lawrence Rust <lvr@…>, 9 years ago)
  • mythtv/libs/libmythui/mythrender_opengl.h

     
    6565class MythGLTexture;
    6666class MythGLShaderObject;
    6767class MythRenderOpenGL;
     68class QThread;
    6869
    6970class MPUBLIC OpenGLLocker
    7071{
     
    204205    QVector<GLuint>              m_programs;
    205206    QVector<GLuint>              m_framebuffers;
    206207    GLuint                       m_fence;
     208    QThread* const               m_creator;
    207209
    208210    QMutex  *m_lock;
    209211    int      m_lock_level;
  • mythtv/libs/libmythui/mythrender_opengl.cpp

     
     1#include <QThread>
    12#include "mythverbose.h"
    23#include "mythrender_opengl.h"
    34#include "mythxdisplay.h"
     
    139140}
    140141
    141142MythRenderOpenGL::MythRenderOpenGL(const QGLFormat& format, QPaintDevice* device)
    142   : QGLContext(format, device)
     143  : QGLContext(format, device), m_creator(QThread::currentThread())
    143144{
    144145    Reset();
    145146}
    146147
    147148MythRenderOpenGL::MythRenderOpenGL(const QGLFormat& format)
    148   : QGLContext(format)
     149  : QGLContext(format), m_creator(QThread::currentThread())
    149150{
    150151    Reset();
    151152}
     
    172173void MythRenderOpenGL::makeCurrent()
    173174{
    174175    m_lock->lock();
    175     if (this != MythRenderOpenGL::currentContext())
    176         QGLContext::makeCurrent();
     176    if (this->m_creator == QThread::currentThread())
     177    {
     178        if (this != MythRenderOpenGL::currentContext())
     179            QGLContext::makeCurrent();
     180    }
     181    else
     182    {
     183        VERBOSE(VB_IMPORTANT, LOC_ERR +
     184            QString("Wrong thread '%1' calls makeCurrent()")
     185            .arg(QThread::currentThread()->objectName()));
     186    }
    177187    m_lock_level++;
    178188}
    179189
  • mythtv/libs/libmythtv/mythplayer.h

     
    100100
    101101  public:
    102102    DecoderThread(MythPlayer *mp, bool start_paused)
    103       : QThread(NULL), m_mp(mp), m_start_paused(start_paused) { }
     103      : QThread(NULL), m_mp(mp), m_start_paused(start_paused)
     104      { setObjectName("DecoderThread"); }
    104105
    105106  protected:
    106107    virtual void run(void);
  • mythtv/libs/libmythtv/mythplayer.cpp

     
    812812
    813813    if (interlaced)
    814814    {
     815        if (QThread::currentThread() != this->playerThread)
     816            return;
     817
    815818        m_deint_possible = videoOutput->SetDeinterlacingEnabled(true);
    816819        if (!m_deint_possible)
    817820        {
     
    837840    {
    838841        if (kScan_Progressive == scan)
    839842        {
     843            if (QThread::currentThread() != this->playerThread)
     844                return;
     845
    840846            m_double_process = false;
    841847            m_double_framerate = false;
    842848            videoOutput->SetDeinterlacingEnabled(false);