]> git.sesse.net Git - kdenlive/blobdiff - thumbnailer/westleypreview.cpp
const'ref. Fix indent
[kdenlive] / thumbnailer / westleypreview.cpp
index bd29bd2394d0e9b5a7ae2c11cf09e8560c7f8d71..b3212da8edac1e366cdc37b493349ab362dafb7a 100644 (file)
 #define DBG_AREA
 
 //#include "config.h"
-extern "C"
-{
-    KDE_EXPORT ThumbCreator *new_creator() {
-        return new MltPreview;
-    }
+extern "C" {
+KDE_EXPORT ThumbCreator *new_creator() {
+    return new MltPreview;
+}
 }
 
 MltPreview::MltPreview() :
-        QObject(),
-        ThumbCreator()
+    QObject(),
+    ThumbCreator()
 {
     Mlt::Factory::init();
 }
@@ -63,13 +62,12 @@ MltPreview::~MltPreview()
 bool MltPreview::create(const QString &path, int width, int height, QImage &img)
 {
     Mlt::Profile *profile = new Mlt::Profile("dv_pal");
-    char *tmp = (char *) qstrdup(path.toUtf8().data());
-    Mlt::Producer *producer = new Mlt::Producer(*profile, tmp);
-    delete[] tmp;
+    Mlt::Producer *producer = new Mlt::Producer(*profile, path.toUtf8().data());
 
 
     if (producer->is_blank()) {
         delete producer;
+        delete profile;
         return false;
     }
     int frame = 75;
@@ -90,7 +88,7 @@ bool MltPreview::create(const QString &path, int width, int height, QImage &img)
     return (img.isNull() == false);
 }
 
-QImage MltPreview::getFrame(Mlt::Producer *producer, int framepos, int width, int height)
+QImage MltPreview::getFrame(Mlt::Producer *producer, int framepos, int /*width*/, int height)
 {
     QImage result;
     if (producer == NULL) {
@@ -103,50 +101,53 @@ QImage MltPreview::getFrame(Mlt::Producer *producer, int framepos, int width, in
         return result;
     }
 
-    mlt_image_format format = mlt_image_yuv422;
-    int frame_width = 0;
-    int frame_height = 0;
+    mlt_image_format format = mlt_image_rgb24a;
     height = 200;
     double ar = frame->get_double("aspect_ratio");
     if (ar == 0.0) ar = 1.33;
     int calculated_width = (int)((double) height * ar);
-    frame->set("normalised_width", calculated_width);
-    frame->set("normalised_height", height);
-    uint8_t *data = frame->get_image(format, frame_width, frame_height, 0);
-    uint8_t *new_image = (uint8_t *)mlt_pool_alloc(frame_width * (frame_height + 1) * 4);
-    mlt_convert_yuv422_to_rgb24a((uint8_t *)data, new_image, frame_width * frame_height);
-    QImage image((uchar *)new_image, frame_width, frame_height, QImage::Format_ARGB32);
+    uint8_t *data = frame->get_image(format, calculated_width, height, 0);
+    QImage image((uchar *)data, calculated_width, height, QImage::Format_ARGB32);
 
     if (!image.isNull()) {
         result = image.rgbSwapped().convertToFormat(QImage::Format_RGB32);
     }
 
-    mlt_pool_release(new_image);
     delete frame;
     return result;
 }
 
 
-uint MltPreview::imageVariance(QImage image)
+uint MltPreview::imageVariance(const QImage &image)
 {
     if (image.isNull()) return 0;
     uint delta = 0;
     uint avg = 0;
     uint bytes = image.numBytes();
+    if (bytes == 0) return 0;
     uint STEPS = bytes / 2;
     QVarLengthArray<uchar> pivot(STEPS);
     kDebug(DBG_AREA) << "Using " << STEPS << " steps\n";
-    uchar *bits = image.bits();
+    const uchar *bits=image.bits();
     // First pass: get pivots and taking average
-    for (uint i = 0; i < STEPS ; i++) {
-        pivot[i] = bits[i*(bytes/STEPS)];
-        avg += pivot[i];
+    for( uint i=0; i<STEPS ; i++ ){
+        pivot[i] = bits[2 * i];
+#if QT_VERSION >= 0x040700
+        avg+=pivot.at(i);
+#else
+        avg+=pivot[i];
+#endif
     }
-    avg = avg / STEPS;
+    avg=avg/STEPS;
     // Second Step: calculate delta (average?)
-    for (uint i = 0; i < STEPS; i++) {
-        int curdelta = abs(int(avg - pivot[i]));
-        delta += curdelta;
+    for (uint i=0; i<STEPS; i++)
+    {
+#if QT_VERSION >= 0x040700
+        int curdelta=abs(int(avg - pivot.at(i)));
+#else
+        int curdelta=abs(int(avg - pivot[i]));
+#endif
+        delta+=curdelta;
     }
     return delta / STEPS;
 }
@@ -157,3 +158,5 @@ ThumbCreator::Flags MltPreview::flags() const
 }
 
 
+
+#include "westleypreview.moc"