From 2950bfaa74c8dbc91e72634a8c2efbc107f571ae Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 25 Sep 2009 21:02:41 +0000 Subject: [PATCH] Fix several DVD wizard monitor issue, might solve: http://www.kdenlive.org:80/mantis/view.php?id=1164 svn path=/trunk/kdenlive/; revision=3929 --- src/dvdwizard.cpp | 10 +++--- src/dvdwizardchapters.cpp | 47 ++++++++++++++++++++--------- src/dvdwizardchapters.h | 3 +- src/kdenlivedoc.cpp | 2 +- src/mainwindow.cpp | 8 ++--- src/monitor.cpp | 12 +++++--- src/monitor.h | 4 +-- src/monitormanager.cpp | 8 ++--- src/renderer.cpp | 20 ++++++------ src/renderer.h | 6 ++-- src/widgets/dvdwizardchapters_ui.ui | 11 ++++--- 11 files changed, 77 insertions(+), 54 deletions(-) diff --git a/src/dvdwizard.cpp b/src/dvdwizard.cpp index 7ecbc93a..c0e273ea 100644 --- a/src/dvdwizard.cpp +++ b/src/dvdwizard.cpp @@ -46,7 +46,6 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent { setWindowTitle(i18n("DVD Wizard")); //setPixmap(QWizard::WatermarkPixmap, QPixmap(KStandardDirs::locate("appdata", "banner.png"))); - setAttribute(Qt::WA_DeleteOnClose); m_pageVob = new DvdWizardVob(profile, this); m_pageVob->setTitle(i18n("Select Files For Your DVD")); addPage(m_pageVob); @@ -76,8 +75,6 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent addPage(page4); - - connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotPageChanged(int))); connect(m_status.button_start, SIGNAL(clicked()), this, SLOT(slotGenerate())); connect(m_status.button_abort, SIGNAL(clicked()), this, SLOT(slotAbort())); @@ -119,6 +116,7 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent DvdWizard::~DvdWizard() { // m_menuFile.remove(); + blockSignals(true); delete m_burnMenu; if (m_dvdauthor) { m_dvdauthor->blockSignals(true); @@ -138,10 +136,12 @@ void DvdWizard::slotPageChanged(int page) //kDebug() << "// PAGE CHGD: " << page << ", ID: " << visitedPages(); if (page == 0) { // Update chapters that were modified in page 1 + m_pageChapters->stopMonitor(); m_pageVob->updateChapters(m_pageChapters->chaptersData()); } else if (page == 1) { - m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters()); + m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->isWide(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters()); } else if (page == 2) { + m_pageChapters->stopMonitor(); m_pageMenu->setTargets(m_pageChapters->selectedTitles(), m_pageChapters->selectedTargets()); m_pageMenu->changeProfile(m_pageVob->isPal()); } @@ -654,7 +654,7 @@ void DvdWizard::slotSave() KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog:///projectfolder"), "*.kdvd", this, i18n("Save DVD Project")); if (url.isEmpty()) return; - if (currentId() == 0) m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters()); + if (currentId() == 0) m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->isWide(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters()); QDomDocument doc; QDomElement dvdproject = doc.createElement("dvdproject"); diff --git a/src/dvdwizardchapters.cpp b/src/dvdwizardchapters.cpp index 61e984ba..ac7793be 100644 --- a/src/dvdwizardchapters.cpp +++ b/src/dvdwizardchapters.cpp @@ -25,7 +25,8 @@ DvdWizardChapters::DvdWizardChapters(bool isPal, QWidget *parent) : QWizardPage(parent), - m_isPal(isPal) + m_isPal(isPal), + m_monitor(NULL) { m_view.setupUi(this); @@ -41,19 +42,15 @@ DvdWizardChapters::DvdWizardChapters(bool isPal, QWidget *parent) : m_manager = new MonitorManager(this); m_manager->resetProfiles(m_tc); - m_monitor = new Monitor("chapter", m_manager, this); - m_monitor->start(); - - QVBoxLayout *vbox = new QVBoxLayout; - vbox->addWidget(m_monitor); - m_view.monitor_frame->setLayout(vbox); - - + //m_view.monitor_frame->setVisible(false); } DvdWizardChapters::~DvdWizardChapters() { - delete m_monitor; + if (m_monitor) { + m_monitor->stop(); + delete m_monitor; + } delete m_manager; } @@ -64,6 +61,11 @@ bool DvdWizardChapters::isComplete() const return true; } +void DvdWizardChapters::stopMonitor() +{ + if (m_monitor) m_monitor->stop(); +} + void DvdWizardChapters::slotUpdateChaptersList() { m_monitor->slotOpenFile(m_view.vob_list->currentText()); @@ -132,13 +134,30 @@ void DvdWizardChapters::slotGoToChapter() m_monitor->setTimePos(m_view.chapters_list->currentItem()->text() + ":00"); } -void DvdWizardChapters::setVobFiles(bool isPal, const QStringList movies, const QStringList durations, const QStringList chapters) +void DvdWizardChapters::setVobFiles(bool isPal, bool isWide, const QStringList movies, const QStringList durations, const QStringList chapters) { m_isPal = isPal; - if (m_isPal) m_tc.setFormat(25); - else m_tc.setFormat(30000.0 / 1001, true); + QString profile; + if (m_isPal) { + m_tc.setFormat(25); + profile = "dv_pal"; + } else { + m_tc.setFormat(30000.0 / 1001, true); + profile = "dv_ntsc"; + } + if (isWide) profile.append("_wide"); m_manager->resetProfiles(m_tc); - m_monitor->resetProfile(); + + if (m_monitor == NULL) { + + m_monitor = new Monitor("chapter", m_manager, profile, this); + m_monitor->start(); + QVBoxLayout *vbox = new QVBoxLayout; + vbox->addWidget(m_monitor); + m_view.monitor_frame->setLayout(vbox); + /*updateGeometry(); + adjustSize();*/ + } else m_monitor->resetProfile(profile); m_view.vob_list->clear(); for (int i = 0; i < movies.count(); i++) { diff --git a/src/dvdwizardchapters.h b/src/dvdwizardchapters.h index 2291176f..620da014 100644 --- a/src/dvdwizardchapters.h +++ b/src/dvdwizardchapters.h @@ -39,12 +39,13 @@ public: virtual bool isComplete() const; void changeProfile(bool isPal); void setPal(bool isPal); - void setVobFiles(bool isPal, const QStringList movies, const QStringList durations, const QStringList chapters); + void setVobFiles(bool isPal, bool isWide, const QStringList movies, const QStringList durations, const QStringList chapters); QStringList selectedTitles() const; QStringList selectedTargets() const; QStringList chapters(int ix) const; QDomElement toXml() const; QMap chaptersData() const; + void stopMonitor(); private: Ui::DvdWizardChapters_UI m_view; diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 76575c07..bf96d715 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -249,7 +249,7 @@ KdenliveDoc::~KdenliveDoc() int KdenliveDoc::setSceneList() { - m_render->resetProfile(); + m_render->resetProfile(KdenliveSettings::current_profile()); if (m_render->setSceneList(m_document.toString(), m_documentProperties.value("position").toInt()) == -1) { // INVALID MLT Consumer, something is wrong return -1; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4955b99b..e4cc0fbb 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -184,14 +184,14 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this); m_clipMonitorDock->setObjectName("clip_monitor"); - m_clipMonitor = new Monitor("clip", m_monitorManager, this); + m_clipMonitor = new Monitor("clip", m_monitorManager, QString(), this); m_clipMonitorDock->setWidget(m_clipMonitor); addDockWidget(Qt::TopDockWidgetArea, m_clipMonitorDock); //m_clipMonitor->stop(); m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this); m_projectMonitorDock->setObjectName("project_monitor"); - m_projectMonitor = new Monitor("project", m_monitorManager, this); + m_projectMonitor = new Monitor("project", m_monitorManager, QString(), this); m_projectMonitorDock->setWidget(m_projectMonitor); addDockWidget(Qt::TopDockWidgetArea, m_projectMonitorDock); @@ -2667,8 +2667,8 @@ void MainWindow::slotUpdateClipType(QAction *action) void MainWindow::slotDvdWizard(const QString &url, const QString &profile) { - DvdWizard *w = new DvdWizard(url, profile, this); - w->exec(); + DvdWizard w(url, profile, this); + w.exec(); } void MainWindow::slotShowTimeline(bool show) diff --git a/src/monitor.cpp b/src/monitor.cpp index 2142f76e..cedfc4e4 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -41,7 +41,7 @@ #include -Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) : +Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget *parent) : QWidget(parent), render(NULL), m_name(name), @@ -130,12 +130,14 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) : //m_ruler->setPixelPerMark(3); + if (profile.isEmpty()) profile = KdenliveSettings::current_profile(); + QVBoxLayout *rendererBox = new QVBoxLayout(m_ui.video_frame); rendererBox->setContentsMargins(0, 0, 0, 0); #ifdef Q_WS_MAC m_glWidget = new VideoGLWidget(m_ui.video_frame); rendererBox->addWidget(m_glWidget); - render = new Render(m_name, (int) m_ui.video_frame->winId(), -1, this); + render = new Render(m_name, (int) m_ui.video_frame->winId(), -1, profile, this); m_glWidget->setImageAspectRatio(render->dar()); m_glWidget->setBackgroundColor(KdenliveSettings::window_background()); m_glWidget->resize(m_ui.video_frame->size()); @@ -144,7 +146,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) : #else m_monitorRefresh = new MonitorRefresh(m_ui.video_frame); rendererBox->addWidget(m_monitorRefresh); - render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, this); + render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, profile, this); m_monitorRefresh->setRenderer(render); #endif @@ -781,10 +783,10 @@ void Monitor::slotSaveZone() } -void Monitor::resetProfile() +void Monitor::resetProfile(const QString profile) { if (render == NULL) return; - render->resetProfile(); + render->resetProfile(profile); } void Monitor::saveSceneList(QString path, QDomElement info) diff --git a/src/monitor.h b/src/monitor.h index 3f3fe8fd..978e080d 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -68,10 +68,10 @@ class Monitor : public QWidget Q_OBJECT public: - Monitor(QString name, MonitorManager *manager, QWidget *parent = 0); + Monitor(QString name, MonitorManager *manager, QString profile = QString(), QWidget *parent = 0); virtual ~Monitor(); Render *render; - void resetProfile(); + void resetProfile(const QString profile); QString name() const; void resetSize(); bool isActive() const; diff --git a/src/monitormanager.cpp b/src/monitormanager.cpp index 7e2d184a..0656a4d8 100644 --- a/src/monitormanager.cpp +++ b/src/monitormanager.cpp @@ -50,7 +50,7 @@ void MonitorManager::initMonitors(Monitor *clipMonitor, Monitor *projectMonitor) void MonitorManager::activateMonitor(QString name) { - if (m_blocked) return; + if (m_blocked || m_clipMonitor == NULL) return; if (m_activeMonitor == name) return; if (name == "clip") { m_projectMonitor->stop(); @@ -67,7 +67,7 @@ void MonitorManager::activateMonitor(QString name) void MonitorManager::switchMonitors() { - if (m_blocked) return; + if (m_blocked || m_clipMonitor == NULL) return; if (m_clipMonitor->isActive()) { m_clipMonitor->stop(); m_projectMonitor->start(); @@ -168,9 +168,9 @@ void MonitorManager::slotResetProfiles() if (m_blocked) return; if (m_projectMonitor == NULL || m_clipMonitor == NULL) return; activateMonitor("clip"); - m_clipMonitor->resetProfile(); + m_clipMonitor->resetProfile(KdenliveSettings::current_profile()); activateMonitor("project"); - m_projectMonitor->resetProfile(); + m_projectMonitor->resetProfile(KdenliveSettings::current_profile()); //m_projectMonitor->refreshMonitor(true); } diff --git a/src/renderer.cpp b/src/renderer.cpp index d4ae9755..1c397d3b 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -67,7 +67,7 @@ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr } } -Render::Render(const QString & rendererName, int winid, int /* extid */, QWidget *parent) : +Render::Render(const QString & rendererName, int winid, int /* extid */, QString profile, QWidget *parent) : QObject(parent), m_isBlocked(0), m_name(rendererName), @@ -84,14 +84,12 @@ Render::Render(const QString & rendererName, int winid, int /* extid */, QWidget , m_glWidget(0) #endif { - kDebug() << "////////// USING PROFILE: " << (char*)KdenliveSettings::current_profile().toUtf8().data(); - /*if (rendererName == "project") m_monitorId = 10000; else m_monitorId = 10001;*/ /*m_osdTimer = new QTimer(this); connect(m_osdTimer, SIGNAL(timeout()), this, SLOT(slotOsdTimeout()));*/ - - buildConsumer(); + if (profile.isEmpty()) profile = KdenliveSettings::current_profile(); + buildConsumer(profile); m_mltProducer = m_blackClip->cut(0, 50); m_mltConsumer->connect(*m_mltProducer); @@ -151,10 +149,10 @@ void Render::closeMlt() } -void Render::buildConsumer() +void Render::buildConsumer(const QString profileName) { char *tmp; - m_activeProfile = KdenliveSettings::current_profile(); + m_activeProfile = profileName; tmp = decodedString(m_activeProfile); setenv("MLT_PROFILE", tmp, 1); delete m_blackClip; @@ -232,14 +230,14 @@ void Render::buildConsumer() } -int Render::resetProfile() +int Render::resetProfile(const QString profileName) { if (!m_mltConsumer) return 0; - if (m_activeProfile == KdenliveSettings::current_profile()) { + if (m_activeProfile == profileName) { kDebug() << "reset to same profile, nothing to do"; return 1; } - kDebug() << "// RESETTING PROFILE FROM: " << m_activeProfile << " TO: " << KdenliveSettings::current_profile(); + kDebug() << "// RESETTING PROFILE FROM: " << m_activeProfile << " TO: " << profileName; //KdenliveSettings::current_profile(); if (m_isSplitView) slotSplitView(false); if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop(); m_mltConsumer->purge(); @@ -270,7 +268,7 @@ int Render::resetProfile() } m_mltProducer = NULL; - buildConsumer(); + buildConsumer(profileName); double new_fps = m_mltProfile->fps(); if (current_fps != new_fps) { // fps changed, we must update the scenelist positions diff --git a/src/renderer.h b/src/renderer.h index 8414f633..241459a1 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -81,7 +81,7 @@ Q_OBJECT public: APP_NOEXIST }; - Render(const QString & rendererName, int winid, int extid, QWidget *parent = 0); + Render(const QString & rendererName, int winid, int extid, QString profile = QString(), QWidget *parent = 0); ~Render(); /** Seeks the renderer clip to the given time. */ @@ -161,7 +161,7 @@ Q_OBJECT public: /** Turn on or off on screen display */ void refreshDisplay(); - int resetProfile(); + int resetProfile(const QString profileName); double fps() const; int renderWidth() const; int renderHeight() const; @@ -250,7 +250,7 @@ private: // Private attributes & methods void mltPasteEffects(Mlt::Producer *source, Mlt::Producer *dest); QMap mltGetTransitionParamsFromXml(QDomElement xml); QMap m_slowmotionProducers; - void buildConsumer(); + void buildConsumer(const QString profileName); void resetZoneMode(); void fillSlowMotionProducers(); diff --git a/src/widgets/dvdwizardchapters_ui.ui b/src/widgets/dvdwizardchapters_ui.ui index db23d8f5..030b815c 100644 --- a/src/widgets/dvdwizardchapters_ui.ui +++ b/src/widgets/dvdwizardchapters_ui.ui @@ -61,10 +61,13 @@ - - - - + + + + QFrame::StyledPanel + + + QFrame::Raised -- 2.39.2