From: Jean-Baptiste Mardelle Date: Thu, 4 Apr 2013 13:28:32 +0000 (+0200) Subject: Add reverse clip to clip actions: http://kdenlive.org/mantis/view.php?id=2933 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=70437d8e457171f213c019e66cbe97c452cb55dd;p=kdenlive Add reverse clip to clip actions: http://kdenlive.org/mantis/view.php?id=2933 --- diff --git a/src/dvdwizardmenu.cpp b/src/dvdwizardmenu.cpp index abfc780a..c0e86f85 100644 --- a/src/dvdwizardmenu.cpp +++ b/src/dvdwizardmenu.cpp @@ -458,7 +458,7 @@ void DvdWizardMenu::buildImage() QString profileName = DvdWizardVob::getDvdProfile(m_format); Mlt::Profile profile(profileName.toUtf8().constData()); profile.set_explicit(true); - Mlt::Producer *producer = new Mlt::Producer(profile, m_view.background_image->url().path().toUtf8().data()); + Mlt::Producer *producer = new Mlt::Producer(profile, m_view.background_image->url().path().toUtf8().constData()); if (producer && producer->is_valid()) { pix = QPixmap::fromImage(KThumb::getFrame(producer, 0, m_finalSize.width(), m_width, m_height)); m_movieLength = producer->get_length(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 014bb9a5..9847a34c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -4052,6 +4052,11 @@ void MainWindow::loadClipActions() connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); } } + if (KdenliveSettings::producerslist().contains("framebuffer")) { + QAction *action=actionMenu->addAction(i18n("Reverse clip")); + action->setData("framebuffer"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); + } } } diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 860b9b43..ee1feaaf 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -3603,6 +3603,44 @@ void ProjectList::startClipFilterJob(const QString &filterName, const QString &c else { destination = ids.values(); } + if (filterName == "framebuffer") { + Mlt::Profile profile; + QStringList keys = ids.keys(); + int ix = 0; + foreach(const QString &url, destination) { + QString prodstring = QString("framebuffer:" + url + "?-1"); + Mlt::Producer *reversed = new Mlt::Producer(profile, prodstring.toUtf8().constData()); + if (!reversed || !reversed->is_valid()) { + emit displayMessage(i18n("Cannot reverse clip"), -2, ErrorMessage); + continue; + } + QString dest = url + ".mlt"; + if (QFile::exists(dest)) { + if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", dest)) == KMessageBox::No) continue; + } + Mlt::Consumer *cons = new Mlt::Consumer(profile, "xml", dest.toUtf8().constData()); + if (cons == NULL || !cons->is_valid()) { + emit displayMessage(i18n("Cannot render reversed clip"), -2, ErrorMessage); + continue; + } + Mlt::Playlist list; + list.insert_at(0, reversed, 0); + delete reversed; + cons->connect(list); + cons->run(); + delete cons; + QString groupId; + QString groupName; + DocClipBase *base = m_doc->clipManager()->getClipById(keys.at(ix)); + if (base) { + groupId = base->getProperty("groupid"); + groupName = base->getProperty("groupname"); + } + emit addClip(dest, groupId, groupName); + ix++; + } + return; + } if (filterName == "motion_est") { // Show config dialog diff --git a/src/projectlist.h b/src/projectlist.h index 6f763906..25a222d9 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -60,6 +60,7 @@ #else // Dummy KMessageWidget to allow compilation of MyMessageWidget class since Qt's moc doesn work inside #ifdef #include + class KMessageWidget: public QLabel { public: