if (!m_properties.contains("name")) m_properties.insert("name", url.fileName());
- //if (!url.isEmpty() && QFile::exists(url.path()))
- {
- m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash"));
- if (m_clipType == AV || m_clipType == AUDIO || m_clipType == PLAYLIST) slotCreateAudioTimer();
- }
- //kDebug() << "type is video" << (m_clipType == AV) << " " << m_clipType;
-}
-
-/*DocClipBase & DocClipBase::operator=(const DocClipBase & clip) {
- DocClipBase::operator=(clip);
- m_id = clip.getId();
- m_clipType = clip.clipType();
- m_name = clip.name();
- m_duration = clip.duration();
- m_audioThumbCreated = clip.audioThumbCreated();
- m_properties = clip.properties();
- return *this;
-}*/
+ m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash"));
+ if (m_clipType == AV || m_clipType == AUDIO || m_clipType == PLAYLIST) slotCreateAudioTimer();
+}
DocClipBase::~DocClipBase()
{
- kDebug() << "CLIP " << m_id << " DELETED******************************";
delete m_thumbProd;
if (m_audioTimer) {
m_audioTimer->stop();
delete m_audioTimer;
}
- /*kDebug() <<" * * *CNT "<<m_baseTrackProducers.count();
- if (m_baseTrackProducers.count() > 0) kDebug()<<"YOYO: "<<m_baseTrackProducers.at(0)->get_out()<<", CUT: "<<m_baseTrackProducers.at(0)->is_cut();*/
qDeleteAll(m_baseTrackProducers);
m_baseTrackProducers.clear();
qDeleteAll(m_audioTrackProducers);
void DocClipBase::setProducer(Mlt::Producer *producer, bool reset, bool readPropertiesFromProducer)
{
- if (producer == NULL || !producer->is_valid()) return;
- if (reset) m_producerMutex.lock();
- if (m_placeHolder) {
+ if (producer == NULL) return;
+ if (reset) QMutexLocker locker(&m_producerMutex);
+ if (m_placeHolder || !producer->is_valid()) {
char *tmp = qstrdup(i18n("Missing clip").toUtf8().constData());
producer->set("markup", tmp);
producer->set("bgcolour", "0xff0000ff");
producer->set("pad", "10");
delete[] tmp;
}
- if (m_thumbProd && (reset || !m_thumbProd->hasProducer())) m_thumbProd->setProducer(producer);
+ QString id = producer->get("id");
+ if (m_thumbProd) {
+ if (reset) m_thumbProd->setProducer(NULL);
+ if (!m_thumbProd->hasProducer()) {
+ if (m_clipType != AUDIO) {
+ if (!id.endsWith("_audio"))
+ m_thumbProd->setProducer(producer);
+ }
+ else m_thumbProd->setProducer(producer);
+ }
+ }
if (reset) {
// Clear all previous producers
kDebug() << "/+++++++++++++++ DELETE ALL PRODS " << producer->get("id");
deleteProducers(false);
}
- QString id = producer->get("id");
bool updated = false;
if (id.contains('_')) {
// this is a subtrack producer, insert it at correct place
m_audioTrackProducers[pos] = producer;
updated = true;
}
- if (reset) m_producerMutex.unlock();
return;
} else if (id.endsWith("video")) {
if (m_videoOnlyProducer == NULL) {
m_videoOnlyProducer = producer;
updated = true;
}
- if (reset) m_producerMutex.unlock();
return;
}
int pos = id.toInt();
}
if (updated && readPropertiesFromProducer && (m_clipType != COLOR && m_clipType != IMAGE && m_clipType != TEXT))
setDuration(GenTime(producer->get_length(), KdenliveSettings::project_fps()));
- if (reset) m_producerMutex.unlock();
}
static double getPixelAspect(QMap<QString, QString>& props) {
Mlt::Producer *DocClipBase::audioProducer(int track)
{
- m_producerMutex.lock();
+ QMutexLocker locker(&m_producerMutex);
if (m_audioTrackProducers.count() <= track) {
while (m_audioTrackProducers.count() - 1 < track) {
m_audioTrackProducers.append(NULL);
Mlt::Producer *base;
if (i >= m_audioTrackProducers.count()) {
// Could not find a valid producer for that clip
- m_producerMutex.unlock();
+ locker.unlock();
base = producer();
if (base == NULL) {
return NULL;
}
- m_producerMutex.lock();
+ locker.relock();
}
else base = m_audioTrackProducers.at(i);
m_audioTrackProducers[track] = cloneProducer(base);
adjustProducerProperties(m_audioTrackProducers.at(track), QString(getId() + '_' + QString::number(track) + "_audio"), false, true);
}
- m_producerMutex.unlock();
return m_audioTrackProducers.at(track);
}
Mlt::Producer *DocClipBase::videoProducer()
{
- m_producerMutex.lock();
+ QMutexLocker locker(&m_producerMutex);
if (m_videoOnlyProducer == NULL) {
int i;
for (i = 0; i < m_baseTrackProducers.count(); i++)
m_videoOnlyProducer = cloneProducer(m_baseTrackProducers.at(i));
adjustProducerProperties(m_videoOnlyProducer, QString(getId() + "_video"), true, false);
}
- m_producerMutex.unlock();
return m_videoOnlyProducer;
}
Mlt::Producer *DocClipBase::producer(int track)
{
- m_producerMutex.lock();
+ QMutexLocker locker(&m_producerMutex);
if (track == -1 || (m_clipType != AUDIO && m_clipType != AV && m_clipType != PLAYLIST)) {
- if (m_baseTrackProducers.count() == 0) return NULL;
+ if (m_baseTrackProducers.count() == 0) {
+ return NULL;
+ }
for (int i = 0; i < m_baseTrackProducers.count(); i++) {
if (m_baseTrackProducers.at(i) != NULL) {
- m_producerMutex.unlock();
return m_baseTrackProducers.at(i);
}
}
- m_producerMutex.unlock();
return NULL;
}
if (track >= m_baseTrackProducers.count()) {
if (i >= m_baseTrackProducers.count()) {
// Could not find a valid producer for that clip, check in
- m_producerMutex.unlock();
return NULL;
}
m_baseTrackProducers[track] = cloneProducer(m_baseTrackProducers.at(i));
adjustProducerProperties(m_baseTrackProducers.at(track), QString(getId() + '_' + QString::number(track)), false, false);
}
- m_producerMutex.unlock();
return m_baseTrackProducers.at(track);
}
else if (m_clipType == TEXT) hash = QCryptographicHash::hash(QString("title" + getId() + m_properties.value("xmldata")).toUtf8().data(), QCryptographicHash::Md5).toHex();
else {
if (m_properties.contains("file_hash")) hash = m_properties.value("file_hash");
- else hash = getHash(fileURL().path());
+ if (hash.isEmpty()) hash = getHash(fileURL().path());
}
return hash;
m_thumbProd->extractImage(frame, frame2);
}
-void DocClipBase::slotBlock()
-{
- m_producerMutex.lock();
-}
-
-void DocClipBase::slotRelease()
-{
- m_producerMutex.unlock();
-}
-
QPixmap DocClipBase::extractImage(int frame, int width, int height)
{
if (m_thumbProd == NULL) return QPixmap(width, height);
- m_producerMutex.lock();
+ QMutexLocker locker(&m_producerMutex);
QPixmap p = m_thumbProd->extractImage(frame, width, height);
- m_producerMutex.unlock();
return p;
}
+