From: <j-...@us...> - 2009-03-02 10:03:45
|
Revision: 3081 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3081&view=rev Author: j-b-m Date: 2009-03-02 10:03:41 +0000 (Mon, 02 Mar 2009) Log Message: ----------- Fix possible crash on change clip speed: http://www.kdenlive.org:80/mantis/view.php?id=699 Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/renderer.cpp Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2009-02-28 09:44:41 UTC (rev 3080) +++ branches/KDE4/src/customtrackview.cpp 2009-03-02 10:03:41 UTC (rev 3081) @@ -2401,12 +2401,14 @@ } info.track = m_document->tracksCount() - item->track(); int endPos = m_document->renderer()->mltChangeClipSpeed(info, speed, oldspeed, baseclip->producer()); - kDebug() << "//CH CLIP SPEED: " << speed << "x" << oldspeed << ", END POS: " << endPos; - item->setSpeed(speed); - item->updateRectGeometry(); - if (item->cropDuration().frames(m_document->fps()) > endPos) - item->AbstractClipItem::resizeEnd(info.startPos.frames(m_document->fps()) + endPos, speed); - m_document->setModified(true); + if (endPos >= 0) { + item->setSpeed(speed); + item->updateRectGeometry(); + if (item->cropDuration().frames(m_document->fps()) > endPos) + item->AbstractClipItem::resizeEnd(info.startPos.frames(m_document->fps()) + endPos, speed); + m_document->setModified(true); + } + else emit displayMessage(i18n("Invalid clip"), ErrorMessage); } void CustomTrackView::cutSelectedClips() { Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2009-02-28 09:44:41 UTC (rev 3080) +++ branches/KDE4/src/renderer.cpp 2009-03-02 10:03:41 UTC (rev 3081) @@ -1639,7 +1639,7 @@ int newLength = 0; Mlt::Service service(m_mltProducer->parent().get_service()); if (service.type() != tractor_type) kWarning() << "// TRACTOR PROBLEM"; - kDebug() << "Changing clip speed, set in and out: " << info.cropStart.frames(m_fps) << " to " << (info.endPos - info.startPos).frames(m_fps) - 1; + //kDebug() << "Changing clip speed, set in and out: " << info.cropStart.frames(m_fps) << " to " << (info.endPos - info.startPos).frames(m_fps) - 1; Mlt::Tractor tractor(service); Mlt::Producer trackProducer(tractor.track(info.track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); @@ -1648,12 +1648,21 @@ int clipLength = trackPlaylist.clip_length(clipIndex); Mlt::Producer clip(trackPlaylist.get_clip(clipIndex)); - QString serv = clip.parent().get("mlt_service"); - QString id = clip.parent().get("id"); - kDebug() << "CLIP SERVICE: " << clip.parent().get("mlt_service"); + if (!clip.is_valid() || clip.is_blank()) { + // invalid clip + return -1; + } + Mlt::Producer clipparent = clip.parent(); + if (!clipparent.is_valid() || clipparent.is_blank()) { + // invalid clip + return -1; + } + QString serv = clipparent.get("mlt_service"); + QString id = clipparent.get("id"); + //kDebug() << "CLIP SERVICE: " << serv; if (serv == "avformat" && speed != 1.0) { mlt_service_lock(service.get_service()); - QString url = clip.parent().get("resource"); + QString url = clipparent.get("resource"); url.append("?" + QString::number(speed)); Mlt::Producer *slowprod = m_slowmotionProducers.value(url); if (!slowprod || slowprod->get_producer() == NULL) { @@ -1704,7 +1713,7 @@ } else if (serv == "framebuffer") { mlt_service_lock(service.get_service()); - QString url = clip.parent().get("resource"); + QString url = clipparent.get("resource"); url = url.section("?", 0, 0); url.append("?" + QString::number(speed)); Mlt::Producer *slowprod = m_slowmotionProducers.value(url); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |