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;
}
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);