#include "westleypreview.h"
-#include <qfile.h>
-#include <qimage.h>
-#include <QtCore/QVarLengthArray>
+#include <QFile>
+#include <QImage>
+#include <QVarLengthArray>
#include <kstandarddirs.h>
#include <krandomsequence.h>
-#include <qdatetime.h>
-#include <QColor>
+#include <QDateTime>
#include <kdebug.h>
#include <ktempdir.h>
#include <kurl.h>
-#include <qfileinfo.h>
-#include <KTemporaryFile>
+#include <QFileInfo>
#include <unistd.h>
//#include "config.h"
extern "C" {
- KDE_EXPORT ThumbCreator *new_creator() {
- return new MltPreview;
- }
+KDE_EXPORT ThumbCreator *new_creator() {
+ return new MltPreview;
+}
}
MltPreview::MltPreview() :
- QObject(),
- ThumbCreator()
+ QObject(),
+ ThumbCreator()
{
Mlt::Factory::init();
}
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;
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;
}
}
+
+#include "westleypreview.moc"