{
QString toReload;
ProjectItem *item = getItemById(clipId);
- int queue = m_render->processingItems();
if (item && producer) {
monitorItemEditing(false);
DocClipBase *clip = item->referencedClip();
}
item->setProperties(properties, metadata);
clip->setProducer(producer, replace);
+ m_render->processingDone(clipId);
// Proxy stuff
QString size = properties.value("frame_size");
}
if (!toReload.isEmpty())
item->slotSetToolTip();
- } else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
+ } else {
+ kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
+ m_render->processingDone(clipId);
+ }
+ int queue = m_render->processingItems();
if (queue == 0) {
monitorItemEditing(true);
if (item && m_thumbnailQueue.isEmpty()) {
void Render::getFileProperties(const QDomElement &xml, const QString &clipId, int imageHeight, bool replaceProducer)
{
+ // Make sure we don't request the info for same clip twice
+ m_infoMutex.lock();
+ if (m_processingClipId.contains(clipId)) {
+ m_infoMutex.unlock();
+ return;
+ }
+ for (int i = 0; i < m_requestList.count(); i++) {
+ if (m_requestList.at(i).clipId == clipId) {
+ // Clip is already queued
+ m_infoMutex.unlock();
+ return;
+ }
+ }
requestClipInfo info;
info.xml = xml;
info.clipId = clipId;
info.imageHeight = imageHeight;
info.replaceProducer = replaceProducer;
- // Make sure we don't request the info for same clip twice
- m_infoMutex.lock();
- m_requestList.removeAll(info);
m_requestList.append(info);
m_infoMutex.unlock();
if (!m_infoThread.isRunning()) {
void Render::forceProcessing(const QString &id)
{
- if (m_processingClipId == id) return;
+ if (m_processingClipId.contains(id)) return;
QMutexLocker lock(&m_infoMutex);
for (int i = 0; i < m_requestList.count(); i++) {
requestClipInfo info = m_requestList.at(i);
int Render::processingItems()
{
QMutexLocker lock(&m_infoMutex);
- int count = m_requestList.count();
- if (!m_processingClipId.isEmpty()) {
- // one clip is currently processed
- count++;
- }
+ int count = m_requestList.count() + m_processingClipId.count();
return count;
}
+void Render::processingDone(const QString &id)
+{
+ QMutexLocker lock(&m_infoMutex);
+ m_processingClipId.removeAll(id);
+}
+
bool Render::isProcessing(const QString &id)
{
- if (m_processingClipId == id) return true;
+ if (m_processingClipId.contains(id)) return true;
QMutexLocker lock(&m_infoMutex);
for (int i = 0; i < m_requestList.count(); i++) {
- requestClipInfo info = m_requestList.at(i);
- if (info.clipId == id) {
+ if (m_requestList.at(i).clipId == id) {
return true;
}
}
while (!m_requestList.isEmpty()) {
m_infoMutex.lock();
info = m_requestList.takeFirst();
- m_processingClipId = info.clipId;
+ m_processingClipId.append(info.clipId);
m_infoMutex.unlock();
QString path;
if (producer == NULL || producer->is_blank() || !producer->is_valid()) {
kDebug() << " / / / / / / / / ERROR / / / / // CANNOT LOAD PRODUCER: "<<path;
- m_processingClipId.clear();
+ m_processingClipId.removeAll(info.clipId);
if (proxyProducer) {
// Proxy file is corrupted
emit removeInvalidProxy(info.clipId, false);
producer->set("out", info.xml.attribute("proxy_out").toInt());
if (producer->get_out() != info.xml.attribute("proxy_out").toInt()) {
// Proxy file length is different than original clip length, this will corrupt project so disable this proxy clip
- m_processingClipId.clear();
+ m_processingClipId.removeAll(info.clipId);
emit removeInvalidProxy(info.clipId, true);
delete producer;
continue;
}
if (frame) delete frame;
}
- m_processingClipId.clear();
emit replyGetFileProperties(info.clipId, producer, stringMap(), stringMap(), info.replaceProducer);
continue;
}
metadataPropertyMap[ name.section('.', 0, -2)] = value;
}
producer->seek(0);
- m_processingClipId.clear();
emit replyGetFileProperties(info.clipId, producer, filePropertyMap, metadataPropertyMap, info.replaceProducer);
}
- m_processingClipId.clear();
}
Mlt::Producer *getProducer();
/** @brief Returns the number of clips to process (When requesting clip info). */
int processingItems();
+ /** @brief Processing of this clip is over, producer was set on clip, remove from list. */
+ void processingDone(const QString &id);
/** @brief Force processing of clip with selected id. */
void forceProcessing(const QString &id);
/** @brief Are we currently processing clip with selected id. */
void mltPasteEffects(Mlt::Producer *source, Mlt::Producer *dest);
QMap<QString, QString> mltGetTransitionParamsFromXml(QDomElement xml);
QMap<QString, Mlt::Producer *> m_slowmotionProducers;
- /** @brief The id of the clip that is currently being loaded for info query */
- QString m_processingClipId;
+ /** @brief The ids of the clips that are currently being loaded for info query */
+ QStringList m_processingClipId;
/** @brief Build the MLT Consumer object with initial settings.
* @param profileName The MLT profile to use for the consumer */