* *
***************************************************************************/
-#include <qxml.h>
-#include <QImage>
-#include <QApplication>
-#include <QCryptographicHash>
+#include "kthumb.h"
+#include "clipmanager.h"
+#include "renderer.h"
+#include "kdenlivesettings.h"
+
+#include <mlt++/Mlt.h>
#include <kio/netaccess.h>
#include <kdebug.h>
#include <klocale.h>
-#include <kdenlivesettings.h>
#include <kfileitem.h>
#include <kmessagebox.h>
#include <KStandardDirs>
-#include <mlt++/Mlt.h>
-
-#include "clipmanager.h"
-#include "renderer.h"
-#include "kthumb.h"
-#include "kdenlivesettings.h"
-
+#include <qxml.h>
+#include <QImage>
+#include <QApplication>
void MyThread::init(QObject *parent, KUrl url, QString target, double frame, double frameLength, int frequency, int channels, int arrayWidth) {
stop_me = false;
}
void MyThread::run() {
-
if (!f.open(QIODevice::WriteOnly)) {
kDebug() << "++++++++ ERROR WRITING TO FILE: " << f.fileName() << endl;
kDebug() << "++++++++ DISABLING AUDIO THUMBS" << endl;
for (int z = (int) m_frame;z < (int)(m_frame + m_frameLength) && m_producer.is_valid();z++) {
if (stop_me) break;
val = (int)((z - m_frame) / (m_frame + m_frameLength) * 100.0);
- if (last_val != val & val > 1) {
+ if (last_val != val && val > 1) {
emit audioThumbProgress(val);
//QApplication::postEvent(m_parent, new ProgressEvent(val, (QEvent::Type)10005));
int m_samples = mlt_sample_calculator(m_framesPerSecond, m_frequency, mlt_frame_get_position(mlt_frame->get_frame()));
mlt_audio_format m_audioFormat = mlt_audio_pcm;
- int16_t* m_pcm = mlt_frame->get_audio(m_audioFormat, m_frequency, m_channels, m_samples);
+ qint16* m_pcm = mlt_frame->get_audio(m_audioFormat, m_frequency, m_channels, m_samples);
for (int c = 0;c < m_channels;c++) {
QByteArray m_array;
}
-KThumb::KThumb(ClipManager *clipManager, KUrl url, const QString &id, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_id(id), m_producer(NULL), m_dar(1), m_mainFrame(-1) {
- QCryptographicHash context(QCryptographicHash::Sha1);
- context.addData((KFileItem(m_url, "text/plain", S_IFREG).timeString() + m_url.fileName()).toAscii().data());
- m_thumbFile = KGlobal::dirs()->saveLocation("tmp" , "kdenlive") + context.result().toHex() + ".thumb";
- //kDebug() << "thumbfile=" << m_thumbFile;
+KThumb::KThumb(ClipManager *clipManager, KUrl url, const QString &id, const QString &hash, QObject * parent, const char */*name*/)
+ : QObject(parent),
+ audioThumbProducer(),
+ m_url(url),
+ m_thumbFile(),
+ m_dar(1),
+ m_producer(NULL),
+ m_clipManager(clipManager),
+ m_id(id),
+ m_mainFrame(-1)
+{
+ m_thumbFile = clipManager->projectFolder() + "/thumbs/" + hash + ".thumb";
connect(&audioThumbProducer, SIGNAL(audioThumbProgress(const int)), this, SLOT(slotAudioThumbProgress(const int)));
connect(&audioThumbProducer, SIGNAL(audioThumbOver()), this, SLOT(slotAudioThumbOver()));
}
KThumb::~KThumb() {
- if (audioThumbProducer.isRunning()) audioThumbProducer.exit();
+ if (audioThumbProducer.isRunning()) {
+ slotAudioThumbOver();
+ audioThumbProducer.stop_me = true;
+ audioThumbProducer.wait(300);
+ }
}
void KThumb::setProducer(Mlt::Producer *producer) {
m_dar = producer->profile()->dar();
}
-void KThumb::updateClipUrl(KUrl url) {
+void KThumb::clearProducer() {
+ m_producer = NULL;
+}
+
+bool KThumb::hasProducer() const {
+ return m_producer != NULL;
+}
+
+void KThumb::updateThumbUrl(const QString &hash) {
+ m_thumbFile = m_clipManager->projectFolder() + "/thumbs/" + hash + ".thumb";
+}
+
+void KThumb::updateClipUrl(KUrl url, const QString &hash) {
m_url = url;
if (m_producer) {
char *tmp = Render::decodedString(url.path());
m_producer->set("resource", tmp);
delete[] tmp;
}
+ m_thumbFile = m_clipManager->projectFolder() + "/thumbs/" + hash + ".thumb";
}
//static
const int twidth = (int)(KdenliveSettings::trackheight() * m_dar);
const int theight = KdenliveSettings::trackheight();
+
mlt_image_format format = mlt_image_yuv422;
if (m_producer->is_blank()) {
QPixmap pix(twidth, theight);
//videoThumbProducer.getThumb(frame);
m_producer->seek(frame);
mltFrame = m_producer->get_frame();
+ if (frame2 != -1) m_producer->seek(frame2);
if (!mltFrame) {
kDebug() << "///// BROKEN FRAME";
QPixmap p(twidth, theight);
emit thumbReady(frame, p);
return;
} else {
- if (frame2 != -1) m_producer->seek(frame2);
int frame_width = 0;
int frame_height = 0;
mltFrame->set("normalised_height", theight);