#include <QApplication>
#include <QtConcurrentRun>
#include <QVarLengthArray>
+#include <QPainter>
-KThumb::KThumb(ClipManager *clipManager, KUrl url, const QString &id, const QString &hash, QObject * parent) :
+KThumb::KThumb(ClipManager *clipManager, const KUrl &url, const QString &id, const QString &hash, QObject * parent) :
QObject(parent),
m_url(url),
m_thumbFile(),
m_thumbFile = m_clipManager->projectFolder() + "/thumbs/" + hash + ".thumb";
}
-void KThumb::updateClipUrl(KUrl url, const QString &hash)
+void KThumb::updateClipUrl(const KUrl &url, const QString &hash)
{
m_url = url;
m_thumbFile = m_clipManager->projectFolder() + "/thumbs/" + hash + ".thumb";
}
//static
-QPixmap KThumb::getImage(KUrl url, int width, int height)
+QPixmap KThumb::getImage(const KUrl& url, int width, int height)
{
if (url.isEmpty()) return QPixmap();
return getImage(url, 0, width, height);
}
-void KThumb::extractImage(QList <int>frames)
+void KThumb::extractImage(const QList<int> &frames)
{
if (!KdenliveSettings::videothumbnails() || m_producer == NULL) return;
- m_clipManager->requestThumbs(m_id, frames);
+ m_clipManager->slotRequestThumbs(m_id, frames);
}
void KThumb::getThumb(int frame)
{
- const int theight = KdenliveSettings::trackheight();
+ const int theight = Kdenlive::DefaultThumbHeight;
const int swidth = (int)(theight * m_ratio + 0.5);
const int dwidth = (int)(theight * m_dar + 0.5);
QImage img = getProducerFrame(frame, swidth, dwidth, theight);
{
if (m_producer == NULL) {
QImage img(width, height, QImage::Format_ARGB32_Premultiplied);
- img.fill(Qt::black);
+ img.fill(QColor(Qt::black).rgb());
return img;
}
return getProducerFrame(frame, (int) (height * m_ratio + 0.5), width, height);
}
//static
-QPixmap KThumb::getImage(KUrl url, int frame, int width, int height)
+QPixmap KThumb::getImage(const KUrl& url, int frame, int width, int height)
{
Mlt::Profile profile(KdenliveSettings::current_profile().toUtf8().constData());
QPixmap pix(width, height);
QMutexLocker lock(&m_mutex);
m_producer->seek(framepos);
Mlt::Frame *frame = m_producer->get_frame();
+ /*frame->set("rescale.interp", "nearest");
+ frame->set("deinterlace_method", "onefield");
+ frame->set("top_field_first", -1 );*/
QImage p = getFrame(frame, frameWidth, displayWidth, height);
delete frame;
return p;
frame->set("rescale.interp", "nearest");
frame->set("deinterlace_method", "onefield");
frame->set("top_field_first", -1 );
- QImage p = getFrame(frame, frameWidth, displayWidth, height);
+ const QImage p = getFrame(frame, frameWidth, displayWidth, height);
delete frame;
return p;
}
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);
} else {
image = image.scaled(displayWidth, height, Qt::IgnoreAspectRatio).rgbSwapped();
}
- p.fill(QColor(100, 100, 100, 70));
+#if QT_VERSION >= 0x040800
+ p.fill(QColor(100, 100, 100, 70));
QPainter painter(&p);
+#else
+ p.fill(Qt::transparent);
+ QPainter painter(&p);
+ painter.fillRect(p.rect(), QColor(100, 100, 100, 70));
+#endif
painter.drawImage(p.rect(), image);
painter.end();
} else
}
//static
-uint KThumb::imageVariance(QImage image )
+uint KThumb::imageVariance(const QImage &image )
{
uint delta = 0;
uint avg = 0;
QVarLengthArray<uchar> pivot(STEPS);
const uchar *bits=image.bits();
// First pass: get pivots and taking average
- for( uint i=0; i<STEPS ; i++ ){
+ for( uint i=0; i<STEPS ; ++i ){
pivot[i] = bits[2 * i];
#if QT_VERSION >= 0x040700
avg+=pivot.at(i);
if (STEPS)
avg=avg/STEPS;
// Second Step: calculate delta (average?)
- for (uint i=0; i<STEPS; i++)
+ for (uint i=0; i<STEPS; ++i)
{
#if QT_VERSION >= 0x040700
int curdelta=abs(int(avg - pivot.at(i)));
if (url.isEmpty()) return;
QPixmap image(width, height);
Mlt::Producer m_producer(url.path().toUtf8().constData());
- image.fill(Qt::black);
+ image.fill(QColor(Qt::black).rgb());
if (m_producer.is_blank()) {
emit thumbReady(startframe, image);
}
#if KDE_IS_VERSION(4,5,0)
-void KThumb::queryIntraThumbs(QList <int> missingFrames)
+void KThumb::queryIntraThumbs(const QList <int> &missingFrames)
{
foreach (int i, missingFrames) {
if (!m_intraFramesQueue.contains(i)) m_intraFramesQueue.append(i);