From: Jean-Baptiste Mardelle Date: Tue, 11 Dec 2012 10:01:08 +0000 (+0100) Subject: Fix crash on resetting keyframes with affine transition X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a6fe00242d71093faaeda3dd7e7387eea2269be8;p=kdenlive Fix crash on resetting keyframes with affine transition --- diff --git a/src/geometrywidget.cpp b/src/geometrywidget.cpp index d51c38ca..c5e50ce2 100644 --- a/src/geometrywidget.cpp +++ b/src/geometrywidget.cpp @@ -385,7 +385,6 @@ void GeometryWidget::addParameter(const QDomElement elem) m_timeline->addGeometry(geometry); m_extraFactors.append(elem.attribute("factor", "1")); m_extraGeometryNames.append(elem.attribute("name")); - //kDebug()<<"ADDED PARAM: "<remove(item.frame()); } + // Delete extra geometry keyframes too + for (int i = 0; i < m_extraGeometries.count(); i++) { + Mlt::Geometry *geom = m_extraGeometries.at(i); + while (!geom->next_key(&item, 1)) { + geom->remove(item.frame()); + } + } + // Create neutral first keyframe item.frame(0); item.x(0); @@ -854,6 +861,14 @@ void GeometryWidget::slotResetNextKeyframes() m_geometry->remove(item.frame()); } + // Delete extra geometry keyframes too + for (int i = 0; i < m_extraGeometries.count(); i++) { + Mlt::Geometry *geom = m_extraGeometries.at(i); + while (!geom->next_key(&item, pos)) { + geom->remove(item.frame()); + } + } + // Make sure we have at least one keyframe if (m_geometry->next_key(&item, 0)) { item.frame(0); @@ -884,6 +899,16 @@ void GeometryWidget::slotResetPreviousKeyframes() m_geometry->remove(item.frame()); } + // Delete extra geometry keyframes too + for (int i = 0; i < m_extraGeometries.count(); i++) { + Mlt::Geometry *geom = m_extraGeometries.at(i); + pos = 0; + while (!geom->next_key(&item, pos) && pos < m_timePos->getValue()) { + pos = item.frame() + 1; + geom->remove(item.frame()); + } + } + // Make sure we have at least one keyframe if (!m_geometry->next_key(&item, 0)) { item.frame(0); diff --git a/src/keyframehelper.cpp b/src/keyframehelper.cpp index 91d926ba..52241f64 100644 --- a/src/keyframehelper.cpp +++ b/src/keyframehelper.cpp @@ -324,10 +324,6 @@ void KeyframeHelper::setKeyGeometry(Mlt::Geometry *geom, const int length) { m_geom = geom; frameLength = length; - while (!m_extraGeometries.isEmpty()) { - Mlt::Geometry *geom = m_extraGeometries.takeFirst(); - delete geom; - } update(); }