void Render::closeMlt()
{
//delete m_osdTimer;
-
- Mlt::Service service(m_mltProducer->get_service());
- if (service.type() == tractor_type) {
- Mlt::Tractor tractor(service);
- int trackNb = tractor.count();
-
- while (trackNb > 1) {
- Mlt::Producer trackProducer(tractor.track(trackNb - 1));
- Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
- trackPlaylist.clear();
- trackNb--;
+ if (m_mltProducer) {
+ Mlt::Service service(m_mltProducer->get_service());
+ if (service.type() == tractor_type) {
+ Mlt::Tractor tractor(service);
+ int trackNb = tractor.count();
+
+ while (trackNb > 1) {
+ Mlt::Producer trackProducer(tractor.track(trackNb - 1));
+ Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+ trackPlaylist.clear();
+ trackNb--;
+ }
}
}
- kDebug() << "// // // CLOSE RENDERER";
+ kDebug() << "// // // CLOSE RENDERER " << m_name;
delete m_mltConsumer;
delete m_mltProducer;
delete m_blackClip;
int pos = 0;
if (m_mltProducer) {
pos = m_mltProducer->position();
+
+
+ Mlt::Service service(m_mltProducer->get_service());
+ if (service.type() == tractor_type) {
+ Mlt::Tractor tractor(service);
+ int trackNb = tractor.count();
+ while (trackNb > 1) {
+ Mlt::Producer trackProducer(tractor.track(trackNb - 1));
+ Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+ trackPlaylist.clear();
+ trackNb--;
+ }
+ }
+
+
delete m_mltProducer;
}
m_mltProducer = NULL;
+ delete m_blackClip;
+ m_blackClip = NULL;
- //WARNING: Trying to delete the profile will crash when trying to display a clip afterwards...
- /*if (m_mltProfile) delete m_mltProfile;
- m_mltProfile = NULL;*/
+ if (m_mltProfile) delete m_mltProfile;
+ m_mltProfile = NULL;
buildConsumer();
m_mltProducer->set_speed(0);
//if (KdenliveSettings::osdtimecode() && m_osdInfo) m_mltProducer->detach(*m_osdInfo);
+
+ Mlt::Service service(m_mltProducer->get_service());
+ if (service.type() == tractor_type) {
+ Mlt::Tractor tractor(service);
+ int trackNb = tractor.count();
+ while (trackNb > 1) {
+ Mlt::Producer trackProducer(tractor.track(trackNb - 1));
+ Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+ trackPlaylist.clear();
+ trackNb--;
+ }
+ }
+
delete m_mltProducer;
m_mltProducer = NULL;
emit stopped();
m_isBlocked = false;
}
-void Render::clear()
-{
- kDebug() << " ********* RENDER CLEAR";
- if (m_mltConsumer) {
- //m_mltConsumer->set("refresh", 0);
- if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
- }
-
- if (m_mltProducer) {
- //if (KdenliveSettings::osdtimecode() && m_osdInfo) m_mltProducer->detach(*m_osdInfo);
- m_mltProducer->set_speed(0.0);
- delete m_mltProducer;
- m_mltProducer = NULL;
- emit stopped();
- }
-}
-
void Render::stop()
{
if (m_mltProducer == NULL) return;
while (trackNb > 1) {
Mlt::Producer trackProducer(tractor.track(trackNb - 1));
trackDuration = trackProducer.get_playtime() - 1;
-
//kDebug() << " / / /DURATON FOR TRACK " << trackNb - 1 << " = " << trackDuration;
if (trackDuration > duration) duration = trackDuration;
trackNb--;
if (blackTrackProducer.get_playtime() - 1 != duration) {
Mlt::Playlist blackTrackPlaylist((mlt_playlist) blackTrackProducer.get_service());
Mlt::Producer *blackclip = blackTrackPlaylist.get_clip(0);
- if (duration > m_blackClip->get_length()) {
- m_blackClip->set("length", duration);
- if (blackclip) blackclip->set("length", duration);
+ if (blackclip && duration > blackclip->parent().get_length()) {
+ blackclip->parent().set("length", duration);
+ blackclip->parent().set("out", duration - 1);
+ blackclip->set("length", duration);
}
if (blackclip == NULL || blackclip->is_blank() || blackTrackPlaylist.count() != 1) {
blackTrackPlaylist.clear();
+ m_blackClip->set("length", duration);
+ m_blackClip->set("out", duration - 1);
blackTrackPlaylist.append(*m_blackClip, 0, duration - 1);
} else blackTrackPlaylist.resize_clip(0, 0, duration - 1);
delete blackclip;
m_slowmotionProducers.insert(url, slowprod);
}
Mlt::Producer *clip = trackPlaylist.replace_with_blank(clipIndex);
- delete clip;
trackPlaylist.consolidate_blanks(0);
// Check that the blank space is long enough for our new duration
clipIndex = trackPlaylist.get_clip_index_at(startPos);
// move all effects to the correct producer
mltPasteEffects(clip, cut);
-
trackPlaylist.insert_at(startPos, cut, 1);
delete cut;
+ delete clip;
clipIndex = trackPlaylist.get_clip_index_at(startPos);
newLength = trackPlaylist.clip_length(clipIndex);
mlt_service_unlock(service.get_service());
mlt_service_lock(service.get_service());
Mlt::Producer *clip = trackPlaylist.replace_with_blank(clipIndex);
- delete clip;
trackPlaylist.consolidate_blanks(0);
// Check that the blank space is long enough for our new duration
trackPlaylist.insert_at(startPos, cut, 1);
delete cut;
+ delete clip;
clipIndex = trackPlaylist.get_clip_index_at(startPos);
newLength = trackPlaylist.clip_length(clipIndex);
mlt_service_unlock(service.get_service());
m_slowmotionProducers.insert(url, slowprod);
}
Mlt::Producer *clip = trackPlaylist.replace_with_blank(clipIndex);
- delete clip;
trackPlaylist.consolidate_blanks(0);
GenTime oldDuration = GenTime(clipLength, m_fps);
trackPlaylist.insert_at(startPos, cut, 1);
delete cut;
+ delete clip;
clipIndex = trackPlaylist.get_clip_index_at(startPos);
newLength = trackPlaylist.clip_length(clipIndex);
int diff = newDuration - (trackPlaylist.clip_length(clipIndex) - 1);
if (newDuration > clip->get_length()) {
clip->parent().set("length", newDuration + 1);
+ clip->parent().set("out", newDuration);
clip->set("length", newDuration + 1);
}
if (newDuration > clip->get_out()) {
mltPasteEffects(clipProducer, clip);
int newIndex = destTrackPlaylist.insert_at(moveEnd, clip, 1);
- delete clip;
- clip = NULL;
- if (clipProducer) delete clipProducer;
+ if (clip == clipProducer) {
+ delete clip;
+ clip = NULL;
+ } else {
+ delete clip;
+ delete clipProducer;
+ }
destTrackPlaylist.consolidate_blanks(0);
/*if (QString(clipProducer.parent().get("transparency")).toInt() == 1) {
kDebug() << "//////// moving clip transparency";
int pos = 0;
if (m_mltProducer) {
pos = m_mltProducer->position();
- delete m_mltProducer;
}
- m_mltProducer = NULL;
+
setSceneList(scene, pos);
}