From: Jean-Baptiste Mardelle Date: Tue, 27 Jan 2009 16:45:28 +0000 (+0000) Subject: Remember & save monitor zone for each clip: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=be49eff2cfda1c06986766213e4c389b948365a9;p=kdenlive Remember & save monitor zone for each clip: http://www.kdenlive.org:80/mantis/view.php?id=517 svn path=/branches/KDE4/; revision=2988 --- diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index b2b26de8..3bddb769 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -76,6 +76,18 @@ DocClipBase::~DocClipBase() { m_baseTrackProducers.clear(); } +void DocClipBase::setZone(QPoint zone) { + m_properties.insert("zone_in", QString::number(zone.x())); + m_properties.insert("zone_out", QString::number(zone.y())); +} + +QPoint DocClipBase::zone() const { + QPoint zone; + zone.setX(m_properties.value("zone_in").toInt()); + zone.setY(m_properties.value("zone_out", "50").toInt()); + return zone; +} + void DocClipBase::slotCreateAudioTimer() { connect(m_thumbProd, SIGNAL(audioThumbReady(QMap >)), this , SLOT(updateAudioThumbnail(QMap >))); connect(this, SIGNAL(getAudioThumbs()), this , SLOT(slotGetAudioThumbs())); @@ -404,8 +416,10 @@ Mlt::Producer *DocClipBase::producer(int track) { if (track == -1 || (m_clipType != AUDIO && m_clipType != AV)) { if (m_baseTrackProducers.count() == 0) return NULL; int i; - for (int i = 0; i < m_baseTrackProducers.count(); i++) - if (m_baseTrackProducers.at(i) != NULL) return m_baseTrackProducers.at(i); + for (int i = 0; i < m_baseTrackProducers.count(); i++) { + if (m_baseTrackProducers.at(i) != NULL) + return m_baseTrackProducers.at(i); + } return NULL; } if (track >= m_baseTrackProducers.count()) { diff --git a/src/docclipbase.h b/src/docclipbase.h index 5171bc5a..a956bf73 100644 --- a/src/docclipbase.h +++ b/src/docclipbase.h @@ -168,6 +168,11 @@ Q_OBJECT public: void setProducerProperty(const char *name, const char *data); void deleteProducers(); + /** Set default play zone for clip monitor */ + void setZone(QPoint zone); + /** Get default play zone for clip monitor */ + QPoint zone() const; + private: // Private attributes /** A description of this clip */ diff --git a/src/monitor.cpp b/src/monitor.cpp index 4aad50d9..0d055d75 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -114,7 +114,6 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); - connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SIGNAL(zoneUpdated(QPoint))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int))); @@ -128,6 +127,9 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) if (name != "clip") { connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int))); connect(render, SIGNAL(durationChanged(int)), this, SIGNAL(durationChanged(int))); + connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SIGNAL(zoneUpdated(QPoint))); + } else { + connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SLOT(setClipZone(QPoint))); } m_monitorRefresh->show(); kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId(); @@ -259,18 +261,21 @@ GenTime Monitor::getSnapForPos(bool previous) { void Monitor::slotZoneMoved(int start, int end) { m_ruler->setZone(start, end); checkOverlay(); + setClipZone(m_ruler->zone()); } void Monitor::slotSetZoneStart() { m_ruler->setZone(m_position, -1); emit zoneUpdated(m_ruler->zone()); checkOverlay(); + setClipZone(m_ruler->zone()); } void Monitor::slotSetZoneEnd() { m_ruler->setZone(-1, m_position); emit zoneUpdated(m_ruler->zone()); checkOverlay(); + setClipZone(m_ruler->zone()); } // virtual @@ -539,6 +544,10 @@ void Monitor::initMonitor() { void Monitor::adjustRulerSize(int length) { if (length > 0) m_length = length; m_ruler->adjustScale(m_length); + if (m_currentClip != NULL) { + QPoint zone = m_currentClip->zone(); + m_ruler->setZone(zone.x(), zone.y()); + } } void Monitor::stop() { @@ -608,14 +617,9 @@ void Monitor::slotSetXml(DocClipBase *clip, const int position) { return; } if (clip != m_currentClip) { - if (clip->producer() != NULL) { - m_currentClip = clip; - render->setProducer(clip->producer(), position); - //m_ruler->slotNewValue(0); - //adjustRulerSize(clip->producer()->get_playtime()); - //m_timePos->setText("00:00:00:00"); - m_position = position; - } + m_currentClip = clip; + render->setProducer(clip->producer(), position); + m_position = position; } else if (position != -1) render->seek(GenTime(position, render->fps())); } @@ -657,6 +661,12 @@ QDomDocument Monitor::sceneList() { return doc; } + +void Monitor::setClipZone(QPoint pos) { + if (m_currentClip == NULL) return; + m_currentClip->setZone(pos); +} + MonitorRefresh::MonitorRefresh(QWidget* parent): QWidget(parent), m_renderer(NULL) { setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_OpaquePaintEvent); //setAttribute(Qt::WA_NoSystemBackground); diff --git a/src/monitor.h b/src/monitor.h index 73a9ff7c..87f876c8 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -120,6 +120,7 @@ private slots: void slotSetSizeOneToTwo(); void slotSaveZone(); void slotSeek(); + void setClipZone(QPoint pos); public slots: void slotOpenFile(const QString &); diff --git a/src/renderer.cpp b/src/renderer.cpp index 92880e67..d237cf71 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1128,6 +1128,7 @@ void Render::playZone(const GenTime & startTime, const GenTime & stopTime) { if (!m_mltProducer || !m_mltConsumer) return; m_isBlocked = false; + if (!m_isZoneMode) m_originalOut = m_mltProducer->get_playtime() - 1; m_mltProducer->set("out", stopTime.frames(m_fps)); m_mltProducer->seek((int)(startTime.frames(m_fps))); m_mltProducer->set_speed(1.0); @@ -1136,7 +1137,8 @@ void Render::playZone(const GenTime & startTime, const GenTime & stopTime) { } void Render::resetZoneMode() { - m_mltProducer->set("out", m_mltProducer->get_length() - 1); + if (!m_isZoneMode && !m_isLoopMode) return; + m_mltProducer->set("out", m_originalOut); //m_mltProducer->set("eof", "pause"); m_isZoneMode = false; m_isLoopMode = false; diff --git a/src/renderer.h b/src/renderer.h index 3c69d968..2e28eb64 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -200,6 +200,7 @@ private: // Private attributes & methods bool m_isZoneMode; bool m_isLoopMode; GenTime m_loopStart; + int m_originalOut; /** true when monitor is in split view (several tracks at the same time) */ bool m_isSplitView;