From: <j-...@us...> - 2008-07-16 22:55:24
|
Revision: 2320 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2320&view=rev Author: j-b-m Date: 2008-07-16 22:55:33 +0000 (Wed, 16 Jul 2008) Log Message: ----------- save zoom factor in document Modified Paths: -------------- branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/trackview.cpp branches/KDE4/src/trackview.h Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-07-16 22:17:07 UTC (rev 2319) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-07-16 22:55:33 UTC (rev 2320) @@ -37,7 +37,7 @@ #include "mainwindow.h" -KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0) { +KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(4) { kDebug() << "// init profile, ratnum: " << profile.frame_rate_num << ", " << profile.frame_rate_num << ", width: " << profile.width; m_clipManager = new ClipManager(this); if (!url.isEmpty()) { @@ -52,6 +52,7 @@ QDomElement infoXml = infoXmlNode.toElement(); QString profilePath = infoXml.attribute("profile"); m_startPos = infoXml.attribute("position").toInt(); + m_zoom = infoXml.attribute("zoom").toInt(); if (!profilePath.isEmpty()) setProfilePath(profilePath); double version = infoXml.attribute("version").toDouble(); if (version < 0.7) convertDocument(version); @@ -240,6 +241,14 @@ } +void KdenliveDoc::setZoom(int factor) { + m_zoom = factor; +} + +int KdenliveDoc::zoom() const { + return m_zoom; +} + void KdenliveDoc::convertDocument(double version) { // Opening a old Kdenlive document QDomNode westley = m_document.elementsByTagName("westley").at(1); @@ -355,6 +364,7 @@ addedXml.setAttribute("version", "0.7"); addedXml.setAttribute("profile", profilePath()); addedXml.setAttribute("position", m_render->seekPosition().frames(m_fps)); + addedXml.setAttribute("zoom", m_zoom); QList <DocClipBase*> list = m_clipManager->documentClipList(); for (int i = 0; i < list.count(); i++) { e = list.at(i)->toXML(); Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-07-16 22:17:07 UTC (rev 2319) +++ branches/KDE4/src/kdenlivedoc.h 2008-07-16 22:55:33 UTC (rev 2320) @@ -100,6 +100,8 @@ void loadingProgressed(); void updateAllProjectClips(); void syncGuides(QList <Guide *> guides); + void setZoom(int factor); + int zoom() const; private: KUrl m_url; @@ -107,6 +109,7 @@ QDomDocument m_document; QString m_projectName; double m_fps; + int m_zoom; /** Cursor position at document opening */ int m_startPos; int m_width; Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-16 22:17:07 UTC (rev 2319) +++ branches/KDE4/src/mainwindow.cpp 2008-07-16 22:55:33 UTC (rev 2320) @@ -445,6 +445,7 @@ m_zoomSlider = new QSlider(Qt::Horizontal, this); m_zoomSlider->setMaximum(13); + m_zoomSlider->setPageStep(1); m_zoomSlider->setMaximumWidth(150); m_zoomSlider->setMinimumWidth(100); @@ -1031,7 +1032,7 @@ connect(trackView, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotActivateEffectStackView())); connect(trackView, SIGNAL(transitionItemSelected(Transition*)), transitionConfig, SLOT(slotTransitionItemSelected(Transition*))); connect(trackView, SIGNAL(transitionItemSelected(Transition*)), this, SLOT(slotActivateTransitionView())); - m_zoomSlider->setValue(trackView->currentZoom()); + m_zoomSlider->setValue(doc->zoom()); connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int))); connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn())); connect(trackView->projectView(), SIGNAL(zoomOut()), this, SLOT(slotZoomOut())); Modified: branches/KDE4/src/trackview.cpp =================================================================== --- branches/KDE4/src/trackview.cpp 2008-07-16 22:17:07 UTC (rev 2319) +++ branches/KDE4/src/trackview.cpp 2008-07-16 22:55:33 UTC (rev 2320) @@ -35,7 +35,7 @@ #include "customtrackview.h" TrackView::TrackView(KdenliveDoc *doc, QWidget *parent) - : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0), m_currentZoom(4) { + : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0) { view = new Ui::TimeLine_UI(); view->setupUi(this); @@ -74,19 +74,16 @@ connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), view->headers_area->verticalScrollBar(), SLOT(setValue(int))); connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders())); - parseDocument(doc->toXml()); + parseDocument(m_doc->toXml()); connect(m_trackview, SIGNAL(cursorMoved(int, int)), m_ruler, SLOT(slotCursorMoved(int, int))); connect(m_trackview->horizontalScrollBar(), SIGNAL(valueChanged(int)), m_ruler, SLOT(slotMoveRuler(int))); connect(m_trackview, SIGNAL(mousePosition(int)), this, SIGNAL(mousePosition(int))); connect(m_trackview, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotClipItemSelected(ClipItem*))); connect(m_trackview, SIGNAL(transitionItemSelected(Transition*)), this, SLOT(slotTransitionItemSelected(Transition*))); - slotChangeZoom(m_currentZoom); + slotChangeZoom(m_doc->zoom()); } -int TrackView::currentZoom() const { - return m_currentZoom; -} int TrackView::duration() const { return m_trackview->duration(); @@ -262,10 +259,9 @@ } void TrackView::slotChangeZoom(int factor) { - + m_doc->setZoom(factor); m_ruler->setPixelPerMark(factor); m_scale = (double) FRAME_SIZE / m_ruler->comboScale[factor]; // m_ruler->comboScale[m_currentZoom] / - m_currentZoom = factor; m_trackview->setScale(m_scale); } Modified: branches/KDE4/src/trackview.h =================================================================== --- branches/KDE4/src/trackview.h 2008-07-16 22:17:07 UTC (rev 2319) +++ branches/KDE4/src/trackview.h 2008-07-16 22:55:33 UTC (rev 2320) @@ -57,7 +57,6 @@ void refresh() ; int outPoint() const; int inPoint() const; - int currentZoom() const; int fitZoom() const; @@ -74,7 +73,6 @@ int m_projectTracks; QString m_editMode; QGraphicsScene *m_scene; - uint m_currentZoom; KdenliveDoc *m_doc; QVBoxLayout *m_tracksLayout; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-17 00:41:44
|
Revision: 2321 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2321&view=rev Author: j-b-m Date: 2008-07-17 00:41:52 +0000 (Thu, 17 Jul 2008) Log Message: ----------- correctly load / save text clips Modified Paths: -------------- branches/KDE4/src/clipmanager.cpp branches/KDE4/src/clipmanager.h branches/KDE4/src/docclipbase.cpp branches/KDE4/src/docclipbase.h branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectitem.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/titledocument.cpp branches/KDE4/src/titledocument.h branches/KDE4/src/titlewidget.cpp branches/KDE4/src/titlewidget.h Modified: branches/KDE4/src/clipmanager.cpp =================================================================== --- branches/KDE4/src/clipmanager.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/clipmanager.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -153,12 +153,13 @@ -void ClipManager::slotAddTextClipFile(const QString path, const QString group, const int groupId) { +void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) { kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << path; QDomDocument doc; QDomElement prod = doc.createElement("producer"); prod.setAttribute("resource", path + ".png"); prod.setAttribute("xml", path); + prod.setAttribute("xmldata", xml); uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); if (!group.isEmpty()) { Modified: branches/KDE4/src/clipmanager.h =================================================================== --- branches/KDE4/src/clipmanager.h 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/clipmanager.h 2008-07-17 00:41:52 UTC (rev 2321) @@ -49,7 +49,7 @@ DocClipBase *getClipAt(int pos); void deleteClip(uint clipId); void slotAddClipFile(const KUrl url, const QString group, const int groupId); - void slotAddTextClipFile(const QString path, const QString group, const int groupId); + void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId); void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, bool loop, const QString group, const int groupId); DocClipBase *getClipById(int clipId); Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/docclipbase.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -155,6 +155,7 @@ void DocClipBase::setDuration(GenTime dur) { m_duration = dur; + m_properties.insert("duration", QString::number((int) dur.frames(KdenliveSettings::project_fps()))); } const GenTime &DocClipBase::duration() const { @@ -239,9 +240,6 @@ } -QDomDocument DocClipBase::generateSceneList(bool, bool) const { -} - void DocClipBase::setThumbnail(const QPixmap & pixmap) { m_thumbnail = pixmap; } Modified: branches/KDE4/src/docclipbase.h =================================================================== --- branches/KDE4/src/docclipbase.h 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/docclipbase.h 2008-07-17 00:41:52 UTC (rev 2321) @@ -140,7 +140,6 @@ const GenTime & endTime) const; /** returns a QString containing all of the XML data required to recreate this clip. */ QDomElement toXML() const; - QDomDocument generateSceneList(bool addProducers = true, bool rendering = false) const; /** Returns true if the xml passed matches the values in this clip */ bool matchesXML(const QDomElement & element) const; Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -40,6 +40,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(4) { kDebug() << "// init profile, ratnum: " << profile.frame_rate_num << ", " << profile.frame_rate_num << ", width: " << profile.width; m_clipManager = new ClipManager(this); + KdenliveSettings::setProject_fps(m_fps); if (!url.isEmpty()) { QString tmpFile; if (KIO::NetAccess::download(url.path(), tmpFile, parent)) { @@ -411,6 +412,7 @@ m_fps = (double) m_profile.frame_rate_num / m_profile.frame_rate_den; m_width = m_profile.width; m_height = m_profile.height; + KdenliveSettings::setProject_fps(m_fps); kDebug() << "KDEnnlive document, init timecode from path: " << path << ", " << m_fps; if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true); else m_timecode.setFormat((int) m_fps); @@ -607,9 +609,9 @@ setModified(true); } -void KdenliveDoc::slotAddTextClipFile(const QString path, const QString group, const int groupId) { +void KdenliveDoc::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) { kDebug() << "///////// DOCUM, ADD TXT CLP: " << path; - m_clipManager->slotAddTextClipFile(path, group, groupId); + m_clipManager->slotAddTextClipFile(path, xml, group, groupId); setModified(true); } @@ -663,18 +665,23 @@ } QPixmap pix = dia_ui->renderedPixmap(); pix.save(path + ".png"); - dia_ui->saveTitle(path + ".kdenlivetitle"); - slotAddTextClipFile(path, QString(), -1); + //dia_ui->saveTitle(path + ".kdenlivetitle"); + slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), -1); } delete dia_ui; } void KdenliveDoc::editTextClip(QString path, int id) { - TitleWidget *dia_ui = new TitleWidget(KUrl(path + ".kdenlivetitle"), path, m_render, kapp->activeWindow()); + DocClipBase *clip = m_clipManager->getClipById(id); + if (!clip) return; + TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_render, kapp->activeWindow()); + QDomDocument doc; + doc.setContent(clip->getProperty("xmldata")); + dia_ui->setXml(doc); if (dia_ui->exec() == QDialog::Accepted) { QPixmap pix = dia_ui->renderedPixmap(); pix.save(path + ".png"); - dia_ui->saveTitle(path + ".kdenlivetitle"); + //dia_ui->saveTitle(path + ".kdenlivetitle"); //slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1); emit refreshClipThumbnail(id); } Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/kdenlivedoc.h 2008-07-17 00:41:52 UTC (rev 2321) @@ -67,7 +67,7 @@ void addFolder(const QString foldername, int clipId, bool edit); void deleteFolder(const QString foldername, int clipId); void slotAddClipFile(const KUrl url, const QString group, const int groupId = -1); - void slotAddTextClipFile(const QString path, const QString group, const int groupId = -1); + void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId = -1); void editTextClip(QString path, int id); void slotAddFolder(const QString folderName); void slotDeleteFolder(const QString folderName, const int id); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/mainwindow.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -1010,6 +1010,7 @@ disconnect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *))); m_clipMonitor->stop(); } + KdenliveSettings::setProject_fps(doc->fps()); m_monitorManager->resetProfiles(doc->profilePath()); m_projectList->setDocument(doc); connect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *))); Modified: branches/KDE4/src/projectitem.cpp =================================================================== --- branches/KDE4/src/projectitem.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/projectitem.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -51,7 +51,8 @@ slotSetToolTip(); } - if (m_clipType == COLOR || m_clipType == IMAGE) element.setAttribute("duration", MAXCLIPDURATION); + if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == SLIDESHOW || m_clipType == TEXT) + element.setAttribute("duration", MAXCLIPDURATION); else if (element.attribute("duration").isEmpty() && !element.attribute("out").isEmpty()) { element.setAttribute("duration", element.attribute("out").toInt() - element.attribute("in").toInt()); } @@ -213,12 +214,13 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata) { if (attributes.contains("duration")) { - if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV) m_clip->setProperty("duration", attributes["duration"]); + //if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV) + //m_clip->setProperty("duration", attributes["duration"]); GenTime duration = GenTime(attributes["duration"].toInt(), KdenliveSettings::project_fps()); setData(1, DurationRole, Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps())); m_clip->setDuration(duration); - kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps()); - } else { + //kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps()); + } else { // No duration known, use an arbitrary one until it is. } Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/projectlist.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -311,11 +311,7 @@ if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; KUrl::List list; if (givenUrl.isEmpty()) { - KFileDialog d(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr", this); - d.setFilter(d.currentFilter() + "\n*.m2t *.mts|HDV video\n*.dv|DV video"); - if (d.exec() == QDialog::Accepted) - list = d.selectedUrls(); - /*list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video");*/ + list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video"); } else list.append(givenUrl); if (list.isEmpty()) return; KUrl::List::Iterator it; @@ -394,6 +390,7 @@ } delete dia; } + void ProjectList::slotAddTitleClip() { QString group = QString(); int groupId = -1; Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/renderer.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -388,7 +388,7 @@ Mlt::Producer *producer = getProducerById(QString::number(clipId)); if (producer == NULL) { - if (url.isEmpty()) { + if (true /*url.isEmpty()*/) { QDomDocument doc; QDomElement westley = doc.createElement("westley"); QDomElement play = doc.createElement("playlist"); Modified: branches/KDE4/src/titledocument.cpp =================================================================== --- branches/KDE4/src/titledocument.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/titledocument.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -16,7 +16,6 @@ ***************************************************************************/ #include "titledocument.h" #include <QGraphicsScene> -#include <QDomDocument> #include <QDomElement> #include <QGraphicsItem> #include <QGraphicsRectItem> @@ -35,12 +34,9 @@ scene = _scene; } -bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { +QDomDocument TitleDocument::xml(QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { QDomDocument doc; - if (!scene) - return false; - QDomElement main = doc.createElement("kdenlivetitle"); doc.appendChild(main); @@ -128,6 +124,15 @@ backgr.setAttribute("color", colorToString(color)); main.appendChild(backgr); + return doc; +} + + +bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { + if (!scene) + return false; + + QDomDocument doc = xml(startv, endv); KTemporaryFile tmpfile; if (!tmpfile.open()) kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName(); QFile xmlf(tmpfile.fileName()); @@ -135,13 +140,12 @@ xmlf.write(doc.toString().toAscii()); xmlf.close(); kDebug() << KIO::NetAccess::upload(tmpfile.fileName(), url, 0); - + return true; } -int TitleDocument::loadDocument(const KUrl& url , QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { +int TitleDocument::loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { QString tmpfile; QDomDocument doc; - int maxZValue = 0; double aspect_ratio = 4.0 / 3.0; if (!scene) return -1; @@ -154,72 +158,78 @@ } else return -1; KIO::NetAccess::removeTempFile(tmpfile); - QDomNodeList titles = doc.elementsByTagName("kdenlivetitle"); - if (titles.size()) { + return loadFromXml(doc, startv, endv); + } +} - QDomNodeList items = titles.item(0).childNodes(); - for (int i = 0;i < items.count();i++) { - QGraphicsItem *gitem = NULL; - kDebug() << items.item(i).attributes().namedItem("type").nodeValue(); - int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); - if (zValue > -1000) - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") { - QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue()); - font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt()); - font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt()); - font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt()); - font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt()); - QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue())); - QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font); - txt->setDefaultTextColor(col); - txt->setTextInteractionFlags(Qt::NoTextInteraction); - gitem = txt; +int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { + QDomNodeList titles = doc.elementsByTagName("kdenlivetitle"); + int maxZValue = 0; + if (titles.size()) { + + QDomNodeList items = titles.item(0).childNodes(); + for (int i = 0;i < items.count();i++) { + QGraphicsItem *gitem = NULL; + kDebug() << items.item(i).attributes().namedItem("type").nodeValue(); + int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); + if (zValue > -1000) + if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") { + QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue()); + font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt()); + font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt()); + font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt()); + font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt()); + QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue())); + QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font); + txt->setDefaultTextColor(col); + txt->setTextInteractionFlags(Qt::NoTextInteraction); + gitem = txt; + } else + if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") { + QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue(); + QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue(); + QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue(); + double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble(); + QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str))); + gitem = rec; } else - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") { - QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue(); - QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue(); - QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue(); - double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble(); - QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str))); + if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") { + QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); + QPixmap pix(url); + QGraphicsPixmapItem *rec = scene->addPixmap(pix); + rec->setData(Qt::UserRole, url); gitem = rec; } else - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") { + if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") { QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); - QPixmap pix(url); - QGraphicsPixmapItem *rec = scene->addPixmap(pix); + QGraphicsSvgItem *rec = new QGraphicsSvgItem(url); + scene->addItem(rec); rec->setData(Qt::UserRole, url); gitem = rec; - } else - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") { - QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); - QGraphicsSvgItem *rec = new QGraphicsSvgItem(url); - scene->addItem(rec); - rec->setData(Qt::UserRole, url); - gitem = rec; - } - //pos and transform - if (gitem) { - QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(), - items.item(i).namedItem("position").attributes().namedItem("y").nodeValue().toDouble()); - gitem->setPos(p); - gitem->setTransform(stringToTransform(items.item(i).namedItem("position").firstChild().firstChild().nodeValue())); - int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); - if (zValue > maxZValue) maxZValue = zValue; - gitem->setZValue(zValue); - gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); + } + //pos and transform + if (gitem) { + QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(), + items.item(i).namedItem("position").attributes().namedItem("y").nodeValue().toDouble()); + gitem->setPos(p); + gitem->setTransform(stringToTransform(items.item(i).namedItem("position").firstChild().firstChild().nodeValue())); + int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); + if (zValue > maxZValue) maxZValue = zValue; + gitem->setZValue(zValue); + gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); + } + if (items.item(i).nodeName() == "background") { + kDebug() << items.item(i).attributes().namedItem("color").nodeValue(); + QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue())); + //color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt()); + QList<QGraphicsItem *> items = scene->items(); + for (int i = 0; i < items.size(); i++) { + if (items.at(i)->zValue() == -1100) { + ((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color)); + break; + } } - if (items.item(i).nodeName() == "background") { - kDebug() << items.item(i).attributes().namedItem("color").nodeValue(); - QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue())); - //color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt()); - QList<QGraphicsItem *> items = scene->items(); - for (int i = 0; i < items.size(); i++) { - if (items.at(i)->zValue() == -1100) { - ((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color)); - break; - } - } - } /*else if (items.item(i).nodeName() == "startviewport" && startv) { + } /*else if (items.item(i).nodeName() == "startviewport" && startv) { QPointF p(items.item(i).attributes().namedItem("x").nodeValue().toDouble(), items.item(i).attributes().namedItem("y").nodeValue().toDouble()); double width = items.item(i).attributes().namedItem("size").nodeValue().toDouble(); QRectF rect(-width, -width / aspect_ratio, width*2.0, width / aspect_ratio*2.0); @@ -234,7 +244,6 @@ endv->setPolygon(rect); endv->setPos(p); }*/ - } } } return maxZValue; Modified: branches/KDE4/src/titledocument.h =================================================================== --- branches/KDE4/src/titledocument.h 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/titledocument.h 2008-07-17 00:41:52 UTC (rev 2321) @@ -16,6 +16,9 @@ ***************************************************************************/ #ifndef TITLEDOCUMENT_H #define TITLEDOCUMENT_H + +#include <QDomDocument> + #include <KUrl> class QGraphicsScene; @@ -28,6 +31,9 @@ void setScene(QGraphicsScene* scene); bool saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv); int loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv); + QDomDocument xml(QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv); + int loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv); + private: QString colorToString(const QColor&); QString rectFToString(const QRectF&); Modified: branches/KDE4/src/titlewidget.cpp =================================================================== --- branches/KDE4/src/titlewidget.cpp 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/titlewidget.cpp 2008-07-17 00:41:52 UTC (rev 2321) @@ -199,6 +199,7 @@ m_scene->setTool(TITLE_RECTANGLE); m_buttonText->setChecked(false); m_buttonCursor->setChecked(false); + m_buttonRect->setChecked(true); } void TitleWidget::slotSelectTool() { @@ -611,6 +612,15 @@ if (!url.isEmpty()) m_titledocument.saveDocument(url, startViewport, endViewport); } +QDomDocument TitleWidget::xml() { + return m_titledocument.xml(startViewport, endViewport); +} + +void TitleWidget::setXml(QDomDocument doc) { + m_titledocument.loadFromXml(doc, startViewport, endViewport); + slotSelectTool(); +} + QPixmap TitleWidget::renderedPixmap() { QPixmap pix(m_frameWidth, m_frameHeight); pix.fill(Qt::transparent); Modified: branches/KDE4/src/titlewidget.h =================================================================== --- branches/KDE4/src/titlewidget.h 2008-07-16 22:55:33 UTC (rev 2320) +++ branches/KDE4/src/titlewidget.h 2008-07-17 00:41:52 UTC (rev 2321) @@ -45,6 +45,8 @@ Q_OBJECT public: TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent = 0); + QDomDocument xml(); + void setXml(QDomDocument doc); protected: virtual void resizeEvent(QResizeEvent * event); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-19 10:01:13
|
Revision: 2322 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2322&view=rev Author: j-b-m Date: 2008-07-19 10:01:20 +0000 (Sat, 19 Jul 2008) Log Message: ----------- More efficient usage of MLT producers Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/docclipbase.cpp branches/KDE4/src/docclipbase.h branches/KDE4/src/kthumb.cpp branches/KDE4/src/kthumb.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/monitor.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/customtrackview.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -936,7 +936,7 @@ info = m_dropItem->info(); info.track = m_tracksList.count() - m_dropItem->track(); // kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksList.count()<<", DROP: "<<m_dropItem->track(); - m_document->renderer()->mltInsertClip(info, m_dropItem->xml()); + m_document->renderer()->mltInsertClip(info, m_dropItem->xml(), m_dropItem->baseClip()->producer()); m_document->setModified(true); } else QGraphicsView::dropEvent(event); m_dropItem = NULL; @@ -1130,7 +1130,7 @@ new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), item->info(), false, false, moveClips); ItemInfo info = item->info(); info.track = m_tracksList.count() - item->track(); - m_document->renderer()->mltInsertClip(info, clip->xml()); + m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer()); } else { Transition *tr = static_cast <Transition*>(item); ItemInfo transitionInfo = tr->info(); @@ -1301,7 +1301,7 @@ baseclip->addReference(); m_document->updateClip(baseclip->getId()); info.track = m_tracksList.count() - info.track; - m_document->renderer()->mltInsertClip(info, xml); + m_document->renderer()->mltInsertClip(info, xml, baseclip->producer()); m_document->renderer()->doRefresh(); } @@ -1315,7 +1315,7 @@ clip->refreshClip(); ItemInfo info = clip->info(); info.track = m_tracksList.count() - clip->track(); - m_document->renderer()->mltUpdateClip(info, clip->xml()); + m_document->renderer()->mltUpdateClip(info, clip->xml(), clip->baseClip()->producer()); } } } Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/docclipbase.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -23,7 +23,7 @@ #include "clipmanager.h" DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, uint id): - m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL) { + m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_clipProducer(NULL) { int type = xml.attribute("type").toInt(); m_clipType = (CLIPTYPE) type; m_name = xml.attribute("name"); @@ -51,18 +51,7 @@ //kDebug() << "type is video" << (m_clipType == AV) << " " << m_clipType; } - - -DocClipBase::DocClipBase(const DocClipBase& clip) { - m_id = clip.getId(); - m_clipType = clip.clipType(); - m_name = clip.name(); - m_duration = clip.duration(); - m_audioThumbCreated = clip.audioThumbCreated(); - m_properties = clip.properties(); -} - -DocClipBase & DocClipBase::operator=(const DocClipBase & clip) { +/*DocClipBase & DocClipBase::operator=(const DocClipBase & clip) { DocClipBase::operator=(clip); m_id = clip.getId(); m_clipType = clip.clipType(); @@ -71,10 +60,11 @@ m_audioThumbCreated = clip.audioThumbCreated(); m_properties = clip.properties(); return *this; -} +}*/ DocClipBase::~DocClipBase() { if (m_thumbProd) delete m_thumbProd; + if (m_clipProducer) delete m_clipProducer; } void DocClipBase::slotCreateAudioTimer() { @@ -366,6 +356,15 @@ return QString::null; } +void DocClipBase::setProducer(Mlt::Producer *producer) { + m_clipProducer = producer; + if (m_thumbProd) m_thumbProd->setProducer(producer); +} + +Mlt::Producer *DocClipBase::producer() { + return m_clipProducer; +} + void DocClipBase::setProperties(QMap <QString, QString> properties) { // changing clip type is not allowed properties.remove("type"); Modified: branches/KDE4/src/docclipbase.h =================================================================== --- branches/KDE4/src/docclipbase.h 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/docclipbase.h 2008-07-19 10:01:20 UTC (rev 2322) @@ -42,9 +42,11 @@ class KThumb; class ClipManager; +namespace Mlt { +class Producer; +}; - class DocClipBase: public QObject { Q_OBJECT public: /** this enum determines the types of "feed" available within this clip. types must be non-exclusive @@ -53,8 +55,7 @@ * and video. */ DocClipBase(ClipManager *clipManager, QDomElement xml, uint id); - DocClipBase(const DocClipBase& clip); - DocClipBase & operator=(const DocClipBase & clip); +// DocClipBase & operator=(const DocClipBase & clip); virtual ~ DocClipBase(); /** sets the name of this clip. */ @@ -105,6 +106,9 @@ return false; } + void setProducer(Mlt::Producer *producer); + Mlt::Producer *producer(); + /*virtual DocClipAVFile *toDocClipAVFile() { return 0; } @@ -190,7 +194,7 @@ /** The number of times this clip is used in the project - the number of references to this clip * that exist. */ uint m_refcount; - + Mlt::Producer *m_clipProducer; CLIPTYPE m_clipType; /** A list of snap markers; these markers are added to a clips snap-to points, and are displayed as necessary. */ Modified: branches/KDE4/src/kthumb.cpp =================================================================== --- branches/KDE4/src/kthumb.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/kthumb.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -132,7 +132,7 @@ #define _G(y,u,v) (0x2568*(y) - 0x0c92*(v) - 0x1a1e*(u)) /0x2000 #define _B(y,u,v) (0x2568*(y) + 0x40cf*(v)) /0x2000 -KThumb::KThumb(ClipManager *clipManager, KUrl url, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url) { +KThumb::KThumb(ClipManager *clipManager, KUrl url, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_producer(NULL) { m_profile = new Mlt::Profile((char*) KdenliveSettings::current_profile().data()); QCryptographicHash context(QCryptographicHash::Sha1); @@ -146,6 +146,10 @@ if (thumbProducer.isRunning()) thumbProducer.exit(); } +void KThumb::setProducer(Mlt::Producer *producer) { + m_producer = producer; +} + void KThumb::updateClipUrl(KUrl url) { m_url = url; } @@ -158,23 +162,24 @@ void KThumb::extractImage(int frame, int frame2) { if (m_url.isEmpty()) return; - char *tmp = Render::decodedString("<westley><playlist><producer resource=\"" + m_url.path() + "\" /></playlist></westley>"); + if (m_producer == NULL) return; + /*char *tmp = Render::decodedString("<westley><playlist><producer resource=\"" + m_url.path() + "\" /></playlist></westley>"); Mlt::Producer producer(*m_profile, "westley-xml", tmp); - delete[] tmp; + delete[] tmp;*/ int twidth = (int)(KdenliveSettings::trackheight() * m_profile->dar()); - if (producer.is_blank()) { + if (m_producer->is_blank()) { QPixmap pix(twidth, KdenliveSettings::trackheight()); pix.fill(Qt::black); emit thumbReady(frame, pix); return; } if (frame != -1) { - QPixmap pix = getFrame(producer, frame, twidth, KdenliveSettings::trackheight()); + QPixmap pix = getFrame(*m_producer, frame, twidth, KdenliveSettings::trackheight()); emit thumbReady(frame, pix); } if (frame2 != -1) { - QPixmap pix = getFrame(producer, frame2, twidth , KdenliveSettings::trackheight()); + QPixmap pix = getFrame(*m_producer, frame2, twidth , KdenliveSettings::trackheight()); emit thumbReady(frame2, pix); } } Modified: branches/KDE4/src/kthumb.h =================================================================== --- branches/KDE4/src/kthumb.h 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/kthumb.h 2008-07-19 10:01:20 UTC (rev 2322) @@ -74,6 +74,7 @@ KThumb(ClipManager *clipManager, KUrl url, QObject * parent = 0, const char *name = 0); ~KThumb(); + void setProducer(Mlt::Producer *producer); public slots: void extractImage(int frame, int frame2); @@ -96,6 +97,7 @@ KUrl m_url; QString m_thumbFile; Mlt::Profile *m_profile; + Mlt::Producer *m_producer; ClipManager *m_clipManager; signals: Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/mainwindow.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -83,6 +83,10 @@ #define ID_TIMELINE_POS 6 #define ID_TIMELINE_FORMAT 7 +namespace Mlt { +class Producer; +}; + EffectsList MainWindow::videoEffects; EffectsList MainWindow::audioEffects; EffectsList MainWindow::customEffects; @@ -381,7 +385,7 @@ connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *))); connect(m_projectList, SIGNAL(getFileProperties(const QDomElement &, int)), m_clipMonitor->render, SLOT(getFileProperties(const QDomElement &, int))); connect(m_clipMonitor->render, SIGNAL(replyGetImage(int, int, const QPixmap &, int, int)), m_projectList, SLOT(slotReplyGetImage(int, int, const QPixmap &, int, int))); - connect(m_clipMonitor->render, SIGNAL(replyGetFileProperties(int, const QMap < QString, QString > &, const QMap < QString, QString > &)), m_projectList, SLOT(slotReplyGetFileProperties(int, const QMap < QString, QString > &, const QMap < QString, QString > &))); + connect(m_clipMonitor->render, SIGNAL(replyGetFileProperties(int, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &)), m_projectList, SLOT(slotReplyGetFileProperties(int, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &))); connect(m_clipMonitor, SIGNAL(refreshClipThumbnail(int)), m_projectList, SLOT(slotRefreshClipThumbnail(int))); } Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/monitor.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -301,11 +301,7 @@ if (!clip) return; if (clip != m_currentClip) { m_currentClip = clip; - QDomDocument doc; - QDomElement westley = doc.createElement("westley"); - doc.appendChild(westley); - westley.appendChild(doc.importNode(m_currentClip->toXML(), true)); - render->setSceneList(doc, 0); + render->setProducer(clip->producer(), 0); m_ruler->slotNewValue(0); m_timePos->setText("00:00:00:00"); m_position = 0; Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/projectlist.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -453,13 +453,14 @@ } } -void ProjectList::slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) { +void ProjectList::slotReplyGetFileProperties(int clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) { ProjectItem *item = getItemById(clipId); if (item) { item->setProperties(properties, metadata); + item->referencedClip()->setProducer(producer); listView->setCurrentItem(item); emit receivedClipDuration(clipId, item->clipMaxDuration()); - } + } else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS..."; } void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) { Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/projectlist.h 2008-07-19 10:01:20 UTC (rev 2322) @@ -34,6 +34,10 @@ #include "definitions.h" #include "timecode.h" +namespace Mlt { +class Producer; +}; + class ProjectItem; class ProjectListView; class Render; @@ -108,7 +112,7 @@ public slots: void setDocument(KdenliveDoc *doc); void slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h); - void slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata); + void slotReplyGetFileProperties(int clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata); void slotAddClip(DocClipBase *clip); void slotDeleteClip(int clipId); void slotUpdateClip(int id); Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/renderer.cpp 2008-07-19 10:01:20 UTC (rev 2322) @@ -61,7 +61,7 @@ } } -Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(-1), m_framePosition(0), m_generateScenelist(false), m_isBlocked(true) { +Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(-1), m_framePosition(0), m_generateScenelist(false), m_isBlocked(true), m_blackClip(NULL) { kDebug() << "////////// USING PROFILE: " << (char *)KdenliveSettings::current_profile().toUtf8().data(); m_mltProfile = new Mlt::Profile((char*) KdenliveSettings::current_profile().data()); refreshTimer = new QTimer(this); @@ -89,6 +89,8 @@ m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "westley-xml", "<westley><playlist><producer mlt_service=\"colour\" colour=\"blue\" in=\"0\" out=\"25\" /></playlist></westley>"); m_mltProducer = producer; + if (m_blackClip) delete m_blackClip; + m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black"); m_mltConsumer->connect(*m_mltProducer); m_mltProducer->set_speed(0.0); @@ -121,7 +123,7 @@ delete m_mltConsumer; if (m_mltProducer) delete m_mltProducer; - while (! m_producersList.isEmpty()) delete m_producersList.takeFirst(); + if (m_blackClip) delete m_blackClip; //delete m_osdInfo; } @@ -162,6 +164,8 @@ Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "westley-xml", tmp); delete[] tmp; m_mltProducer = producer; + if (m_blackClip) delete m_blackClip; + m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black"); m_mltProducer->optimise(); m_mltProducer->set_speed(0); connectPlaylist(); @@ -384,36 +388,34 @@ QMap < QString, QString > metadataPropertyMap; KUrl url = KUrl(xml.attribute("resource", QString::null)); - bool newProducer = false; - - Mlt::Producer *producer = getProducerById(QString::number(clipId)); - if (producer == NULL) { - if (true /*url.isEmpty()*/) { - QDomDocument doc; - QDomElement westley = doc.createElement("westley"); - QDomElement play = doc.createElement("playlist"); - doc.appendChild(westley); - westley.appendChild(play); - play.appendChild(doc.importNode(xml, true)); - char *tmp = decodedString(doc.toString()); - producer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp); - delete[] tmp; - } else { - char *tmp = decodedString(url.path()); - producer = new Mlt::Producer(*m_mltProfile, tmp); - delete[] tmp; - } - - if (producer->is_blank()) { - kDebug() << " / / / / / / / /ERRROR / / / / // CANNOT LOAD PRODUCER: "; - return; - } - m_producersList.append(producer); - newProducer = true; + Mlt::Producer *producer; + if (xml.attribute("type").toInt() == COLOR) { + char *tmp = decodedString("colour:" + xml.attribute("colour")); + producer = new Mlt::Producer(*m_mltProfile, "fezzik", tmp); + producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt()); + delete[] tmp; + } else if (url.isEmpty()) { + QDomDocument doc; + QDomElement westley = doc.createElement("westley"); + QDomElement play = doc.createElement("playlist"); + doc.appendChild(westley); + westley.appendChild(play); + play.appendChild(doc.importNode(xml, true)); + kDebug() << "/ / / / /CLIP XML: " << doc.toString(); + char *tmp = decodedString(doc.toString()); + producer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp); + delete[] tmp; + } else { + char *tmp = decodedString(url.path()); + producer = new Mlt::Producer(*m_mltProfile, tmp); + if (!xml.attribute("out").isEmpty()) producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt()); + delete[] tmp; } - - - + if (producer->is_blank()) { + kDebug() << " / / / / / / / /ERRROR / / / / // CANNOT LOAD PRODUCER: "; + return; + } + producer->set("id", clipId); int frameNumber = xml.attribute("thumbnail", "0").toInt(); if (frameNumber != 0) producer->seek(frameNumber); mlt_properties properties = MLT_PRODUCER_PROPERTIES(producer->get_producer()); @@ -513,10 +515,10 @@ metadataPropertyMap[ name.section(".", 0, -2)] = value; } - emit replyGetFileProperties(clipId, filePropertyMap, metadataPropertyMap); + emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap); kDebug() << "REquested fuile info for: " << url.path(); if (frame) delete frame; - if (!newProducer && producer) delete producer; + //if (producer) delete producer; } /** Create the producer from the Westley QDomDocument */ @@ -555,7 +557,41 @@ setSceneList(doc, 0); } #endif + + + /** Create the producer from the Westley QDomDocument */ +void Render::setProducer(Mlt::Producer *producer, int position) { + if (m_winid == -1) return; + m_generateScenelist = true; + + if (m_mltConsumer) { + m_mltConsumer->stop(); + } else return; + + if (m_mltProducer) { + m_mltProducer->set_speed(0); + delete m_mltProducer; + m_mltProducer = NULL; + emit stopped(); + } + if (producer) m_mltProducer = new Mlt::Producer(producer->get_producer()); + else m_mltProducer = new Mlt::Producer(); + if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: "; + m_mltProducer->optimise(); + + m_fps = m_mltProducer->get_fps(); + connectPlaylist(); + if (position != 0) { + m_mltProducer->seek(position); + emit rendererPosition(position); + } + m_generateScenelist = false; +} + + + +/** Create the producer from the Westley QDomDocument */ void Render::setSceneList(QDomDocument list, int position) { setSceneList(list.toString(), position); } @@ -592,6 +628,8 @@ char *tmp = decodedString(playlist); m_mltProducer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp); delete[] tmp; + if (m_blackClip) delete m_blackClip; + m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black"); if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << tmp; m_mltProducer->optimise(); @@ -691,7 +729,6 @@ m_mltConsumer->connect(*m_mltProducer); m_mltProducer->set_speed(0); m_mltConsumer->start(); - parsePlaylistForClips(); emit durationChanged(m_mltProducer->get_playtime()); //refresh(); /* @@ -1044,21 +1081,21 @@ while (dur > 14000) { info.startPos = GenTime(i * 14000, m_fps); info.endPos = info.startPos + GenTime(13999, m_fps); - mltInsertClip(info, black); + mltInsertClip(info, black, m_blackClip); dur = dur - 14000; i++; } if (dur > 0) { info.startPos = GenTime(i * 14000, m_fps); info.endPos = info.startPos + GenTime(dur, m_fps); - mltInsertClip(info, black); + mltInsertClip(info, black, m_blackClip); } m_mltProducer->set("out", duration); emit durationChanged((int)duration); } } -void Render::mltInsertClip(ItemInfo info, QDomElement element) { +void Render::mltInsertClip(ItemInfo info, QDomElement element, Mlt::Producer *prod) { if (!m_mltProducer) { kDebug() << "PLAYLIST NOT INITIALISED //////"; return; @@ -1075,8 +1112,7 @@ Mlt::Producer trackProducer(tractor.track(info.track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - Mlt::Producer *prod = getProducerById(element.attribute("id")); - if (prod == NULL) { + /*if (prod == NULL) { // clip was never used yet QDomDocument doc; doc.appendChild(doc.importNode(element, true)); @@ -1085,8 +1121,7 @@ char *tmp = decodedString(resource); prod = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp); delete[] tmp; - m_producersList.append(prod); - } + }*/ Mlt::Producer *clip = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps)); trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *clip, 1); @@ -1098,42 +1133,7 @@ //tractor.refresh(); } -Mlt::Producer *Render::getProducerById(const QString &id) { - for (int i = 0; i < m_producersList.count(); i++) { - if (m_producersList.at(i)->get("id") == id) return m_producersList.at(i); - } - return NULL; -} -void Render::parsePlaylistForClips() { - // clear current producers list - while (! m_producersList.isEmpty()) delete m_producersList.takeFirst(); - - //parse entire playlists to find all the different clips - Mlt::Producer parentProd(m_mltProducer->parent()); - if (parentProd.get_producer() == NULL) { - kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////"; - return; - } - Mlt::Service service(parentProd.get_service()); - if (service.type() != tractor_type) return; - Mlt::Tractor tractor(service); - mlt_service_lock(service.get_service()); - for (int i = 0; i < tractor.count(); i++) { - Mlt::Producer trackProducer(tractor.track(i)); - Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - for (int j = 0; j < trackPlaylist.count(); j++) { - if (!trackPlaylist.is_blank(j)) { - Mlt::Producer *clip = trackPlaylist.get_clip(j); - if (clip) { - if (getProducerById(clip->get("id")) == NULL) - m_producersList.append(new Mlt::Producer(clip->get_parent())); - } - } - } - } -} - void Render::mltCutClip(int track, GenTime position) { m_isBlocked = true; @@ -1148,10 +1148,10 @@ m_isBlocked = false; } -void Render::mltUpdateClip(ItemInfo info, QDomElement element) { +void Render::mltUpdateClip(ItemInfo info, QDomElement element, Mlt::Producer *prod) { // TODO: optimize mltRemoveClip(info.track, info.startPos); - mltInsertClip(info, element); + mltInsertClip(info, element, prod); } Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-07-17 00:41:52 UTC (rev 2321) +++ branches/KDE4/src/renderer.h 2008-07-19 10:01:20 UTC (rev 2322) @@ -91,6 +91,7 @@ be list. */ void setSceneList(QDomDocument list, int position = 0); void setSceneList(QString playlist, int position = 0); + void setProducer(Mlt::Producer *producer, int position); QString sceneList(); void saveSceneList(QString path, QDomElement kdenliveData = QDomElement()); @@ -147,8 +148,8 @@ const double dar() const; /** Playlist manipulation */ - void mltInsertClip(ItemInfo info, QDomElement element); - void mltUpdateClip(ItemInfo info, QDomElement element); + void mltInsertClip(ItemInfo info, QDomElement element, Mlt::Producer *prod); + void mltUpdateClip(ItemInfo info, QDomElement element, Mlt::Producer *prod); void mltCutClip(int track, GenTime position); void mltResizeClipEnd(int track, GenTime pos, GenTime in, GenTime out); void mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out); @@ -180,9 +181,7 @@ uint m_monitorId; bool m_generateScenelist; - QList <Mlt::Producer *> m_producersList; - Mlt::Producer *getProducerById(const QString &id); - void parsePlaylistForClips(); + Mlt::Producer *m_blackClip; /** Holds the path to on screen display profile */ QString m_osdProfile; @@ -213,7 +212,7 @@ signals: // Signals /** emitted when the renderer recieves a reply to a getFileProperties request. */ - void replyGetFileProperties(int clipId, const QMap < QString, QString > &, const QMap < QString, QString > &); + void replyGetFileProperties(int clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &); /** emitted when the renderer recieves a reply to a getImage request. */ void replyGetImage(int , int, const QPixmap &, int, int); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-19 17:58:10
|
Revision: 2323 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2323&view=rev Author: j-b-m Date: 2008-07-19 17:57:51 +0000 (Sat, 19 Jul 2008) Log Message: ----------- Copy effects when cutting or pasting a clip Modified Paths: -------------- branches/KDE4/src/addtimelineclipcommand.cpp branches/KDE4/src/addtimelineclipcommand.h branches/KDE4/src/clipitem.cpp branches/KDE4/src/clipitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/effectslist.cpp branches/KDE4/src/renderer.cpp Modified: branches/KDE4/src/addtimelineclipcommand.cpp =================================================================== --- branches/KDE4/src/addtimelineclipcommand.cpp 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/addtimelineclipcommand.cpp 2008-07-19 17:57:51 UTC (rev 2323) @@ -22,7 +22,7 @@ #include "addtimelineclipcommand.h" #include "customtrackview.h" -AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, bool doIt, bool doRemove, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_xml(xml), m_clipId(clipId), m_clipInfo(info), m_doIt(doIt), m_remove(doRemove) { +AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_xml(xml), m_clipId(clipId), m_clipInfo(info), m_effects(effects), m_doIt(doIt), m_remove(doRemove) { if (!m_remove) setText(i18n("Add timeline clip")); else setText(i18n("Delete timeline clip")); } @@ -36,7 +36,7 @@ // virtual void AddTimelineClipCommand::redo() { if (m_doIt) { - if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipInfo); + if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipInfo, m_effects); else m_view->deleteClip(m_clipInfo); } m_doIt = true; Modified: branches/KDE4/src/addtimelineclipcommand.h =================================================================== --- branches/KDE4/src/addtimelineclipcommand.h 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/addtimelineclipcommand.h 2008-07-19 17:57:51 UTC (rev 2323) @@ -29,18 +29,20 @@ #include "gentime.h" #include "definitions.h" +#include "effectslist.h" class CustomTrackView; class AddTimelineClipCommand : public QUndoCommand { public: - AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, bool doIt, bool doRemove, QUndoCommand * parent = 0); + AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); private: CustomTrackView *m_view; ItemInfo m_clipInfo; + EffectsList m_effects; int m_clipId; QDomElement m_xml; bool m_doIt; Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/clipitem.cpp 2008-07-19 17:57:51 UTC (rev 2323) @@ -104,9 +104,14 @@ } void ClipItem::setEffectList(const EffectsList effectList) { - //m_effectList = effectList.clone(); + m_effectList = effectList; + m_effectNames = m_effectList.effectNames().join(" / "); } +const EffectsList ClipItem::effectList() { + return m_effectList; +} + int ClipItem::selectedEffectIndex() const { return m_selectedEffect; } Modified: branches/KDE4/src/clipitem.h =================================================================== --- branches/KDE4/src/clipitem.h 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/clipitem.h 2008-07-19 17:57:51 UTC (rev 2323) @@ -53,7 +53,7 @@ QString clipName() const; QDomElement xml() const; ClipItem *clone(double scale) const; - + const EffectsList effectList(); void setFadeOut(int pos, double scale); void setFadeIn(int pos, double scale); /** Give a string list of the clip's effect names */ Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/customtrackview.cpp 2008-07-19 17:57:51 UTC (rev 2323) @@ -817,6 +817,7 @@ newPos.track = info.track; item->resizeEnd(cutPos, m_scale); ClipItem *dup = new ClipItem(item->baseClip(), newPos, m_scale, m_document->fps()); + dup->setEffectList(item->effectList()); scene()->addItem(dup); m_document->renderer()->mltCutClip(m_tracksList.count() - info.track, cutTime); item->baseClip()->addReference(); @@ -928,7 +929,7 @@ void CustomTrackView::dropEvent(QDropEvent * event) { if (m_dropItem) { - AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->info(), false, false); + AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->info(), m_dropItem->effectList(), false, false); m_commandStack->push(command); m_dropItem->baseClip()->addReference(); m_document->updateClip(m_dropItem->baseClip()->getId()); @@ -1000,7 +1001,7 @@ if (itemList.at(i)->type() == AVWIDGET) { ClipItem *item = (ClipItem *)itemList.at(i); if (item->clipProducer() == clipId) { - AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), true, true); + AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true); m_commandStack->push(command); //delete item; } @@ -1113,7 +1114,7 @@ info.track = info.track - trackOffset; if (item->type() == AVWIDGET) { ClipItem *clip = static_cast <ClipItem*>(item); - new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, false, true, moveClips); + new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), false, true, moveClips); m_document->renderer()->mltRemoveClip(m_tracksList.count() - info.track, info.startPos); } else { Transition *tr = static_cast <Transition*>(item); @@ -1127,7 +1128,7 @@ AbstractClipItem *item = m_selectedClipList.at(i); if (item->type() == AVWIDGET) { ClipItem *clip = static_cast <ClipItem*>(item); - new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), item->info(), false, false, moveClips); + new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), item->info(), clip->effectList(), false, false, moveClips); ItemInfo info = item->info(); info.track = m_tracksList.count() - item->track(); m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer()); @@ -1263,7 +1264,7 @@ for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == AVWIDGET) { ClipItem *item = static_cast <ClipItem *>(itemList.at(i)); - new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), true, true, deleteSelected); + new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteSelected); } else if (itemList.at(i)->type() == TRANSITIONWIDGET) { Transition *item = static_cast <Transition *>(itemList.at(i)); ItemInfo info; @@ -1294,14 +1295,18 @@ } } -void CustomTrackView::addClip(QDomElement xml, int clipId, ItemInfo info) { +void CustomTrackView::addClip(QDomElement xml, int clipId, ItemInfo info, EffectsList effects) { DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId); ClipItem *item = new ClipItem(baseclip, info, m_scale, m_document->fps()); + item->setEffectList(effects); scene()->addItem(item); baseclip->addReference(); m_document->updateClip(baseclip->getId()); info.track = m_tracksList.count() - info.track; m_document->renderer()->mltInsertClip(info, xml, baseclip->producer()); + for (int i = 0; i < item->effectsCount(); i++) { + m_document->renderer()->mltAddEffect(info.track, info.startPos, item->getEffectArgs(item->effectAt(i)), false); + } m_document->renderer()->doRefresh(); } @@ -2029,7 +2034,7 @@ info.cropStart = clip->cropStart(); info.track = clip->track() + trackOffset; if (canBePastedTo(info, AVWIDGET)) { - new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, true, false, pasteClips); + new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), true, false, pasteClips); } else emit displayMessage(i18n("Cannot paste clip to selected place"), ErrorMessage); } else if (m_copiedItems.at(i) && m_copiedItems.at(i)->type() == TRANSITIONWIDGET) { Transition *tr = static_cast <Transition *>(m_copiedItems.at(i)); Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/customtrackview.h 2008-07-19 17:57:51 UTC (rev 2323) @@ -31,6 +31,7 @@ #include "kdenlivedoc.h" #include "docclipbase.h" #include "guide.h" +#include "effectslist.h" class ClipItem; class AbstractClipItem; @@ -54,7 +55,7 @@ /** move transition, startPos = (old start, old end), endPos = (new start, new end) */ void moveTransition(const ItemInfo start, const ItemInfo end); void resizeClip(const ItemInfo start, const ItemInfo end); - void addClip(QDomElement xml, int clipId, ItemInfo info); + void addClip(QDomElement xml, int clipId, ItemInfo info, EffectsList list = EffectsList()); void deleteClip(ItemInfo info); void slotAddClipMarker(); void slotEditClipMarker(); Modified: branches/KDE4/src/effectslist.cpp =================================================================== --- branches/KDE4/src/effectslist.cpp 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/effectslist.cpp 2008-07-19 17:57:51 UTC (rev 2323) @@ -45,6 +45,7 @@ return filter; } + QDomElement EffectsList::getEffectByName(const QString & name) const { QString effectName; for (int i = 0; i < this->size(); ++i) { Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-19 10:01:20 UTC (rev 2322) +++ branches/KDE4/src/renderer.cpp 2008-07-19 17:57:51 UTC (rev 2323) @@ -1145,7 +1145,19 @@ Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); trackPlaylist.split_at((int) position.frames(m_fps)); trackPlaylist.consolidate_blanks(0); - m_isBlocked = false; + // duplicate effects + Mlt::Producer *original = trackPlaylist.get_clip_at((int) position.frames(m_fps) - 1); + Mlt::Producer *clip = trackPlaylist.get_clip_at((int) position.frames(m_fps) + 1); + Mlt::Service clipService(original->get_service()); + Mlt::Service dupService(clip->get_service()); + int ct = 0; + Mlt::Filter *filter = clipService.filter(ct); + while (filter) { + Mlt::Filter *dup = new Mlt::Filter(filter->get_filter()); + dupService.attach(*dup); + ct++; + filter = clipService.filter(ct); + } } void Render::mltUpdateClip(ItemInfo info, QDomElement element, Mlt::Producer *prod) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-19 18:37:31
|
Revision: 2324 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2324&view=rev Author: j-b-m Date: 2008-07-19 18:33:59 +0000 (Sat, 19 Jul 2008) Log Message: ----------- paste effects from one clip to another Modified Paths: -------------- branches/KDE4/src/addeffectcommand.cpp branches/KDE4/src/addeffectcommand.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/kdenliveui.rc branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h Modified: branches/KDE4/src/addeffectcommand.cpp =================================================================== --- branches/KDE4/src/addeffectcommand.cpp 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/addeffectcommand.cpp 2008-07-19 18:33:59 UTC (rev 2324) @@ -22,8 +22,7 @@ #include "addeffectcommand.h" #include "customtrackview.h" -AddEffectCommand::AddEffectCommand(CustomTrackView *view, const int track, GenTime pos, QDomElement effect, bool doIt) - : m_view(view), m_track(track), m_pos(pos), m_effect(effect), m_doIt(doIt) { +AddEffectCommand::AddEffectCommand(CustomTrackView *view, const int track, GenTime pos, QDomElement effect, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_effect(effect), m_doIt(doIt) { QString effectName; QDomNode namenode = effect.elementsByTagName("name").item(0); if (!namenode.isNull()) effectName = i18n(namenode.toElement().text().toUtf8().data()); Modified: branches/KDE4/src/addeffectcommand.h =================================================================== --- branches/KDE4/src/addeffectcommand.h 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/addeffectcommand.h 2008-07-19 18:33:59 UTC (rev 2324) @@ -30,7 +30,7 @@ class AddEffectCommand : public QUndoCommand { public: - AddEffectCommand(CustomTrackView *view, const int track, GenTime pos, QDomElement effect, bool doIt); + AddEffectCommand(CustomTrackView *view, const int track, GenTime pos, QDomElement effect, bool doIt, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/customtrackview.cpp 2008-07-19 18:33:59 UTC (rev 2324) @@ -2050,6 +2050,30 @@ m_commandStack->push(pasteClips); } +void CustomTrackView::pasteClipEffects() { + if (m_copiedItems.count() != 1 || m_copiedItems.at(0)->type() != AVWIDGET) { + emit displayMessage(i18n("You must copy exactly one clip before pasting effects"), ErrorMessage); + return; + } + ClipItem *clip = static_cast < ClipItem *> (m_copiedItems.at(0)); + EffectsList effects = clip->effectList(); + + QUndoCommand *paste = new QUndoCommand(); + paste->setText("Paste effects"); + + QList<QGraphicsItem *> clips = scene()->selectedItems(); + for (int i = 0; i < clips.count(); ++i) { + if (clips.at(i)->type() == AVWIDGET) { + ClipItem *item = static_cast < ClipItem *> (clips.at(i)); + for (int i = 0; i < clip->effectsCount(); i++) { + new AddEffectCommand(this, m_tracksList.count() - item->track(), item->startPos(), clip->effectAt(i), true, paste); + } + } + } + m_commandStack->push(paste); +} + + /* void CustomTrackView::drawForeground ( QPainter * painter, const QRectF & rect ) { Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/customtrackview.h 2008-07-19 18:33:59 UTC (rev 2324) @@ -119,6 +119,7 @@ void editGuide(const GenTime oldPos, const GenTime pos, const QString &comment); void copyClip(); void pasteClip(); + void pasteClipEffects(); protected: virtual void drawBackground(QPainter * painter, const QRectF & rect); Modified: branches/KDE4/src/kdenliveui.rc =================================================================== --- branches/KDE4/src/kdenliveui.rc 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/kdenliveui.rc 2008-07-19 18:33:59 UTC (rev 2324) @@ -8,6 +8,7 @@ <MenuBar> <Menu name="edit" > + <Action name="paste_effects" /> <Action name="project_find" /> <Action name="project_find_next" /> </Menu> Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/mainwindow.cpp 2008-07-19 18:33:59 UTC (rev 2324) @@ -245,6 +245,7 @@ m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip")); m_timelineContextClipMenu->addAction(actionCollection()->action("cut_timeline_clip")); m_timelineContextClipMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy))); + m_timelineContextClipMenu->addAction(actionCollection()->action("paste_effects")); QMenu *markersMenu = (QMenu*)(factory()->container("marker_menu", this)); m_timelineContextClipMenu->addMenu(markersMenu); @@ -644,6 +645,10 @@ actionCollection()->addAction("delete_all_guides", delAllGuides); connect(delAllGuides, SIGNAL(triggered()), this, SLOT(slotDeleteAllGuides())); + QAction *pasteEffects = new KAction(KIcon("edit-paste"), i18n("Paste Effects"), this); + actionCollection()->addAction("paste_effects", pasteEffects); + connect(pasteEffects , SIGNAL(triggered()), this, SLOT(slotPasteEffects())); + KStandardAction::quit(this, SLOT(queryQuit()), actionCollection()); @@ -1326,6 +1331,11 @@ m_activeTimeline->projectView()->pasteClip(); } +void MainWindow::slotPasteEffects() { + if (!m_activeDocument || !m_activeTimeline) return; + m_activeTimeline->projectView()->pasteClipEffects(); +} + void MainWindow::slotFind() { if (!m_activeDocument || !m_activeTimeline) return; m_projectSearch->setEnabled(false); Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-07-19 17:57:51 UTC (rev 2323) +++ branches/KDE4/src/mainwindow.h 2008-07-19 18:33:59 UTC (rev 2324) @@ -228,6 +228,7 @@ void slotCopy(); void slotPaste(); + void slotPasteEffects(); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-19 23:34:54
|
Revision: 2327 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2327&view=rev Author: j-b-m Date: 2008-07-19 23:33:58 +0000 (Sat, 19 Jul 2008) Log Message: ----------- Effects can now be saved Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/effectslist.cpp branches/KDE4/src/effectslistview.cpp branches/KDE4/src/effectslistview.h branches/KDE4/src/effectslistwidget.cpp branches/KDE4/src/effectslistwidget.h branches/KDE4/src/effectstackview.cpp branches/KDE4/src/effectstackview.h branches/KDE4/src/initeffects.cpp branches/KDE4/src/initeffects.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/trackview.cpp Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/customtrackview.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -2055,7 +2055,7 @@ emit displayMessage(i18n("You must copy exactly one clip before pasting effects"), ErrorMessage); return; } - ClipItem *clip = static_cast < ClipItem *> (m_copiedItems.at(0)); + ClipItem *clip = static_cast < ClipItem *>(m_copiedItems.at(0)); EffectsList effects = clip->effectList(); QUndoCommand *paste = new QUndoCommand(); @@ -2063,12 +2063,12 @@ QList<QGraphicsItem *> clips = scene()->selectedItems(); for (int i = 0; i < clips.count(); ++i) { - if (clips.at(i)->type() == AVWIDGET) { - ClipItem *item = static_cast < ClipItem *> (clips.at(i)); - for (int i = 0; i < clip->effectsCount(); i++) { - new AddEffectCommand(this, m_tracksList.count() - item->track(), item->startPos(), clip->effectAt(i), true, paste); - } - } + if (clips.at(i)->type() == AVWIDGET) { + ClipItem *item = static_cast < ClipItem *>(clips.at(i)); + for (int i = 0; i < clip->effectsCount(); i++) { + new AddEffectCommand(this, m_tracksList.count() - item->track(), item->startPos(), clip->effectAt(i), true, paste); + } + } } m_commandStack->push(paste); } Modified: branches/KDE4/src/effectslist.cpp =================================================================== --- branches/KDE4/src/effectslist.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectslist.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -56,7 +56,8 @@ QDomNodeList params = effect.elementsByTagName("parameter"); for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); - e.setAttribute("value", e.attribute("default")); + if (!e.hasAttribute("value")) + e.setAttribute("value", e.attribute("default")); } return effect; } @@ -73,23 +74,25 @@ QDomNodeList params = effect.elementsByTagName("parameter"); for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); - e.setAttribute("value", e.attribute("default")); + if (!e.hasAttribute("value")) + e.setAttribute("value", e.attribute("default")); } return effect; } } - for (int i = 0; i < this->size(); ++i) { - QDomElement effect = this->at(i); - if (effect.attribute("tag") == tag) { - QDomNodeList params = effect.elementsByTagName("parameter"); - for (int i = 0; i < params.count(); i++) { - QDomElement e = params.item(i).toElement(); - e.setAttribute("value", e.attribute("default")); + if (!tag.isEmpty()) for (int i = 0; i < this->size(); ++i) { + QDomElement effect = this->at(i); + if (effect.attribute("tag") == tag) { + QDomNodeList params = effect.elementsByTagName("parameter"); + for (int i = 0; i < params.count(); i++) { + QDomElement e = params.item(i).toElement(); + if (!e.hasAttribute("value")) + e.setAttribute("value", e.attribute("default")); + } + return effect; } - return effect; } - } return QDomElement(); } Modified: branches/KDE4/src/effectslistview.cpp =================================================================== --- branches/KDE4/src/effectslistview.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectslistview.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -17,9 +17,13 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ +#include <QMenu> +#include <QMenu> +#include <QDir> #include <KDebug> #include <KLocale> +#include <KStandardDirs> #include "effectslistview.h" #include "effectslistwidget.h" @@ -27,14 +31,17 @@ EffectsListView::EffectsListView(QWidget *parent) : QWidget(parent) { - m_effectsList = new EffectsListWidget(); + ui.setupUi(this); - ui.setupUi(this); + QMenu *menu = new QMenu(this); + m_effectsList = new EffectsListWidget(menu); QVBoxLayout *lyr = new QVBoxLayout(ui.effectlistframe); lyr->addWidget(m_effectsList); + lyr->setContentsMargins(0, 0, 0, 0); ui.search_effect->setListWidget(m_effectsList); ui.buttonInfo->setIcon(KIcon("help-about")); ui.infopanel->hide(); + menu->addAction(KIcon("edit-delete"), i18n("Delete effect"), this, SLOT(slotRemoveEffect())); connect(ui.type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterList(int))); connect(ui.buttonInfo, SIGNAL(clicked()), this, SLOT(showInfoPanel())); @@ -87,4 +94,38 @@ return m_effectsList; } +void EffectsListView::reloadEffectList() { + m_effectsList->initList(); +} + +void EffectsListView::slotRemoveEffect() { + QListWidgetItem *item = m_effectsList->currentItem(); + QString effectId = item->text(); + QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true); + + QDir directory = QDir(path); + QStringList fileList = directory.entryList(QDir::Files); + QString itemName; + foreach(QString filename, fileList) { + itemName = KUrl(path + filename).path(); + if (itemName.endsWith(".xml")) { + QDomDocument doc; + QFile file(itemName); + doc.setContent(&file, false); + file.close(); + QDomNodeList effects = doc.elementsByTagName("effect"); + if (effects.count() != 1) { + kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET"; + } else { + QDomElement e = effects.item(0).toElement(); + if (e.attribute("id") == effectId) { + QFile::remove(itemName); + break; + } + } + } + } + emit reloadEffects(); +} + #include "effectslistview.moc" Modified: branches/KDE4/src/effectslistview.h =================================================================== --- branches/KDE4/src/effectslistview.h 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectslistview.h 2008-07-19 23:33:58 UTC (rev 2327) @@ -37,6 +37,7 @@ public: EffectsListView(QWidget *parent = 0); KListWidget *listView(); + void reloadEffectList(); //void slotAddEffect(GenTime pos, int track, QString name); private: @@ -48,11 +49,13 @@ void slotUpdateInfo(); void showInfoPanel(); void slotEffectSelected(); + void slotRemoveEffect(); public slots: signals: void addEffect(QDomElement); + void reloadEffects(); }; #endif Modified: branches/KDE4/src/effectslistwidget.cpp =================================================================== --- branches/KDE4/src/effectslistwidget.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectslistwidget.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -19,6 +19,7 @@ #include "QApplication" #include "QMouseEvent" +#include <QMenu> #include "KDebug" @@ -30,8 +31,8 @@ #define EFFECT_AUDIO 2 #define EFFECT_CUSTOM 3 -EffectsListWidget::EffectsListWidget(QWidget *parent) - : KListWidget(parent) { +EffectsListWidget::EffectsListWidget(QMenu *menu, QWidget *parent) + : KListWidget(parent), m_menu(menu) { //setSelectionMode(QAbstractItemView::ExtendedSelection); //setDragDropMode(QAbstractItemView::DragDrop); setDropIndicatorShown(true); @@ -157,6 +158,10 @@ //} } +//virtual +void EffectsListWidget::contextMenuEvent(QContextMenuEvent * event) { + QListWidgetItem *item = itemAt(event->pos()); + if (item && item->data(Qt::UserRole).toInt() == EFFECT_CUSTOM) m_menu->popup(event->globalPos()); +} - #include "effectslistwidget.moc" Modified: branches/KDE4/src/effectslistwidget.h =================================================================== --- branches/KDE4/src/effectslistwidget.h 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectslistwidget.h 2008-07-19 23:33:58 UTC (rev 2327) @@ -30,22 +30,23 @@ Q_OBJECT public: - EffectsListWidget(QWidget *parent = 0); + EffectsListWidget(QMenu *menu, QWidget *parent = 0); virtual ~EffectsListWidget(); QDomElement currentEffect(); QString currentInfo(); QDomElement itemEffect(QListWidgetItem *item); + void initList(); protected: virtual void mousePressEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void dragMoveEvent(QDragMoveEvent *event); + virtual void contextMenuEvent(QContextMenuEvent * event); private: bool m_dragStarted; QPoint m_DragStartPosition; - void initList(); - + QMenu *m_menu; }; #endif Modified: branches/KDE4/src/effectstackview.cpp =================================================================== --- branches/KDE4/src/effectstackview.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectstackview.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -15,16 +15,23 @@ * * ***************************************************************************/ +#include <QHeaderView> +#include <QMenu> +#include <QInputDialog> +#include <QTextStream> +#include <QFile> + #include <KDebug> #include <KLocale> +#include <KMessageBox> +#include <KStandardDirs> #include "effectstackview.h" #include "effectslist.h" #include "clipitem.h" #include "mainwindow.h" -#include <QHeaderView> -#include <QMenu> + EffectStackView::EffectStackView(QWidget *parent) : QWidget(parent) { ui.setupUi(this); @@ -41,6 +48,8 @@ ui.buttonDown->setToolTip(i18n("Move effect down")); ui.buttonDel->setIcon(KIcon("trash-empty")); ui.buttonDel->setToolTip(i18n("Delete effect")); + ui.buttonSave->setIcon(KIcon("document-save")); + ui.buttonSave->setToolTip(i18n("Save effect")); ui.buttonReset->setIcon(KIcon("view-refresh")); ui.buttonReset->setToolTip(i18n("Reset effect")); @@ -53,6 +62,7 @@ connect(ui.buttonUp, SIGNAL(clicked()), this, SLOT(slotItemUp())); connect(ui.buttonDown, SIGNAL(clicked()), this, SLOT(slotItemDown())); connect(ui.buttonDel, SIGNAL(clicked()), this, SLOT(slotItemDel())); + connect(ui.buttonSave, SIGNAL(clicked()), this, SLOT(slotSaveEffect())); connect(ui.buttonReset, SIGNAL(clicked()), this, SLOT(slotResetEffect())); connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), effectedit , SLOT(transferParamDesc(const QDomElement&, int , int))); connect(effectedit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&))); @@ -64,6 +74,40 @@ setEnabled(false); } +void EffectStackView::slotSaveEffect() { + QString name = QInputDialog::getText(this, i18n("Save Effect"), i18n("Name for saved effect: ")); + if (name.isEmpty()) return; + QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true); + path = path + name + ".xml"; + if (QFile::exists(path)) if (KMessageBox::questionYesNo(this, i18n("File already exists.\nDo you want to overwrite it ?")) == KMessageBox::No) return; + + int i = ui.effectlist->currentRow(); + QDomDocument doc; + QDomElement effect = clipref->effectAt(i).cloneNode().toElement(); + doc.appendChild(doc.importNode(effect, true)); + effect = doc.firstChild().toElement(); + effect.removeAttribute("kdenlive_ix"); + effect.setAttribute("id", name); + QDomElement effectname = effect.firstChildElement("name"); + effect.removeChild(effectname); + effectname = doc.createElement("name"); + QDomText nametext = doc.createTextNode(name); + effectname.appendChild(nametext); + effect.insertBefore(effectname, QDomNode()); + QDomElement effectprops = effect.firstChildElement("properties"); + effectprops.setAttribute("id", name); + effectprops.setAttribute("type", "custom"); + + + QFile file(path); + if (file.open(QFile::WriteOnly | QFile::Truncate)) { + QTextStream out(&file); + out << doc.toString(); + } + file.close(); + emit reloadEffects(); +} + void EffectStackView::slotUpdateEffectParams(const QDomElement& old, const QDomElement& e) { if (clipref) emit updateClipEffect(clipref, old, e, ui.effectlist->currentRow()); @@ -109,21 +153,35 @@ else item->setCheckState(Qt::Checked); } } - if (clipref->effectsCount() == 0) + if (clipref->effectsCount() == 0) { emit transferParamDesc(QDomElement(), 0, 100); - if (ix < 0) ix = 0; - ui.effectlist->setCurrentRow(ix); + ui.buttonDel->setEnabled(false); + ui.buttonSave->setEnabled(false); + ui.buttonReset->setEnabled(false); + ui.buttonUp->setEnabled(false); + ui.buttonDown->setEnabled(false); + } else { + if (ix < 0) ix = 0; + ui.effectlist->setCurrentRow(ix); + ui.buttonDel->setEnabled(true); + ui.buttonSave->setEnabled(true); + ui.buttonReset->setEnabled(true); + ui.buttonUp->setEnabled(ix > 0); + ui.buttonDown->setEnabled(ix < clipref->effectsCount() - 1); + } } void EffectStackView::slotItemSelectionChanged() { bool hasItem = ui.effectlist->currentItem(); int activeRow = ui.effectlist->currentRow(); - bool isChecked = ui.effectlist->currentItem()->checkState() == Qt::Checked; + bool isChecked = false; + if (hasItem && ui.effectlist->currentItem()->checkState() == Qt::Checked) isChecked = true; if (hasItem && ui.effectlist->currentItem()->isSelected()) { emit transferParamDesc(clipref->effectAt(activeRow), 0, 100);//minx max frame } if (clipref) clipref->setSelectedEffect(activeRow); ui.buttonDel->setEnabled(hasItem); + ui.buttonSave->setEnabled(hasItem); ui.buttonReset->setEnabled(hasItem && isChecked); ui.buttonUp->setEnabled(activeRow > 0); ui.buttonDown->setEnabled((activeRow < ui.effectlist->count() - 1) && hasItem); @@ -166,6 +224,7 @@ void EffectStackView::slotResetEffect() { int activeRow = ui.effectlist->currentRow(); + if (activeRow < 0) return; QDomElement old = clipref->effectAt(activeRow).cloneNode().toElement(); QDomElement dom; QString effectName = ui.effectlist->currentItem()->text(); Modified: branches/KDE4/src/effectstackview.h =================================================================== --- branches/KDE4/src/effectstackview.h 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/effectstackview.h 2008-07-19 23:33:58 UTC (rev 2327) @@ -35,7 +35,7 @@ QMap<QString, EffectsList*> effectLists; EffectStackEdit* effectedit; void setupListView(int ix); - void updateButtonStatus(); + //void updateButtonStatus(); public slots: void slotClipItemSelected(ClipItem*); @@ -49,6 +49,7 @@ void slotNewEffect(); void slotResetEffect(); void slotItemChanged(QListWidgetItem *item); + void slotSaveEffect(); signals: void transferParamDesc(const QDomElement&, int , int); @@ -62,6 +63,8 @@ void changeEffectState(ClipItem*, int, bool); /** An effect in stack was moved */ void changeEffectPosition(ClipItem*, int, int); + /** an effect was saved, reload list */ + void reloadEffects(); }; Modified: branches/KDE4/src/initeffects.cpp =================================================================== --- branches/KDE4/src/initeffects.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/initeffects.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -121,7 +121,8 @@ fileList = directory.entryList(QDir::Files); for (it = fileList.begin() ; it != fileList.end() ; ++it) { itemName = KUrl(*more + *it).path(); - parseEffectFile(&MainWindow::audioEffects, &MainWindow::videoEffects, itemName, filtersList, producersList); + if (itemName.endsWith(".xml")) + parseEffectFile(&MainWindow::customEffects, &MainWindow::audioEffects, &MainWindow::videoEffects, itemName, filtersList, producersList); // kDebug()<<"// FOUND EFFECT FILE: "<<itemName<<endl; } } @@ -134,10 +135,36 @@ } // static -void initEffects::parseEffectFile(EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList) { +void initEffects::parseCustomEffectsFile() { + MainWindow::customEffects.clear(); + QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true); + QDir directory = QDir(path); + QStringList fileList = directory.entryList(QDir::Files); + QString itemName; + foreach(QString filename, fileList) { + itemName = KUrl(path + filename).path(); + if (itemName.endsWith(".xml")) { + QDomDocument doc; + QFile file(itemName); + doc.setContent(&file, false); + file.close(); + QDomNodeList effects = doc.elementsByTagName("effect"); + if (effects.count() != 1) { + kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET"; + } else { + QDomElement e = effects.item(0).toElement(); + MainWindow::customEffects.append(e); + } + } + } +} + +// static +void initEffects::parseEffectFile(EffectsList *customEffectList, EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList) { QDomDocument doc; QFile file(name); doc.setContent(&file, false); + file.close(); QDomElement documentElement = doc.documentElement(); QDomNodeList effects = doc.elementsByTagName("effect"); @@ -167,14 +194,11 @@ QDomNode propsnode = documentElement.elementsByTagName("properties").item(0); if (!propsnode.isNull()) { QDomElement propselement = propsnode.toElement(); -// id = propselement.attribute("id", QString::null); -// effectTag = propselement.attribute("tag", QString::null); - if (propselement.attribute("type", QString::null) == "audio") isAudioEffect = true; - //else if (propselement.attribute("type", QString::null) == "custom") type = CUSTOMEFFECT; - //else type = VIDEOEFFECT; - } - if (isAudioEffect) audioEffectList->append(documentElement); - else videoEffectList->append(documentElement); + QString type = propselement.attribute("type", QString::null); + if (type == "audio") audioEffectList->append(documentElement); + else if (type == "custom") customEffectList->append(documentElement); + else videoEffectList->append(documentElement); + } else videoEffectList->append(documentElement); } /* @@ -521,7 +545,7 @@ //thumbnailer.prepareThumbnailsCall(imagelist); } else if (name == "composite") { - paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0;0;100;100;100", "0;0;100;100;100", "0;0;100;100;100")); + paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0;0;100;100;100", "-500;-500;-500;-500;0", "500;500;500;500;100")); tname.appendChild(ret.createTextNode("Composite")); QDomDocument ret1; @@ -574,11 +598,12 @@ */ } - QString wipetrans = "<ktransition tag=\"composite\" ><name>Wipe</name> <parameter tag=\"geometry\" type=\"wipe\" default=\"-100%,0%:100%x100%;-1=0%,0%:100%x100%\" name=\"geometry\"><name>Direction</name> </parameter><parameter tag=\"reverse\" default=\"0\" type=\"bool\" min=\"0\" name=\"reverse\" max=\"1\" ><name>Reverse Transition</name></parameter></ktransition>"; + QString wipetrans = "<ktransition tag=\"composite\" ><name>Wipe</name><parameter tag=\"geometry\" type=\"wipe\" default=\"-100%,0%:100%x100%;-1=0%,0%:100%x100%\" name=\"geometry\"><name>Direction</name> </parameter><parameter tag=\"aligned\" default=\"0\" type=\"bool\" name=\"aligned\" ><name>Align</name></parameter></ktransition>"; QDomDocument ret; ret.setContent(wipetrans); transitions->append(ret.documentElement()); } + QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString listdisplaynames, QString factor, QString namedesc, QString format) { QDomElement parameter = doc.createElement("parameter"); parameter.setAttribute("tag", tag); Modified: branches/KDE4/src/initeffects.h =================================================================== --- branches/KDE4/src/initeffects.h 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/initeffects.h 2008-07-19 23:33:58 UTC (rev 2327) @@ -51,7 +51,8 @@ static QDomDocument createDescriptionFromMlt(Mlt::Repository* repository, const QString& type, const QString& name); static void fillTransitionsList(Mlt::Repository *, EffectsList* transitions, QStringList names); static QDomElement quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def = QString(), QString min = QString(), QString max = QString(), QString list = QString(), QString listdisplaynames = QString(), QString factor = QString(), QString namedesc = QString(), QString format = QString()); - static void parseEffectFile(EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList); + static void parseEffectFile(EffectsList *customEffectList, EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList); + static void parseCustomEffectsFile(); static char* ladspaEffectString(int ladspaId, QStringList params); static void ladspaEffectFile(const QString & fname, int ladspaId, QStringList params); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/mainwindow.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -210,12 +210,12 @@ action->setData(name); audioEffectsMenu->addAction(action); } - QMenu *customEffectsMenu = static_cast<QMenu*>(factory()->container("custom_effects_menu", this)); + m_customEffectsMenu = static_cast<QMenu*>(factory()->container("custom_effects_menu", this)); effects = customEffects.effectNames(); foreach(const QString &name, effects) { action = new QAction(name, this); action->setData(name); - customEffectsMenu->addAction(action); + m_customEffectsMenu->addAction(action); } QMenu *viewMenu = static_cast<QMenu*>(factory()->container("dockwindows", this)); @@ -224,7 +224,7 @@ connect(videoEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddVideoEffect(QAction *))); connect(audioEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddAudioEffect(QAction *))); - connect(customEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddCustomEffect(QAction *))); + connect(m_customEffectsMenu, SIGNAL(triggered(QAction *)), this, SLOT(slotAddCustomEffect(QAction *))); m_timelineContextMenu = new QMenu(this); m_timelineContextClipMenu = new QMenu(this); @@ -252,7 +252,7 @@ m_timelineContextClipMenu->addMenu(transitionsMenu); m_timelineContextClipMenu->addMenu(videoEffectsMenu); m_timelineContextClipMenu->addMenu(audioEffectsMenu); - m_timelineContextClipMenu->addMenu(customEffectsMenu); + m_timelineContextClipMenu->addMenu(m_customEffectsMenu); m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_timeline_clip")); m_timelineContextTransitionMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy))); @@ -262,6 +262,8 @@ //connect(m_monitorManager, SIGNAL(connectMonitors()), this, SLOT(slotConnectMonitors())); connect(m_monitorManager, SIGNAL(raiseClipMonitor(bool)), this, SLOT(slotRaiseMonitor(bool))); connect(m_effectList, SIGNAL(addEffect(QDomElement)), this, SLOT(slotAddEffect(QDomElement))); + connect(m_effectList, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); + m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor); slotConnectMonitors(); @@ -309,6 +311,19 @@ openFile(KUrl(Lastproject)); } +void MainWindow::slotReloadEffects() { + initEffects::parseCustomEffectsFile(); + m_customEffectsMenu->clear(); + QStringList effects = customEffects.effectNames(); + QAction *action; + foreach(const QString &name, effects) { + action = new QAction(name, this); + action->setData(name); + m_customEffectsMenu->addAction(action); + } + m_effectList->reloadEffectList(); +} + void MainWindow::activateShuttleDevice() { if (m_jogProcess) delete m_jogProcess; m_jogProcess = NULL; @@ -1012,6 +1027,7 @@ disconnect(effectStack, SIGNAL(changeEffectState(ClipItem*, int, bool)), m_activeTimeline->projectView(), SLOT(slotChangeEffectState(ClipItem*, int, bool))); disconnect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int))); disconnect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), m_activeTimeline->projectView(), SLOT(slotRefreshEffects(ClipItem*))); + disconnect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement))); disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); } @@ -1057,6 +1073,8 @@ connect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int))); connect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), trackView->projectView(), SLOT(slotRefreshEffects(ClipItem*))); connect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement))); + connect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); + connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu); m_activeTimeline = trackView; Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/mainwindow.h 2008-07-19 23:33:58 UTC (rev 2327) @@ -123,6 +123,7 @@ QDockWidget *overviewDock; CustomTrackView *m_overView; + QMenu *m_customEffectsMenu; QMenu *m_timelineContextMenu; QMenu *m_timelineContextClipMenu; QMenu *m_timelineContextTransitionMenu; @@ -229,6 +230,8 @@ void slotCopy(); void slotPaste(); void slotPasteEffects(); + void slotReloadEffects(); + }; Modified: branches/KDE4/src/trackview.cpp =================================================================== --- branches/KDE4/src/trackview.cpp 2008-07-19 23:24:37 UTC (rev 2326) +++ branches/KDE4/src/trackview.cpp 2008-07-19 23:33:58 UTC (rev 2327) @@ -370,9 +370,10 @@ } // get effect standard tags - QDomElement clipeffect = MainWindow::videoEffects.getEffectByTag(effecttag, effectid); + QDomElement clipeffect = MainWindow::customEffects.getEffectByTag(QString(), effectid); + if (clipeffect.isNull()) clipeffect = MainWindow::videoEffects.getEffectByTag(effecttag, effectid); if (clipeffect.isNull()) clipeffect = MainWindow::audioEffects.getEffectByTag(effecttag, effectid); - if (clipeffect.isNull()) clipeffect = MainWindow::customEffects.getEffectByTag(effecttag, effectid); + clipeffect.setAttribute("kdenlive_ix", effectindex); QDomNodeList clipeffectparams = clipeffect.childNodes(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-20 14:52:51
|
Revision: 2329 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2329&view=rev Author: j-b-m Date: 2008-07-20 14:52:10 +0000 (Sun, 20 Jul 2008) Log Message: ----------- Fixes to effect deletion Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/effectstackview.cpp Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-20 09:26:28 UTC (rev 2328) +++ branches/KDE4/src/customtrackview.cpp 2008-07-20 14:52:10 UTC (rev 2329) @@ -719,7 +719,7 @@ void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect) { QString index = effect.attribute("kdenlive_ix"); - if (!m_document->renderer()->mltRemoveEffect(track, pos, index)) { + if (effect.attribute("disabled") != "1" && !m_document->renderer()->mltRemoveEffect(track, pos, index)) { emit displayMessage(i18n("Problem deleting effect"), ErrorMessage); return; } Modified: branches/KDE4/src/effectstackview.cpp =================================================================== --- branches/KDE4/src/effectstackview.cpp 2008-07-20 09:26:28 UTC (rev 2328) +++ branches/KDE4/src/effectstackview.cpp 2008-07-20 14:52:10 UTC (rev 2329) @@ -162,6 +162,7 @@ ui.buttonDown->setEnabled(false); } else { if (ix < 0) ix = 0; + if (ix > ui.effectlist->count() - 1) ix = ui.effectlist->count() - 1; ui.effectlist->setCurrentRow(ix); ui.buttonDel->setEnabled(true); ui.buttonSave->setEnabled(true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-20 18:26:22
|
Revision: 2331 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2331&view=rev Author: j-b-m Date: 2008-07-20 18:26:30 +0000 (Sun, 20 Jul 2008) Log Message: ----------- some progress on slideshow clips Modified Paths: -------------- branches/KDE4/src/clipmanager.cpp branches/KDE4/src/clipmanager.h branches/KDE4/src/clipproperties.cpp branches/KDE4/src/docclipbase.cpp branches/KDE4/src/docclipbase.h branches/KDE4/src/effectstackview.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/monitor.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/slideshowclip.cpp branches/KDE4/src/slideshowclip.h branches/KDE4/src/widgets/clipproperties_ui.ui branches/KDE4/src/widgets/slideshowclip_ui.ui Modified: branches/KDE4/src/clipmanager.cpp =================================================================== --- branches/KDE4/src/clipmanager.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/clipmanager.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -131,7 +131,7 @@ m_doc->commandStack()->push(command); } -void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, QString group, const int groupId) { +void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, QString group, const int groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); prod.setAttribute("resource", path); @@ -141,8 +141,11 @@ prod.setAttribute("in", "0"); prod.setAttribute("out", m_doc->getFramePos(duration) * count); prod.setAttribute("ttl", m_doc->getFramePos(duration)); + prod.setAttribute("luma_duration", m_doc->getFramePos(luma_duration)); prod.setAttribute("name", name); prod.setAttribute("loop", loop); + prod.setAttribute("fade", fade); + prod.setAttribute("luma_file", luma_file); if (!group.isEmpty()) { prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); Modified: branches/KDE4/src/clipmanager.h =================================================================== --- branches/KDE4/src/clipmanager.h 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/clipmanager.h 2008-07-20 18:26:30 UTC (rev 2331) @@ -51,7 +51,7 @@ void slotAddClipFile(const KUrl url, const QString group, const int groupId); void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId); - void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, bool loop, const QString group, const int groupId); + void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const QString group, const int groupId); DocClipBase *getClipById(int clipId); void slotDeleteClip(uint clipId); void setThumbsProgress(const QString &message, int progress); Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/clipproperties.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -71,12 +71,38 @@ types << "JPG" << "PNG" << "BMP" << "GIF"; m_view.image_type->addItems(types); m_view.slide_loop->setChecked(props.value("loop").toInt()); + m_view.slide_fade->setChecked(props.value("fade").toInt()); QString path = props.value("resource"); if (path.endsWith("png")) m_view.image_type->setCurrentIndex(TYPE_PNG); else if (path.endsWith("bmp")) m_view.image_type->setCurrentIndex(TYPE_BMP); else if (path.endsWith("gif")) m_view.image_type->setCurrentIndex(TYPE_GIF); m_view.slide_duration->setText(tc.getTimecodeFromFrames(props.value("ttl").toInt())); parseFolder(); + + m_view.luma_duration->setText(tc.getTimecodeFromFrames(props.value("luma_duration").toInt())); + QString lumaFile = props.value("luma_file"); + QString profilePath = KdenliveSettings::mltpath(); + profilePath = profilePath.section('/', 0, -3); + profilePath += "/lumas/PAL/"; + + QDir dir(profilePath); + QStringList result = dir.entryList(QDir::Files); + QStringList imagefiles; + QStringList imagenamelist; + int current; + foreach(QString file, result) { + if (file.endsWith(".pgm")) { + m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); + if (!lumaFile.isEmpty() && lumaFile == QString(profilePath + file)) + current = m_view.luma_file->count() - 1; + } + } + + if (!lumaFile.isEmpty()) { + m_view.slide_luma->setChecked(true); + m_view.luma_file->setCurrentIndex(current); + } + connect(m_view.image_type, SIGNAL(currentIndexChanged(int)), this, SLOT(parseFolder())); } else if (t != AUDIO) { m_view.tabWidget->removeTab(SLIDETAB); @@ -182,8 +208,12 @@ props["colour"] = "0x" + new_color.right(6) + "ff"; } } else if (t == SLIDESHOW) { - props["loop"] = QString::number((int) m_view.slide_loop->isChecked()); QMap <QString, QString> old_props = m_clip->properties(); + QString value = QString::number((int) m_view.slide_loop->isChecked()); + if (old_props.value("loop") != value) props["loop"] = value; + value = QString::number((int) m_view.slide_fade->isChecked()); + if (old_props.value("fade") != value) props["fade"] = value; + QString extension; switch (m_view.image_type->currentIndex()) { case TYPE_PNG: @@ -215,6 +245,24 @@ m_clipNeedsRefresh = true; props["out"] = QString::number(duration * m_count); } + if (m_view.slide_fade->isChecked()) { + int luma_duration = m_tc.getFrameCount(m_view.luma_duration->text(), m_fps); + if (luma_duration != old_props.value("luma_duration").toInt()) { + m_clipNeedsRefresh = true; + props["luma_duration"] = QString::number(luma_duration); + } + QString lumaFile; + if (m_view.slide_luma->isChecked()) + lumaFile = m_view.luma_file->itemData(m_view.luma_file->currentIndex()).toString(); + if (lumaFile != old_props.value("luma_file")) { + m_clipNeedsRefresh = true; + props["luma_file"] = lumaFile; + } + } else { + if (old_props.value("luma_file") != QString()) { + props["luma_file"] = QString(); + } + } } return props; Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/docclipbase.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -365,16 +365,80 @@ return m_clipProducer; } +void DocClipBase::slotRefreshProducer() { + if (m_clipProducer == NULL) return; + kDebug() << "//////////// REFRESH CLIP !!!!!!!!!!!!!!!!"; + if (m_clipType == SLIDESHOW) { + /*char *tmp = (char *) qstrdup(getProperty("resource").toUtf8().data()); + Mlt::Producer producer(*(m_clipProducer->profile()), tmp); + delete[] tmp; + delete m_clipProducer; + m_clipProducer = new Mlt::Producer(producer.get_producer()); + if (!getProperty("out").isEmpty()) m_clipProducer->set_in_and_out(getProperty("in").toInt(), getProperty("out").toInt());*/ + m_clipProducer->set("ttl", getProperty("ttl").toInt()); + //m_clipProducer->set("id", getProperty("id")); + if (getProperty("fade") == "1") { + // we want a fade filter effect + kDebug() << "//////////// FADE WANTED"; + Mlt::Service clipService(m_clipProducer->get_service()); + int ct = 0; + Mlt::Filter *filter = clipService.filter(ct); + while (filter) { + if (filter->get("mlt_service") == "luma") { + break; + } + ct++; + filter = clipService.filter(ct); + } + + if (filter && filter->get("mlt_service") == "luma") { + filter->set("period", getProperty("ttl").toInt() - 1); + filter->set("luma.out", getProperty("luma_duration").toInt()); + QString resource = getProperty("luma_file"); + char *tmp = (char *) qstrdup(resource.toUtf8().data()); + filter->set("luma.resource", tmp); + delete[] tmp; + } else { + // filter does not exist, create it... + Mlt::Filter *filter = new Mlt::Filter(*(m_clipProducer->profile()), "luma"); + filter->set("period", getProperty("ttl").toInt() - 1); + filter->set("luma.out", getProperty("luma_duration").toInt()); + QString resource = getProperty("luma_file"); + char *tmp = (char *) qstrdup(resource.toUtf8().data()); + filter->set("luma.resource", tmp); + delete[] tmp; + clipService.attach(*filter); + } + } else { + kDebug() << "//////////// FADE NOT WANTED!!!"; + Mlt::Service clipService(m_clipProducer->get_service()); + int ct = 0; + Mlt::Filter *filter = clipService.filter(0); + while (filter) { + if (filter->get("mlt_service") == "luma") { + clipService.detach(*filter); + } else ct++; + filter = clipService.filter(ct); + } + } + } +} + void DocClipBase::setProperties(QMap <QString, QString> properties) { // changing clip type is not allowed properties.remove("type"); QMapIterator<QString, QString> i(properties); + bool refreshProducer = false; + QStringList keys; + keys << "luma_duration" << "luma_file" << "fade" << "ttl"; while (i.hasNext()) { i.next(); m_properties.insert(i.key(), i.value()); if (i.key() == "resource") m_thumbProd->updateClipUrl(KUrl(i.value())); else if (i.key() == "out") setDuration(GenTime(i.value().toInt(), KdenliveSettings::project_fps())); + else if (m_clipType == SLIDESHOW && keys.contains(i.key())) refreshProducer = true; } + if (refreshProducer) slotRefreshProducer(); } void DocClipBase::setProperty(QString key, QString value) { Modified: branches/KDE4/src/docclipbase.h =================================================================== --- branches/KDE4/src/docclipbase.h 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/docclipbase.h 2008-07-20 18:26:30 UTC (rev 2331) @@ -215,6 +215,7 @@ QMap <QString, QString> m_properties; /** Create connections for audio thumbnails */ void slotCreateAudioTimer(); + void slotRefreshProducer(); public slots: void updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data); Modified: branches/KDE4/src/effectstackview.cpp =================================================================== --- branches/KDE4/src/effectstackview.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/effectstackview.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -162,7 +162,7 @@ ui.buttonDown->setEnabled(false); } else { if (ix < 0) ix = 0; - if (ix > ui.effectlist->count() - 1) ix = ui.effectlist->count() - 1; + if (ix > ui.effectlist->count() - 1) ix = ui.effectlist->count() - 1; ui.effectlist->setCurrentRow(ix); ui.buttonDel->setEnabled(true); ui.buttonSave->setEnabled(true); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -646,8 +646,8 @@ setModified(true); } -void KdenliveDoc::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, bool loop, const QString group, const int groupId) { - m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, group, groupId); +void KdenliveDoc::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const QString group, const int groupId) { + m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, fade, luma_duration, luma_file, group, groupId); setModified(true); } Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/kdenlivedoc.h 2008-07-20 18:26:30 UTC (rev 2331) @@ -73,7 +73,7 @@ void slotDeleteFolder(const QString folderName, const int id); void slotEditFolder(const QString folderName, const QString oldfolderName, int clipId); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId = -1); - void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, bool loop, const QString group, const int groupId = -1); + void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const QString group, const int groupId = -1); void deleteClip(const uint clipId); int getFramePos(QString duration); DocClipBase *getBaseClip(int clipId); Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/monitor.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -303,6 +303,7 @@ m_currentClip = clip; render->setProducer(clip->producer(), 0); m_ruler->slotNewValue(0); + //adjustRulerSize(clip->producer()->get_playtime()); m_timePos->setText("00:00:00:00"); m_position = 0; } Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/projectlist.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -386,7 +386,7 @@ groupId = item->clipId(); } - m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), group, groupId); + m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), group, groupId); } delete dia; } Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/renderer.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -392,7 +392,6 @@ if (xml.attribute("type").toInt() == COLOR) { char *tmp = decodedString("colour:" + xml.attribute("colour")); producer = new Mlt::Producer(*m_mltProfile, "fezzik", tmp); - producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt()); delete[] tmp; } else if (url.isEmpty()) { QDomDocument doc; @@ -408,10 +407,10 @@ } else { char *tmp = decodedString(url.path()); producer = new Mlt::Producer(*m_mltProfile, tmp); - if (!xml.attribute("out").isEmpty()) producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt()); - if (!xml.attribute("ttl").isEmpty()) producer->set("ttl", xml.attribute("ttl").toInt()); delete[] tmp; } + if (xml.hasAttribute("out")) producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt()); + if (producer->is_blank()) { kDebug() << " / / / / / / / /ERRROR / / / / // CANNOT LOAD PRODUCER: "; return; @@ -426,6 +425,25 @@ //kDebug() << "/////// PRODUCER: " << url.path() << " IS: " << producer.get_playtime(); Mlt::Frame * frame = producer->get_frame(); + + if (xml.attribute("type").toInt() == SLIDESHOW) { + if (xml.hasAttribute("ttl")) producer->set("ttl", xml.attribute("ttl").toInt()); + if (xml.attribute("fade") == "1") { + // user wants a fade effect to slideshow + Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, "luma"); + if (xml.hasAttribute("ttl")) filter->set("period", xml.attribute("ttl").toInt() - 1); + if (xml.hasAttribute("luma_duration") && !xml.attribute("luma_duration").isEmpty()) filter->set("luma.out", xml.attribute("luma_duration").toInt()); + if (xml.hasAttribute("luma_file") && !xml.attribute("luma_file").isEmpty()) { + char *tmp = decodedString(xml.attribute("luma_file")); + filter->set("luma.resource", tmp); + delete[] tmp; + } + Mlt::Service clipService(producer->get_service()); + clipService.attach(*filter); + } + } + + filePropertyMap["fps"] = producer->get("source_fps"); if (frame && frame->is_valid()) { @@ -857,7 +875,7 @@ if (!m_mltProducer) return; if (m_mltProducer->get_speed() == 0.0) { - m_isBlocked = false; + //m_isBlocked = false; m_mltProducer->set_speed(1.0); m_mltConsumer->set("refresh", 1); kDebug() << " ********* RENDER PLAY: " << m_mltProducer->get_speed(); @@ -865,7 +883,7 @@ //m_isBlocked = true; m_mltConsumer->set("refresh", 0); m_mltProducer->set_speed(0.0); - m_isBlocked = true; + //m_isBlocked = true; m_mltProducer->seek((int) m_framePosition); //kDebug()<<" ********* RENDER PAUSE: "<<m_mltProducer->get_speed(); //m_mltConsumer->set("refresh", 0); @@ -934,7 +952,6 @@ //kDebug()<<" ********* RENDER SEEK TO POS"; if (!m_mltProducer) return; - //kDebug()<<"////////// KDENLIVE SEEK: "<<(int) (time.frames(m_fps)); m_mltProducer->seek(pos); refresh(); } Modified: branches/KDE4/src/slideshowclip.cpp =================================================================== --- branches/KDE4/src/slideshowclip.cpp 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/slideshowclip.cpp 2008-07-20 18:26:30 UTC (rev 2331) @@ -40,15 +40,51 @@ m_view.icon_list->setIconSize(QSize(50, 50)); connect(m_view.folder_url, SIGNAL(textChanged(const QString &)), this, SLOT(parseFolder())); connect(m_view.image_type, SIGNAL(currentIndexChanged(int)), this, SLOT(parseFolder())); + + connect(m_view.slide_fade, SIGNAL(stateChanged(int)), this, SLOT(slotEnableLuma(int))); + connect(m_view.luma_fade, SIGNAL(stateChanged(int)), this, SLOT(slotEnableLumaFile(int))); + m_view.image_type->addItem("JPG"); m_view.image_type->addItem("PNG"); m_view.image_type->addItem("BMP"); m_view.image_type->addItem("GIF"); - m_view.clip_duration->setText("00:00:03:00"); + m_view.clip_duration->setText(KdenliveSettings::image_duration()); + m_view.luma_duration->setText("00:00:00:24"); m_view.folder_url->setUrl(QDir::homePath()); + + + QString profilePath = KdenliveSettings::mltpath(); + profilePath = profilePath.section('/', 0, -3); + profilePath += "/lumas/PAL/"; + + QDir dir(profilePath); + QStringList result = dir.entryList(QDir::Files); + QStringList imagefiles; + QStringList imagenamelist; + foreach(QString file, result) { + if (file.endsWith(".pgm")) { + m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); + } + } + adjustSize(); } +void SlideshowClip::slotEnableLuma(int state) { + bool enable = false; + if (state == Qt::Checked) enable = true; + m_view.luma_duration->setEnabled(enable); + m_view.luma_fade->setEnabled(enable); + if (enable) m_view.luma_file->setEnabled(m_view.luma_fade->isChecked()); + else m_view.luma_file->setEnabled(false); +} + +void SlideshowClip::slotEnableLumaFile(int state) { + bool enable = false; + if (state == Qt::Checked) enable = true; + m_view.luma_file->setEnabled(enable); +} + void SlideshowClip::parseFolder() { m_view.icon_list->clear(); QDir dir(m_view.folder_url->url().path()); @@ -117,6 +153,20 @@ bool SlideshowClip::loop() const { return m_view.slide_loop->isChecked(); } + +bool SlideshowClip::fade() const { + return m_view.slide_fade->isChecked(); +} + +QString SlideshowClip::lumaDuration() const { + return m_view.luma_duration->text(); +} + +QString SlideshowClip::lumaFile() const { + if (!m_view.luma_fade->isChecked() || !m_view.luma_file->isEnabled()) return QString(); + return m_view.luma_file->itemData(m_view.luma_file->currentIndex()).toString(); +} + #include "slideshowclip.moc" Modified: branches/KDE4/src/slideshowclip.h =================================================================== --- branches/KDE4/src/slideshowclip.h 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/slideshowclip.h 2008-07-20 18:26:30 UTC (rev 2331) @@ -37,11 +37,16 @@ QString selectedPath() const; QString clipName() const; QString clipDuration() const; + QString lumaDuration() const; int imageCount() const; bool loop() const; + bool fade() const; + QString lumaFile() const; private slots: void parseFolder(); + void slotEnableLuma(int state); + void slotEnableLumaFile(int state); private: Ui::SlideshowClip_UI m_view; Modified: branches/KDE4/src/widgets/clipproperties_ui.ui =================================================================== --- branches/KDE4/src/widgets/clipproperties_ui.ui 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/widgets/clipproperties_ui.ui 2008-07-20 18:26:30 UTC (rev 2331) @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>304</width> - <height>456</height> + <width>315</width> + <height>440</height> </rect> </property> <property name="windowTitle" > @@ -75,18 +75,41 @@ </property> </widget> </item> + <item row="7" column="1" colspan="2" > + <spacer name="verticalSpacer_4" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>20</width> + <height>17</height> + </size> + </property> + </spacer> + </item> + <item row="8" column="0" colspan="4" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> <item row="6" column="0" colspan="4" > <widget class="QTabWidget" name="tabWidget" > <property name="currentIndex" > - <number>0</number> + <number>3</number> </property> <widget class="QWidget" name="tab_video" > <property name="geometry" > <rect> <x>0</x> <y>0</y> - <width>284</width> - <height>204</height> + <width>288</width> + <height>210</height> </rect> </property> <attribute name="title" > @@ -169,8 +192,8 @@ <rect> <x>0</x> <y>0</y> - <width>284</width> - <height>204</height> + <width>288</width> + <height>210</height> </rect> </property> <attribute name="title" > @@ -246,8 +269,8 @@ <rect> <x>0</x> <y>0</y> - <width>284</width> - <height>204</height> + <width>288</width> + <height>210</height> </rect> </property> <attribute name="title" > @@ -284,8 +307,8 @@ <rect> <x>0</x> <y>0</y> - <width>284</width> - <height>204</height> + <width>299</width> + <height>194</height> </rect> </property> <attribute name="title" > @@ -317,23 +340,44 @@ </widget> </item> <item row="2" column="0" > + <widget class="QCheckBox" name="slide_loop" > + <property name="text" > + <string>Loop</string> + </property> + </widget> + </item> + <item row="3" column="0" > <widget class="QCheckBox" name="slide_fade" > <property name="text" > <string>Crossfade</string> </property> </widget> </item> - <item row="3" column="0" > + <item row="3" column="1" > + <widget class="KRestrictedLine" name="luma_duration" > + <property name="inputMask" > + <string>99:99:99:99; </string> + </property> + </widget> + </item> + <item row="4" column="0" > <widget class="QCheckBox" name="slide_luma" > <property name="text" > <string>Luma file</string> </property> </widget> </item> - <item row="3" column="1" > + <item row="4" column="1" > <widget class="KComboBox" name="luma_file" /> </item> - <item row="5" column="1" > + <item row="5" column="0" colspan="2" > + <widget class="QLabel" name="slide_info" > + <property name="text" > + <string>No image found</string> + </property> + </widget> + </item> + <item row="6" column="1" > <spacer name="verticalSpacer_6" > <property name="orientation" > <enum>Qt::Vertical</enum> @@ -346,20 +390,6 @@ </property> </spacer> </item> - <item row="2" column="1" > - <widget class="QCheckBox" name="slide_loop" > - <property name="text" > - <string>Loop</string> - </property> - </widget> - </item> - <item row="4" column="0" colspan="2" > - <widget class="QLabel" name="slide_info" > - <property name="text" > - <string>No image found</string> - </property> - </widget> - </item> </layout> </widget> <widget class="QWidget" name="tab_3" > @@ -367,8 +397,8 @@ <rect> <x>0</x> <y>0</y> - <width>284</width> - <height>204</height> + <width>288</width> + <height>210</height> </rect> </property> <attribute name="title" > @@ -445,8 +475,8 @@ <rect> <x>0</x> <y>0</y> - <width>284</width> - <height>204</height> + <width>288</width> + <height>210</height> </rect> </property> <attribute name="title" > @@ -525,30 +555,18 @@ </widget> </widget> </item> - <item row="7" column="1" colspan="2" > - <spacer name="verticalSpacer_4" > - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>20</width> - <height>17</height> - </size> - </property> - </spacer> - </item> - <item row="8" column="0" colspan="4" > - <widget class="QDialogButtonBox" name="buttonBox" > - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons" > - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> </layout> + <zorder>clip_thumb</zorder> + <zorder>label_5</zorder> + <zorder>clip_path</zorder> + <zorder>label_3</zorder> + <zorder>clip_description</zorder> + <zorder>clip_filesize_2</zorder> + <zorder>clip_duration</zorder> + <zorder>clip_filesize_3</zorder> + <zorder>clip_filesize</zorder> + <zorder>buttonBox</zorder> + <zorder>tabWidget</zorder> </widget> <customwidgets> <customwidget> Modified: branches/KDE4/src/widgets/slideshowclip_ui.ui =================================================================== --- branches/KDE4/src/widgets/slideshowclip_ui.ui 2008-07-20 15:06:37 UTC (rev 2330) +++ branches/KDE4/src/widgets/slideshowclip_ui.ui 2008-07-20 18:26:30 UTC (rev 2331) @@ -5,14 +5,14 @@ <rect> <x>0</x> <y>0</y> - <width>319</width> - <height>332</height> + <width>251</width> + <height>392</height> </rect> </property> <property name="windowTitle" > <string>Slideshow Clip</string> </property> - <layout class="QGridLayout" > + <layout class="QGridLayout" name="gridLayout" > <item row="0" column="0" > <widget class="QLabel" name="label_3" > <property name="text" > @@ -20,63 +20,50 @@ </property> </widget> </item> - <item row="0" column="1" colspan="2" > + <item row="0" column="1" > <widget class="KLineEdit" name="clip_name" /> </item> - <item row="3" column="0" > + <item row="1" column="0" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Folder</string> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="KUrlRequester" name="folder_url" /> + </item> + <item row="2" column="0" > <widget class="QLabel" name="label_2" > <property name="text" > <string>Frame Duration</string> </property> </widget> </item> - <item row="3" column="1" colspan="2" > + <item row="2" column="1" > <widget class="KRestrictedLine" name="clip_duration" > <property name="inputMask" > <string>99:99:99:99; </string> </property> </widget> </item> - <item row="9" column="0" colspan="3" > - <widget class="QDialogButtonBox" name="buttonBox" > - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons" > - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - <item row="1" column="1" colspan="2" > - <widget class="KUrlRequester" name="folder_url" /> - </item> - <item row="1" column="0" > - <widget class="QLabel" name="label" > + <item row="3" column="0" > + <widget class="QLabel" name="label_4" > <property name="text" > - <string>Folder</string> + <string>Image Type</string> </property> </widget> </item> - <item row="4" column="1" colspan="2" > + <item row="3" column="1" > <widget class="KComboBox" name="image_type" /> </item> <item row="4" column="0" > - <widget class="QLabel" name="label_4" > + <widget class="QCheckBox" name="slide_loop" > <property name="text" > - <string>Image Type</string> + <string>Loop</string> </property> </widget> </item> - <item row="7" column="0" colspan="3" > - <widget class="KListWidget" name="icon_list" /> - </item> - <item row="8" column="0" > - <widget class="QLabel" name="label_info" > - <property name="text" > - <string>No image found</string> - </property> - </widget> - </item> <item row="5" column="0" > <widget class="QCheckBox" name="slide_fade" > <property name="text" > @@ -84,23 +71,53 @@ </property> </widget> </item> - <item row="6" column="0" > + <item row="7" column="0" > <widget class="QCheckBox" name="luma_fade" > + <property name="enabled" > + <bool>false</bool> + </property> <property name="text" > <string>Luma File</string> </property> </widget> </item> - <item row="6" column="1" colspan="2" > - <widget class="KComboBox" name="luma_file" /> + <item row="7" column="1" > + <widget class="KComboBox" name="luma_file" > + <property name="enabled" > + <bool>false</bool> + </property> + </widget> </item> - <item row="5" column="1" > - <widget class="QCheckBox" name="slide_loop" > + <item row="8" column="0" colspan="2" > + <widget class="KListWidget" name="icon_list" /> + </item> + <item row="9" column="0" > + <widget class="QLabel" name="label_info" > <property name="text" > - <string>Loop</string> + <string>No image found</string> </property> </widget> </item> + <item row="10" column="0" colspan="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="5" column="1" > + <widget class="KRestrictedLine" name="luma_duration" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="inputMask" > + <string>99:99:99:99; </string> + </property> + </widget> + </item> </layout> </widget> <customwidgets> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-20 19:06:37
|
Revision: 2332 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2332&view=rev Author: j-b-m Date: 2008-07-20 19:06:45 +0000 (Sun, 20 Jul 2008) Log Message: ----------- slideshow update Modified Paths: -------------- branches/KDE4/src/clipmanager.cpp branches/KDE4/src/clipmanager.h branches/KDE4/src/clipproperties.cpp branches/KDE4/src/docclipbase.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/slideshowclip.cpp branches/KDE4/src/slideshowclip.h branches/KDE4/src/widgets/clipproperties_ui.ui branches/KDE4/src/widgets/slideshowclip_ui.ui Modified: branches/KDE4/src/clipmanager.cpp =================================================================== --- branches/KDE4/src/clipmanager.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/clipmanager.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -131,7 +131,7 @@ m_doc->commandStack()->push(command); } -void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, QString group, const int groupId) { +void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const int groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); prod.setAttribute("resource", path); @@ -145,6 +145,7 @@ prod.setAttribute("name", name); prod.setAttribute("loop", loop); prod.setAttribute("fade", fade); + prod.setAttribute("softness", QString::number(softness)); prod.setAttribute("luma_file", luma_file); if (!group.isEmpty()) { prod.setAttribute("groupname", group); Modified: branches/KDE4/src/clipmanager.h =================================================================== --- branches/KDE4/src/clipmanager.h 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/clipmanager.h 2008-07-20 19:06:45 UTC (rev 2332) @@ -51,7 +51,7 @@ void slotAddClipFile(const KUrl url, const QString group, const int groupId); void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId); - void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const QString group, const int groupId); + void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const int groupId); DocClipBase *getClipById(int clipId); void slotDeleteClip(uint clipId); void setThumbsProgress(const QString &message, int progress); Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/clipproperties.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -72,6 +72,7 @@ m_view.image_type->addItems(types); m_view.slide_loop->setChecked(props.value("loop").toInt()); m_view.slide_fade->setChecked(props.value("fade").toInt()); + m_view.luma_softness->setValue(props.value("softness").toInt()); QString path = props.value("resource"); if (path.endsWith("png")) m_view.image_type->setCurrentIndex(TYPE_PNG); else if (path.endsWith("bmp")) m_view.image_type->setCurrentIndex(TYPE_BMP); Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/docclipbase.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -398,6 +398,10 @@ char *tmp = (char *) qstrdup(resource.toUtf8().data()); filter->set("luma.resource", tmp); delete[] tmp; + if (getProperty("softness") != QString()) { + int soft = getProperty("softness").toInt(); + filter->set("luma.softness", (double) soft / 100.0); + } } else { // filter does not exist, create it... Mlt::Filter *filter = new Mlt::Filter(*(m_clipProducer->profile()), "luma"); @@ -407,6 +411,10 @@ char *tmp = (char *) qstrdup(resource.toUtf8().data()); filter->set("luma.resource", tmp); delete[] tmp; + if (getProperty("softness") != QString()) { + int soft = getProperty("softness").toInt(); + filter->set("luma.softness", (double) soft / 100.0); + } clipService.attach(*filter); } } else { @@ -430,7 +438,7 @@ QMapIterator<QString, QString> i(properties); bool refreshProducer = false; QStringList keys; - keys << "luma_duration" << "luma_file" << "fade" << "ttl"; + keys << "luma_duration" << "luma_file" << "fade" << "ttl" << "softness"; while (i.hasNext()) { i.next(); m_properties.insert(i.key(), i.value()); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -646,8 +646,8 @@ setModified(true); } -void KdenliveDoc::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const QString group, const int groupId) { - m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, fade, luma_duration, luma_file, group, groupId); +void KdenliveDoc::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const int groupId) { + m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, fade, luma_duration, luma_file, softness, group, groupId); setModified(true); } Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/kdenlivedoc.h 2008-07-20 19:06:45 UTC (rev 2332) @@ -73,7 +73,7 @@ void slotDeleteFolder(const QString folderName, const int id); void slotEditFolder(const QString folderName, const QString oldfolderName, int clipId); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId = -1); - void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const QString group, const int groupId = -1); + void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const int groupId = -1); void deleteClip(const uint clipId); int getFramePos(QString duration); DocClipBase *getBaseClip(int clipId); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/projectlist.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -386,7 +386,7 @@ groupId = item->clipId(); } - m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), group, groupId); + m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(),group, groupId); } delete dia; } Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/renderer.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -437,6 +437,10 @@ char *tmp = decodedString(xml.attribute("luma_file")); filter->set("luma.resource", tmp); delete[] tmp; + if (xml.hasAttribute("softness")) { + int soft = xml.attribute("softness").toInt(); + filter->set("luma.softness", (double) soft / 100.0); + } } Mlt::Service clipService(producer->get_service()); clipService.attach(*filter); Modified: branches/KDE4/src/slideshowclip.cpp =================================================================== --- branches/KDE4/src/slideshowclip.cpp 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/slideshowclip.cpp 2008-07-20 19:06:45 UTC (rev 2332) @@ -83,6 +83,8 @@ bool enable = false; if (state == Qt::Checked) enable = true; m_view.luma_file->setEnabled(enable); + m_view.luma_softness->setEnabled(enable); + m_view.label_softness->setEnabled(enable); } void SlideshowClip::parseFolder() { @@ -150,6 +152,10 @@ return m_count; } +int SlideshowClip::softness() const { + return m_view.luma_softness->value(); +} + bool SlideshowClip::loop() const { return m_view.slide_loop->isChecked(); } Modified: branches/KDE4/src/slideshowclip.h =================================================================== --- branches/KDE4/src/slideshowclip.h 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/slideshowclip.h 2008-07-20 19:06:45 UTC (rev 2332) @@ -42,6 +42,7 @@ bool loop() const; bool fade() const; QString lumaFile() const; + int softness() const; private slots: void parseFolder(); Modified: branches/KDE4/src/widgets/clipproperties_ui.ui =================================================================== --- branches/KDE4/src/widgets/clipproperties_ui.ui 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/widgets/clipproperties_ui.ui 2008-07-20 19:06:45 UTC (rev 2332) @@ -6,7 +6,7 @@ <x>0</x> <y>0</y> <width>315</width> - <height>440</height> + <height>469</height> </rect> </property> <property name="windowTitle" > @@ -108,8 +108,8 @@ <rect> <x>0</x> <y>0</y> - <width>288</width> - <height>210</height> + <width>299</width> + <height>223</height> </rect> </property> <attribute name="title" > @@ -192,8 +192,8 @@ <rect> <x>0</x> <y>0</y> - <width>288</width> - <height>210</height> + <width>299</width> + <height>223</height> </rect> </property> <attribute name="title" > @@ -269,8 +269,8 @@ <rect> <x>0</x> <y>0</y> - <width>288</width> - <height>210</height> + <width>299</width> + <height>223</height> </rect> </property> <attribute name="title" > @@ -308,7 +308,7 @@ <x>0</x> <y>0</y> <width>299</width> - <height>194</height> + <height>223</height> </rect> </property> <attribute name="title" > @@ -370,14 +370,14 @@ <item row="4" column="1" > <widget class="KComboBox" name="luma_file" /> </item> - <item row="5" column="0" colspan="2" > + <item row="6" column="0" colspan="2" > <widget class="QLabel" name="slide_info" > <property name="text" > <string>No image found</string> </property> </widget> </item> - <item row="6" column="1" > + <item row="7" column="1" > <spacer name="verticalSpacer_6" > <property name="orientation" > <enum>Qt::Vertical</enum> @@ -390,6 +390,23 @@ </property> </spacer> </item> + <item row="5" column="1" > + <widget class="QSlider" name="luma_softness" > + <property name="maximum" > + <number>100</number> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="5" column="0" > + <widget class="QLabel" name="label_15" > + <property name="text" > + <string>Softness</string> + </property> + </widget> + </item> </layout> </widget> <widget class="QWidget" name="tab_3" > @@ -397,8 +414,8 @@ <rect> <x>0</x> <y>0</y> - <width>288</width> - <height>210</height> + <width>299</width> + <height>223</height> </rect> </property> <attribute name="title" > @@ -475,8 +492,8 @@ <rect> <x>0</x> <y>0</y> - <width>288</width> - <height>210</height> + <width>299</width> + <height>223</height> </rect> </property> <attribute name="title" > Modified: branches/KDE4/src/widgets/slideshowclip_ui.ui =================================================================== --- branches/KDE4/src/widgets/slideshowclip_ui.ui 2008-07-20 18:26:30 UTC (rev 2331) +++ branches/KDE4/src/widgets/slideshowclip_ui.ui 2008-07-20 19:06:45 UTC (rev 2332) @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>251</width> - <height>392</height> + <width>252</width> + <height>415</height> </rect> </property> <property name="windowTitle" > @@ -71,7 +71,17 @@ </property> </widget> </item> - <item row="7" column="0" > + <item row="5" column="1" > + <widget class="KRestrictedLine" name="luma_duration" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="inputMask" > + <string>99:99:99:99; </string> + </property> + </widget> + </item> + <item row="6" column="0" > <widget class="QCheckBox" name="luma_fade" > <property name="enabled" > <bool>false</bool> @@ -81,13 +91,36 @@ </property> </widget> </item> - <item row="7" column="1" > + <item row="6" column="1" > <widget class="KComboBox" name="luma_file" > <property name="enabled" > <bool>false</bool> </property> </widget> </item> + <item row="7" column="0" > + <widget class="QLabel" name="label_softness" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="text" > + <string>Softness</string> + </property> + </widget> + </item> + <item row="7" column="1" > + <widget class="QSlider" name="luma_softness" > + <property name="enabled" > + <bool>false</bool> + </property> + <property name="maximum" > + <number>100</number> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> <item row="8" column="0" colspan="2" > <widget class="KListWidget" name="icon_list" /> </item> @@ -108,16 +141,6 @@ </property> </widget> </item> - <item row="5" column="1" > - <widget class="KRestrictedLine" name="luma_duration" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="inputMask" > - <string>99:99:99:99; </string> - </property> - </widget> - </item> </layout> </widget> <customwidgets> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-21 15:18:44
|
Revision: 2334 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2334&view=rev Author: j-b-m Date: 2008-07-21 15:18:50 +0000 (Mon, 21 Jul 2008) Log Message: ----------- * New: split monitor to view several tracks at once * Fixed audio mixing stopping at 10 minutes Modified Paths: -------------- branches/KDE4/src/docclipbase.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/monitor.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-07-20 19:10:22 UTC (rev 2333) +++ branches/KDE4/src/docclipbase.cpp 2008-07-21 15:18:50 UTC (rev 2334) @@ -398,10 +398,10 @@ char *tmp = (char *) qstrdup(resource.toUtf8().data()); filter->set("luma.resource", tmp); delete[] tmp; - if (getProperty("softness") != QString()) { - int soft = getProperty("softness").toInt(); - filter->set("luma.softness", (double) soft / 100.0); - } + if (getProperty("softness") != QString()) { + int soft = getProperty("softness").toInt(); + filter->set("luma.softness", (double) soft / 100.0); + } } else { // filter does not exist, create it... Mlt::Filter *filter = new Mlt::Filter(*(m_clipProducer->profile()), "luma"); @@ -411,10 +411,10 @@ char *tmp = (char *) qstrdup(resource.toUtf8().data()); filter->set("luma.resource", tmp); delete[] tmp; - if (getProperty("softness") != QString()) { - int soft = getProperty("softness").toInt(); - filter->set("luma.softness", (double) soft / 100.0); - } + if (getProperty("softness") != QString()) { + int soft = getProperty("softness").toInt(); + filter->set("luma.softness", (double) soft / 100.0); + } clipService.attach(*filter); } } else { Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-07-20 19:10:22 UTC (rev 2333) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-07-21 15:18:50 UTC (rev 2334) @@ -161,9 +161,7 @@ for (uint i = 2; i < total ; i++) { QDomElement transition = m_document.createElement("transition"); - transition.setAttribute("in", "0"); - //TODO: Make audio mix last for all project duration - transition.setAttribute("out", "15000"); + transition.setAttribute("always_active", "1"); QDomElement property = m_document.createElement("property"); property.setAttribute("name", "a_track"); Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-07-20 19:10:22 UTC (rev 2333) +++ branches/KDE4/src/monitor.cpp 2008-07-21 15:18:50 UTC (rev 2334) @@ -104,6 +104,9 @@ if (name != "clip") { connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int))); connect(render, SIGNAL(durationChanged(int)), this, SIGNAL(durationChanged(int))); + QAction *splitView = m_contextMenu->addAction(KIcon("document-new"), i18n("Split view")); + splitView->setCheckable(true); + connect(splitView, SIGNAL(toggled(bool)), render, SLOT(slotSplitView(bool))); } else { QAction *setThumbFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Set current image as thumbnail")); connect(setThumbFrame, SIGNAL(triggered()), this, SLOT(slotSetThumbFrame())); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-20 19:10:22 UTC (rev 2333) +++ branches/KDE4/src/projectlist.cpp 2008-07-21 15:18:50 UTC (rev 2334) @@ -386,7 +386,7 @@ groupId = item->clipId(); } - m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(),group, groupId); + m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(), group, groupId); } delete dia; } Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-20 19:10:22 UTC (rev 2333) +++ branches/KDE4/src/renderer.cpp 2008-07-21 15:18:50 UTC (rev 2334) @@ -381,6 +381,71 @@ return m_mltProfile->dar(); } +void Render::slotSplitView(bool doit) { + Mlt::Service service(m_mltProducer->parent().get_service()); + Mlt::Tractor tractor(service); + Mlt::Field *field = tractor.field(); + if (doit) { + int screen = 0; + for (int i = 1; i < tractor.count() && screen < 4; i++) { + Mlt::Producer trackProducer(tractor.track(i)); + kDebug() << "// TRACK: " << i << ", HIDE: " << trackProducer.get("hide"); + if (QString(trackProducer.get("hide")).toInt() != 1) { + kDebug() << "// ADIDNG TRACK: " << i; + Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "composite"); + transition->set("mlt_service", "composite"); + transition->set("a_track", 0); + transition->set("b_track", i); + transition->set("distort", 1); + transition->set("internal_added", "200"); + char *tmp; + switch (screen) { + case 0: + tmp = "0,0:50%x50%"; + break; + case 1: + tmp = "50%,0:50%x50%"; + break; + case 2: + tmp = "0,50%:50%x50%"; + break; + case 3: + tmp = "50%,50%:50%x50%"; + break; + } + transition->set("geometry", tmp); + transition->set("always_active", "1"); + field->plant_transition(*transition, 0, i); + //delete[] tmp; + screen++; + } + } + m_mltConsumer->set("refresh", 1); + } else { + + mlt_service serv = m_mltProducer->parent().get_service(); + + mlt_service nextservice = mlt_service_get_producer(serv); + mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); + QString mlt_type = mlt_properties_get(properties, "mlt_type"); + QString resource = mlt_properties_get(properties, "mlt_service"); + + while (mlt_type == "transition") { + QString added = mlt_properties_get(MLT_SERVICE_PROPERTIES(nextservice), "internal_added"); + if (added == "200") { + mlt_field_disconnect_service(field->get_field(), nextservice); + } + nextservice = mlt_service_producer(nextservice); + if (nextservice == NULL) break; + properties = MLT_SERVICE_PROPERTIES(nextservice); + mlt_type = mlt_properties_get(properties, "mlt_type"); + resource = mlt_properties_get(properties, "mlt_service"); + m_mltConsumer->set("refresh", 1); + } + } + +} + void Render::getFileProperties(const QDomElement &xml, int clipId) { int height = 50; int width = (int)(height * m_mltProfile->dar()); @@ -437,10 +502,10 @@ char *tmp = decodedString(xml.attribute("luma_file")); filter->set("luma.resource", tmp); delete[] tmp; - if (xml.hasAttribute("softness")) { - int soft = xml.attribute("softness").toInt(); - filter->set("luma.softness", (double) soft / 100.0); - } + if (xml.hasAttribute("softness")) { + int soft = xml.attribute("softness").toInt(); + filter->set("luma.softness", (double) soft / 100.0); + } } Mlt::Service clipService(producer->get_service()); clipService.attach(*filter); @@ -1796,9 +1861,8 @@ } void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool do_refresh) { + QMap<QString, QString> args = mltGetTransitionParamsFromXml(xml); - - Mlt::Service service(m_mltProducer->parent().get_service()); Mlt::Tractor tractor(service); @@ -1806,7 +1870,8 @@ char *transId = decodedString(tag); Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, transId); - transition->set_in_and_out((int) in.frames(m_fps), (int) out.frames(m_fps)); + if (out != GenTime()) + transition->set_in_and_out((int) in.frames(m_fps), (int) out.frames(m_fps)); QMap<QString, QString>::Iterator it; QString key; Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-07-20 19:10:22 UTC (rev 2333) +++ branches/KDE4/src/renderer.h 2008-07-21 15:18:50 UTC (rev 2334) @@ -253,6 +253,7 @@ void exportFileToFirewire(QString srcFileName, int port, GenTime startTime, GenTime endTime); static char *decodedString(QString str); void mltSavePlaylist(); + void slotSplitView(bool doit); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-21 17:11:30
|
Revision: 2335 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2335&view=rev Author: j-b-m Date: 2008-07-21 17:11:39 +0000 (Mon, 21 Jul 2008) Log Message: ----------- Disable monitor split view when saving document Modified Paths: -------------- branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-21 15:18:50 UTC (rev 2334) +++ branches/KDE4/src/renderer.cpp 2008-07-21 17:11:39 UTC (rev 2335) @@ -61,7 +61,7 @@ } } -Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(-1), m_framePosition(0), m_generateScenelist(false), m_isBlocked(true), m_blackClip(NULL) { +Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(-1), m_framePosition(0), m_generateScenelist(false), m_isBlocked(true), m_blackClip(NULL), m_isSplitView(false) { kDebug() << "////////// USING PROFILE: " << (char *)KdenliveSettings::current_profile().toUtf8().data(); m_mltProfile = new Mlt::Profile((char*) KdenliveSettings::current_profile().data()); refreshTimer = new QTimer(this); @@ -131,8 +131,8 @@ int Render::resetProfile(QString profile) { - if (!m_mltConsumer) return 0; + if (m_isSplitView) slotSplitView(false); if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop(); m_mltConsumer->purge(); delete m_mltConsumer; @@ -382,8 +382,10 @@ } void Render::slotSplitView(bool doit) { + m_isSplitView = doit; Mlt::Service service(m_mltProducer->parent().get_service()); Mlt::Tractor tractor(service); + if (service.type() != tractor_type || tractor.count() < 2) return; Mlt::Field *field = tractor.field(); if (doit) { int screen = 0; @@ -422,9 +424,7 @@ } m_mltConsumer->set("refresh", 1); } else { - mlt_service serv = m_mltProducer->parent().get_service(); - mlt_service nextservice = mlt_service_get_producer(serv); mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); QString mlt_type = mlt_properties_get(properties, "mlt_type"); @@ -443,7 +443,6 @@ m_mltConsumer->set("refresh", 1); } } - } void Render::getFileProperties(const QDomElement &xml, int clipId) { @@ -783,6 +782,8 @@ delete[] tmppath; westleyConsumer.set("terminate_on_pause", 1); Mlt::Producer prod(m_mltProducer->get_producer()); + bool split = m_isSplitView; + if (split) slotSplitView(false); westleyConsumer.connect(prod); //prod.set("title", "kdenlive document"); //westleyConsumer.listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); @@ -804,6 +805,7 @@ out << doc.toString(); file.close(); } + if (split) slotSplitView(true); } Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-07-21 15:18:50 UTC (rev 2334) +++ branches/KDE4/src/renderer.h 2008-07-21 17:11:39 UTC (rev 2335) @@ -180,6 +180,8 @@ double m_fps; uint m_monitorId; bool m_generateScenelist; + /** true when monitor is in split view (several tracks at the same time) */ + bool m_isSplitView; Mlt::Producer *m_blackClip; /** Holds the path to on screen display profile */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-21 19:24:37
|
Revision: 2337 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2337&view=rev Author: j-b-m Date: 2008-07-21 19:24:46 +0000 (Mon, 21 Jul 2008) Log Message: ----------- Fix one frame error in clips duration Modified Paths: -------------- branches/KDE4/src/clipmanager.cpp branches/KDE4/src/projectitem.cpp branches/KDE4/src/renderer.cpp Modified: branches/KDE4/src/clipmanager.cpp =================================================================== --- branches/KDE4/src/clipmanager.cpp 2008-07-21 17:34:00 UTC (rev 2336) +++ branches/KDE4/src/clipmanager.cpp 2008-07-21 19:24:46 UTC (rev 2337) @@ -106,7 +106,7 @@ if (type->name().startsWith("image/")) { prod.setAttribute("type", (int) IMAGE); prod.setAttribute("in", "0"); - prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration())); + prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); } AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true); m_doc->commandStack()->push(command); @@ -121,7 +121,7 @@ uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); prod.setAttribute("in", "0"); - prod.setAttribute("out", m_doc->getFramePos(duration)); + prod.setAttribute("out", m_doc->getFramePos(duration) - 1); prod.setAttribute("name", name); if (!group.isEmpty()) { prod.setAttribute("groupname", group); @@ -139,7 +139,7 @@ uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); prod.setAttribute("in", "0"); - prod.setAttribute("out", m_doc->getFramePos(duration) * count); + prod.setAttribute("out", m_doc->getFramePos(duration) * count - 1); prod.setAttribute("ttl", m_doc->getFramePos(duration)); prod.setAttribute("luma_duration", m_doc->getFramePos(luma_duration)); prod.setAttribute("name", name); @@ -172,7 +172,7 @@ } prod.setAttribute("type", (int) TEXT); prod.setAttribute("in", "0"); - prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration())); + prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true); m_doc->commandStack()->push(command); } Modified: branches/KDE4/src/projectitem.cpp =================================================================== --- branches/KDE4/src/projectitem.cpp 2008-07-21 17:34:00 UTC (rev 2336) +++ branches/KDE4/src/projectitem.cpp 2008-07-21 19:24:46 UTC (rev 2337) @@ -186,7 +186,6 @@ break; case 4: tip.append(i18n("Color clip")); - setData(1, DurationRole, Timecode::getEasyTimecode(GenTime(m_clip->getProperty("out").toInt(), 25), 25)); break; case 5: tip.append(i18n("Image clip") + "</b><br />" + clipUrl().path()); Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-21 17:34:00 UTC (rev 2336) +++ branches/KDE4/src/renderer.cpp 2008-07-21 19:24:46 UTC (rev 2337) @@ -1201,18 +1201,7 @@ Mlt::Producer trackProducer(tractor.track(info.track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - /*if (prod == NULL) { - // clip was never used yet - QDomDocument doc; - doc.appendChild(doc.importNode(element, true)); - QString resource = doc.toString(); - kDebug() << "// INSERTING CLIP: " << resource; - char *tmp = decodedString(resource); - prod = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp); - delete[] tmp; - }*/ - - Mlt::Producer *clip = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps)); + Mlt::Producer *clip = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *clip, 1); mlt_service_unlock(service.get_service()); @@ -1638,14 +1627,15 @@ Mlt::Producer trackProducer(tractor.track(startTrack)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); int clipIndex = trackPlaylist.get_clip_index_at(moveStart + 1); - if (endTrack == startTrack) { //mlt_service_lock(service.get_service()); Mlt::Producer clipProducer(trackPlaylist.replace_with_blank(clipIndex)); trackPlaylist.consolidate_blanks(0); + if (!trackPlaylist.is_blank_at(moveEnd)) { // error, destination is not empty //int ix = trackPlaylist.get_clip_index_at(moveEnd); + kDebug()<<"// ERROR MOVING CLIP TO : "<<moveEnd; mlt_service_unlock(m_mltConsumer->get_service()); m_isBlocked = false; return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-21 23:30:01
|
Revision: 2339 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2339&view=rev Author: j-b-m Date: 2008-07-21 23:30:09 +0000 (Mon, 21 Jul 2008) Log Message: ----------- start implementing image / title transparency Modified Paths: -------------- branches/KDE4/src/clipmanager.cpp branches/KDE4/src/clipproperties.cpp branches/KDE4/src/customtrackview.cpp branches/KDE4/src/docclipbase.cpp branches/KDE4/src/docclipbase.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h branches/KDE4/src/widgets/clipproperties_ui.ui Modified: branches/KDE4/src/clipmanager.cpp =================================================================== --- branches/KDE4/src/clipmanager.cpp 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/clipmanager.cpp 2008-07-21 23:30:09 UTC (rev 2339) @@ -171,6 +171,7 @@ prod.setAttribute("groupid", groupId); } prod.setAttribute("type", (int) TEXT); + prod.setAttribute("transparency", "1"); prod.setAttribute("in", "0"); prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true); Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/clipproperties.cpp 2008-07-21 23:30:09 UTC (rev 2339) @@ -32,7 +32,9 @@ #define AUDIOTAB 1 #define COLORTAB 2 #define SLIDETAB 3 -#define ADVANCEDTAB 4 +#define IMAGETAB 4 +#define MARKERTAB 5 +#define ADVANCEDTAB 6 #define TYPE_JPEG 0 #define TYPE_PNG 1 @@ -55,8 +57,18 @@ m_view.clip_channels->setText(props.value("channels")); CLIPTYPE t = m_clip->clipType(); - if (t == COLOR) { + if (t == IMAGE) { + m_view.tabWidget->removeTab(SLIDETAB); + m_view.tabWidget->removeTab(COLORTAB); + m_view.tabWidget->removeTab(AUDIOTAB); + m_view.tabWidget->removeTab(VIDEOTAB); + if (props.contains("frame_size")) + m_view.image_size->setText(props.value("frame_size")); + if (props.contains("transparency")) + m_view.image_transparency->setChecked(props.value("transparency").toInt()); + } else if (t == COLOR) { m_view.clip_path->setEnabled(false); + m_view.tabWidget->removeTab(IMAGETAB); m_view.tabWidget->removeTab(SLIDETAB); m_view.tabWidget->removeTab(AUDIOTAB); m_view.tabWidget->removeTab(VIDEOTAB); @@ -64,6 +76,7 @@ m_view.clip_color->setColor(QColor("#" + props.value("colour").right(8).left(6))); } else if (t == SLIDESHOW) { m_view.clip_path->setText(url.directory()); + m_view.tabWidget->removeTab(IMAGETAB); m_view.tabWidget->removeTab(COLORTAB); m_view.tabWidget->removeTab(AUDIOTAB); m_view.tabWidget->removeTab(VIDEOTAB); @@ -106,6 +119,7 @@ connect(m_view.image_type, SIGNAL(currentIndexChanged(int)), this, SLOT(parseFolder())); } else if (t != AUDIO) { + m_view.tabWidget->removeTab(IMAGETAB); m_view.tabWidget->removeTab(SLIDETAB); m_view.tabWidget->removeTab(COLORTAB); if (props.contains("frame_size")) @@ -121,6 +135,7 @@ m_view.clip_thumb->setPixmap(pix); if (t == IMAGE || t == VIDEO) m_view.tabWidget->removeTab(AUDIOTAB); } else { + m_view.tabWidget->removeTab(IMAGETAB); m_view.tabWidget->removeTab(SLIDETAB); m_view.tabWidget->removeTab(COLORTAB); m_view.tabWidget->removeTab(VIDEOTAB); @@ -208,6 +223,12 @@ m_clipNeedsRefresh = true; props["colour"] = "0x" + new_color.right(6) + "ff"; } + } else if (t == IMAGE) { + QMap <QString, QString> old_props = m_clip->properties(); + if ((int) m_view.image_transparency->isChecked() != old_props.value("transparency").toInt()) { + props["transparency"] = QString::number((int)m_view.image_transparency->isChecked()); + m_clipNeedsRefresh = true; + } } else if (t == SLIDESHOW) { QMap <QString, QString> old_props = m_clip->properties(); QString value = QString::number((int) m_view.slide_loop->isChecked()); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/customtrackview.cpp 2008-07-21 23:30:09 UTC (rev 2339) @@ -900,7 +900,7 @@ info.startPos = GenTime((int)(mapToScene(pos).x() / m_scale), m_document->fps()); info.endPos = info.startPos + clip->duration(); info.track = (int)(pos.y() / m_tracksHeight); - //kDebug()<<"------------ ADDING CLIP ITEM----: "<<info.startPos.frames(25)<<", "<<info.endPos.frames(25)<<", "<<info.track; + kDebug() << "------------ ADDING CLIP ITEM----: " << info.startPos.frames(25) << ", " << info.endPos.frames(25) << ", " << info.track; m_dropItem = new ClipItem(clip, info, m_scale, m_document->fps()); scene()->addItem(m_dropItem); } @@ -936,8 +936,10 @@ ItemInfo info; info = m_dropItem->info(); info.track = m_tracksList.count() - m_dropItem->track(); - // kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksList.count()<<", DROP: "<<m_dropItem->track(); + //kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksList.count()<<", DROP: "<<m_dropItem->track(); m_document->renderer()->mltInsertClip(info, m_dropItem->xml(), m_dropItem->baseClip()->producer()); + //if (m_dropItem->baseClip()->isTransparent()) m_document->renderer()->mltAddClipTransparency(info, getPreviousVideoTrack(m_dropItem->track()), m_dropItem->baseClip()->getId()); + m_dropItem = NULL; m_document->setModified(true); } else QGraphicsView::dropEvent(event); m_dropItem = NULL; Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/docclipbase.cpp 2008-07-21 23:30:09 UTC (rev 2339) @@ -139,6 +139,10 @@ return m_properties.value("description"); } +bool DocClipBase::isTransparent() const { + return (m_properties.value("transparency") == "1"); +} + const QString DocClipBase::getProperty(const QString prop) const { return m_properties.value(prop); } @@ -358,6 +362,7 @@ void DocClipBase::setProducer(Mlt::Producer *producer) { m_clipProducer = producer; + m_clipProducer->set("transparency", m_properties.value("transparency").toInt()); if (m_thumbProd) m_thumbProd->setProducer(producer); } @@ -445,6 +450,7 @@ if (i.key() == "resource") m_thumbProd->updateClipUrl(KUrl(i.value())); else if (i.key() == "out") setDuration(GenTime(i.value().toInt(), KdenliveSettings::project_fps())); else if (m_clipType == SLIDESHOW && keys.contains(i.key())) refreshProducer = true; + else if (i.key() == "transparency") m_clipProducer->set("transparency", i.value().toInt()); } if (refreshProducer) slotRefreshProducer(); } @@ -453,6 +459,7 @@ m_properties.insert(key, value); if (key == "resource") m_thumbProd->updateClipUrl(KUrl(value)); else if (key == "out") setDuration(GenTime(value.toInt(), KdenliveSettings::project_fps())); + else if (key == "transparency") m_clipProducer->set("transparency", value.toInt()); } QMap <QString, QString> DocClipBase::properties() const { Modified: branches/KDE4/src/docclipbase.h =================================================================== --- branches/KDE4/src/docclipbase.h 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/docclipbase.h 2008-07-21 23:30:09 UTC (rev 2339) @@ -66,6 +66,8 @@ /** Returns the description of this clip. */ const QString description() const; + /** Does this clip need a transparent background (e.g. for titles). */ + bool isTransparent() const; /** Returns any property of this clip. */ const QString getProperty(const QString prop) const; Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/renderer.cpp 2008-07-21 23:30:09 UTC (rev 2339) @@ -1204,6 +1204,9 @@ Mlt::Producer *clip = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *clip, 1); + if (QString(prod->get("transparency")).toInt() == 1) + mltAddClipTransparency(info, info.track - 1, QString(prod->get("id")).toInt()); + mlt_service_unlock(service.get_service()); if (info.track != 0) mltCheckLength(); @@ -1255,6 +1258,9 @@ Mlt::Producer trackProducer(tractor.track(track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); int clipIndex = trackPlaylist.get_clip_index_at((int) position.frames(m_fps)); + Mlt::Producer clip(trackPlaylist.get_clip(clipIndex)); + if (QString(clip.parent().get("transparency")).toInt() == 1) + mltDeleteTransparency((int) position.frames(m_fps), track, QString(clip.parent().get("id")).toInt()); trackPlaylist.replace_with_blank(clipIndex); trackPlaylist.consolidate_blanks(0); if (track != 0) mltCheckLength(); @@ -1539,11 +1545,10 @@ if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) + 1)) kDebug() << "//////// ERROR RSIZING BLANK CLIP!!!!!!!!!!!"; int clipIndex = trackPlaylist.get_clip_index_at((int) pos.frames(m_fps) + 1); - + Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex); + int previousStart = trackPlaylist.clip_start(clipIndex); int previousDuration = trackPlaylist.clip_length(clipIndex) - 1; int newDuration = (int) out.frames(m_fps) - 1; - - kDebug() << " ** RESIZING CLIP END:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", in: " << in.frames(25) << ", out: " << out.frames(25) << ", PREVIOUS duration: " << previousDuration; trackPlaylist.resize_clip(clipIndex, (int) in.frames(m_fps), newDuration); trackPlaylist.consolidate_blanks(0); if (previousDuration < newDuration) { @@ -1555,9 +1560,19 @@ } else trackPlaylist.insert_blank(clipIndex + 1, previousDuration - newDuration - 1); trackPlaylist.consolidate_blanks(0); - tractor.multitrack()->refresh(); - tractor.refresh(); + + //tractor.multitrack()->refresh(); + //tractor.refresh(); if (track != 0) mltCheckLength(); + if (QString(clip->parent().get("transparency")).toInt() == 1) { + //mltResizeTransparency(previousStart, previousStart, previousStart + newDuration, track, QString(clip->parent().get("id")).toInt()); + mltDeleteTransparency(previousStart, track, QString(clip->parent().get("id")).toInt()); + ItemInfo info; + info.startPos = pos; + info.endPos = pos + out - in; + info.track = track; + mltAddClipTransparency(info, info.track - 1, QString(clip->parent().get("id")).toInt()); + } m_isBlocked = false; } @@ -1592,8 +1607,9 @@ if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) - 1)) kDebug() << "//////// ERROR RSIZING BLANK CLIP!!!!!!!!!!!"; int clipIndex = trackPlaylist.get_clip_index_at((int) pos.frames(m_fps) - 1); - kDebug() << " ** RESIZING CLIP START:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", moving: " << moveFrame << ", in: " << in.frames(25) << ", out: " << out.frames(25); - + int previousStart = trackPlaylist.clip_start(clipIndex); + //kDebug() << " ** RESIZING CLIP START:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", moving: " << moveFrame << ", in: " << in.frames(25) << ", out: " << out.frames(25); + Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex); trackPlaylist.resize_clip(clipIndex, (int) in.frames(m_fps), (int) out.frames(m_fps)); if (moveFrame > 0) trackPlaylist.insert_blank(clipIndex, moveFrame - 1); else { @@ -1607,6 +1623,15 @@ else trackPlaylist.resize_clip(blankIndex, 0, blankLength + moveFrame - 1); } trackPlaylist.consolidate_blanks(0); + if (QString(clip->parent().get("transparency")).toInt() == 1) { + //mltResizeTransparency(previousStart, (int) moveEnd.frames(m_fps), (int) (moveEnd + out - in).frames(m_fps), track, QString(clip->parent().get("id")).toInt()); + mltDeleteTransparency(previousStart, track, QString(clip->parent().get("id")).toInt()); + ItemInfo info; + info.startPos = moveEnd; + info.endPos = moveEnd + out - in; + info.track = track; + mltAddClipTransparency(info, info.track - 1, QString(clip->parent().get("id")).toInt()); + } m_isBlocked = false; } @@ -1635,13 +1660,16 @@ if (!trackPlaylist.is_blank_at(moveEnd)) { // error, destination is not empty //int ix = trackPlaylist.get_clip_index_at(moveEnd); - kDebug()<<"// ERROR MOVING CLIP TO : "<<moveEnd; + kDebug() << "// ERROR MOVING CLIP TO : " << moveEnd; mlt_service_unlock(m_mltConsumer->get_service()); m_isBlocked = false; return false; } else { trackPlaylist.insert_at(moveEnd, clipProducer, 1); trackPlaylist.consolidate_blanks(0); + if (QString(clipProducer.parent().get("transparency")).toInt() == 1) { + mltMoveTransparency(moveStart, moveEnd, startTrack, endTrack, QString(clipProducer.parent().get("id")).toInt()); + } } //mlt_service_unlock(service.get_service()); } else { @@ -1658,6 +1686,10 @@ destTrackPlaylist.consolidate_blanks(1); destTrackPlaylist.insert_at(moveEnd, clipProducer, 1); destTrackPlaylist.consolidate_blanks(0); + if (QString(clipProducer.parent().get("transparency")).toInt() == 1) { + kDebug() << "//////// moving clip transparency"; + mltMoveTransparency(moveStart, moveEnd, startTrack, endTrack, QString(clipProducer.parent().get("id")).toInt()); + } } } mltCheckLength(); @@ -1852,6 +1884,141 @@ return map; } +void Render::mltAddClipTransparency(ItemInfo info, int transitiontrack, int id) { + kDebug() << "///////// ADDING CLIP TRANSPARENCY AT: " << info.startPos.frames(25); + Mlt::Service service(m_mltProducer->parent().get_service()); + Mlt::Tractor tractor(service); + Mlt::Field *field = tractor.field(); + + Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "composite"); + transition->set_in_and_out((int) info.startPos.frames(m_fps), (int) info.endPos.frames(m_fps) - 1); + transition->set("transparency", id); + transition->set("fill", 1); + transition->set("internal_added", 237); + field->plant_transition(*transition, transitiontrack, info.track); + refresh(); +} + +void Render::mltDeleteTransparency(int pos, int track, int id) { + Mlt::Service service(m_mltProducer->parent().get_service()); + Mlt::Tractor tractor(service); + Mlt::Field *field = tractor.field(); + + //if (do_refresh) m_mltConsumer->set("refresh", 0); + mlt_service serv = m_mltProducer->parent().get_service(); + + mlt_service nextservice = mlt_service_get_producer(serv); + mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); + QString mlt_type = mlt_properties_get(properties, "mlt_type"); + QString resource = mlt_properties_get(properties, "mlt_service"); + + while (mlt_type == "transition") { + mlt_transition tr = (mlt_transition) nextservice; + int currentTrack = mlt_transition_get_b_track(tr); + int currentIn = (int) mlt_transition_get_in(tr); + int currentOut = (int) mlt_transition_get_out(tr); + int transitionId = QString(mlt_properties_get(properties, "transparency")).toInt(); + kDebug() << "// FOUND EXISTING TRANS, IN: " << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack; + + if (resource == "composite" && track == currentTrack && currentIn == pos && transitionId == id) { + //kDebug() << " / / / / /DELETE TRANS DOOOMNE"; + mlt_field_disconnect_service(field->get_field(), nextservice); + break; + } + nextservice = mlt_service_producer(nextservice); + if (nextservice == NULL) break; + properties = MLT_SERVICE_PROPERTIES(nextservice); + mlt_type = mlt_properties_get(properties, "mlt_type"); + resource = mlt_properties_get(properties, "mlt_service"); + } + //if (do_refresh) m_mltConsumer->set("refresh", 1); +} + +void Render::mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id) { + Mlt::Service service(m_mltProducer->parent().get_service()); + Mlt::Tractor tractor(service); + Mlt::Field *field = tractor.field(); + + mlt_service_lock(service.get_service()); + m_mltConsumer->set("refresh", 0); + m_isBlocked = true; + + mlt_service serv = m_mltProducer->parent().get_service(); + mlt_service nextservice = mlt_service_get_producer(serv); + mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); + QString mlt_type = mlt_properties_get(properties, "mlt_type"); + QString resource = mlt_properties_get(properties, "mlt_service"); + kDebug() << "// resize transpar from: " << oldStart << ", TO: " << newStart << "x" << newEnd << ", " << track << ", " << id; + while (mlt_type == "transition") { + mlt_transition tr = (mlt_transition) nextservice; + int currentTrack = mlt_transition_get_b_track(tr); + int currentIn = (int) mlt_transition_get_in(tr); + //mlt_properties props = MLT_TRANSITION_PROPERTIES(tr); + int transitionId = QString(mlt_properties_get(properties, "transparency")).toInt(); + kDebug() << "// resize transpar current in: " << currentIn << ", Track: " << currentTrack << ", id: " << id << "x" << transitionId ; + if (resource == "composite" && track == currentTrack && currentIn == oldStart && transitionId == id) { + kDebug() << " / / / / /RESIZE TRANS TO: " << newStart << "x" << newEnd; + mlt_transition_set_in_and_out(tr, newStart, newEnd); + break; + } + nextservice = mlt_service_producer(nextservice); + if (nextservice == NULL) break; + properties = MLT_SERVICE_PROPERTIES(nextservice); + mlt_type = mlt_properties_get(properties, "mlt_type"); + resource = mlt_properties_get(properties, "mlt_service"); + } + m_isBlocked = false; + mlt_service_unlock(service.get_service()); + m_mltConsumer->set("refresh", 1); + +} + +void Render::mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id) { + Mlt::Service service(m_mltProducer->parent().get_service()); + Mlt::Tractor tractor(service); + Mlt::Field *field = tractor.field(); + + mlt_service_lock(service.get_service()); + m_mltConsumer->set("refresh", 0); + m_isBlocked = true; + + mlt_service serv = m_mltProducer->parent().get_service(); + mlt_service nextservice = mlt_service_get_producer(serv); + mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); + QString mlt_type = mlt_properties_get(properties, "mlt_type"); + QString resource = mlt_properties_get(properties, "mlt_service"); + + while (mlt_type == "transition") { + mlt_transition tr = (mlt_transition) nextservice; + int currentTrack = mlt_transition_get_b_track(tr); + int currentaTrack = mlt_transition_get_a_track(tr); + int currentIn = (int) mlt_transition_get_in(tr); + int currentOut = (int) mlt_transition_get_out(tr); + //mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr); + int transitionId = QString(mlt_properties_get(properties, "transparency")).toInt(); + //kDebug()<<" + TRANSITION "<<id<<" == "<<transitionId<<", START TMIE: "<<currentIn<<", LOOK FR: "<<startTime<<", TRACK: "<<currentTrack<<"x"<<startTrack; + if (resource == "composite" && transitionId == id && startTime == currentIn && startTrack == currentTrack) { + kDebug() << "//////MOVING"; + mlt_transition_set_in_and_out(tr, endTime, endTime + currentOut - currentIn); + if (endTrack != startTrack) { + mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr); + mlt_properties_set_int(properties, "a_track", currentaTrack + endTrack - currentTrack); + mlt_properties_set_int(properties, "b_track", endTrack); + } + break; + } + nextservice = mlt_service_producer(nextservice); + if (nextservice == NULL) break; + properties = MLT_SERVICE_PROPERTIES(nextservice); + mlt_type = mlt_properties_get(properties, "mlt_type"); + resource = mlt_properties_get(properties, "mlt_service"); + } + m_isBlocked = false; + mlt_service_unlock(service.get_service()); + m_mltConsumer->set("refresh", 1); +} + + void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool do_refresh) { QMap<QString, QString> args = mltGetTransitionParamsFromXml(xml); Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/renderer.h 2008-07-21 23:30:09 UTC (rev 2339) @@ -166,8 +166,11 @@ void mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool refresh = true); void mltUpdateTransition(QString oldTag, QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml); void mltUpdateTransitionParams(QString type, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml); + void mltAddClipTransparency(ItemInfo info, int transitiontrack, int id); + void mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id); + void mltDeleteTransparency(int pos, int track, int id); + void mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id); - private: // Private attributes & methods /** The name of this renderer - useful to identify the renderes by what they do - e.g. background rendering, workspace monitor, etc... */ QString m_name; Modified: branches/KDE4/src/widgets/clipproperties_ui.ui =================================================================== --- branches/KDE4/src/widgets/clipproperties_ui.ui 2008-07-21 19:37:47 UTC (rev 2338) +++ branches/KDE4/src/widgets/clipproperties_ui.ui 2008-07-21 23:30:09 UTC (rev 2339) @@ -13,6 +13,19 @@ <string>Clip Properties</string> </property> <layout class="QGridLayout" name="gridLayout_2" > + <item row="7" column="1" colspan="2" > + <spacer name="verticalSpacer_4" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>20</width> + <height>17</height> + </size> + </property> + </spacer> + </item> <item row="0" column="0" colspan="4" > <widget class="QLabel" name="clip_thumb" > <property name="text" > @@ -75,19 +88,6 @@ </property> </widget> </item> - <item row="7" column="1" colspan="2" > - <spacer name="verticalSpacer_4" > - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>20</width> - <height>17</height> - </size> - </property> - </spacer> - </item> <item row="8" column="0" colspan="4" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="orientation" > @@ -101,7 +101,7 @@ <item row="6" column="0" colspan="4" > <widget class="QTabWidget" name="tabWidget" > <property name="currentIndex" > - <number>3</number> + <number>4</number> </property> <widget class="QWidget" name="tab_video" > <property name="geometry" > @@ -409,6 +409,47 @@ </item> </layout> </widget> + <widget class="QWidget" name="tab_4" > + <attribute name="title" > + <string>Image</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_8" > + <item row="0" column="0" > + <widget class="QLabel" name="label_16" > + <property name="text" > + <string>Image size</string> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="KLineEdit" name="image_size" > + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2" > + <widget class="QCheckBox" name="image_transparency" > + <property name="text" > + <string>Transparent background</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <spacer name="verticalSpacer_7" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>20</width> + <height>151</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> <widget class="QWidget" name="tab_3" > <property name="geometry" > <rect> @@ -573,17 +614,6 @@ </widget> </item> </layout> - <zorder>clip_thumb</zorder> - <zorder>label_5</zorder> - <zorder>clip_path</zorder> - <zorder>label_3</zorder> - <zorder>clip_description</zorder> - <zorder>clip_filesize_2</zorder> - <zorder>clip_duration</zorder> - <zorder>clip_filesize_3</zorder> - <zorder>clip_filesize</zorder> - <zorder>buttonBox</zorder> - <zorder>tabWidget</zorder> </widget> <customwidgets> <customwidget> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-22 08:28:56
|
Revision: 2341 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2341&view=rev Author: j-b-m Date: 2008-07-22 08:29:03 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Screengrab with audio now! Modified Paths: -------------- branches/KDE4/src/kdenlivesettings.kcfg branches/KDE4/src/recmonitor.cpp branches/KDE4/src/widgets/configcapture_ui.ui Modified: branches/KDE4/src/kdenlivesettings.kcfg =================================================================== --- branches/KDE4/src/kdenlivesettings.kcfg 2008-07-22 07:59:07 UTC (rev 2340) +++ branches/KDE4/src/kdenlivesettings.kcfg 2008-07-22 08:29:03 UTC (rev 2341) @@ -152,6 +152,16 @@ <default></default> </entry> + <entry name="screengrabenableaudio" type="Bool"> + <label>ffmpeg arguments for x11 grab capture.</label> + <default>false</default> + </entry> + + <entry name="screengrabaudiocapture" type="String"> + <label>ffmpeg arguments for x11 grab capture.</label> + <default>-f oss -i /dev/dsp</default> + </entry> + <entry name="screengrabcapture" type="String"> <label>ffmpeg arguments for x11 grab capture.</label> <default>-f x11grab -r 15 -s %size -i :0.0%offset</default> @@ -159,7 +169,7 @@ <entry name="screengrabencoding" type="String"> <label>ffmpeg arguments for x11 capture encoding.</label> - <default>-vcodec mpeg4 -acodec NULL</default> + <default>-vcodec mpeg4</default> </entry> <entry name="screengrabextension" type="String"> Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-07-22 07:59:07 UTC (rev 2340) +++ branches/KDE4/src/recmonitor.cpp 2008-07-22 08:29:03 UTC (rev 2341) @@ -342,6 +342,10 @@ const QRect rect = QApplication::desktop()->screenGeometry(); args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(rect.width()) + "x" + QString::number(rect.height())).replace("%offset", QString()); kDebug() << "// capture params: " << args; + if (KdenliveSettings::screengrabenableaudio()) { + // also capture audio + m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); + } m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path(); ui.video_frame->setText(i18n("Capturing...")); m_isCapturing = true; @@ -381,6 +385,10 @@ if (height % 2 != 0) height--; QString args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(width) + "x" + QString::number(height)).replace("%offset", "+" + QString::number(rect.x()) + "," + QString::number(rect.y())); kDebug() << "// capture params: " << args; + if (KdenliveSettings::screengrabenableaudio()) { + // also capture audio + m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); + } m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path(); m_isCapturing = true; ui.video_frame->setText(i18n("Capturing...")); Modified: branches/KDE4/src/widgets/configcapture_ui.ui =================================================================== --- branches/KDE4/src/widgets/configcapture_ui.ui 2008-07-22 07:59:07 UTC (rev 2340) +++ branches/KDE4/src/widgets/configcapture_ui.ui 2008-07-22 08:29:03 UTC (rev 2341) @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>502</width> - <height>374</height> + <width>446</width> + <height>312</height> </rect> </property> <layout class="QGridLayout" name="gridLayout_3" > @@ -45,7 +45,7 @@ </size> </property> <property name="currentIndex" > - <number>0</number> + <number>2</number> </property> <widget class="QWidget" name="tab" > <property name="geometry" > @@ -357,8 +357,8 @@ <rect> <x>0</x> <y>0</y> - <width>486</width> - <height>270</height> + <width>430</width> + <height>238</height> </rect> </property> <attribute name="title" > @@ -366,16 +366,26 @@ </attribute> <layout class="QGridLayout" name="gridLayout_4" > <item row="0" column="0" > + <widget class="QCheckBox" name="kcfg_screengrabenableaudio" > + <property name="text" > + <string>Capture audio</string> + </property> + </widget> + </item> + <item row="0" column="2" > + <widget class="KLineEdit" name="kcfg_screengrabaudiocapture" /> + </item> + <item row="1" column="0" colspan="2" > <widget class="QLabel" name="label_17" > <property name="text" > - <string>Capture params</string> + <string>Video capture params</string> </property> </widget> </item> - <item row="0" column="1" > + <item row="1" column="2" > <widget class="KLineEdit" name="kcfg_screengrabcapture" /> </item> - <item row="1" column="0" > + <item row="2" column="0" > <widget class="QLabel" name="label_8" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > @@ -388,7 +398,7 @@ </property> </widget> </item> - <item row="1" column="1" > + <item row="2" column="2" > <widget class="KLineEdit" name="kcfg_screengrabencoding" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > @@ -401,7 +411,7 @@ </property> </widget> </item> - <item row="2" column="0" > + <item row="3" column="0" > <widget class="QLabel" name="label_10" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > @@ -414,7 +424,7 @@ </property> </widget> </item> - <item row="2" column="1" > + <item row="3" column="2" > <widget class="KLineEdit" name="kcfg_screengrabextension" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > @@ -427,14 +437,14 @@ </property> </widget> </item> - <item row="3" column="0" colspan="2" > + <item row="4" column="0" colspan="3" > <widget class="QCheckBox" name="kcfg_fullscreengrab" > <property name="text" > <string>Full screen capture</string> </property> </widget> </item> - <item row="4" column="1" > + <item row="5" column="1" colspan="2" > <spacer name="verticalSpacer_3" > <property name="orientation" > <enum>Qt::Vertical</enum> @@ -451,20 +461,10 @@ </widget> </widget> </item> - <item row="2" column="1" > - <spacer name="verticalSpacer" > - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>20</width> - <height>56</height> - </size> - </property> - </spacer> - </item> </layout> + <zorder>label</zorder> + <zorder>kcfg_defaultcapture</zorder> + <zorder>tabWidget</zorder> </widget> <customwidgets> <customwidget> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-22 09:13:45
|
Revision: 2343 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2343&view=rev Author: j-b-m Date: 2008-07-22 09:13:53 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Nice little icons in rec monitor for user info Modified Paths: -------------- branches/KDE4/src/recmonitor.cpp branches/KDE4/src/recmonitor.h Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-07-22 08:44:20 UTC (rev 2342) +++ branches/KDE4/src/recmonitor.cpp 2008-07-22 09:13:53 UTC (rev 2343) @@ -113,7 +113,8 @@ m_recAction->setEnabled(true); m_stopAction->setEnabled(false); m_playAction->setEnabled(false); - ui.video_frame->setText(i18n("Press record button\nto start screen capture")); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture"))); + //ui.video_frame->setText(i18n("Press record button\nto start screen capture")); break; case VIDEO4LINUX: m_discAction->setEnabled(false); @@ -131,17 +132,37 @@ m_playAction->setEnabled(false); m_rewAction->setEnabled(false); m_fwdAction->setEnabled(false); - ui.video_frame->setText(i18n("Press connect button\nto initialize connection")); + //ui.video_frame->setText(i18n("Plug your camcorder and\npress connect button\nto initialize connection")); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("network-connect").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress connect button\nto initialize connection"))); break; } } +QPixmap RecMonitor::mergeSideBySide( const QPixmap& pix, const QString txt ) +{ + QPainter p; + int strWidth = p.fontMetrics().boundingRect( QRect(0, 0, ui.video_frame->width(), ui.video_frame->height()), Qt::AlignLeft, txt ).width(); + int strHeight = p.fontMetrics().height(); + int pixWidth = pix.width(); + int pixHeight = pix.height(); + QPixmap res( strWidth + 8 + pixWidth, qMax( strHeight, pixHeight ) ); + res.fill(Qt::transparent); + p.begin( &res ); + p.drawPixmap(0,0, pix ); + p.drawText( QRect( pixWidth +8, 0, strWidth, pixHeight), 0, txt ); + p.end(); + return res; +} + + void RecMonitor::checkDeviceAvailability() { if (!KIO::NetAccess::exists(KUrl(KdenliveSettings::video4vdevice()), KIO::NetAccess::SourceSide , this)) { m_playAction->setEnabled(false); m_recAction->setEnabled(false); - ui.video_frame->setText(i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice())); - } else ui.video_frame->setText(i18n("Press play or record button\nto start video capture")); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice()))); + //ui.video_frame->setText(i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice())); + } else //ui.video_frame->setText(i18n("Press play or record button\nto start video capture")); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Press play or record button\nto start video capture"))); } void RecMonitor::slotDisconnect() { Modified: branches/KDE4/src/recmonitor.h =================================================================== --- branches/KDE4/src/recmonitor.h 2008-07-22 08:44:20 UTC (rev 2342) +++ branches/KDE4/src/recmonitor.h 2008-07-22 09:13:53 UTC (rev 2343) @@ -72,6 +72,7 @@ QAction *m_stopAction; QAction *m_discAction; void checkDeviceAvailability(); + QPixmap mergeSideBySide( const QPixmap& pix, const QString txt ); private slots: void slotStartCapture(bool play = true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-22 18:01:44
|
Revision: 2344 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2344&view=rev Author: j-b-m Date: 2008-07-22 18:01:53 +0000 (Tue, 22 Jul 2008) Log Message: ----------- add config button to rec monitor Modified Paths: -------------- branches/KDE4/src/kdenlivesettingsdialog.cpp branches/KDE4/src/kdenlivesettingsdialog.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/recmonitor.cpp branches/KDE4/src/recmonitor.h Modified: branches/KDE4/src/kdenlivesettingsdialog.cpp =================================================================== --- branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-07-22 09:13:53 UTC (rev 2343) +++ branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-07-22 18:01:53 UTC (rev 2344) @@ -105,7 +105,28 @@ KdenliveSettingsDialog::~KdenliveSettingsDialog() {} +void KdenliveSettingsDialog::showPage(int page, int option) { + switch (page) { + case 1: + setCurrentPage(page1); + break; + case 2: + setCurrentPage(page2); + break; + case 3: + setCurrentPage(page3); + break; + case 4: + setCurrentPage(page4); + m_configCapture.tabWidget->setCurrentIndex(option); + break; + case 5: + setCurrentPage(page5); + break; + } +} + void KdenliveSettingsDialog::slotEditVideoApplication() { KService::Ptr service; KOpenWithDialog dlg(KUrl::List(), i18n("Select default video player"), m_configEnv.kcfg_defaultplayerapp->text(), this); Modified: branches/KDE4/src/kdenlivesettingsdialog.h =================================================================== --- branches/KDE4/src/kdenlivesettingsdialog.h 2008-07-22 09:13:53 UTC (rev 2343) +++ branches/KDE4/src/kdenlivesettingsdialog.h 2008-07-22 18:01:53 UTC (rev 2344) @@ -37,6 +37,7 @@ public: KdenliveSettingsDialog(QWidget * parent = 0); ~KdenliveSettingsDialog(); + void showPage(int page, int option); protected: virtual bool hasChanged(); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-22 09:13:53 UTC (rev 2343) +++ branches/KDE4/src/mainwindow.cpp 2008-07-22 18:01:53 UTC (rev 2344) @@ -164,6 +164,7 @@ addDockWidget(Qt::TopDockWidgetArea, recMonitorDock); connect(m_recMonitor, SIGNAL(addProjectClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl))); + connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int))); undoViewDock = new QDockWidget(i18n("Undo History"), this); undoViewDock->setObjectName("undo_history"); @@ -1097,18 +1098,21 @@ m_activeDocument = doc; } -void MainWindow::slotPreferences() { +void MainWindow::slotPreferences(int page, int option) { //An instance of your dialog could be already created and could be // cached, in which case you want to display the cached dialog // instead of creating another one - if (KConfigDialog::showDialog("settings")) + if (KConfigDialog::showDialog("settings")) { + if (page != -1) static_cast <KdenliveSettingsDialog*>(KConfigDialog::exists("settings"))->showPage(page, option); return; + } // KConfigDialog didn't find an instance of this dialog, so lets // create it : KdenliveSettingsDialog* dialog = new KdenliveSettingsDialog(this); connect(dialog, SIGNAL(settingsChanged(const QString&)), this, SLOT(updateConfiguration())); dialog->show(); + if (page != -1) dialog->showPage(page, option); } void MainWindow::updateConfiguration() { Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-07-22 09:13:53 UTC (rev 2343) +++ branches/KDE4/src/mainwindow.h 2008-07-22 18:01:53 UTC (rev 2344) @@ -175,7 +175,7 @@ void saveFile(); void saveFileAs(); void saveFileAs(const QString &outputFileName); - void slotPreferences(); + void slotPreferences(int page = -1, int option = -1); void updateConfiguration(); void slotConnectMonitors(); void slotRaiseMonitor(bool clipMonitor); Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-07-22 09:13:53 UTC (rev 2343) +++ branches/KDE4/src/recmonitor.cpp 2008-07-22 18:01:53 UTC (rev 2344) @@ -48,7 +48,7 @@ QToolBar *toolbar = new QToolBar(name, this); QHBoxLayout *layout = new QHBoxLayout; - + layout->setContentsMargins(0, 0, 0, 0); m_playIcon = KIcon("media-playback-start"); m_pauseIcon = KIcon("media-playback-pause"); @@ -71,6 +71,12 @@ connect(m_recAction, SIGNAL(triggered()), this, SLOT(slotRecord())); m_recAction->setCheckable(true); + toolbar->addSeparator(); + + QAction *configAction = toolbar->addAction(KIcon("configure"), i18n("Configure")); + connect(configAction, SIGNAL(triggered()), this, SLOT(slotConfigure())); + configAction->setCheckable(false); + layout->addWidget(toolbar); ui.control_frame_firewire->setLayout(layout); @@ -104,6 +110,10 @@ return m_name; } +void RecMonitor::slotConfigure() { + emit showConfigDialog(4, ui.device_selector->currentIndex()); +} + void RecMonitor::slotVideoDeviceChanged(int ix) { switch (ix) { case SCREENGRAB: @@ -113,7 +123,7 @@ m_recAction->setEnabled(true); m_stopAction->setEnabled(false); m_playAction->setEnabled(false); - ui.video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture"))); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder()))); //ui.video_frame->setText(i18n("Press record button\nto start screen capture")); break; case VIDEO4LINUX: @@ -133,23 +143,23 @@ m_rewAction->setEnabled(false); m_fwdAction->setEnabled(false); //ui.video_frame->setText(i18n("Plug your camcorder and\npress connect button\nto initialize connection")); - ui.video_frame->setPixmap(mergeSideBySide(KIcon("network-connect").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress connect button\nto initialize connection"))); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("network-connect").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress connect button\nto initialize connection\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder()))); break; } } -QPixmap RecMonitor::mergeSideBySide( const QPixmap& pix, const QString txt ) -{ +QPixmap RecMonitor::mergeSideBySide(const QPixmap& pix, const QString txt) { QPainter p; - int strWidth = p.fontMetrics().boundingRect( QRect(0, 0, ui.video_frame->width(), ui.video_frame->height()), Qt::AlignLeft, txt ).width(); - int strHeight = p.fontMetrics().height(); + QRect r = p.fontMetrics().boundingRect(QRect(0, 0, ui.video_frame->width(), ui.video_frame->height()), Qt::AlignLeft, txt); + int strWidth = r.width(); + int strHeight = r.height(); int pixWidth = pix.width(); int pixHeight = pix.height(); - QPixmap res( strWidth + 8 + pixWidth, qMax( strHeight, pixHeight ) ); + QPixmap res(strWidth + 8 + pixWidth, qMax(strHeight, pixHeight)); res.fill(Qt::transparent); - p.begin( &res ); - p.drawPixmap(0,0, pix ); - p.drawText( QRect( pixWidth +8, 0, strWidth, pixHeight), 0, txt ); + p.begin(&res); + p.drawPixmap(0, 0, pix); + p.drawText(QRect(pixWidth + 8, 0, strWidth, strHeight), 0, txt); p.end(); return res; } @@ -159,10 +169,10 @@ if (!KIO::NetAccess::exists(KUrl(KdenliveSettings::video4vdevice()), KIO::NetAccess::SourceSide , this)) { m_playAction->setEnabled(false); m_recAction->setEnabled(false); - ui.video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice()))); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice()))); //ui.video_frame->setText(i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice())); } else //ui.video_frame->setText(i18n("Press play or record button\nto start video capture")); - ui.video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Press play or record button\nto start video capture"))); + ui.video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Press play or record button\nto start video capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder()))); } void RecMonitor::slotDisconnect() { @@ -363,10 +373,10 @@ const QRect rect = QApplication::desktop()->screenGeometry(); args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(rect.width()) + "x" + QString::number(rect.height())).replace("%offset", QString()); kDebug() << "// capture params: " << args; - if (KdenliveSettings::screengrabenableaudio()) { - // also capture audio - m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); - } + if (KdenliveSettings::screengrabenableaudio()) { + // also capture audio + m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); + } m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path(); ui.video_frame->setText(i18n("Capturing...")); m_isCapturing = true; @@ -407,8 +417,8 @@ QString args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(width) + "x" + QString::number(height)).replace("%offset", "+" + QString::number(rect.x()) + "," + QString::number(rect.y())); kDebug() << "// capture params: " << args; if (KdenliveSettings::screengrabenableaudio()) { - // also capture audio - m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); + // also capture audio + m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); } m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path(); m_isCapturing = true; @@ -427,8 +437,8 @@ m_playAction->setEnabled(false); m_rewAction->setEnabled(false); m_fwdAction->setEnabled(false); + m_recAction->setEnabled(false); } - m_isCapturing = false; m_isPlaying = false; m_playAction->setIcon(m_playIcon); m_recAction->setChecked(false); @@ -436,7 +446,13 @@ ui.device_selector->setEnabled(true); if (captureProcess && captureProcess->exitStatus() == QProcess::CrashExit) { ui.video_frame->setText(i18n("Capture crashed, please check your parameters")); - } else ui.video_frame->setText(i18n("Not connected")); + } else { + ui.video_frame->setText(i18n("Not connected")); + if (m_isCapturing && ui.device_selector->currentIndex() == FIREWIRE) { + //TODO: show dialog asking user confirmation for captured files + } + } + m_isCapturing = false; } else { if (ui.device_selector->currentIndex() != SCREENGRAB) m_stopAction->setEnabled(true); ui.device_selector->setEnabled(false); Modified: branches/KDE4/src/recmonitor.h =================================================================== --- branches/KDE4/src/recmonitor.h 2008-07-22 09:13:53 UTC (rev 2343) +++ branches/KDE4/src/recmonitor.h 2008-07-22 18:01:53 UTC (rev 2344) @@ -72,7 +72,7 @@ QAction *m_stopAction; QAction *m_discAction; void checkDeviceAvailability(); - QPixmap mergeSideBySide( const QPixmap& pix, const QString txt ); + QPixmap mergeSideBySide(const QPixmap& pix, const QString txt); private slots: void slotStartCapture(bool play = true); @@ -84,6 +84,7 @@ void slotForward(); void slotDisconnect(); void slotStartGrab(const QRect &rect); + void slotConfigure(); public slots: void refreshRecMonitor(bool visible); @@ -96,6 +97,7 @@ void renderPosition(int); void durationChanged(int); void addProjectClip(KUrl); + void showConfigDialog(int, int); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-22 21:47:58
|
Revision: 2345 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2345&view=rev Author: j-b-m Date: 2008-07-22 21:48:02 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Work on firewire capture: dv should work, you now get a captured file dialog when pressing disconnect Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/kdenlivesettings.kcfg branches/KDE4/src/projectlist.cpp branches/KDE4/src/recmonitor.cpp branches/KDE4/src/recmonitor.h branches/KDE4/src/widgets/configcapture_ui.ui Added Paths: ----------- branches/KDE4/src/managecapturesdialog.cpp branches/KDE4/src/managecapturesdialog.h branches/KDE4/src/widgets/managecaptures_ui.ui Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-07-22 18:01:53 UTC (rev 2344) +++ branches/KDE4/src/CMakeLists.txt 2008-07-22 21:48:02 UTC (rev 2345) @@ -53,6 +53,7 @@ widgets/markerdialog_ui.ui widgets/keyframedialog_ui.ui widgets/clipdurationdialog_ui.ui + widgets/managecaptures_ui.ui ) set(kdenlive_SRCS @@ -121,6 +122,7 @@ regiongrabber.cpp editkeyframecommand.cpp clipdurationdialog.cpp + managecapturesdialog.cpp ) kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc ) Modified: branches/KDE4/src/kdenlivesettings.kcfg =================================================================== --- branches/KDE4/src/kdenlivesettings.kcfg 2008-07-22 18:01:53 UTC (rev 2344) +++ branches/KDE4/src/kdenlivesettings.kcfg 2008-07-22 21:48:02 UTC (rev 2345) @@ -107,6 +107,16 @@ <default>0</default> </entry> + <entry name="firewireautosplit" type="Bool"> + <label>Create new capture file on scene cut.</label> + <default>false</default> + </entry> + + <entry name="firewiretimestamp" type="Bool"> + <label>Add record time to captured file name.</label> + <default>false</default> + </entry> + <entry name="video4vformat" type="String"> <label>Default video4linux capture format.</label> <default>video4linux2</default> Added: branches/KDE4/src/managecapturesdialog.cpp =================================================================== --- branches/KDE4/src/managecapturesdialog.cpp (rev 0) +++ branches/KDE4/src/managecapturesdialog.cpp 2008-07-22 21:48:02 UTC (rev 2345) @@ -0,0 +1,111 @@ +/*************************************************************************** + * Copyright (C) 2008 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + +#include <QTreeWidgetItem> +#include <QFile> +#include <QHeaderView> + +#include <KDebug> +#include <KGlobalSettings> +#include <KFileItem> +#include <KIO/NetAccess> + +#include "managecapturesdialog.h" + + +ManageCapturesDialog::ManageCapturesDialog(KUrl::List files, QWidget * parent): QDialog(parent) { + setFont(KGlobalSettings::toolBarFont()); + m_view.setupUi(this); + m_importButton = m_view.buttonBox->button(QDialogButtonBox::Ok); + m_importButton->setText(i18n("import")); + foreach(const KUrl url, files) { + QStringList text; + text << url.fileName(); + KFileItem file(KFileItem::Unknown, KFileItem::Unknown, url, true); + text << KIO::convertSize(file.size()); + QTreeWidgetItem *item = new QTreeWidgetItem(m_view.treeWidget, text); + item->setData(0, Qt::UserRole, url.path()); + item->setToolTip(0, url.path()); + item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item->setCheckState(0, Qt::Checked); + } + connect(m_view.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotRefreshButtons())); + connect(m_view.deleteButton, SIGNAL(pressed()), this, SLOT(slotDeleteCurrent())); + connect(m_view.toggleButton, SIGNAL(pressed()), this, SLOT(slotToggle())); + QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(0); + if (item) m_view.treeWidget->setCurrentItem(item); + m_view.treeWidget->header()->setResizeMode(0, QHeaderView::Stretch); + adjustSize(); +} + +ManageCapturesDialog::~ManageCapturesDialog() { +} + +void ManageCapturesDialog::slotRefreshButtons() { + int count = m_view.treeWidget->topLevelItemCount(); + bool enabled = false; + for (int i = 0; i < count; i++) { + QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(i); + if (item && item->checkState(0) == Qt::Checked) { + enabled = true; + break; + } + } + m_importButton->setEnabled(enabled); +} + +void ManageCapturesDialog::slotDeleteCurrent() { + QTreeWidgetItem *item = m_view.treeWidget->currentItem(); + if (!item) return; + int i = m_view.treeWidget->indexOfTopLevelItem(item); + m_view.treeWidget->takeTopLevelItem(i); + kDebug() << "DELETING FILE: " << item->text(0); + //KIO::NetAccess::del(KUrl(item->text(0)), this); + QFile f(item->data(0, Qt::UserRole).toString()); + f.remove(); + delete item; + item = NULL; +} + +void ManageCapturesDialog::slotToggle() { + int count = m_view.treeWidget->topLevelItemCount(); + for (int i = 0; i < count; i++) { + QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(i); + if (item) { + if (item->checkState(0) == Qt::Checked) item->setCheckState(0, Qt::Unchecked); + else item->setCheckState(0, Qt::Checked); + } + } +} + +KUrl::List ManageCapturesDialog::importFiles() { + KUrl::List result; + + int count = m_view.treeWidget->topLevelItemCount(); + for (int i = 0; i < count; i++) { + QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(i); + if (item && item->checkState(0) == Qt::Checked) + result.append(KUrl(item->data(0, Qt::UserRole).toString())); + } + return result; +} + +#include "managecapturesdialog.moc" + + Added: branches/KDE4/src/managecapturesdialog.h =================================================================== --- branches/KDE4/src/managecapturesdialog.h (rev 0) +++ branches/KDE4/src/managecapturesdialog.h 2008-07-22 21:48:02 UTC (rev 2345) @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2008 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + + +#ifndef CAPTUREDIALOG_H +#define CAPTUREDIALOG_H + +#include <QDialog> +#include <QPushButton> + +#include <KUrl> + +//#include "docclipbase.h" +#include "ui_managecaptures_ui.h" + +class ManageCapturesDialog : public QDialog { + Q_OBJECT + +public: + ManageCapturesDialog(KUrl::List files, QWidget * parent = 0); + ~ManageCapturesDialog(); + KUrl::List importFiles(); + +private slots: + void slotRefreshButtons(); + void slotDeleteCurrent(); + void slotToggle(); + +protected: + //void wheelEvent(QWheelEvent * event); + +private: + Ui::ManageCaptures_UI m_view; + QPushButton *m_importButton; + +signals: + //void updateThumb(); +}; + + +#endif + Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-22 18:01:53 UTC (rev 2344) +++ branches/KDE4/src/projectlist.cpp 2008-07-22 21:48:02 UTC (rev 2345) @@ -314,7 +314,7 @@ list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video"); } else list.append(givenUrl); if (list.isEmpty()) return; - KUrl::List::Iterator it; + int groupId = -1; if (group.isEmpty()) { ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem()); @@ -329,8 +329,8 @@ groupId = item->clipId(); } } - for (it = list.begin(); it != list.end(); it++) { - m_doc->slotAddClipFile(*it, group, groupId); + foreach(const KUrl file, list) { + m_doc->slotAddClipFile(file, group, groupId); } } Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-07-22 18:01:53 UTC (rev 2344) +++ branches/KDE4/src/recmonitor.cpp 2008-07-22 21:48:02 UTC (rev 2345) @@ -31,13 +31,15 @@ #include <KStandardDirs> #include <KComboBox> #include <KIO/NetAccess> +#include <KFileItem> #include "gentime.h" #include "kdenlivesettings.h" +#include "managecapturesdialog.h" #include "recmonitor.h" RecMonitor::RecMonitor(QString name, QWidget *parent) - : QWidget(parent), m_name(name), m_isActive(false), m_isCapturing(false), m_isPlaying(false) { + : QWidget(parent), m_name(name), m_isActive(false), m_isCapturing(false), m_isPlaying(false), m_didCapture(false) { ui.setupUi(this); ui.video_frame->setAttribute(Qt::WA_PaintOnScreen); @@ -177,6 +179,9 @@ void RecMonitor::slotDisconnect() { if (captureProcess->state() == QProcess::NotRunning) { + m_captureTime = KDateTime::currentLocalDateTime(); + kDebug() << "CURRENT TIME: " << m_captureTime.toString(); + m_didCapture = false; slotStartCapture(false); m_discAction->setIcon(KIcon("network-disconnect")); m_discAction->setText(i18n("Disonnect")); @@ -187,6 +192,9 @@ m_fwdAction->setEnabled(true); } else { captureProcess->write("q", 1); + QTimer::singleShot(1000, captureProcess, SLOT(kill())); + if (m_didCapture) manageCapturedFiles(); + m_didCapture = false; } } @@ -281,8 +289,33 @@ switch (ui.device_selector->currentIndex()) { case FIREWIRE: - m_captureArgs << "--format" << "hdv" << "-i" << "capture" << "-"; - m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-"; + switch (KdenliveSettings::firewireformat()) { + case 0: + // RAW DV CAPTURE + m_captureArgs << "--format" << "raw"; + m_displayArgs << "-f" << "dv"; + break; + case 1: + // DV type 1 + m_captureArgs << "--format" << "dv1"; + m_displayArgs << "-f" << "dv"; + break; + case 2: + // DV type 2 + m_captureArgs << "--format" << "dv2"; + m_displayArgs << "-f" << "dv"; + break; + case 3: + // HDV CAPTURE + m_captureArgs << "--format" << "hdv"; + m_displayArgs << "-f" << "mpegts"; + break; + } + if (KdenliveSettings::firewireautosplit()) m_captureArgs << "--autosplit"; + if (KdenliveSettings::firewiretimestamp()) m_captureArgs << "--timestamp"; + m_captureArgs << "-i" << "capture" << "-"; + m_displayArgs << "-x" << QString::number(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-"; + captureProcess->setStandardOutputProcess(displayProcess); captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder()); captureProcess->start("dvgrab", m_captureArgs); @@ -334,6 +367,7 @@ return; } else if (ui.device_selector->currentIndex() == FIREWIRE) { m_isCapturing = true; + m_didCapture = true; captureProcess->write("c\n", 3); return; } @@ -448,9 +482,6 @@ ui.video_frame->setText(i18n("Capture crashed, please check your parameters")); } else { ui.video_frame->setText(i18n("Not connected")); - if (m_isCapturing && ui.device_selector->currentIndex() == FIREWIRE) { - //TODO: show dialog asking user confirmation for captured files - } } m_isCapturing = false; } else { @@ -459,6 +490,47 @@ } } +void RecMonitor::manageCapturedFiles() { + QString extension; + switch (KdenliveSettings::firewireformat()) { + case 0: + extension = ".dv"; + break; + case 1: + case 2: + extension = ".avi"; + break; + case 3: + extension = ".m2t"; + break; + } + QDir dir(KdenliveSettings::capturefolder()); + QStringList filters; + filters << "capture*" + extension; + QStringList result = dir.entryList(filters, QDir::Files, QDir::Time); + KUrl::List capturedFiles; + foreach(QString name, result) { + KUrl url = KUrl(dir.filePath(name)); + if (KIO::NetAccess::exists(url, KIO::NetAccess::SourceSide, this)) { + KFileItem file(KFileItem::Unknown, KFileItem::Unknown, url, true); + if (file.time(KFileItem::ModificationTime) > m_captureTime) capturedFiles.append(url); + } + } + kDebug() << "Found : " << capturedFiles.count() << " new capture files"; + kDebug() << capturedFiles; + + if (capturedFiles.count() > 0) { + ManageCapturesDialog *d = new ManageCapturesDialog(capturedFiles, this); + if (d->exec() == QDialog::Accepted) { + capturedFiles = d->importFiles(); + foreach(KUrl url, capturedFiles) { + emit addProjectClip(url); + } + } + delete d; + } +} + // virtual void RecMonitor::mousePressEvent(QMouseEvent * event) { slotPlay(); Modified: branches/KDE4/src/recmonitor.h =================================================================== --- branches/KDE4/src/recmonitor.h 2008-07-22 18:01:53 UTC (rev 2344) +++ branches/KDE4/src/recmonitor.h 2008-07-22 21:48:02 UTC (rev 2345) @@ -29,6 +29,7 @@ #include <KIcon> #include <KAction> #include <KRestrictedLine> +#include <KDateTime> #include "ui_recmonitor_ui.h" #include "smallruler.h" @@ -52,8 +53,8 @@ QString m_name; RegionGrabber *rgnGrab; bool m_isActive; + KDateTime m_captureTime; - KUrl m_captureFile; KIcon m_playIcon; KIcon m_pauseIcon; @@ -62,6 +63,8 @@ QProcess *displayProcess; QTimer *m_initTimer; bool m_isCapturing; + /** did the user capture something ? */ + bool m_didCapture; bool m_isPlaying; QStringList m_captureArgs; QStringList m_displayArgs; @@ -73,6 +76,7 @@ QAction *m_discAction; void checkDeviceAvailability(); QPixmap mergeSideBySide(const QPixmap& pix, const QString txt); + void manageCapturedFiles(); private slots: void slotStartCapture(bool play = true); Modified: branches/KDE4/src/widgets/configcapture_ui.ui =================================================================== --- branches/KDE4/src/widgets/configcapture_ui.ui 2008-07-22 18:01:53 UTC (rev 2344) +++ branches/KDE4/src/widgets/configcapture_ui.ui 2008-07-22 21:48:02 UTC (rev 2345) @@ -45,15 +45,15 @@ </size> </property> <property name="currentIndex" > - <number>2</number> + <number>0</number> </property> <widget class="QWidget" name="tab" > <property name="geometry" > <rect> <x>0</x> <y>0</y> - <width>486</width> - <height>270</height> + <width>430</width> + <height>238</height> </rect> </property> <attribute name="title" > @@ -63,11 +63,11 @@ <item row="0" column="0" > <widget class="QLabel" name="label_2" > <property name="text" > - <string>Default format</string> + <string>Capture format</string> </property> </widget> </item> - <item row="0" column="1" colspan="2" > + <item row="0" column="1" > <widget class="KComboBox" name="kcfg_firewireformat" > <item> <property name="text" > @@ -91,7 +91,7 @@ </item> </widget> </item> - <item row="0" column="3" > + <item row="0" column="2" > <spacer name="horizontalSpacer" > <property name="orientation" > <enum>Qt::Horizontal</enum> @@ -104,7 +104,21 @@ </property> </spacer> </item> - <item row="1" column="2" > + <item row="1" column="0" colspan="3" > + <widget class="QCheckBox" name="kcfg_firewireautosplit" > + <property name="text" > + <string>Automatically start a new file on scene cut</string> + </property> + </widget> + </item> + <item row="2" column="0" colspan="3" > + <widget class="QCheckBox" name="kcfg_firewiretimestamp" > + <property name="text" > + <string>Add recording time to captured file name</string> + </property> + </widget> + </item> + <item row="3" column="1" > <spacer name="verticalSpacer_2" > <property name="orientation" > <enum>Qt::Vertical</enum> @@ -124,8 +138,8 @@ <rect> <x>0</x> <y>0</y> - <width>486</width> - <height>270</height> + <width>430</width> + <height>238</height> </rect> </property> <attribute name="title" > @@ -462,9 +476,6 @@ </widget> </item> </layout> - <zorder>label</zorder> - <zorder>kcfg_defaultcapture</zorder> - <zorder>tabWidget</zorder> </widget> <customwidgets> <customwidget> Added: branches/KDE4/src/widgets/managecaptures_ui.ui =================================================================== --- branches/KDE4/src/widgets/managecaptures_ui.ui (rev 0) +++ branches/KDE4/src/widgets/managecaptures_ui.ui 2008-07-22 21:48:02 UTC (rev 2345) @@ -0,0 +1,106 @@ +<ui version="4.0" > + <class>ManageCaptures_UI</class> + <widget class="QDialog" name="ManageCaptures_UI" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>440</width> + <height>245</height> + </rect> + </property> + <property name="windowTitle" > + <string>Captured files</string> + </property> + <layout class="QGridLayout" name="gridLayout" > + <item row="0" column="0" colspan="3" > + <widget class="QTreeWidget" name="treeWidget" > + <property name="alternatingRowColors" > + <bool>true</bool> + </property> + <property name="rootIsDecorated" > + <bool>false</bool> + </property> + <property name="itemsExpandable" > + <bool>false</bool> + </property> + <property name="sortingEnabled" > + <bool>true</bool> + </property> + <property name="allColumnsShowFocus" > + <bool>true</bool> + </property> + <column> + <property name="text" > + <string>File name</string> + </property> + </column> + <column> + <property name="text" > + <string>Size</string> + </property> + </column> + </widget> + </item> + <item row="1" column="0" > + <widget class="QPushButton" name="deleteButton" > + <property name="text" > + <string>Delete current file</string> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QPushButton" name="toggleButton" > + <property name="text" > + <string>Toggle selection</string> + </property> + </widget> + </item> + <item row="1" column="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>ManageCaptures_UI</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>ManageCaptures_UI</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-22 22:43:32
|
Revision: 2346 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2346&view=rev Author: j-b-m Date: 2008-07-22 22:43:41 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Show clip thumbnail in captured files dialog Modified Paths: -------------- branches/KDE4/src/kthumb.h branches/KDE4/src/managecapturesdialog.cpp branches/KDE4/src/managecapturesdialog.h Modified: branches/KDE4/src/kthumb.h =================================================================== --- branches/KDE4/src/kthumb.h 2008-07-22 21:48:02 UTC (rev 2345) +++ branches/KDE4/src/kthumb.h 2008-07-22 22:43:41 UTC (rev 2346) @@ -18,12 +18,12 @@ #ifndef KTHUMB_H #define KTHUMB_H -#include <qobject.h> -#include <qpixmap.h> -#include <qfile.h> -#include <qthread.h> +#include <QPixmap> +#include <QFile> +#include <QThread> +#include <QDomElement> -#include <kurl.h> +#include <KUrl> #include <mlt++/Mlt.h> Modified: branches/KDE4/src/managecapturesdialog.cpp =================================================================== --- branches/KDE4/src/managecapturesdialog.cpp 2008-07-22 21:48:02 UTC (rev 2345) +++ branches/KDE4/src/managecapturesdialog.cpp 2008-07-22 22:43:41 UTC (rev 2346) @@ -20,6 +20,9 @@ #include <QTreeWidgetItem> #include <QFile> #include <QHeaderView> +#include <QIcon> +#include <QPixmap> +#include <QTimer> #include <KDebug> #include <KGlobalSettings> @@ -27,6 +30,7 @@ #include <KIO/NetAccess> #include "managecapturesdialog.h" +#include "kthumb.h" ManageCapturesDialog::ManageCapturesDialog(KUrl::List files, QWidget * parent): QDialog(parent) { @@ -34,6 +38,7 @@ m_view.setupUi(this); m_importButton = m_view.buttonBox->button(QDialogButtonBox::Ok); m_importButton->setText(i18n("import")); + m_view.treeWidget->setIconSize(QSize(70, 50)); foreach(const KUrl url, files) { QStringList text; text << url.fileName(); @@ -50,13 +55,34 @@ connect(m_view.toggleButton, SIGNAL(pressed()), this, SLOT(slotToggle())); QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(0); if (item) m_view.treeWidget->setCurrentItem(item); - m_view.treeWidget->header()->setResizeMode(0, QHeaderView::Stretch); + connect(m_view.treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(slotCheckItemIcon())); + QTimer::singleShot(500, this, SLOT(slotCheckItemIcon())); + m_view.treeWidget->resizeColumnToContents(0); + m_view.treeWidget->setEnabled(false); adjustSize(); } ManageCapturesDialog::~ManageCapturesDialog() { } +void ManageCapturesDialog::slotCheckItemIcon() { + int ct = 0; + int count = m_view.treeWidget->topLevelItemCount(); + while (ct < count) { + QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(ct); + //QTreeWidgetItem *item = m_view.treeWidget->currentItem(); + if (item->icon(0).isNull()) { + QPixmap p = KThumb::getImage(KUrl(item->data(0, Qt::UserRole).toString()), 0, 70, 50); + item->setIcon(0, QIcon(p)); + m_view.treeWidget->resizeColumnToContents(0); + repaint(); + //QTimer::singleShot(400, this, SLOT(slotCheckItemIcon())); + } + ct++; + } + m_view.treeWidget->setEnabled(true); +} + void ManageCapturesDialog::slotRefreshButtons() { int count = m_view.treeWidget->topLevelItemCount(); bool enabled = false; Modified: branches/KDE4/src/managecapturesdialog.h =================================================================== --- branches/KDE4/src/managecapturesdialog.h 2008-07-22 21:48:02 UTC (rev 2345) +++ branches/KDE4/src/managecapturesdialog.h 2008-07-22 22:43:41 UTC (rev 2346) @@ -41,6 +41,7 @@ void slotRefreshButtons(); void slotDeleteCurrent(); void slotToggle(); + void slotCheckItemIcon(); protected: //void wheelEvent(QWheelEvent * event); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-29 12:26:52
|
Revision: 2347 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2347&view=rev Author: j-b-m Date: 2008-07-29 12:26:59 +0000 (Tue, 29 Jul 2008) Log Message: ----------- some cleanup and check that users don't add invalid clips Modified Paths: -------------- branches/KDE4/src/clipitem.cpp branches/KDE4/src/clipproperties.cpp branches/KDE4/src/effectslistview.cpp branches/KDE4/src/effectslistwidget.cpp branches/KDE4/src/graphicsscenerectmove.cpp branches/KDE4/src/initeffects.cpp branches/KDE4/src/mainwindow.cpp branches/KDE4/src/managecapturesdialog.cpp branches/KDE4/src/profilesdialog.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h branches/KDE4/src/projectlistview.cpp branches/KDE4/src/recmonitor.cpp branches/KDE4/src/regiongrabber.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h branches/KDE4/src/slideshowclip.cpp Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/clipitem.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -152,8 +152,8 @@ m_keyframeFactor = 100.0 / (max - min); m_keyframeDefault = e.attribute("default").toDouble(); // parse keyframes - QStringList keyframes = e.attribute("keyframes").split(";", QString::SkipEmptyParts); - foreach(QString str, keyframes) { + const QStringList keyframes = e.attribute("keyframes").split(";", QString::SkipEmptyParts); + foreach(const QString str, keyframes) { int pos = str.section(":", 0, 0).toInt(); double val = str.section(":", 1, 1).toDouble(); m_keyframes[pos] = val; @@ -181,8 +181,8 @@ m_keyframeFactor = 100.0 / (max - min); m_keyframeDefault = e.attribute("default").toDouble(); // parse keyframes - QStringList keyframes = e.attribute("keyframes").split(";", QString::SkipEmptyParts); - foreach(QString str, keyframes) { + const QStringList keyframes = e.attribute("keyframes").split(";", QString::SkipEmptyParts); + foreach(const QString str, keyframes) { int pos = str.section(":", 0, 0).toInt(); double val = str.section(":", 1, 1).toDouble(); m_keyframes[pos] = val; @@ -786,9 +786,9 @@ QDomElement e = params.item(i).toElement(); if (e.attribute("type") == "keyframe") { // parse keyframes and adjust values - QStringList keyframes = e.attribute("keyframes").split(";", QString::SkipEmptyParts); + const QStringList keyframes = e.attribute("keyframes").split(";", QString::SkipEmptyParts); QMap <int, double> kfr; - foreach(QString str, keyframes) { + foreach(const QString str, keyframes) { int pos = str.section(":", 0, 0).toInt(); double val = str.section(":", 1, 1).toDouble(); if (pos == previous) kfr[current] = val; Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/clipproperties.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -100,16 +100,16 @@ profilePath += "/lumas/PAL/"; QDir dir(profilePath); - QStringList result = dir.entryList(QDir::Files); + QStringList filter; + filter << "*.pgm"; + const QStringList result = dir.entryList(filter, QDir::Files); QStringList imagefiles; QStringList imagenamelist; int current; - foreach(QString file, result) { - if (file.endsWith(".pgm")) { + foreach(const QString file, result) { m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); if (!lumaFile.isEmpty() && lumaFile == QString(profilePath + file)) current = m_view.luma_file->count() - 1; - } } if (!lumaFile.isEmpty()) { Modified: branches/KDE4/src/effectslistview.cpp =================================================================== --- branches/KDE4/src/effectslistview.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/effectslistview.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -104,24 +104,24 @@ QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true); QDir directory = QDir(path); - QStringList fileList = directory.entryList(QDir::Files); + QStringList filter; + filter << "*.xml"; + const QStringList fileList = directory.entryList(filter, QDir::Files); QString itemName; - foreach(QString filename, fileList) { + foreach(const QString filename, fileList) { itemName = KUrl(path + filename).path(); - if (itemName.endsWith(".xml")) { - QDomDocument doc; - QFile file(itemName); - doc.setContent(&file, false); - file.close(); - QDomNodeList effects = doc.elementsByTagName("effect"); - if (effects.count() != 1) { - kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET"; - } else { - QDomElement e = effects.item(0).toElement(); - if (e.attribute("id") == effectId) { - QFile::remove(itemName); - break; - } + QDomDocument doc; + QFile file(itemName); + doc.setContent(&file, false); + file.close(); + QDomNodeList effects = doc.elementsByTagName("effect"); + if (effects.count() != 1) { + kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET"; + } else { + QDomElement e = effects.item(0).toElement(); + if (e.attribute("id") == effectId) { + QFile::remove(itemName); + break; } } } Modified: branches/KDE4/src/effectslistwidget.cpp =================================================================== --- branches/KDE4/src/effectslistwidget.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/effectslistwidget.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -129,8 +129,7 @@ if (clickItem) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; - QList <QListWidgetItem *> list; - list = selectedItems(); + const QList <QListWidgetItem *>list = selectedItems(); QDomDocument doc; foreach(QListWidgetItem *item, list) { doc.appendChild(doc.importNode(itemEffect(item), true)); Modified: branches/KDE4/src/graphicsscenerectmove.cpp =================================================================== --- branches/KDE4/src/graphicsscenerectmove.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/graphicsscenerectmove.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -111,7 +111,7 @@ QPointF p = e->scenePos(); p += QPoint(-2, -2); resizeMode = NoResize; - QList <QGraphicsItem *> list = items(QRectF(p , QSizeF(4, 4)).toRect()); + const QList <QGraphicsItem *> list = items(QRectF(p , QSizeF(4, 4)).toRect()); QGraphicsItem *item = NULL; bool hasSelected = false; @@ -353,7 +353,7 @@ } void GraphicsSceneRectMove::setCursor(QCursor c) { - QList<QGraphicsView*> l = views(); + const QList<QGraphicsView*> l = views(); foreach(QGraphicsView* v, l) { v->setCursor(c); } Modified: branches/KDE4/src/initeffects.cpp =================================================================== --- branches/KDE4/src/initeffects.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/initeffects.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -118,11 +118,12 @@ QDir directory; for (more = direc.begin() ; more != direc.end() ; ++more) { directory = QDir(*more); - fileList = directory.entryList(QDir::Files); + QStringList filter; + filter << "*.xml"; + fileList = directory.entryList(filter, QDir::Files); for (it = fileList.begin() ; it != fileList.end() ; ++it) { itemName = KUrl(*more + *it).path(); - if (itemName.endsWith(".xml")) - parseEffectFile(&MainWindow::customEffects, &MainWindow::audioEffects, &MainWindow::videoEffects, itemName, filtersList, producersList); + parseEffectFile(&MainWindow::customEffects, &MainWindow::audioEffects, &MainWindow::videoEffects, itemName, filtersList, producersList); // kDebug()<<"// FOUND EFFECT FILE: "<<itemName<<endl; } } @@ -139,22 +140,22 @@ MainWindow::customEffects.clear(); QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true); QDir directory = QDir(path); - QStringList fileList = directory.entryList(QDir::Files); + QStringList filter; + filter << "*.xml"; + const QStringList fileList = directory.entryList(filter, QDir::Files); QString itemName; - foreach(QString filename, fileList) { + foreach(const QString filename, fileList) { itemName = KUrl(path + filename).path(); - if (itemName.endsWith(".xml")) { - QDomDocument doc; - QFile file(itemName); - doc.setContent(&file, false); - file.close(); - QDomNodeList effects = doc.elementsByTagName("effect"); - if (effects.count() != 1) { - kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET"; - } else { - QDomElement e = effects.item(0).toElement(); - MainWindow::customEffects.append(e); - } + QDomDocument doc; + QFile file(itemName); + doc.setContent(&file, false); + file.close(); + QDomNodeList effects = doc.elementsByTagName("effect"); + if (effects.count() != 1) { + kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET"; + } else { + QDomElement e = effects.item(0).toElement(); + MainWindow::customEffects.append(e); } } } Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/mainwindow.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -315,7 +315,7 @@ void MainWindow::slotReloadEffects() { initEffects::parseCustomEffectsFile(); m_customEffectsMenu->clear(); - QStringList effects = customEffects.effectNames(); + const QStringList effects = customEffects.effectNames(); QAction *action; foreach(const QString &name, effects) { action = new QAction(name, this); @@ -403,6 +403,9 @@ connect(m_projectList, SIGNAL(getFileProperties(const QDomElement &, int)), m_clipMonitor->render, SLOT(getFileProperties(const QDomElement &, int))); connect(m_clipMonitor->render, SIGNAL(replyGetImage(int, int, const QPixmap &, int, int)), m_projectList, SLOT(slotReplyGetImage(int, int, const QPixmap &, int, int))); connect(m_clipMonitor->render, SIGNAL(replyGetFileProperties(int, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &)), m_projectList, SLOT(slotReplyGetFileProperties(int, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &))); + + connect(m_clipMonitor->render, SIGNAL(removeInvalidClip(int)), m_projectList, SLOT(slotRemoveInvalidClip(int))); + connect(m_clipMonitor, SIGNAL(refreshClipThumbnail(int)), m_projectList, SLOT(slotRefreshClipThumbnail(int))); } Modified: branches/KDE4/src/managecapturesdialog.cpp =================================================================== --- branches/KDE4/src/managecapturesdialog.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/managecapturesdialog.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -62,8 +62,7 @@ adjustSize(); } -ManageCapturesDialog::~ManageCapturesDialog() { -} +ManageCapturesDialog::~ManageCapturesDialog() {} void ManageCapturesDialog::slotCheckItemIcon() { int ct = 0; Modified: branches/KDE4/src/profilesdialog.cpp =================================================================== --- branches/KDE4/src/profilesdialog.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/profilesdialog.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -79,7 +79,7 @@ } if (path.isEmpty()) return result; - KConfig confFile(path); + KConfig confFile(path, KConfig::SimpleConfig); result.path = name; result.description = confFile.entryMap().value("description"); result.frame_rate_num = confFile.entryMap().value("frame_rate_num").toInt(); @@ -104,7 +104,7 @@ // List the Mlt profiles profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); if (profilesFiles.contains(name)) { - KConfig confFile(KdenliveSettings::mltpath() + "/" + name); + KConfig confFile(KdenliveSettings::mltpath() + "/" + name, KConfig::SimpleConfig); return confFile.entryMap().value("description"); } @@ -113,7 +113,7 @@ for (int i = 0; i < customProfiles.size(); ++i) { profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); if (profilesFiles.contains(name)) { - KConfig confFile(customProfiles.at(i) + "/" + name); + KConfig confFile(customProfiles.at(i) + "/" + name, KConfig::SimpleConfig); return confFile.entryMap().value("description"); } } @@ -131,7 +131,7 @@ // List the Mlt profiles profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profilesFiles.size(); ++i) { - KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i)); + KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i), KConfig::SimpleConfig); QString desc = confFile.entryMap().value("description"); if (!desc.isEmpty()) profilesNames.append(desc); } @@ -141,7 +141,7 @@ for (int i = 0; i < customProfiles.size(); ++i) { profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profilesFiles.size(); ++i) { - KConfig confFile(customProfiles.at(i) + "/" + profilesFiles.at(i)); + KConfig confFile(customProfiles.at(i) + "/" + profilesFiles.at(i), KConfig::SimpleConfig); QString desc = confFile.entryMap().value("description"); if (!desc.isEmpty()) profilesNames.append(desc); } @@ -161,7 +161,7 @@ profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profilesFiles.size(); ++i) { if (profilesFiles.at(i) == path) { - KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i)); + KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i), KConfig::SimpleConfig); return confFile.entryMap(); } } @@ -172,7 +172,7 @@ QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profiles.size(); ++i) { if (profiles.at(i) == path) { - KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i)); + KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i), KConfig::SimpleConfig); return confFile.entryMap(); } } @@ -190,7 +190,7 @@ // List the Mlt profiles profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profilesFiles.size(); ++i) { - KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i)); + KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i), KConfig::SimpleConfig); QMap< QString, QString > values = confFile.entryMap(); if (values.value("description") == profileName) { values.insert("path", profilesFiles.at(i)); @@ -203,7 +203,7 @@ for (int i = 0; i < customProfiles.size(); ++i) { QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profiles.size(); ++i) { - KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i)); + KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i), KConfig::SimpleConfig); QMap< QString, QString > values = confFile.entryMap(); if (values.value("description") == profileName) { values.insert("path", customProfiles.at(i) + "/" + profiles.at(i)); @@ -224,7 +224,7 @@ // List the Mlt profiles profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profilesFiles.size(); ++i) { - KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i)); + KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i), KConfig::SimpleConfig); QMap< QString, QString > values = confFile.entryMap(); if (values.value("description") == profileDesc) return profilesFiles.at(i); } @@ -234,7 +234,7 @@ for (int i = 0; i < customProfiles.size(); ++i) { QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profiles.size(); ++i) { - KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i)); + KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i), KConfig::SimpleConfig); QMap< QString, QString > values = confFile.entryMap(); if (values.value("description") == profileDesc) return customProfiles.at(i) + "/" + profiles.at(i); } @@ -264,7 +264,7 @@ m_view.button_delete->setEnabled(m_isCustomProfile); m_view.properties->setEnabled(m_isCustomProfile); - KConfig confFile(currentProfilePath); + KConfig confFile(currentProfilePath, KConfig::SimpleConfig); QMap< QString, QString > values = confFile.entryMap(); m_view.description->setText(values.value("description")); m_view.size_w->setValue(values.value("width").toInt()); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/projectlist.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -330,10 +330,23 @@ } } foreach(const KUrl file, list) { - m_doc->slotAddClipFile(file, group, groupId); + if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) + m_doc->slotAddClipFile(file, group, groupId); } } +void ProjectList::slotRemoveInvalidClip(int id) { + ProjectItem *item = getItemById(id); + if (item) { + QString path = item->referencedClip()->fileURL().path(); + if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path)); + + } + QList <int> ids; + ids << id; + m_doc->deleteProjectClip(ids); +} + void ProjectList::slotAddColorClip() { if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; QDialog *dia = new QDialog(this); Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/projectlist.h 2008-07-29 12:26:59 UTC (rev 2347) @@ -118,8 +118,8 @@ void slotUpdateClip(int id); void slotRefreshClipThumbnail(int clipId); void slotRefreshClipThumbnail(ProjectItem *item); + void slotRemoveInvalidClip(int id); - private: ProjectListView *listView; KTreeWidgetSearchLine *searchView; Modified: branches/KDE4/src/projectlistview.cpp =================================================================== --- branches/KDE4/src/projectlistview.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/projectlistview.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -135,8 +135,7 @@ else if (item->parent() && ((ProjectItem *) item->parent())->isGroup()) groupName = item->parent()->text(1); } - QList <QUrl> list; - list = event->mimeData()->urls(); + const QList <QUrl> list = event->mimeData()->urls(); foreach(const QUrl &url, list) { emit addClip(url, groupName); } @@ -148,8 +147,7 @@ if (item->isGroup()) { //emit addClip(event->mimeData->text()); kDebug() << "//////////////// DROPPED RIGHT 1 "; - QList <QTreeWidgetItem *> list; - list = selectedItems(); + const QList <QTreeWidgetItem *> list = selectedItems(); ProjectItem *clone; int parentId = item->clipId(); foreach(QTreeWidgetItem *it, list) { @@ -171,8 +169,7 @@ if (!item) { kDebug() << "//////////////// DROPPED ON EMPTY ZONE"; // item dropped in empty zone, move it to top level - QList <QTreeWidgetItem *> list; - list = selectedItems(); + const QList <QTreeWidgetItem *> list = selectedItems(); ProjectItem *clone; foreach(QTreeWidgetItem *it, list) { QTreeWidgetItem *parent = it->parent(); @@ -214,8 +211,7 @@ QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; QDomDocument doc; - QList <QTreeWidgetItem *> list; - list = selectedItems(); + const QList <QTreeWidgetItem *> list = selectedItems(); QStringList ids; foreach(const QTreeWidgetItem *item, list) { // TODO allow dragging of folders Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/recmonitor.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -507,7 +507,7 @@ QDir dir(KdenliveSettings::capturefolder()); QStringList filters; filters << "capture*" + extension; - QStringList result = dir.entryList(filters, QDir::Files, QDir::Time); + const QStringList result = dir.entryList(filters, QDir::Files, QDir::Time); KUrl::List capturedFiles; foreach(QString name, result) { KUrl url = KUrl(dir.filePath(name)); Modified: branches/KDE4/src/regiongrabber.cpp =================================================================== --- branches/KDE4/src/regiongrabber.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/regiongrabber.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -308,7 +308,7 @@ QRegion RegionGrabber::handleMask() const { // note: not normalized QRects are bad here, since they will not be drawn QRegion mask; - foreach(QRect* rect, handles) mask += QRegion(*rect); + foreach(const QRect* rect, handles) mask += QRegion(*rect); return mask; } Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/renderer.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -247,14 +247,11 @@ QStringList::Iterator it; QDir dir(url.directory()); - more = dir.entryList(QDir::Files); - - for (it = more.begin() ; it != more.end() ; ++it) { - if ((*it).endsWith("." + fileType, Qt::CaseInsensitive)) { - im.load(url.directory() + "/" + *it); - break; - } - } + QStringList filter; + filter << "*." + fileType; + filter << "*." + fileType.toUpper(); + more = dir.entryList(filter, QDir::Files); + im.load(url.directory() + "/" + more.at(0)); } else im.load(url.path()); //pixmap = im.scaled(width, height); return pixmap; @@ -477,6 +474,7 @@ if (producer->is_blank()) { kDebug() << " / / / / / / / /ERRROR / / / / // CANNOT LOAD PRODUCER: "; + emit removeInvalidClip(clipId); return; } producer->set("id", clipId); Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/renderer.h 2008-07-29 12:26:59 UTC (rev 2347) @@ -238,8 +238,8 @@ void durationChanged(int); void rendererPosition(int); void rendererStopped(int); + void removeInvalidClip(int); - public slots: // Public slots /** Start Consumer */ void start(); Modified: branches/KDE4/src/slideshowclip.cpp =================================================================== --- branches/KDE4/src/slideshowclip.cpp 2008-07-22 22:43:41 UTC (rev 2346) +++ branches/KDE4/src/slideshowclip.cpp 2008-07-29 12:26:59 UTC (rev 2347) @@ -58,13 +58,13 @@ profilePath += "/lumas/PAL/"; QDir dir(profilePath); - QStringList result = dir.entryList(QDir::Files); + QStringList filter; + filter << "*.pgm"; + const QStringList result = dir.entryList(filter, QDir::Files); QStringList imagefiles; QStringList imagenamelist; - foreach(QString file, result) { - if (file.endsWith(".pgm")) { - m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); - } + foreach(const QString file, result) { + m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); } adjustSize(); @@ -108,7 +108,7 @@ } dir.setNameFilters(filters); - QStringList result = dir.entryList(QDir::Files); + const QStringList result = dir.entryList(QDir::Files); m_count = result.count(); if (m_count == 0) m_view.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); else m_view.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-29 19:48:34
|
Revision: 2348 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2348&view=rev Author: j-b-m Date: 2008-07-29 19:48:44 +0000 (Tue, 29 Jul 2008) Log Message: ----------- Fix clip monitor staying blue when opening project Modified Paths: -------------- branches/KDE4/src/monitor.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-07-29 12:26:59 UTC (rev 2347) +++ branches/KDE4/src/monitor.cpp 2008-07-29 19:48:44 UTC (rev 2348) @@ -302,7 +302,7 @@ if (render == NULL) return; if (!m_isActive) m_monitorManager->activateMonitor(m_name); if (!clip) return; - if (clip != m_currentClip) { + if (clip != m_currentClip || m_currentClip->producer() == NULL) { m_currentClip = clip; render->setProducer(clip->producer(), 0); m_ruler->slotNewValue(0); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-29 12:26:59 UTC (rev 2347) +++ branches/KDE4/src/projectlist.cpp 2008-07-29 19:48:44 UTC (rev 2348) @@ -143,11 +143,6 @@ void ProjectList::slotClipSelected() { ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem()); if (item && !item->isGroup()) { - if (item == m_selectedItem) { - // if user clicked on the active clip item, just focus monitor, don't update it. - emit clipSelected(NULL); - return; - } m_selectedItem = item; emit clipSelected(item->referencedClip()); } Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-29 12:26:59 UTC (rev 2347) +++ branches/KDE4/src/renderer.cpp 2008-07-29 19:48:44 UTC (rev 2348) @@ -667,7 +667,7 @@ m_fps = m_mltProducer->get_fps(); connectPlaylist(); - if (position != 0) { + if (position != -1) { m_mltProducer->seek(position); emit rendererPosition(position); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-29 20:01:57
|
Revision: 2349 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2349&view=rev Author: j-b-m Date: 2008-07-29 20:02:02 +0000 (Tue, 29 Jul 2008) Log Message: ----------- Fix timeline video thumbnail aspect ratio Modified Paths: -------------- branches/KDE4/src/kthumb.cpp branches/KDE4/src/kthumb.h Modified: branches/KDE4/src/kthumb.cpp =================================================================== --- branches/KDE4/src/kthumb.cpp 2008-07-29 19:48:44 UTC (rev 2348) +++ branches/KDE4/src/kthumb.cpp 2008-07-29 20:02:02 UTC (rev 2349) @@ -132,9 +132,7 @@ #define _G(y,u,v) (0x2568*(y) - 0x0c92*(v) - 0x1a1e*(u)) /0x2000 #define _B(y,u,v) (0x2568*(y) + 0x40cf*(v)) /0x2000 -KThumb::KThumb(ClipManager *clipManager, KUrl url, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_producer(NULL) { - - m_profile = new Mlt::Profile((char*) KdenliveSettings::current_profile().data()); +KThumb::KThumb(ClipManager *clipManager, KUrl url, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_producer(NULL), m_dar(1) { QCryptographicHash context(QCryptographicHash::Sha1); context.addData((KFileItem(m_url, "text/plain", S_IFREG).timeString() + m_url.fileName()).toAscii().data()); m_thumbFile = KGlobal::dirs()->saveLocation("tmp" , "kdenlive") + context.result().toHex() + ".thumb"; @@ -142,12 +140,12 @@ } KThumb::~KThumb() { - if (m_profile) delete m_profile; if (thumbProducer.isRunning()) thumbProducer.exit(); } void KThumb::setProducer(Mlt::Producer *producer) { m_producer = producer; + m_dar = producer->profile()->dar(); } void KThumb::updateClipUrl(KUrl url) { @@ -167,7 +165,7 @@ Mlt::Producer producer(*m_profile, "westley-xml", tmp); delete[] tmp;*/ - int twidth = (int)(KdenliveSettings::trackheight() * m_profile->dar()); + int twidth = (int)(KdenliveSettings::trackheight() * m_dar); if (m_producer->is_blank()) { QPixmap pix(twidth, KdenliveSettings::trackheight()); pix.fill(Qt::black); Modified: branches/KDE4/src/kthumb.h =================================================================== --- branches/KDE4/src/kthumb.h 2008-07-29 19:48:44 UTC (rev 2348) +++ branches/KDE4/src/kthumb.h 2008-07-29 20:02:02 UTC (rev 2349) @@ -96,7 +96,7 @@ MyThread thumbProducer; KUrl m_url; QString m_thumbFile; - Mlt::Profile *m_profile; + double m_dar; Mlt::Producer *m_producer; ClipManager *m_clipManager; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-07-29 23:46:52
|
Revision: 2351 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2351&view=rev Author: j-b-m Date: 2008-07-29 23:46:59 +0000 (Tue, 29 Jul 2008) Log Message: ----------- Change clip speed (slowmotion) - not finished yet, saving does not work Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/abstractclipitem.cpp branches/KDE4/src/abstractclipitem.h branches/KDE4/src/clipitem.cpp branches/KDE4/src/clipitem.h branches/KDE4/src/clipproperties.cpp branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/initeffects.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenliveui.rc branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/managecapturesdialog.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h branches/KDE4/src/resizeclipcommand.cpp branches/KDE4/src/resizeclipcommand.h Added Paths: ----------- branches/KDE4/src/changespeedcommand.cpp branches/KDE4/src/changespeedcommand.h Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/CMakeLists.txt 2008-07-29 23:46:59 UTC (rev 2351) @@ -123,6 +123,7 @@ editkeyframecommand.cpp clipdurationdialog.cpp managecapturesdialog.cpp + changespeedcommand.cpp ) kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc ) Modified: branches/KDE4/src/abstractclipitem.cpp =================================================================== --- branches/KDE4/src/abstractclipitem.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/abstractclipitem.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -173,6 +173,10 @@ return m_maxDuration; } +void AbstractClipItem::setMaxDuration(const GenTime &max) { + m_maxDuration = max; +} + QPainterPath AbstractClipItem::upperRectPart(QRectF br) { QPainterPath roundRectPathUpper; double roundingY = 20; Modified: branches/KDE4/src/abstractclipitem.h =================================================================== --- branches/KDE4/src/abstractclipitem.h 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/abstractclipitem.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -51,6 +51,7 @@ virtual double fps() const; virtual GenTime maxDuration() const; virtual void setCropStart(GenTime pos); + virtual void setMaxDuration(const GenTime &max); protected: int m_track; Added: branches/KDE4/src/changespeedcommand.cpp =================================================================== --- branches/KDE4/src/changespeedcommand.cpp (rev 0) +++ branches/KDE4/src/changespeedcommand.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + +#include <KLocale> + +#include "changespeedcommand.h" +#include "customtrackview.h" + +ChangeSpeedCommand::ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, int clipId, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clipInfo(info), m_old_speed(old_speed), m_new_speed(new_speed), m_clipId(clipId), m_doIt(doIt) { + setText(i18n("Adjust clip length")); +} + + +// virtual +void ChangeSpeedCommand::undo() { + m_view->doChangeClipSpeed(m_clipInfo, m_old_speed, m_clipId); +} +// virtual +void ChangeSpeedCommand::redo() { + if (m_doIt) { + m_view->doChangeClipSpeed(m_clipInfo, m_new_speed, m_clipId); + } + m_doIt = true; +} + +#include "changespeedcommand.moc" Added: branches/KDE4/src/changespeedcommand.h =================================================================== --- branches/KDE4/src/changespeedcommand.h (rev 0) +++ branches/KDE4/src/changespeedcommand.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -0,0 +1,49 @@ +/*************************************************************************** + * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + + +#ifndef CHANGESPEEDCOMMAND_H +#define CHANGESPEEDCOMMAND_H + +#include <QUndoCommand> +#include <QGraphicsView> +#include <KDebug> + +#include "gentime.h" +#include "definitions.h" + +class CustomTrackView; + +class ChangeSpeedCommand : public QUndoCommand { +public: + ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, int clipId, bool doIt, QUndoCommand * parent = 0); + virtual void undo(); + virtual void redo(); + +private: + CustomTrackView *m_view; + ItemInfo m_clipInfo; + int m_clipId; + bool m_doIt; + double m_old_speed; + double m_new_speed; +}; + +#endif + Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/clipitem.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -40,7 +40,7 @@ #include "kthumb.h" ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double scale, double fps) - : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1) { + : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0) { QRectF rect((double) info.startPos.frames(fps) * scale, (double)(info.track * KdenliveSettings::trackheight() + 1), (double)(info.endPos - info.startPos).frames(fps) * scale, (double)(KdenliveSettings::trackheight() - 1)); setRect(rect); @@ -972,6 +972,17 @@ flashClip(); } +double ClipItem::speed() const { + return m_speed; +} + +void ClipItem::setSpeed(const double speed) { + m_speed = speed; + if (m_speed == 1.0) m_clipName = baseClip()->name(); + else m_clipName = baseClip()->name() + " - " + QString::number(speed * 100, 'f', 0) + "%"; + update(); +} + //virtual void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event) { QString effects = QString(event->mimeData()->data("kdenlive/effectslist")); Modified: branches/KDE4/src/clipitem.h =================================================================== --- branches/KDE4/src/clipitem.h 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/clipitem.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -91,6 +91,8 @@ QString keyframes(const int index); void setKeyframes(const int ix, const QString keyframes); void setEffectList(const EffectsList effectList); + void setSpeed(const double speed); + double speed() const; protected: //virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event); @@ -128,6 +130,7 @@ QTimeLine *m_timeLine; uint m_thumbsRequested; bool m_hover; + double m_speed; EffectsList m_effectList; QList <Transition*> m_transitionsList; Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/clipproperties.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -100,16 +100,16 @@ profilePath += "/lumas/PAL/"; QDir dir(profilePath); - QStringList filter; - filter << "*.pgm"; + QStringList filter; + filter << "*.pgm"; const QStringList result = dir.entryList(filter, QDir::Files); QStringList imagefiles; QStringList imagenamelist; int current; foreach(const QString file, result) { - m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); - if (!lumaFile.isEmpty() && lumaFile == QString(profilePath + file)) - current = m_view.luma_file->count() - 1; + m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file); + if (!lumaFile.isEmpty() && lumaFile == QString(profilePath + file)) + current = m_view.luma_file->count() - 1; } if (!lumaFile.isEmpty()) { Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/customtrackview.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -46,6 +46,7 @@ #include "addtransitioncommand.h" #include "edittransitioncommand.h" #include "editkeyframecommand.h" +#include "changespeedcommand.h" #include "addmarkercommand.h" #include "razorclipcommand.h" #include "kdenlivesettings.h" @@ -1279,6 +1280,43 @@ m_commandStack->push(deleteSelected); } +void CustomTrackView::changeClipSpeed() { + QList<QGraphicsItem *> itemList = scene()->selectedItems(); + if (itemList.count() == 0) { + emit displayMessage(i18n("Select clip to change speed"), ErrorMessage); + return; + } + QUndoCommand *changeSelected = new QUndoCommand(); + changeSelected->setText("Edit clip speed"); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET) { + ClipItem *item = static_cast <ClipItem *>(itemList.at(i)); + ItemInfo info = item->info(); + int percent = QInputDialog::getInteger(this, i18n("Edit Clip Speed"), i18n("New speed (percents)"), 100, 1, 300); + double speed = (double) percent / 100.0; + new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected); + } + } + m_commandStack->push(changeSelected); +} + +void CustomTrackView::doChangeClipSpeed(ItemInfo info, double speed, int id) { + DocClipBase *baseclip = m_document->clipManager()->getClipById(id); + ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()) + 1, info.track); + info.track = m_tracksList.count() - item->track(); + int newLength = m_document->renderer()->mltChangeClipSpeed(info, speed, baseclip->producer()); + GenTime maxDuration(newLength, m_document->fps()); + item->setMaxDuration(maxDuration); + item->setSpeed(speed); + if (maxDuration < item->duration()) { + info = item->info(); + ItemInfo endInfo = info; + endInfo.endPos = info.startPos + maxDuration; + ResizeClipCommand *command = new ResizeClipCommand(this, info, endInfo, true); + m_commandStack->push(command); + } +} + void CustomTrackView::cutSelectedClips() { QList<QGraphicsItem *> itemList = scene()->selectedItems(); GenTime currentPos = GenTime(m_cursorPos, m_document->fps()); Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/customtrackview.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -92,6 +92,8 @@ void clearSearchStrings(); void clipStart(); void clipEnd(); + void changeClipSpeed(); + void doChangeClipSpeed(ItemInfo info, double speed, int id); public slots: void setCursorPos(int pos, bool seek = true); Modified: branches/KDE4/src/initeffects.cpp =================================================================== --- branches/KDE4/src/initeffects.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/initeffects.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -118,8 +118,8 @@ QDir directory; for (more = direc.begin() ; more != direc.end() ; ++more) { directory = QDir(*more); - QStringList filter; - filter << "*.xml"; + QStringList filter; + filter << "*.xml"; fileList = directory.entryList(filter, QDir::Files); for (it = fileList.begin() ; it != fileList.end() ; ++it) { itemName = KUrl(*more + *it).path(); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -53,7 +53,7 @@ QDomElement infoXml = infoXmlNode.toElement(); QString profilePath = infoXml.attribute("profile"); m_startPos = infoXml.attribute("position").toInt(); - m_zoom = infoXml.attribute("zoom").toInt(); + m_zoom = infoXml.attribute("zoom", "4").toInt(); if (!profilePath.isEmpty()) setProfilePath(profilePath); double version = infoXml.attribute("version").toDouble(); if (version < 0.7) convertDocument(version); @@ -256,6 +256,8 @@ QDomNode multitrack = m_document.elementsByTagName("multitrack").at(0); QDomNodeList playlists = m_document.elementsByTagName("playlist"); + m_startPos = kdenlivedoc.toElement().attribute("timeline_position").toInt(); + QDomNode props = m_document.elementsByTagName("properties").at(0).toElement(); QString profile = props.toElement().attribute("videoprofile"); if (profile == "dv_wide") profile = "dv_pal_wide"; Modified: branches/KDE4/src/kdenliveui.rc =================================================================== --- branches/KDE4/src/kdenliveui.rc 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/kdenliveui.rc 2008-07-29 23:46:59 UTC (rev 2351) @@ -26,6 +26,7 @@ <Menu name="timeline" ><text>Timeline</text> <Action name="cut_timeline_clip" /> <Action name="delete_timeline_clip" /> + <Action name="change_clip_speed" /> <Menu name="marker_menu" ><text>Markers</text> <Action name="add_clip_marker" /> <Action name="edit_clip_marker" /> Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/mainwindow.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -244,6 +244,7 @@ m_timelineContextMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Paste))); m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip")); + m_timelineContextClipMenu->addAction(actionCollection()->action("change_clip_speed")); m_timelineContextClipMenu->addAction(actionCollection()->action("cut_timeline_clip")); m_timelineContextClipMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy))); m_timelineContextClipMenu->addAction(actionCollection()->action("paste_effects")); @@ -627,6 +628,10 @@ actionCollection()->addAction("delete_timeline_clip", deleteTimelineClip); connect(deleteTimelineClip, SIGNAL(triggered(bool)), this, SLOT(slotDeleteTimelineClip())); + KAction* editTimelineClipSpeed = new KAction(KIcon("edit-delete"), i18n("Change Clip Speed"), this); + actionCollection()->addAction("change_clip_speed", editTimelineClipSpeed); + connect(editTimelineClipSpeed, SIGNAL(triggered(bool)), this, SLOT(slotChangeClipSpeed())); + KAction* cutTimelineClip = new KAction(KIcon("edit-cut"), i18n("Cut Clip"), this); cutTimelineClip->setShortcut(Qt::SHIFT + Qt::Key_R); actionCollection()->addAction("cut_timeline_clip", cutTimelineClip); @@ -1170,6 +1175,12 @@ } } +void MainWindow::slotChangeClipSpeed() { + if (m_activeTimeline) { + m_activeTimeline->projectView()->changeClipSpeed(); + } +} + void MainWindow::slotAddClipMarker() { if (m_activeTimeline) { m_activeTimeline->projectView()->slotAddClipMarker(); Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/mainwindow.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -231,6 +231,7 @@ void slotPaste(); void slotPasteEffects(); void slotReloadEffects(); + void slotChangeClipSpeed(); }; Modified: branches/KDE4/src/managecapturesdialog.cpp =================================================================== --- branches/KDE4/src/managecapturesdialog.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/managecapturesdialog.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -68,16 +68,16 @@ int ct = 0; int count = m_view.treeWidget->topLevelItemCount(); while (ct < count) { - QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(ct); - //QTreeWidgetItem *item = m_view.treeWidget->currentItem(); - if (item->icon(0).isNull()) { - QPixmap p = KThumb::getImage(KUrl(item->data(0, Qt::UserRole).toString()), 0, 70, 50); - item->setIcon(0, QIcon(p)); - m_view.treeWidget->resizeColumnToContents(0); - repaint(); - //QTimer::singleShot(400, this, SLOT(slotCheckItemIcon())); - } - ct++; + QTreeWidgetItem *item = m_view.treeWidget->topLevelItem(ct); + //QTreeWidgetItem *item = m_view.treeWidget->currentItem(); + if (item->icon(0).isNull()) { + QPixmap p = KThumb::getImage(KUrl(item->data(0, Qt::UserRole).toString()), 0, 70, 50); + item->setIcon(0, QIcon(p)); + m_view.treeWidget->resizeColumnToContents(0); + repaint(); + //QTimer::singleShot(400, this, SLOT(slotCheckItemIcon())); + } + ct++; } m_view.treeWidget->setEnabled(true); } Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/projectlist.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -325,8 +325,8 @@ } } foreach(const KUrl file, list) { - if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) - m_doc->slotAddClipFile(file, group, groupId); + if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) + m_doc->slotAddClipFile(file, group, groupId); } } @@ -334,8 +334,8 @@ ProjectItem *item = getItemById(id); if (item) { QString path = item->referencedClip()->fileURL().path(); - if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path)); - + if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path)); + } QList <int> ids; ids << id; Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/renderer.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -91,7 +91,7 @@ m_mltProducer = producer; if (m_blackClip) delete m_blackClip; m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black"); - m_blackClip->set("id", "black"); + m_blackClip->set("id", "black"); m_mltConsumer->connect(*m_mltProducer); m_mltProducer->set_speed(0.0); @@ -248,11 +248,11 @@ QStringList::Iterator it; QDir dir(url.directory()); - QStringList filter; - filter << "*." + fileType; - filter << "*." + fileType.toUpper(); + QStringList filter; + filter << "*." + fileType; + filter << "*." + fileType.toUpper(); more = dir.entryList(filter, QDir::Files); - im.load(url.directory() + "/" + more.at(0)); + im.load(url.directory() + "/" + more.at(0)); } else im.load(url.path()); //pixmap = im.scaled(width, height); return pixmap; @@ -475,7 +475,7 @@ if (producer->is_blank()) { kDebug() << " / / / / / / / /ERRROR / / / / // CANNOT LOAD PRODUCER: "; - emit removeInvalidClip(clipId); + emit removeInvalidClip(clipId); return; } producer->set("id", clipId); @@ -1268,6 +1268,69 @@ m_isBlocked = false; } +int Render::mltChangeClipSpeed(ItemInfo info, double speed, Mlt::Producer *prod) { + m_isBlocked = true; + int newLength = 0; + Mlt::Service service(m_mltProducer->parent().get_service()); + if (service.type() != tractor_type) kWarning() << "// TRACTOR PROBLEM"; + + Mlt::Tractor tractor(service); + Mlt::Producer trackProducer(tractor.track(info.track)); + Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); + int clipIndex = trackPlaylist.get_clip_index_at((int) info.startPos.frames(m_fps)); + 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 (serv == "avformat" && speed != 1.0) { + mlt_service_lock(service.get_service()); + QString url = clip.parent().get("resource"); + url.append(":" + QString::number(speed)); + char *tmp = decodedString(url); + Mlt::Producer *slow = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); + delete[] tmp; + tmp = decodedString(id); + slow->set("id", tmp); + delete[] tmp; + slow->set_in_and_out(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps)); + newLength = slow->get_length(); + trackPlaylist.replace_with_blank(clipIndex); + trackPlaylist.consolidate_blanks(0); + trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *slow, 1); + mlt_service_unlock(service.get_service()); + kDebug() << "AVFORMAT CLIP!!!:"; + } else if (speed == 1.0) { + mlt_service_lock(service.get_service()); + Mlt::Producer *cut = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); + trackPlaylist.replace_with_blank(clipIndex); + newLength = cut->get_length(); + trackPlaylist.consolidate_blanks(0); + trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *cut, 1); + mlt_service_unlock(service.get_service()); + } else if (serv == "framebuffer") { + mlt_service_lock(service.get_service()); + QString url = clip.parent().get("resource"); + url = url.section(":", 0, -1); + url.append(":" + QString::number(speed)); + char *tmp = decodedString(url); + Mlt::Producer *slow = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); + delete[] tmp; + tmp = decodedString(id); + slow->set("id", tmp); + delete[] tmp; + slow->set_in_and_out(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps)); + newLength = slow->get_length(); + trackPlaylist.replace_with_blank(clipIndex); + trackPlaylist.consolidate_blanks(0); + trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *slow, 1); + mlt_service_unlock(service.get_service()); + kDebug() << "AVFORMAT CLIP!!!:"; + } + + m_isBlocked = false; + return newLength; +} + bool Render::mltRemoveEffect(int track, GenTime position, QString index, bool doRefresh) { Mlt::Service service(m_mltProducer->parent().get_service()); Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/renderer.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -170,6 +170,7 @@ void mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id); void mltDeleteTransparency(int pos, int track, int id); void mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id); + int mltChangeClipSpeed(ItemInfo info, double speed, Mlt::Producer *prod); private: // Private attributes & methods /** The name of this renderer - useful to identify the renderes by what they do - e.g. background rendering, workspace monitor, etc... */ Modified: branches/KDE4/src/resizeclipcommand.cpp =================================================================== --- branches/KDE4/src/resizeclipcommand.cpp 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/resizeclipcommand.cpp 2008-07-29 23:46:59 UTC (rev 2351) @@ -22,8 +22,7 @@ #include "resizeclipcommand.h" #include "customtrackview.h" -ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt) - : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) { +ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) { setText(i18n("Resize clip")); } Modified: branches/KDE4/src/resizeclipcommand.h =================================================================== --- branches/KDE4/src/resizeclipcommand.h 2008-07-29 20:26:14 UTC (rev 2350) +++ branches/KDE4/src/resizeclipcommand.h 2008-07-29 23:46:59 UTC (rev 2351) @@ -33,7 +33,7 @@ class ResizeClipCommand : public QUndoCommand { public: - ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt); + ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-08-02 20:57:19
|
Revision: 2354 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2354&view=rev Author: j-b-m Date: 2008-08-02 20:57:20 +0000 (Sat, 02 Aug 2008) Log Message: ----------- * New configuration page to set SDL audio/video driver and audio device * Fixed small issues in clip move * Slowmotion now working (still needs a small MLT patch to be committed soon) Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/abstractclipitem.cpp branches/KDE4/src/clipitem.cpp branches/KDE4/src/clipitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivesettings.kcfg branches/KDE4/src/kdenlivesettingsdialog.cpp branches/KDE4/src/kdenlivesettingsdialog.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h branches/KDE4/src/trackview.cpp Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/CMakeLists.txt 2008-08-02 20:57:20 UTC (rev 2354) @@ -31,6 +31,7 @@ widgets/configmisc_ui.ui widgets/configenv_ui.ui widgets/configdisplay_ui.ui + widgets/configsdl_ui.ui widgets/configcapture_ui.ui widgets/effectlist_ui.ui widgets/effectstack_ui.ui Modified: branches/KDE4/src/abstractclipitem.cpp =================================================================== --- branches/KDE4/src/abstractclipitem.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/abstractclipitem.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -136,8 +136,8 @@ //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; if (m_cropDuration + durationDiff <= GenTime()) { durationDiff = GenTime() - (m_cropDuration - GenTime(3, m_fps)); - } else if (m_cropStart + m_cropDuration + durationDiff >= m_maxDuration) { - durationDiff = m_maxDuration - m_cropDuration - m_cropStart; + } else if (m_cropStart + m_cropDuration + durationDiff >= maxDuration()) { + durationDiff = maxDuration() - m_cropDuration - m_cropStart; } m_cropDuration += durationDiff; setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/clipitem.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -97,9 +97,10 @@ if (endThumbTimer) delete endThumbTimer; } -ClipItem *ClipItem::clone(double scale) const { - ClipItem *duplicate = new ClipItem(m_clip, info(), scale, m_fps); +ClipItem *ClipItem::clone(double scale, ItemInfo info) const { + ClipItem *duplicate = new ClipItem(m_clip, info, scale, m_fps); duplicate->setEffectList(m_effectList); + duplicate->setSpeed(m_speed); return duplicate; } @@ -983,6 +984,10 @@ update(); } +GenTime ClipItem::maxDuration() const { + return m_maxDuration / m_speed; +} + //virtual void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event) { QString effects = QString(event->mimeData()->data("kdenlive/effectslist")); Modified: branches/KDE4/src/clipitem.h =================================================================== --- branches/KDE4/src/clipitem.h 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/clipitem.h 2008-08-02 20:57:20 UTC (rev 2354) @@ -52,7 +52,7 @@ DocClipBase *baseClip() const; QString clipName() const; QDomElement xml() const; - ClipItem *clone(double scale) const; + ClipItem *clone(double scale, ItemInfo info) const; const EffectsList effectList(); void setFadeOut(int pos, double scale); void setFadeIn(int pos, double scale); @@ -93,6 +93,7 @@ void setEffectList(const EffectsList effectList); void setSpeed(const double speed); double speed() const; + GenTime maxDuration() const; protected: //virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/customtrackview.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -817,8 +817,7 @@ newPos.cropStart = item->cropStart() + (cutTime - info.startPos); newPos.track = info.track; item->resizeEnd(cutPos, m_scale); - ClipItem *dup = new ClipItem(item->baseClip(), newPos, m_scale, m_document->fps()); - dup->setEffectList(item->effectList()); + ClipItem *dup = item->clone(m_scale, newPos); scene()->addItem(dup); m_document->renderer()->mltCutClip(m_tracksList.count() - info.track, cutTime); item->baseClip()->addReference(); @@ -1149,10 +1148,16 @@ } else if (m_operationMode == RESIZESTART && m_dragItem->startPos() != m_dragItemInfo.startPos) { // resize start if (m_dragItem->type() == AVWIDGET) { - m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos()); - updateClipFade((ClipItem *) m_dragItem); - ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false); - m_commandStack->push(command); + bool success = m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos()); + if (success) { + updateClipFade((ClipItem *) m_dragItem); + ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false); + m_commandStack->push(command); + } + else { + m_dragItem->resizeStart((int) m_dragItemInfo.startPos.frames(m_document->fps()), m_scale); + emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); + } } else if (m_dragItem->type() == TRANSITIONWIDGET) { MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false); m_commandStack->push(command); @@ -1294,7 +1299,8 @@ ItemInfo info = item->info(); int percent = QInputDialog::getInteger(this, i18n("Edit Clip Speed"), i18n("New speed (percents)"), 100, 1, 300); double speed = (double) percent / 100.0; - new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected); + if (item->speed() != speed) + new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected); } } m_commandStack->push(changeSelected); @@ -1304,10 +1310,9 @@ DocClipBase *baseclip = m_document->clipManager()->getClipById(id); ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()) + 1, info.track); info.track = m_tracksList.count() - item->track(); - int newLength = m_document->renderer()->mltChangeClipSpeed(info, speed, baseclip->producer()); - GenTime maxDuration(newLength, m_document->fps()); - item->setMaxDuration(maxDuration); + m_document->renderer()->mltChangeClipSpeed(info, speed, baseclip->producer()); item->setSpeed(speed); + GenTime maxDuration = item->maxDuration(); if (maxDuration < item->duration()) { info = item->info(); ItemInfo endInfo = info; @@ -1456,9 +1461,12 @@ return; } if (resizeClipStart) { - m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos); - item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale); - updateClipFade(item); + bool success = m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos); + if (success) { + item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale); + updateClipFade(item); + } + else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); } else { m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + end.endPos - item->startPos()); item->resizeEnd((int) end.endPos.frames(m_document->fps()), m_scale); @@ -1988,7 +1996,7 @@ for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == AVWIDGET) { ClipItem *dup = static_cast <ClipItem *>(itemList.at(i)); - m_copiedItems.append(dup->clone(m_scale)); + m_copiedItems.append(dup->clone(m_scale, dup->info())); } else if (itemList.at(i)->type() == TRANSITIONWIDGET) { Transition *dup = static_cast <Transition *>(itemList.at(i)); m_copiedItems.append(dup->clone(m_scale)); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -37,7 +37,7 @@ #include "mainwindow.h" -KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(4) { +KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(7) { kDebug() << "// init profile, ratnum: " << profile.frame_rate_num << ", " << profile.frame_rate_num << ", width: " << profile.width; m_clipManager = new ClipManager(this); KdenliveSettings::setProject_fps(m_fps); @@ -53,7 +53,7 @@ QDomElement infoXml = infoXmlNode.toElement(); QString profilePath = infoXml.attribute("profile"); m_startPos = infoXml.attribute("position").toInt(); - m_zoom = infoXml.attribute("zoom", "4").toInt(); + m_zoom = infoXml.attribute("zoom", "7").toInt(); if (!profilePath.isEmpty()) setProfilePath(profilePath); double version = infoXml.attribute("version").toDouble(); if (version < 0.7) convertDocument(version); @@ -64,8 +64,9 @@ int pos = 0; for (int i = 0; i < maxprod; i++) { QDomNode m = prods.at(pos); - if (m.toElement().attribute("id") == "black") - pos = 1; + QString prodId = m.toElement().attribute("id"); + if (prodId == "black" || prodId.startsWith("slowmotion")) + pos++; else westley.removeChild(m); } prods = m_document.elementsByTagName("kdenlive_producer"); @@ -90,7 +91,8 @@ parent->slotGotProgressInfo(QString(), (int) m_documentLoadingProgress); qApp->processEvents(); } - if (!e.isNull() && e.attribute("id") != "black") { + QString prodId = e.attribute("id"); + if (!e.isNull() && prodId != "black" && prodId.toInt() > 0) { addClip(e, e.attribute("id").toInt()); } } Modified: branches/KDE4/src/kdenlivesettings.kcfg =================================================================== --- branches/KDE4/src/kdenlivesettings.kcfg 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/kdenlivesettings.kcfg 2008-08-02 20:57:20 UTC (rev 2354) @@ -55,6 +55,37 @@ <label>Tracks height in pixel.</label> <default>50</default> </entry> + + <entry name="audio_device" type="UInt"> + <label>Audio device used for sound output.</label> + <default>0</default> + </entry> + + <entry name="audio_driver" type="UInt"> + <label>Audio driver used for sound output.</label> + <default>0</default> + </entry> + + <entry name="video_driver" type="UInt"> + <label>Video driver used for output.</label> + <default>0</default> + </entry> + + <entry name="audiodevicename" type="String"> + <label>Audio device used for sound output.</label> + <default></default> + </entry> + + <entry name="audiodrivername" type="String"> + <label>Audio driver used for sound output.</label> + <default></default> + </entry> + + <entry name="videodrivername" type="String"> + <label>Video driver used for output.</label> + <default></default> + </entry> + </group> <group name="env"> Modified: branches/KDE4/src/kdenlivesettingsdialog.cpp =================================================================== --- branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -67,6 +67,10 @@ slotCheckShuttle(KdenliveSettings::enableshuttle()); page5 = addPage(p5, i18n("JogShuttle"), "input-mouse"); + QWidget *p6 = new QWidget; + m_configSdl.setupUi(p6); + page6 = addPage(p6, i18n("Playback"), "audio-card"); + QStringList actions; actions << i18n("Do nothing"); actions << i18n("Play / Pause"); @@ -99,12 +103,83 @@ } slotUpdateDisplay(); - + m_audioDevice = KdenliveSettings::audio_device(); + initDevices(); connect(m_configMisc.kcfg_profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); } KdenliveSettingsDialog::~KdenliveSettingsDialog() {} +void KdenliveSettingsDialog::initDevices() +{ + // Fill audio drivers + m_configSdl.kcfg_audio_driver->addItem(i18n("Automatic"), QString()); + m_configSdl.kcfg_audio_driver->addItem(i18n("OSS"), "dsp"); + m_configSdl.kcfg_audio_driver->addItem(i18n("ALSA"), "alsa"); + m_configSdl.kcfg_audio_driver->addItem(i18n("OSS with DMA access"), "dma"); + m_configSdl.kcfg_audio_driver->addItem(i18n("Esound daemon"), "esd"); + m_configSdl.kcfg_audio_driver->addItem(i18n("ARTS daemon"), "artsc"); + + /*if (!KdenliveSettings::audiodriver().isEmpty()) + for (uint i = 1;i < m_configDisplay.kcfg_audio_driver->count(); i++) { + if (m_configDisplay.kcfg_audio_driver->itemData(i).toString() == KdenliveSettings::audiodriver()) + m_configDisplay.kcfg_audio_driver->setCurrentIndex(i); + }*/ + + // Fill video drivers + m_configSdl.kcfg_video_driver->addItem(i18n("Automatic"), QString()); + m_configSdl.kcfg_video_driver->addItem(i18n("X11"), "x11"); + m_configSdl.kcfg_video_driver->addItem(i18n("XFREE86 DGA 2.0"), "dga"); + m_configSdl.kcfg_video_driver->addItem(i18n("Nano X"), "nanox"); + m_configSdl.kcfg_video_driver->addItem(i18n("Framebuffer console"), "fbcon"); + m_configSdl.kcfg_video_driver->addItem(i18n("Direct FB"), "directfb"); + m_configSdl.kcfg_video_driver->addItem(i18n("SVGAlib"), "svgalib"); + m_configSdl.kcfg_video_driver->addItem(i18n("General graphics interface"), "ggi"); + m_configSdl.kcfg_video_driver->addItem(i18n("Ascii art library"), "aalib"); + + // Fill the list of audio playback devices + m_configSdl.kcfg_audio_device->addItem(i18n("Default"), QString()); + if (KStandardDirs::findExe("aplay") != QString::null) { + m_readProcess.setOutputChannelMode(KProcess::OnlyStdoutChannel); + m_readProcess.setProgram("aplay", QStringList() << "-l"); + connect(&m_readProcess, SIGNAL(readyReadStandardOutput()) ,this, SLOT(slotReadAudioDevices())); + m_readProcess.execute(5000); + } + else { + // If aplay is not installed on the system, parse the /proc/asound/pcm file + QFile file("/proc/asound/pcm"); + if ( file.open( QIODevice::ReadOnly ) ) { + QTextStream stream( &file ); + QString line; + while ( !stream.atEnd() ) { + line = stream.readLine(); + if (line.contains("playback")) { + QString deviceId = line.section(":", 0, 0); + m_configSdl.kcfg_audio_device->addItem(line.section(":", 1, 1), "plughw:" + QString::number(deviceId.section("-", 0, 0).toInt()) + "," + QString::number(deviceId.section("-", 1, 1).toInt())); + } + } + file.close(); + } + } +} + + +void KdenliveSettingsDialog::slotReadAudioDevices() +{ + QString result = QString(m_readProcess.readAllStandardOutput()); + kDebug()<<"// / / / / / READING APLAY: "; + kDebug()<< result; + QStringList lines = result.split('\n'); + foreach (QString data, lines) { + kDebug()<<"// READING LINE: "<<data; + if (data.simplified().startsWith("card")) { + QString card = data.section(":", 0, 0).section(" ", -1); + QString device = data.section(":", 1, 1).section(" ", -1); + m_configSdl.kcfg_audio_device->addItem(data.section(":", -1), "plughw:" + card + "," + device); + } + } +} + void KdenliveSettingsDialog::showPage(int page, int option) { switch (page) { case 1: @@ -196,8 +271,16 @@ m_configCapture.kcfg_video4playback->setText(playbackCommand); } + +// virtual protected +bool KdenliveSettingsDialog::isDefault() { + return KConfigDialog::isDefault(); +} + +// virtual protected bool KdenliveSettingsDialog::hasChanged() { kDebug() << "// // // KCONFIG hasChanged called: " << m_configMisc.kcfg_profiles_list->currentText() << ", " << m_defaultProfile; + if (m_configMisc.kcfg_profiles_list->currentText() != m_defaultProfile) return true; return KConfigDialog::hasChanged(); } @@ -206,7 +289,28 @@ kDebug() << "// // // KCONFIG UPDATE called"; m_defaultProfile = m_configMisc.kcfg_profiles_list->currentText(); KdenliveSettings::setDefault_profile(m_defaultPath); + + bool resetProfile = false; + QString value = m_configSdl.kcfg_audio_device->itemData(m_configSdl.kcfg_audio_device->currentIndex()).toString(); + if (value != KdenliveSettings::audiodevicename()) { + KdenliveSettings::setAudiodevicename(value); + resetProfile = true; + } + + value = m_configSdl.kcfg_audio_driver->itemData(m_configSdl.kcfg_audio_driver->currentIndex()).toString(); + if (value != KdenliveSettings::audiodrivername()) { + KdenliveSettings::setAudiodrivername(value); + resetProfile = true; + } + + value = m_configSdl.kcfg_video_driver->itemData(m_configSdl.kcfg_video_driver->currentIndex()).toString(); + if (value != KdenliveSettings::videodrivername()) { + KdenliveSettings::setVideodrivername(value); + resetProfile = true; + } + KConfigDialog::updateSettings(); + if (resetProfile) emit doResetProfile(); } void KdenliveSettingsDialog::slotUpdateDisplay() { Modified: branches/KDE4/src/kdenlivesettingsdialog.h =================================================================== --- branches/KDE4/src/kdenlivesettingsdialog.h 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/kdenlivesettingsdialog.h 2008-08-02 20:57:20 UTC (rev 2354) @@ -24,12 +24,14 @@ #include <QDialog> #include <KConfigDialog> +#include <KProcess> #include "ui_configmisc_ui.h" #include "ui_configenv_ui.h" #include "ui_configdisplay_ui.h" #include "ui_configcapture_ui.h" #include "ui_configjogshuttle_ui.h" +#include "ui_configsdl_ui.h" class KdenliveSettingsDialog : public KConfigDialog { Q_OBJECT @@ -39,9 +41,9 @@ ~KdenliveSettingsDialog(); void showPage(int page, int option); -protected: - virtual bool hasChanged(); - virtual void updateSettings(); + bool hasChanged(); + bool isDefault(); + void updateSettings(); private slots: void slotUpdateDisplay(); @@ -51,6 +53,7 @@ void slotEditImageApplication(); void slotEditAudioApplication(); void slotEditVideoApplication(); + void slotReadAudioDevices(); private: KPageWidgetItem *page1; @@ -58,20 +61,25 @@ KPageWidgetItem *page3; KPageWidgetItem *page4; KPageWidgetItem *page5; + KPageWidgetItem *page6; Ui::ConfigEnv_UI m_configEnv; Ui::ConfigMisc_UI m_configMisc; Ui::ConfigDisplay_UI m_configDisplay; Ui::ConfigCapture_UI m_configCapture; Ui::ConfigJogShuttle_UI m_configShuttle; + Ui::ConfigSdl_UI m_configSdl; QStringList m_mltProfilesList; QStringList m_customProfilesList; bool m_isCustomProfile; QString m_defaultProfile; QString m_defaultPath; + KProcess m_readProcess; + void initDevices(); + uint m_audioDevice; signals: void customChanged(); - + void doResetProfile(); }; Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/mainwindow.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -1119,6 +1119,7 @@ // create it : KdenliveSettingsDialog* dialog = new KdenliveSettingsDialog(this); connect(dialog, SIGNAL(settingsChanged(const QString&)), this, SLOT(updateConfiguration())); + connect(dialog, SIGNAL(doResetProfile()), this, SLOT(resetProfiles())); dialog->show(); if (page != -1) dialog->showPage(page, option); } @@ -1137,6 +1138,10 @@ } +void MainWindow::resetProfiles() { + m_monitorManager->resetProfiles(m_activeDocument->profilePath()); +} + void MainWindow::slotSwitchVideoThumbs() { KdenliveSettings::setVideothumbnails(!KdenliveSettings::videothumbnails()); if (m_activeTimeline) { Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/mainwindow.h 2008-08-02 20:57:20 UTC (rev 2354) @@ -232,7 +232,7 @@ void slotPasteEffects(); void slotReloadEffects(); void slotChangeClipSpeed(); - + void resetProfiles(); }; Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/renderer.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -82,12 +82,35 @@ m_mltConsumer->set("terminate_on_pause", 1); m_mltConsumer->set("rescale", "nearest"); m_mltConsumer->set("progressive", 1); + char *tmp; + + QString audioDevice = KdenliveSettings::audiodevicename(); + if (!audioDevice.isEmpty()) { + tmp = decodedString(audioDevice); + m_mltConsumer->set("audio_device", tmp); + delete[] tmp; + } + + QString videoDriver = KdenliveSettings::videodrivername(); + if (!videoDriver.isEmpty()) { + tmp = decodedString(videoDriver); + m_mltConsumer->set("video_driver", tmp); + delete[] tmp; + } + + QString audioDriver = KdenliveSettings::audiodrivername(); + if (!audioDriver.isEmpty()) { + tmp = decodedString(audioDriver); + m_mltConsumer->set("audio_driver", tmp); + delete[] tmp; + } + m_mltConsumer->set("audio_buffer", 1024); m_mltConsumer->set("frequency", 48000); m_externalwinid = extid; m_winid = winid; m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); - Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "westley-xml", "<westley><playlist><producer mlt_service=\"colour\" colour=\"blue\" in=\"0\" out=\"25\" /></playlist></westley>"); + Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "colour", "black"); m_mltProducer = producer; if (m_blackClip) delete m_blackClip; m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black"); @@ -154,6 +177,29 @@ m_mltConsumer->set("terminate_on_pause", 1); m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); m_mltConsumer->set("rescale", "nearest"); + + QString audioDevice = KdenliveSettings::audiodevicename(); + if (!audioDevice.isEmpty()) { + tmp = decodedString(audioDevice); + m_mltConsumer->set("audio_device", tmp); + delete[] tmp; + } + + QString videoDriver = KdenliveSettings::videodrivername(); + if (!videoDriver.isEmpty()) { + tmp = decodedString(videoDriver); + m_mltConsumer->set("video_driver", tmp); + delete[] tmp; + } + + QString audioDriver = KdenliveSettings::audiodrivername(); + if (!audioDriver.isEmpty()) { + tmp = decodedString(audioDriver); + m_mltConsumer->set("audio_driver", tmp); + delete[] tmp; + } + + m_mltConsumer->set("progressive", 1); m_mltConsumer->set("audio_buffer", 1024); m_mltConsumer->set("frequency", 48000); @@ -1239,6 +1285,7 @@ ct++; filter = clipService.filter(ct); } + m_isBlocked = false; } void Render::mltUpdateClip(ItemInfo info, QDomElement element, Mlt::Producer *prod) { @@ -1273,7 +1320,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; Mlt::Tractor tractor(service); Mlt::Producer trackProducer(tractor.track(info.track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); @@ -1285,20 +1332,24 @@ if (serv == "avformat" && speed != 1.0) { mlt_service_lock(service.get_service()); QString url = clip.parent().get("resource"); - url.append(":" + QString::number(speed)); - char *tmp = decodedString(url); - Mlt::Producer *slow = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); - delete[] tmp; - tmp = decodedString(id); - slow->set("id", tmp); - delete[] tmp; - slow->set_in_and_out(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps)); - newLength = slow->get_length(); + url.append("?" + QString::number(speed)); + Mlt::Producer *slowprod = m_slowmotionProducers.value(url); + if (!slowprod || slowprod->get_producer() == NULL) { + char *tmp = decodedString(url); + slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); + delete[] tmp; + QString producerid = "slowmotion:" + id + ":" + QString::number(speed); + tmp = decodedString(producerid); + slowprod->set("id", tmp); + delete[] tmp; + m_slowmotionProducers.insert(url, slowprod); + } + Mlt::Producer *cut = slowprod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); + newLength = cut->get_length(); trackPlaylist.replace_with_blank(clipIndex); trackPlaylist.consolidate_blanks(0); - trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *slow, 1); + trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *cut, 1); mlt_service_unlock(service.get_service()); - kDebug() << "AVFORMAT CLIP!!!:"; } else if (speed == 1.0) { mlt_service_lock(service.get_service()); Mlt::Producer *cut = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); @@ -1310,19 +1361,24 @@ } else if (serv == "framebuffer") { mlt_service_lock(service.get_service()); QString url = clip.parent().get("resource"); - url = url.section(":", 0, -1); - url.append(":" + QString::number(speed)); - char *tmp = decodedString(url); - Mlt::Producer *slow = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); - delete[] tmp; - tmp = decodedString(id); - slow->set("id", tmp); - delete[] tmp; - slow->set_in_and_out(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps)); - newLength = slow->get_length(); + url = url.section("?", 0, 0); + url.append("?" + QString::number(speed)); + Mlt::Producer *slowprod = m_slowmotionProducers.value(url); + if (!slowprod || slowprod->get_producer() == NULL) { + char *tmp = decodedString(url); + slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); + delete[] tmp; + QString producerid = "slowmotion:" + id.section(":", 1, 1) + ":" + QString::number(speed); + tmp = decodedString(producerid); + slowprod->set("id", tmp); + delete[] tmp; + m_slowmotionProducers.insert(url, slowprod); + } + Mlt::Producer *cut = slowprod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); + newLength = cut->get_length(); trackPlaylist.replace_with_blank(clipIndex); trackPlaylist.consolidate_blanks(0); - trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *slow, 1); + trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *cut, 1); mlt_service_unlock(service.get_service()); kDebug() << "AVFORMAT CLIP!!!:"; } @@ -1657,22 +1713,24 @@ refresh(); } -void Render::mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out) { - m_isBlocked = true; - +bool Render::mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out) { Mlt::Service service(m_mltProducer->parent().get_service()); - int moveFrame = (int)(moveEnd - moveStart).frames(m_fps); - Mlt::Tractor tractor(service); Mlt::Producer trackProducer(tractor.track(track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) - 1)) + if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) - 1)) { kDebug() << "//////// ERROR RSIZING BLANK CLIP!!!!!!!!!!!"; + return false; + } int clipIndex = trackPlaylist.get_clip_index_at((int) pos.frames(m_fps) - 1); int previousStart = trackPlaylist.clip_start(clipIndex); //kDebug() << " ** RESIZING CLIP START:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", moving: " << moveFrame << ", in: " << in.frames(25) << ", out: " << out.frames(25); Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex); + if (clip == NULL) { + return false; + } + m_isBlocked = true; trackPlaylist.resize_clip(clipIndex, (int) in.frames(m_fps), (int) out.frames(m_fps)); if (moveFrame > 0) trackPlaylist.insert_blank(clipIndex, moveFrame - 1); else { @@ -1696,6 +1754,7 @@ mltAddClipTransparency(info, info.track - 1, QString(clip->parent().get("id")).toInt()); } m_isBlocked = false; + return true; } bool Render::mltMoveClip(int startTrack, int endTrack, GenTime moveStart, GenTime moveEnd) { @@ -1718,7 +1777,6 @@ if (endTrack == startTrack) { //mlt_service_lock(service.get_service()); Mlt::Producer clipProducer(trackPlaylist.replace_with_blank(clipIndex)); - trackPlaylist.consolidate_blanks(0); if (!trackPlaylist.is_blank_at(moveEnd)) { // error, destination is not empty @@ -1728,8 +1786,8 @@ m_isBlocked = false; return false; } else { + trackPlaylist.consolidate_blanks(0); trackPlaylist.insert_at(moveEnd, clipProducer, 1); - trackPlaylist.consolidate_blanks(0); if (QString(clipProducer.parent().get("transparency")).toInt() == 1) { mltMoveTransparency(moveStart, moveEnd, startTrack, endTrack, QString(clipProducer.parent().get("id")).toInt()); } Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/renderer.h 2008-08-02 20:57:20 UTC (rev 2354) @@ -152,7 +152,7 @@ void mltUpdateClip(ItemInfo info, QDomElement element, Mlt::Producer *prod); void mltCutClip(int track, GenTime position); void mltResizeClipEnd(int track, GenTime pos, GenTime in, GenTime out); - void mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out); + bool mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out); bool mltMoveClip(int startTrack, int endTrack, GenTime pos, GenTime moveStart); bool mltMoveClip(int startTrack, int endTrack, int pos, int moveStart); void mltRemoveClip(int track, GenTime position); @@ -170,6 +170,12 @@ void mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id); void mltDeleteTransparency(int pos, int track, int id); void mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id); + + /** Change speed of a clip in playlist. To do this, we create a new "framebuffer" producer. + This new producer must have its "resource" param set to: video.mpg?0.6 where video.mpg is the path + to the clip and 0.6 is the speed in percents. The newly created producer will have it's + "id" parameter set to: "slowmotion:parentid:speed", where parentid is the id of the original clip + in the ClipManager list and speed is the current speed */ int mltChangeClipSpeed(ItemInfo info, double speed, Mlt::Producer *prod); private: // Private attributes & methods @@ -208,6 +214,7 @@ void closeMlt(); void mltCheckLength(bool reload = true); QMap<QString, QString> mltGetTransitionParamsFromXml(QDomElement xml); + QMap<QString, Mlt::Producer *> m_slowmotionProducers; private slots: // Private slots /** refresh monitor display */ Modified: branches/KDE4/src/trackview.cpp =================================================================== --- branches/KDE4/src/trackview.cpp 2008-08-02 20:54:24 UTC (rev 2353) +++ branches/KDE4/src/trackview.cpp 2008-08-02 20:57:20 UTC (rev 2354) @@ -116,6 +116,7 @@ void TrackView::parseDocument(QDomDocument doc) { int cursorPos = 0; + // kDebug() << "//// DOCUMENT: " << doc.toString(); QDomNode props = doc.elementsByTagName("properties").item(0); if (!props.isNull()) { @@ -134,6 +135,7 @@ int pos = m_projectTracks - 1; + for (int i = 0; i < m_projectTracks; i++) { e = tracks.item(i).toElement(); QString playlist_name = e.attribute("producer"); @@ -331,7 +333,15 @@ qApp->processEvents(); // Found a clip int in = elem.attribute("in").toInt(); - int id = elem.attribute("producer").toInt(); + QString idString = elem.attribute("producer"); + int id = idString.toInt(); + bool hasSpeedAttribute = false; + double speed; + if (idString.startsWith("slowmotion")) { + hasSpeedAttribute = true; + id = idString.section(":", 1, 1).toInt(); + speed = idString.section(":", 2, 2).toDouble(); + } DocClipBase *clip = m_doc->clipManager()->getClipById(id); if (clip != NULL) { int out = elem.attribute("out").toInt(); @@ -343,6 +353,7 @@ clipinfo.track = ix; //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps(); ClipItem *item = new ClipItem(clip, clipinfo, m_scale, m_doc->fps()); + if (hasSpeedAttribute) item->setSpeed(speed); m_scene->addItem(item); clip->addReference(); position += (out - in + 1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ble...@us...> - 2008-08-03 10:19:33
|
Revision: 2355 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2355&view=rev Author: blendamedt Date: 2008-08-03 10:19:42 +0000 (Sun, 03 Aug 2008) Log Message: ----------- first classes for geometry widget Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/clipdurationdialog.cpp branches/KDE4/src/effectstackedit.cpp Added Paths: ----------- branches/KDE4/src/geometryval.cpp branches/KDE4/src/geometryval.h branches/KDE4/src/widgets/geometryval_ui.ui Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-08-02 20:57:20 UTC (rev 2354) +++ branches/KDE4/src/CMakeLists.txt 2008-08-03 10:19:42 UTC (rev 2355) @@ -55,6 +55,7 @@ widgets/keyframedialog_ui.ui widgets/clipdurationdialog_ui.ui widgets/managecaptures_ui.ui + widgets/geometryval_ui.ui ) set(kdenlive_SRCS @@ -125,6 +126,7 @@ clipdurationdialog.cpp managecapturesdialog.cpp changespeedcommand.cpp + geometryval.cpp ) kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc ) Modified: branches/KDE4/src/clipdurationdialog.cpp =================================================================== --- branches/KDE4/src/clipdurationdialog.cpp 2008-08-02 20:57:20 UTC (rev 2354) +++ branches/KDE4/src/clipdurationdialog.cpp 2008-08-03 10:19:42 UTC (rev 2355) @@ -112,7 +112,6 @@ } void ClipDurationDialog::wheelEvent(QWheelEvent * event) { - kDebug() << "jaa"; if (m_view.clip_position->underMouse()) { if (event->delta() > 0) slotPosUp(); Modified: branches/KDE4/src/effectstackedit.cpp =================================================================== --- branches/KDE4/src/effectstackedit.cpp 2008-08-02 20:57:20 UTC (rev 2354) +++ branches/KDE4/src/effectstackedit.cpp 2008-08-03 10:19:42 UTC (rev 2355) @@ -30,6 +30,7 @@ #include "ui_colorval_ui.h" #include "ui_wipeval_ui.h" #include "complexparameter.h" +#include "geometryval.h" QMap<QString, QImage> EffectStackEdit::iconCache; @@ -137,7 +138,7 @@ bval->checkBox->setText(na.toElement().text()); valueItems[paramName] = bval; uiItems.append(bval); - } else if (type == "complex" || type == "geometry") { + } else if (type == "complex") { /*QStringList names=nodeAtts.namedItem("name").nodeValue().split(";"); QStringList max=nodeAtts.namedItem("max").nodeValue().split(";"); QStringList min=nodeAtts.namedItem("min").nodeValue().split(";"); @@ -157,6 +158,13 @@ vbox->addWidget(pl); valueItems[paramName+"complex"] = pl; items.append(pl); + } else if (type == "geometry") { + Geometryval *geo = new Geometryval; + connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters())); + geo->setupParam(d, pa.attribute("name"), 0, 100); + vbox->addWidget(geo); + valueItems[paramName+"geometry"] = geo; + items.append(geo); } else if (type == "color") { Ui::Colorval_UI *cval = new Ui::Colorval_UI; cval->setupUi(toFillin); @@ -323,9 +331,12 @@ } else if (type == "color") { KColorButton *color = ((Ui::Colorval_UI*)valueItems[na.toElement().text()])->kcolorbutton; setValue.sprintf("0x%08x", color->color().rgba()); - } else if (type == "complex" || type == "geometry") { + } else if (type == "complex") { ComplexParameter *complex = ((ComplexParameter*)valueItems[na.toElement().text()+"complex"]); namenode.item(i) = complex->getParamDesc(); + } else if (type == "geometry") { + Geometryval *geom = ((Geometryval*)valueItems[na.toElement().text()+"geometry"]); + namenode.item(i) = geom->getParamDesc(); } else if (type == "wipe") { Ui::Wipeval_UI *wp = (Ui::Wipeval_UI*)valueItems[na.toElement().text()]; wipeInfo info; Added: branches/KDE4/src/geometryval.cpp =================================================================== --- branches/KDE4/src/geometryval.cpp (rev 0) +++ branches/KDE4/src/geometryval.cpp 2008-08-03 10:19:42 UTC (rev 2355) @@ -0,0 +1,38 @@ +/*************************************************************************** + geomeytrval.cpp - description + ------------------- + begin : 03 Aug 2008 + copyright : (C) 2008 by Marco Gittler + email : g....@fr... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + + +#include "geometryval.h" +#include <QGraphicsView> +#include <QVBoxLayout> +#include <QGraphicsScene> +#include "graphicsscenerectmove.h" + +Geometryval::Geometryval(QWidget* parent): QWidget(parent) { + ui.setupUi(this); + QVBoxLayout* vbox = new QVBoxLayout(this); + ui.widget->setLayout(vbox); + QGraphicsView *view = new QGraphicsView(this); + vbox->addWidget(view); + //scene= new QGraphicsScene; + + scene = new GraphicsSceneRectMove(this); + view->setScene(scene); +} +QDomElement Geometryval::getParamDesc() {} + +void Geometryval::setupParam(const QDomElement&, const QString& paramName, int, int) {} Added: branches/KDE4/src/geometryval.h =================================================================== --- branches/KDE4/src/geometryval.h (rev 0) +++ branches/KDE4/src/geometryval.h 2008-08-03 10:19:42 UTC (rev 2355) @@ -0,0 +1,42 @@ +/*************************************************************************** + geomeytrval.h - description + ------------------- + begin : 03 Aug 2008 + copyright : (C) 2008 by Marco Gittler + email : g....@fr... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef GEOMETRYVAL_H +#define GEOMETRYVAL_H + + +#include "ui_geometryval_ui.h" +#include <QWidget> +#include <QDomElement> + +//class QGraphicsScene; +class GraphicsSceneRectMove; +class Geometryval : public QWidget { +public: + Geometryval(QWidget* parent = 0); + QDomElement getParamDesc(); +private: + Ui::Geometryval ui; + //QGraphicsScene* scene; + GraphicsSceneRectMove *scene; +public slots: + void setupParam(const QDomElement&, const QString& paramName, int, int); +signals: + void parameterChanged(); +}; + +#endif Added: branches/KDE4/src/widgets/geometryval_ui.ui =================================================================== --- branches/KDE4/src/widgets/geometryval_ui.ui (rev 0) +++ branches/KDE4/src/widgets/geometryval_ui.ui 2008-08-03 10:19:42 UTC (rev 2355) @@ -0,0 +1,51 @@ +<ui version="4.0" > + <class>Geometryval</class> + <widget class="QWidget" name="Geometryval" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle" > + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout" > + <item row="0" column="0" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Geometry</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QWidget" native="1" name="widget" > + <property name="sizePolicy" > + <sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QSlider" name="frame" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="3" column="0" > + <widget class="QCheckBox" name="isKeyFrame" > + <property name="text" > + <string>Keyframe</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ble...@us...> - 2008-08-03 10:21:52
|
Revision: 2356 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2356&view=rev Author: blendamedt Date: 2008-08-03 10:21:58 +0000 (Sun, 03 Aug 2008) Log Message: ----------- indent fixes and geometry param will be used in initeffects Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/initeffects.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivesettingsdialog.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h branches/KDE4/src/titlewidget.cpp branches/KDE4/src/trackview.cpp Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/customtrackview.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -1149,15 +1149,14 @@ // resize start if (m_dragItem->type() == AVWIDGET) { bool success = m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos()); - if (success) { - updateClipFade((ClipItem *) m_dragItem); - ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false); - m_commandStack->push(command); - } - else { - m_dragItem->resizeStart((int) m_dragItemInfo.startPos.frames(m_document->fps()), m_scale); - emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); - } + if (success) { + updateClipFade((ClipItem *) m_dragItem); + ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false); + m_commandStack->push(command); + } else { + m_dragItem->resizeStart((int) m_dragItemInfo.startPos.frames(m_document->fps()), m_scale); + emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); + } } else if (m_dragItem->type() == TRANSITIONWIDGET) { MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false); m_commandStack->push(command); @@ -1299,8 +1298,8 @@ ItemInfo info = item->info(); int percent = QInputDialog::getInteger(this, i18n("Edit Clip Speed"), i18n("New speed (percents)"), 100, 1, 300); double speed = (double) percent / 100.0; - if (item->speed() != speed) - new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected); + if (item->speed() != speed) + new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected); } } m_commandStack->push(changeSelected); @@ -1463,10 +1462,9 @@ if (resizeClipStart) { bool success = m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos); if (success) { - item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale); - updateClipFade(item); - } - else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); + item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale); + updateClipFade(item); + } else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); } else { m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + end.endPos - item->startPos()); item->resizeEnd((int) end.endPos.frames(m_document->fps()), m_scale); Modified: branches/KDE4/src/initeffects.cpp =================================================================== --- branches/KDE4/src/initeffects.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/initeffects.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -438,7 +438,7 @@ if (QString(paramdesc.get("type")) == "boolean") params.setAttribute("type", "bool"); if (!QString(paramdesc.get("format")).isEmpty() && QString(paramdesc.get("type")) != "geometry") { - params.setAttribute("type", "complex"); + params.setAttribute("type", "geometry"); params.setAttribute("format", paramdesc.get("format")); } if (!QString(paramdesc.get("format")).isEmpty() && QString(paramdesc.get("type")) == "geometry") { Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -64,7 +64,7 @@ int pos = 0; for (int i = 0; i < maxprod; i++) { QDomNode m = prods.at(pos); - QString prodId = m.toElement().attribute("id"); + QString prodId = m.toElement().attribute("id"); if (prodId == "black" || prodId.startsWith("slowmotion")) pos++; else westley.removeChild(m); @@ -91,7 +91,7 @@ parent->slotGotProgressInfo(QString(), (int) m_documentLoadingProgress); qApp->processEvents(); } - QString prodId = e.attribute("id"); + QString prodId = e.attribute("id"); if (!e.isNull() && prodId != "black" && prodId.toInt() > 0) { addClip(e, e.attribute("id").toInt()); } Modified: branches/KDE4/src/kdenlivesettingsdialog.cpp =================================================================== --- branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -110,8 +110,7 @@ KdenliveSettingsDialog::~KdenliveSettingsDialog() {} -void KdenliveSettingsDialog::initDevices() -{ +void KdenliveSettingsDialog::initDevices() { // Fill audio drivers m_configSdl.kcfg_audio_driver->addItem(i18n("Automatic"), QString()); m_configSdl.kcfg_audio_driver->addItem(i18n("OSS"), "dsp"); @@ -121,12 +120,12 @@ m_configSdl.kcfg_audio_driver->addItem(i18n("ARTS daemon"), "artsc"); /*if (!KdenliveSettings::audiodriver().isEmpty()) - for (uint i = 1;i < m_configDisplay.kcfg_audio_driver->count(); i++) { - if (m_configDisplay.kcfg_audio_driver->itemData(i).toString() == KdenliveSettings::audiodriver()) - m_configDisplay.kcfg_audio_driver->setCurrentIndex(i); - }*/ - - // Fill video drivers + for (uint i = 1;i < m_configDisplay.kcfg_audio_driver->count(); i++) { + if (m_configDisplay.kcfg_audio_driver->itemData(i).toString() == KdenliveSettings::audiodriver()) + m_configDisplay.kcfg_audio_driver->setCurrentIndex(i); + }*/ + + // Fill video drivers m_configSdl.kcfg_video_driver->addItem(i18n("Automatic"), QString()); m_configSdl.kcfg_video_driver->addItem(i18n("X11"), "x11"); m_configSdl.kcfg_video_driver->addItem(i18n("XFREE86 DGA 2.0"), "dga"); @@ -137,46 +136,44 @@ m_configSdl.kcfg_video_driver->addItem(i18n("General graphics interface"), "ggi"); m_configSdl.kcfg_video_driver->addItem(i18n("Ascii art library"), "aalib"); - // Fill the list of audio playback devices + // Fill the list of audio playback devices m_configSdl.kcfg_audio_device->addItem(i18n("Default"), QString()); if (KStandardDirs::findExe("aplay") != QString::null) { - m_readProcess.setOutputChannelMode(KProcess::OnlyStdoutChannel); - m_readProcess.setProgram("aplay", QStringList() << "-l"); - connect(&m_readProcess, SIGNAL(readyReadStandardOutput()) ,this, SLOT(slotReadAudioDevices())); - m_readProcess.execute(5000); - } - else { - // If aplay is not installed on the system, parse the /proc/asound/pcm file - QFile file("/proc/asound/pcm"); - if ( file.open( QIODevice::ReadOnly ) ) { - QTextStream stream( &file ); - QString line; - while ( !stream.atEnd() ) { + m_readProcess.setOutputChannelMode(KProcess::OnlyStdoutChannel); + m_readProcess.setProgram("aplay", QStringList() << "-l"); + connect(&m_readProcess, SIGNAL(readyReadStandardOutput()) , this, SLOT(slotReadAudioDevices())); + m_readProcess.execute(5000); + } else { + // If aplay is not installed on the system, parse the /proc/asound/pcm file + QFile file("/proc/asound/pcm"); + if (file.open(QIODevice::ReadOnly)) { + QTextStream stream(&file); + QString line; + while (!stream.atEnd()) { line = stream.readLine(); - if (line.contains("playback")) { - QString deviceId = line.section(":", 0, 0); - m_configSdl.kcfg_audio_device->addItem(line.section(":", 1, 1), "plughw:" + QString::number(deviceId.section("-", 0, 0).toInt()) + "," + QString::number(deviceId.section("-", 1, 1).toInt())); - } - } + if (line.contains("playback")) { + QString deviceId = line.section(":", 0, 0); + m_configSdl.kcfg_audio_device->addItem(line.section(":", 1, 1), "plughw:" + QString::number(deviceId.section("-", 0, 0).toInt()) + "," + QString::number(deviceId.section("-", 1, 1).toInt())); + } + } file.close(); - } + } } } -void KdenliveSettingsDialog::slotReadAudioDevices() -{ +void KdenliveSettingsDialog::slotReadAudioDevices() { QString result = QString(m_readProcess.readAllStandardOutput()); - kDebug()<<"// / / / / / READING APLAY: "; - kDebug()<< result; + kDebug() << "// / / / / / READING APLAY: "; + kDebug() << result; QStringList lines = result.split('\n'); - foreach (QString data, lines) { - kDebug()<<"// READING LINE: "<<data; - if (data.simplified().startsWith("card")) { - QString card = data.section(":", 0, 0).section(" ", -1); - QString device = data.section(":", 1, 1).section(" ", -1); - m_configSdl.kcfg_audio_device->addItem(data.section(":", -1), "plughw:" + card + "," + device); - } + foreach(QString data, lines) { + kDebug() << "// READING LINE: " << data; + if (data.simplified().startsWith("card")) { + QString card = data.section(":", 0, 0).section(" ", -1); + QString device = data.section(":", 1, 1).section(" ", -1); + m_configSdl.kcfg_audio_device->addItem(data.section(":", -1), "plughw:" + card + "," + device); + } } } @@ -293,20 +290,20 @@ bool resetProfile = false; QString value = m_configSdl.kcfg_audio_device->itemData(m_configSdl.kcfg_audio_device->currentIndex()).toString(); if (value != KdenliveSettings::audiodevicename()) { - KdenliveSettings::setAudiodevicename(value); - resetProfile = true; + KdenliveSettings::setAudiodevicename(value); + resetProfile = true; } value = m_configSdl.kcfg_audio_driver->itemData(m_configSdl.kcfg_audio_driver->currentIndex()).toString(); if (value != KdenliveSettings::audiodrivername()) { - KdenliveSettings::setAudiodrivername(value); - resetProfile = true; + KdenliveSettings::setAudiodrivername(value); + resetProfile = true; } value = m_configSdl.kcfg_video_driver->itemData(m_configSdl.kcfg_video_driver->currentIndex()).toString(); if (value != KdenliveSettings::videodrivername()) { - KdenliveSettings::setVideodrivername(value); - resetProfile = true; + KdenliveSettings::setVideodrivername(value); + resetProfile = true; } KConfigDialog::updateSettings(); Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/renderer.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -82,28 +82,28 @@ m_mltConsumer->set("terminate_on_pause", 1); m_mltConsumer->set("rescale", "nearest"); m_mltConsumer->set("progressive", 1); - char *tmp; + char *tmp; - QString audioDevice = KdenliveSettings::audiodevicename(); - if (!audioDevice.isEmpty()) { - tmp = decodedString(audioDevice); - m_mltConsumer->set("audio_device", tmp); - delete[] tmp; - } + QString audioDevice = KdenliveSettings::audiodevicename(); + if (!audioDevice.isEmpty()) { + tmp = decodedString(audioDevice); + m_mltConsumer->set("audio_device", tmp); + delete[] tmp; + } - QString videoDriver = KdenliveSettings::videodrivername(); - if (!videoDriver.isEmpty()) { - tmp = decodedString(videoDriver); - m_mltConsumer->set("video_driver", tmp); - delete[] tmp; - } + QString videoDriver = KdenliveSettings::videodrivername(); + if (!videoDriver.isEmpty()) { + tmp = decodedString(videoDriver); + m_mltConsumer->set("video_driver", tmp); + delete[] tmp; + } - QString audioDriver = KdenliveSettings::audiodrivername(); - if (!audioDriver.isEmpty()) { - tmp = decodedString(audioDriver); - m_mltConsumer->set("audio_driver", tmp); - delete[] tmp; - } + QString audioDriver = KdenliveSettings::audiodrivername(); + if (!audioDriver.isEmpty()) { + tmp = decodedString(audioDriver); + m_mltConsumer->set("audio_driver", tmp); + delete[] tmp; + } m_mltConsumer->set("audio_buffer", 1024); m_mltConsumer->set("frequency", 48000); @@ -180,26 +180,26 @@ QString audioDevice = KdenliveSettings::audiodevicename(); if (!audioDevice.isEmpty()) { - tmp = decodedString(audioDevice); - m_mltConsumer->set("audio_device", tmp); - delete[] tmp; + tmp = decodedString(audioDevice); + m_mltConsumer->set("audio_device", tmp); + delete[] tmp; } QString videoDriver = KdenliveSettings::videodrivername(); if (!videoDriver.isEmpty()) { - tmp = decodedString(videoDriver); - m_mltConsumer->set("video_driver", tmp); - delete[] tmp; + tmp = decodedString(videoDriver); + m_mltConsumer->set("video_driver", tmp); + delete[] tmp; } QString audioDriver = KdenliveSettings::audiodrivername(); if (!audioDriver.isEmpty()) { - tmp = decodedString(audioDriver); - m_mltConsumer->set("audio_driver", tmp); - delete[] tmp; + tmp = decodedString(audioDriver); + m_mltConsumer->set("audio_driver", tmp); + delete[] tmp; } - + m_mltConsumer->set("progressive", 1); m_mltConsumer->set("audio_buffer", 1024); m_mltConsumer->set("frequency", 48000); @@ -1320,7 +1320,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()); @@ -1333,18 +1333,18 @@ mlt_service_lock(service.get_service()); QString url = clip.parent().get("resource"); url.append("?" + QString::number(speed)); - Mlt::Producer *slowprod = m_slowmotionProducers.value(url); - if (!slowprod || slowprod->get_producer() == NULL) { - char *tmp = decodedString(url); - slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); - delete[] tmp; - QString producerid = "slowmotion:" + id + ":" + QString::number(speed); - tmp = decodedString(producerid); - slowprod->set("id", tmp); - delete[] tmp; - m_slowmotionProducers.insert(url, slowprod); - } - Mlt::Producer *cut = slowprod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); + Mlt::Producer *slowprod = m_slowmotionProducers.value(url); + if (!slowprod || slowprod->get_producer() == NULL) { + char *tmp = decodedString(url); + slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); + delete[] tmp; + QString producerid = "slowmotion:" + id + ":" + QString::number(speed); + tmp = decodedString(producerid); + slowprod->set("id", tmp); + delete[] tmp; + m_slowmotionProducers.insert(url, slowprod); + } + Mlt::Producer *cut = slowprod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); newLength = cut->get_length(); trackPlaylist.replace_with_blank(clipIndex); trackPlaylist.consolidate_blanks(0); @@ -1363,18 +1363,18 @@ QString url = clip.parent().get("resource"); url = url.section("?", 0, 0); url.append("?" + QString::number(speed)); - Mlt::Producer *slowprod = m_slowmotionProducers.value(url); - if (!slowprod || slowprod->get_producer() == NULL) { - char *tmp = decodedString(url); - slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); - delete[] tmp; - QString producerid = "slowmotion:" + id.section(":", 1, 1) + ":" + QString::number(speed); - tmp = decodedString(producerid); - slowprod->set("id", tmp); - delete[] tmp; - m_slowmotionProducers.insert(url, slowprod); - } - Mlt::Producer *cut = slowprod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); + Mlt::Producer *slowprod = m_slowmotionProducers.value(url); + if (!slowprod || slowprod->get_producer() == NULL) { + char *tmp = decodedString(url); + slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp); + delete[] tmp; + QString producerid = "slowmotion:" + id.section(":", 1, 1) + ":" + QString::number(speed); + tmp = decodedString(producerid); + slowprod->set("id", tmp); + delete[] tmp; + m_slowmotionProducers.insert(url, slowprod); + } + Mlt::Producer *cut = slowprod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); newLength = cut->get_length(); trackPlaylist.replace_with_blank(clipIndex); trackPlaylist.consolidate_blanks(0); @@ -1721,14 +1721,14 @@ Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) - 1)) { kDebug() << "//////// ERROR RSIZING BLANK CLIP!!!!!!!!!!!"; - return false; + return false; } int clipIndex = trackPlaylist.get_clip_index_at((int) pos.frames(m_fps) - 1); int previousStart = trackPlaylist.clip_start(clipIndex); //kDebug() << " ** RESIZING CLIP START:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", moving: " << moveFrame << ", in: " << in.frames(25) << ", out: " << out.frames(25); Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex); if (clip == NULL) { - return false; + return false; } m_isBlocked = true; trackPlaylist.resize_clip(clipIndex, (int) in.frames(m_fps), (int) out.frames(m_fps)); Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/renderer.h 2008-08-03 10:21:58 UTC (rev 2356) @@ -172,10 +172,10 @@ void mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id); /** Change speed of a clip in playlist. To do this, we create a new "framebuffer" producer. - This new producer must have its "resource" param set to: video.mpg?0.6 where video.mpg is the path - to the clip and 0.6 is the speed in percents. The newly created producer will have it's - "id" parameter set to: "slowmotion:parentid:speed", where parentid is the id of the original clip - in the ClipManager list and speed is the current speed */ + This new producer must have its "resource" param set to: video.mpg?0.6 where video.mpg is the path + to the clip and 0.6 is the speed in percents. The newly created producer will have it's + "id" parameter set to: "slowmotion:parentid:speed", where parentid is the id of the original clip + in the ClipManager list and speed is the current speed */ int mltChangeClipSpeed(ItemInfo info, double speed, Mlt::Producer *prod); private: // Private attributes & methods Modified: branches/KDE4/src/titlewidget.cpp =================================================================== --- branches/KDE4/src/titlewidget.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/titlewidget.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -630,7 +630,7 @@ QPixmap pix(m_frameWidth, m_frameHeight); pix.fill(Qt::transparent); QPainter painter(&pix); - + //painter.setRenderHint( QPainter::Antialiasing ); m_scene->clearSelection(); QPen framepen = m_frameBorder->pen(); m_frameBorder->setPen(Qt::NoPen); Modified: branches/KDE4/src/trackview.cpp =================================================================== --- branches/KDE4/src/trackview.cpp 2008-08-03 10:19:42 UTC (rev 2355) +++ branches/KDE4/src/trackview.cpp 2008-08-03 10:21:58 UTC (rev 2356) @@ -334,14 +334,14 @@ // Found a clip int in = elem.attribute("in").toInt(); QString idString = elem.attribute("producer"); - int id = idString.toInt(); - bool hasSpeedAttribute = false; - double speed; - if (idString.startsWith("slowmotion")) { - hasSpeedAttribute = true; - id = idString.section(":", 1, 1).toInt(); - speed = idString.section(":", 2, 2).toDouble(); - } + int id = idString.toInt(); + bool hasSpeedAttribute = false; + double speed; + if (idString.startsWith("slowmotion")) { + hasSpeedAttribute = true; + id = idString.section(":", 1, 1).toInt(); + speed = idString.section(":", 2, 2).toDouble(); + } DocClipBase *clip = m_doc->clipManager()->getClipById(id); if (clip != NULL) { int out = elem.attribute("out").toInt(); @@ -353,7 +353,7 @@ clipinfo.track = ix; //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps(); ClipItem *item = new ClipItem(clip, clipinfo, m_scale, m_doc->fps()); - if (hasSpeedAttribute) item->setSpeed(speed); + if (hasSpeedAttribute) item->setSpeed(speed); m_scene->addItem(item); clip->addReference(); position += (out - in + 1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |