m_requestList.removeAll(info);
m_requestList.append(info);
m_infoMutex.unlock();
- if (!m_infoThread.isRunning())
+ if (!m_infoThread.isRunning()) {
m_infoThread = QtConcurrent::run(this, &Render::processFileProperties);
+ }
}
void Render::forceProcessing(const QString &id)
{
if (m_processingClipId == id) return;
- m_infoMutex.lock();
+ QMutexLocker lock(&m_infoMutex);
for (int i = 0; i < m_requestList.count(); i++) {
requestClipInfo info = m_requestList.at(i);
if (info.clipId == id) {
}
}
}
- m_infoMutex.unlock();
}
int Render::processingItems()
{
- m_infoMutex.lock();
+ QMutexLocker lock(&m_infoMutex);
int count = m_requestList.count();
if (!m_processingClipId.isEmpty()) {
// one clip is currently processed
count++;
}
- m_infoMutex.unlock();
return count;
}
bool Render::isProcessing(const QString &id)
{
if (m_processingClipId == id) return true;
- m_infoMutex.lock();
+ QMutexLocker lock(&m_infoMutex);
for (int i = 0; i < m_requestList.count(); i++) {
requestClipInfo info = m_requestList.at(i);
if (info.clipId == id) {
- m_infoMutex.unlock();
return true;
}
}
- m_infoMutex.unlock();
return false;
}
while (!m_requestList.isEmpty()) {
m_infoMutex.lock();
info = m_requestList.takeFirst();
- m_infoMutex.unlock();
m_processingClipId = info.clipId;
+ m_infoMutex.unlock();
+
QString path;
bool proxyProducer;
if (info.xml.hasAttribute("proxy") && info.xml.attribute("proxy") != "-") {
path = info.xml.attribute("proxy");
- proxyProducer = true;
+ // Check for missing proxies
+ if (QFileInfo(path).size() <= 0) {
+ // proxy is missing, re-create it
+ emit requestProxy(info.clipId);
+ proxyProducer = false;
+ path = info.xml.attribute("resource");
+ }
+ else proxyProducer = true;
}
else {
path = info.xml.attribute("resource");
Mlt::Frame *frame = producer->get_frame();
if (frame && frame->is_valid()) {
QImage img = KThumb::getFrame(frame, imageWidth, fullWidth, info.imageHeight);
- delete frame;
emit replyGetImage(info.clipId, img);
}
+ if (frame) delete frame;
}
m_processingClipId.clear();
emit replyGetFileProperties(info.clipId, producer, stringMap(), stringMap(), info.replaceProducer);
int video_max = 0;
int default_audio = producer->get_int("audio_index");
int audio_max = 0;
+
+ int scan = producer->get_int("meta.media.progressive");
+ filePropertyMap["progressive"] = QString::number(scan);
// Find maximum stream index values
for (int ix = 0; ix < producer->get_int("meta.media.nb_streams"); ix++) {
m_mltProducer->seek((int)(startTime.frames(m_fps)));
m_mltProducer->set_speed(1.0);
m_mltConsumer->set("refresh", 1);
+ if (m_mltConsumer->is_stopped()) m_mltConsumer->start();
m_isZoneMode = true;
}
{
if (!m_mltProducer)
return;
-
resetZoneMode();
m_mltProducer->seek(pos);
if (m_mltProducer->get_speed() == 0) {
if (m_mltProducer) {
double pos = m_mltProducer->position();
if (m_isLoopMode) play(m_loopStart);
- else if (m_isZoneMode) resetZoneMode();
+ //else if (m_isZoneMode) resetZoneMode();
emit rendererStopped((int) pos);
}
}