]> git.sesse.net Git - kdenlive/blobdiff - src/kthumb.cpp
Various changes for getting an OpenGL context (almost) everywhere it is needed.
[kdenlive] / src / kthumb.cpp
index 3d660b551bf18a7841c1b70560fd845b720a28a6..5a81f5481ad789e159b7fdb8ce449faf0ece0773 100644 (file)
@@ -40,6 +40,7 @@
 #include <QtConcurrentRun>
 #include <QVarLengthArray>
 #include <QPainter>
+#include <QGLWidget>
 
 KThumb::KThumb(ClipManager *clipManager, const KUrl &url, const QString &id, const QString &hash, QObject * parent) :
     QObject(parent),
@@ -218,6 +219,10 @@ QImage KThumb::getFrame(Mlt::Frame *frame, int frameWidth, int displayWidth, int
     if (ow % 2 == 1) ow++;
     QImage image(ow, oh, QImage::Format_ARGB32_Premultiplied);
     const uchar* imagedata = frame->get_image(format, ow, oh);
+    if (imagedata == NULL) {
+        p.fill(QColor(Qt::red).rgb());
+        return p;
+    }
     memcpy(image.bits(), imagedata, ow * oh * 4);//.byteCount());
     
     //const uchar* imagedata = frame->get_image(format, ow, oh);
@@ -372,6 +377,10 @@ void KThumb::queryIntraThumbs(const QList <int> &missingFrames)
 
 void KThumb::slotGetIntraThumbs()
 {
+    // We are in a new thread, so we need a new OpenGL context for the remainder of the function.
+    QGLWidget ctx(0, m_clipManager->getMainContext());
+    ctx.makeCurrent();
+
     const int theight = KdenliveSettings::trackheight();
     const int frameWidth = (int)(theight * m_ratio + 0.5);
     const int displayWidth = (int)(theight * m_dar + 0.5);