tmp = qstrdup(decklink.toUtf8().constData());
m_mltConsumer = new Mlt::Consumer(*m_mltProfile, tmp);
delete[] tmp;
- if (m_mltConsumer) {
+ if (m_mltConsumer->is_valid()) {
m_externalConsumer = true;
m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
m_mltConsumer->set("terminate_on_pause", 0);
+ m_mltConsumer->set("buffer", 12);
+ m_mltConsumer->set("deinterlace_method", "onefield");
mlt_log_set_callback(kdenlive_callback);
}
if (m_mltConsumer && m_mltConsumer->is_valid()) return;
void Render::getFileProperties(const QDomElement xml, const QString &clipId, int imageHeight, bool replaceProducer)
{
- KUrl url = KUrl(xml.attribute("resource", QString()));
+ QString path;
+ if (xml.hasAttribute("proxy")) path = xml.attribute("proxy");
+ else path = xml.attribute("resource");
+ KUrl url = KUrl(path);
Mlt::Producer *producer = NULL;
CLIPTYPE type = (CLIPTYPE)xml.attribute("type").toInt();
-
//kDebug() << "PROFILE WIDT: "<< xml.attribute("mlt_service") << ": "<< m_mltProfile->width() << "\n...................\n\n";
/*if (xml.attribute("type").toInt() == TEXT && !QFile::exists(url.path())) {
emit replyGetFileProperties(clipId, producer, QMap < QString, QString >(), QMap < QString, QString >(), replaceProducer);
mlt_service_unlock(service.get_service());
return false;
}
- Mlt::Producer *clip2 = prod->cut(info.cropStart.frames(m_fps), (info.cropDuration + info.cropStart).frames(m_fps));
+
+ Mlt::Producer *clip2 = prod->cut(info.cropStart.frames(m_fps), (info.cropDuration + info.cropStart).frames(m_fps) - 1);
trackPlaylist.insert_at(info.startPos.frames(m_fps), clip2, 1);
delete clip2;
}
int position = trackPlaylist.clip_start(clipIndex);
int blankDuration = trackPlaylist.clip_length(clipIndex);
- diff = -diff;
- if (blankDuration - diff == 0) {
+ if (blankDuration + diff == 0) {
trackPlaylist.remove(clipIndex);
- } else trackPlaylist.remove_region(position, diff);
+ } else trackPlaylist.remove_region(position, -diff);
}
trackPlaylist.consolidate_blanks(0);
}
Mlt::Producer trackProducer(tractor.track(track));
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
Mlt::Service trackService(trackProducer.get_service()); //trackPlaylist
- return mltAddEffect(trackService, params, 15000, true);
+ return mltAddEffect(trackService, params, trackProducer.get_playtime() - 1, true);
}
m_isBlocked = true;
previousStart += moveFrame;
+ if (previousStart < 0) {
+ // this is possible for images and color clips
+ previousOut -= previousStart;
+ previousStart = 0;
+ }
+
int length = previousOut + 1;
if (length > clip->get_length()) {
clip->parent().set("length", length + 1);