X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=thumbnailer%2Fwestleypreview.cpp;h=7866a4ce4125865025f91b0a98dcd068e9e08b7c;hb=4f9bd66f4c236423b440b10ae1e543d162cec0ed;hp=bd29bd2394d0e9b5a7ae2c11cf09e8560c7f8d71;hpb=00d4ae328c2aa4b8fe27d246fc2720564d08ca32;p=kdenlive diff --git a/thumbnailer/westleypreview.cpp b/thumbnailer/westleypreview.cpp index bd29bd23..7866a4ce 100644 --- a/thumbnailer/westleypreview.cpp +++ b/thumbnailer/westleypreview.cpp @@ -40,8 +40,7 @@ #define DBG_AREA //#include "config.h" -extern "C" -{ +extern "C" { KDE_EXPORT ThumbCreator *new_creator() { return new MltPreview; } @@ -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 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= 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= 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"