]> git.sesse.net Git - kdenlive/commitdiff
Check that MLT sends correctly sized thumbnails:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 26 Jul 2010 20:27:23 +0000 (20:27 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 26 Jul 2010 20:27:23 +0000 (20:27 +0000)
http://www.kdenlive.org/mantis/view.php?id=1687

svn path=/trunk/kdenlive/; revision=4650

src/kthumb.cpp
src/renderer.cpp

index c8971af46b0fb7a2739656843cc3d8bace8e338d..e67425d2321081fa96a5aeed5776d7bbaa7de0b1 100644 (file)
@@ -259,14 +259,19 @@ QImage KThumb::getFrame(Mlt::Producer *producer, int framepos, int width, int he
     /*Mlt::Producer parentProd(producer->parent());
     Mlt::Service service(parentProd.get_service());
     mlt_service_lock(service.get_service());*/
-
+    int ow = width;
+    int oh = height;
     mlt_image_format format = mlt_image_rgb24a;
-    uint8_t *data = frame->get_image(format, width, height, 0);
-    QImage image((uchar *)data, width, height, QImage::Format_ARGB32);
+    uint8_t *data = frame->get_image(format, ow, oh, 0);
+    QImage image((uchar *)data, ow, oh, QImage::Format_ARGB32);
     //mlt_service_unlock(service.get_service());
 
     if (!image.isNull()) {
-        p = image.rgbSwapped();
+        if (ow > (2 * width)) {
+            // there was a scaling problem, do it manually
+            QImage scaled = image.scaled(width, height);
+            p = scaled.rgbSwapped();
+        } else p = image.rgbSwapped();
     } else
         p.fill(Qt::red);
 
index 3e7e53f113e958cf0d715afeb38d607bbc59cbf0..21afe0826d48029cc5536813978e6c29ae334743 100644 (file)
@@ -750,10 +750,14 @@ void Render::getFileProperties(const QDomElement xml, const QString &clipId, int
             int frame_height = imageHeight;
             uint8_t *data = frame->get_image(format, frame_width, frame_height, 0);
             QImage image((uchar *)data, frame_width, frame_height, QImage::Format_ARGB32);
-            QPixmap pix(frame_width, frame_height);
+            QPixmap pix;
 
             if (!image.isNull()) {
-                pix = QPixmap::fromImage(image.rgbSwapped());
+                if (frame_width > (2 * width)) {
+                    // there was a scaling problem, do it manually
+                    QImage scaled = image.scaled(width, imageHeight);
+                    pix = QPixmap::fromImage(scaled.rgbSwapped());
+                } else pix = QPixmap::fromImage(image.rgbSwapped());
             } else
                 pix.fill(Qt::black);