]> git.sesse.net Git - kdenlive/commitdiff
Fix issues with OpenGL aspect ration / corruption and DVD wizard monitor
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 31 Dec 2012 02:02:56 +0000 (03:02 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 31 Dec 2012 02:02:56 +0000 (03:02 +0100)
16 files changed:
src/abstractmonitor.cpp
src/dvdwizard.cpp
src/dvdwizard.h
src/dvdwizardchapters.cpp
src/dvdwizardchapters.h
src/dvdwizardvob.cpp
src/dvdwizardvob.h
src/mainwindow.cpp
src/monitor.cpp
src/monitor.h
src/scopes/scopemanager.cpp
src/titlewidget.cpp
src/videoglwidget.cpp
src/videoglwidget.h
src/widgets/dvdwizardchapters_ui.ui
src/widgets/monitor_ui.ui

index b1b3875c67577330ec83ba99c481ef58da014660..9f108832e12abb638b3d7bb54a69728ec974bb86 100644 (file)
@@ -71,7 +71,7 @@ VideoContainer::VideoContainer(AbstractMonitor* monitor, QWidget *parent) :
     setFrameShape(QFrame::NoFrame);
     setFocusPolicy(Qt::ClickFocus);
     //setEnabled(false);
-    setContentsMargins(0, 0, 0, 0);
+    setContentsMargins(2, 2, 2, 2);
     setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
 }
 
index 6af065e54d5343cd89c4014a0e9c27e49debaa67..eb0b87fb03e2d98ed5544435a9acef04d01ce0ad 100644 (file)
@@ -51,12 +51,13 @@ DvdWizard::DvdWizard(MonitorManager *manager, const QString &url, QWidget *paren
     m_pageVob = new DvdWizardVob(this);
     m_pageVob->setTitle(i18n("Select Files For Your DVD"));
     addPage(m_pageVob);
-    if (!url.isEmpty()) m_pageVob->setUrl(url);
-
 
     m_pageChapters = new DvdWizardChapters(manager, m_pageVob->dvdFormat(), this);
     m_pageChapters->setTitle(i18n("DVD Chapters"));
     addPage(m_pageChapters);
+    
+    if (!url.isEmpty()) m_pageVob->setUrl(url);
+    connect(m_pageVob, SIGNAL(prepareMonitor()), this, SLOT(slotprepareMonitor()));
 
 
 
@@ -154,6 +155,7 @@ void DvdWizard::slotPageChanged(int page)
         m_pageVob->updateChapters(m_pageChapters->chaptersData());
     } else if (page == 1) {
         m_pageChapters->setVobFiles(m_pageVob->dvdFormat(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
+       setTitleFormat(Qt::PlainText);
     } else if (page == 2) {
         m_pageChapters->stopMonitor();
         m_pageVob->updateChapters(m_pageChapters->chaptersData());
@@ -162,7 +164,10 @@ void DvdWizard::slotPageChanged(int page)
     }
 }
 
-
+void DvdWizard::slotprepareMonitor()
+{
+    m_pageChapters->createMonitor(m_pageVob->dvdFormat());
+}
 
 void DvdWizard::generateDvd()
 {
index b1f2e25b32f421db83bb4a5c06214f99753e3926..2aa6a554ceebe5c559602333bddbc7088dd22877 100644 (file)
@@ -91,6 +91,7 @@ private slots:
     void slotShowRenderInfo();
     void slotShowIsoInfo();
     void slotProcessMenuStatus(int, QProcess::ExitStatus status);
+    void slotprepareMonitor();
 };
 
 #endif
index 12dee110cf591118b411b52558229d73a3b99db2..d95da170b8bae5f7061e9f8554752e52c72244bb 100644 (file)
@@ -40,15 +40,13 @@ DvdWizardChapters::DvdWizardChapters(MonitorManager *manager, DVDFORMAT format,
 
     if (m_format == PAL || m_format == PAL_WIDE) m_tc.setFormat(25);
     else m_tc.setFormat(30000.0 / 1001);
-    show();
-    setVobFiles(format, QStringList(), QStringList(), QStringList());
-
     //m_view.monitor_frame->setVisible(false);
 }
 
 DvdWizardChapters::~DvdWizardChapters()
 {
     if (m_monitor) {
+       m_manager->removeMonitor(m_monitor);
         m_monitor->stop();
         delete m_monitor;
     }
@@ -66,6 +64,11 @@ void DvdWizardChapters::stopMonitor()
     if (m_monitor) m_monitor->stop();
 }
 
+void DvdWizardChapters::refreshMonitor()
+{
+    if (m_monitor) m_monitor->refreshMonitor();
+}
+
 void DvdWizardChapters::slotUpdateChaptersList()
 {
     m_monitor->slotOpenFile(m_view.vob_list->currentText());
@@ -134,6 +137,21 @@ void DvdWizardChapters::slotGoToChapter()
     if (m_view.chapters_list->currentItem()) m_monitor->setTimePos(m_tc.reformatSeparators(m_view.chapters_list->currentItem()->text()));
 }
 
+void DvdWizardChapters::createMonitor(DVDFORMAT format)
+{
+    QString profile = DvdWizardVob::getDvdProfile(format);
+    if (m_monitor == NULL) {
+        m_monitor = new Monitor(Kdenlive::dvdMonitor, m_manager, profile, this);
+        //m_monitor->start();
+        QVBoxLayout *vbox = new QVBoxLayout;
+        vbox->addWidget(m_monitor);
+        m_view.video_frame->setLayout(vbox);
+       m_monitor->setSizePolicy(QSizePolicy ( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
+       m_manager->appendMonitor(m_monitor);
+       vbox->insertWidget(0, m_monitor, 10);
+    }
+}
+
 void DvdWizardChapters::setVobFiles(DVDFORMAT format, const QStringList &movies, const QStringList &durations, const QStringList &chapters)
 {
     m_format = format;
@@ -143,17 +161,9 @@ void DvdWizardChapters::setVobFiles(DVDFORMAT format, const QStringList &movies,
     } else {
         m_tc.setFormat(30000.0 / 1001);
     }
-    if (m_monitor == NULL) {
-        m_monitor = new Monitor(Kdenlive::dvdMonitor, m_manager, profile, this);
-        //m_monitor->start();
-        /*QVBoxLayout *vbox = new QVBoxLayout;
-        vbox->addWidget(m_monitor);
-        m_view.monitor_frame->setLayout(vbox);*/
-       QVBoxLayout *lay = static_cast<QVBoxLayout *> (layout());
-       m_monitor->setSizePolicy(QSizePolicy ( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
-       lay->insertWidget(0, m_monitor, 10);
-    } else m_monitor->resetProfile(profile);
-    m_manager->activateMonitor(Kdenlive::dvdMonitor);
+
+    if (m_monitor == NULL) createMonitor(format);
+    m_monitor->setCustomProfile(profile, m_tc);
 
     m_view.vob_list->blockSignals(true);
     m_view.vob_list->clear();
@@ -163,6 +173,11 @@ void DvdWizardChapters::setVobFiles(DVDFORMAT format, const QStringList &movies,
     }
     m_view.vob_list->blockSignals(false);
     slotUpdateChaptersList();
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+    adjustSize();
+    updateGeometry();
+    m_manager->activateMonitor(Kdenlive::dvdMonitor);
+    m_monitor->refreshMonitor();
 }
 
 QMap <QString, QString> DvdWizardChapters::chaptersData() const
index 245755d9a18fd03bd029a197f93abf9e54f850fb..adc4cc3e6c455b4eac07884da45dc4ed276e86dd 100644 (file)
@@ -47,6 +47,8 @@ public:
     QDomElement toXml() const;
     QMap <QString, QString> chaptersData() const;
     void stopMonitor();
+    void refreshMonitor();
+    void createMonitor(DVDFORMAT format);
 
 private:
     Ui::DvdWizardChapters_UI m_view;
index cce398d5f92128256b1d1f30b46853668d93c4dd..655d086ed511506e12a328ac6c271901bdac8df8 100644 (file)
@@ -284,6 +284,7 @@ void DvdWizardVob::slotAddVobFile(KUrl url, const QString &chapters, bool checkF
        slotCheckVobList();
        slotCheckProfiles();
     }
+    emit prepareMonitor();
 }
 
 void DvdWizardVob::slotDeleteVobFile()
index d45847b98cddaa876c706022c289954912316152..b35fb45980559920357142bdf8e042d1d4f5e50d 100644 (file)
@@ -143,6 +143,9 @@ private slots:
     void slotItemDown();
     void slotTranscodeFiles();
     void slotTranscodedClip(KUrl, KUrl);
+    
+signals:
+    void prepareMonitor();
 };
 
 #endif
index c41f2ed903e8b94a38e5d95b9a170d0965bd1b35..cdda0689f22fc6fa96506570061da7020a39a48e 100644 (file)
@@ -3907,6 +3907,7 @@ void MainWindow::slotDvdWizard(const QString &url)
     QPointer<DvdWizard> w = new DvdWizard(m_monitorManager, url, this);
     w->exec();
     delete w;
+    m_monitorManager->activateMonitor(Kdenlive::clipMonitor);
 }
 
 void MainWindow::slotShowTimeline(bool show)
index aa3076b8d1deb6944f7f649fd43aec87389dfc68..a35ff711ed9149f958b92fa51d3f1c8f16c29123 100644 (file)
@@ -58,6 +58,9 @@ Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profil
     m_effectWidget(NULL),
     m_selectedClip(NULL),
     m_loopClipTransition(true),
+#ifdef USE_OPENGL
+    m_glWidget(NULL),
+#endif
     m_editMarker(NULL)
 {
     QVBoxLayout *layout = new QVBoxLayout;
@@ -226,7 +229,6 @@ QWidget *Monitor::container()
 bool Monitor::createOpenGlWidget(QWidget *parent, const QString profile)
 {
     render = new Render(id(), 0, profile, this);
-    kDebug()<<"+++++++++++++\nCREATED OPENGL WIDG\n++++++++++++++";
     m_glWidget = new VideoGLWidget(parent);
     if (m_glWidget == NULL) {
         // Creation failed, we are in trouble...
@@ -769,6 +771,9 @@ void Monitor::stop()
 void Monitor::start()
 {
     if (!isVisible() || !isActive()) return;
+#ifdef USE_OPENGL    
+    if (m_glWidget) m_glWidget->activateMonitor();
+#endif
     if (render) render->startConsumer();
 }
 
@@ -904,6 +909,19 @@ void Monitor::slotSaveZone()
     //render->setSceneList(doc, 0);
 }
 
+void Monitor::setCustomProfile(const QString &profile, Timecode tc)
+{
+    m_timePos->updateTimeCode(tc);
+    if (render == NULL) return;
+    if (!render->hasProfile(profile)) {
+        slotActivateMonitor();
+        render->resetProfile(profile);
+#ifdef USE_OPENGL    
+       if (m_glWidget) m_glWidget->setImageAspectRatio(render->dar());
+#endif
+    }
+}
+
 void Monitor::resetProfile(const QString &profile)
 {
     m_timePos->updateTimeCode(m_monitorManager->timecode());
@@ -911,6 +929,9 @@ void Monitor::resetProfile(const QString &profile)
     if (!render->hasProfile(profile)) {
         slotActivateMonitor();
         render->resetProfile(profile);
+#ifdef USE_OPENGL    
+       if (m_glWidget) m_glWidget->setImageAspectRatio(render->dar());
+#endif
     }
     if (m_effectWidget)
         m_effectWidget->resetProfile(render);
index d01f5b9f58b4c9af051cbc0056558316670c8e53..84a8b9b368bc8ad3361598945de0b7d4675cb602 100644 (file)
@@ -75,6 +75,7 @@ public:
     Render *render;
     AbstractRender *abstractRender();
     void resetProfile(const QString &profile);
+    void setCustomProfile(const QString &profile, Timecode tc);
     void resetSize();
     void pause();
     void unpause();
index 283dc3417ccf6504632e2bd3b87d71085765f903..5782927f73835893a9cc35dde17fc59fe69bc464 100644 (file)
@@ -202,6 +202,8 @@ void ScopeManager::slotUpdateActiveRenderer()
     }
 
     m_lastConnectedRenderer = m_monitorManager->activeRenderer();
+    // DVD monitor shouldn't be monitored or will cause crash on deletion
+    if (m_monitorManager->isActive(Kdenlive::dvdMonitor)) m_lastConnectedRenderer = NULL;
 
     // Connect new renderer
     if (m_lastConnectedRenderer != NULL) {
index b769fdf642cc7df3d6bde8db95bf5ba2283f8878..6346a92cb6f1f7436789fd9cd303e544a84981d5 100644 (file)
@@ -447,7 +447,7 @@ TitleWidget::TitleWidget(KUrl url, Timecode tc, QString projectTitlePath, Render
     m_titledocument.setScene(m_scene, m_frameWidth, m_frameHeight);
     connect(m_scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(slotChanged()));
     connect(font_size, SIGNAL(valueChanged(int)), m_scene, SLOT(slotUpdateFontSize(int)));
-
+    
     // a gradient background
     /*QRadialGradient *gradient = new QRadialGradient(0, 0, 10);
     gradient->setSpread(QGradient::ReflectSpread);
index 9595ef254da658d7c1ab6126f071619fd915f230..eff90f6ea97f53e1397fb9ab1fa443752ead13ac 100644 (file)
@@ -19,7 +19,7 @@ VideoGLWidget::VideoGLWidget(QWidget *parent)
     , m_texture(0)
     , m_display_ratio(4.0 / 3.0)
     , m_backgroundColor(Qt::gray)
-{
+{  
     setAttribute(Qt::WA_PaintOnScreen);
     setAttribute(Qt::WA_OpaquePaintEvent);
 }
@@ -59,7 +59,6 @@ void VideoGLWidget::resizeEvent(QResizeEvent* event)
 }
 void VideoGLWidget::resizeGL(int width, int height)
 {
-
     double this_aspect = (double) width / height;
 
     // Special case optimisation to negate odd effect of sample aspect ratio
@@ -87,6 +86,17 @@ void VideoGLWidget::resizeGL(int width, int height)
     glClear(GL_COLOR_BUFFER_BIT);
 }
 
+void VideoGLWidget::activateMonitor()
+{
+    makeCurrent();
+    glViewport(0, 0, width(), height());
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    gluOrtho2D(0, width(), height(), 0);
+    glMatrixMode(GL_MODELVIEW);
+    glClear(GL_COLOR_BUFFER_BIT);
+}
+
 void VideoGLWidget::paintGL()
 {
     if (m_texture) {
@@ -112,7 +122,6 @@ void VideoGLWidget::showImage(QImage image)
 {
     m_image_width = image.width();
     m_image_height = image.height();
-
     makeCurrent();
     if (m_texture)
         glDeleteTextures(1, &m_texture);
index 0eef4c8aacd4c78100b3f0e84582dea64cb23be5..8a243ddc1f4f034831094aac83fdc1e58ab93654 100644 (file)
@@ -11,7 +11,7 @@ class VideoGLWidget : public QGLWidget
 public:
     VideoGLWidget(QWidget *parent = 0);
     ~VideoGLWidget();
-
+    void activateMonitor();
     QSize minimumSizeHint() const;
     QSize sizeHint() const;
     void setImageAspectRatio(double ratio) {
index 20234d441b25b8ca08762d8fbea7ce4111acf5cc..68c8ee8e44f5c979068840ad3ab323da1dd30d87 100644 (file)
@@ -6,74 +6,91 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>247</width>
-    <height>182</height>
+    <width>322</width>
+    <height>238</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="spacing">
-    <number>-1</number>
-   </property>
+  <layout class="QGridLayout" name="gridLayout">
    <property name="margin">
     <number>0</number>
    </property>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <item>
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>Movie file</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="KComboBox" name="vob_list"/>
-     </item>
-    </layout>
-   </item>
-   <item>
+   <item row="2" column="0" colspan="4">
     <widget class="QListWidget" name="chapters_list">
      <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
+      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
+     <property name="maximumSize">
+      <size>
+       <width>16777215</width>
+       <height>150</height>
+      </size>
+     </property>
      <property name="alternatingRowColors">
       <bool>true</bool>
      </property>
     </widget>
    </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QPushButton" name="button_add">
-       <property name="text">
-        <string>Add chapter</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="button_delete">
-       <property name="text">
-        <string>Remove chapter</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>79</width>
-         <height>22</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
+   <item row="3" column="0" colspan="2">
+    <widget class="QPushButton" name="button_add">
+     <property name="text">
+      <string>Add chapter</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Movie file</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="3">
+    <spacer name="horizontalSpacer">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>80</width>
+       <height>13</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="3" column="2">
+    <widget class="QPushButton" name="button_delete">
+     <property name="text">
+      <string>Remove chapter</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="4">
+    <widget class="QFrame" name="video_frame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>100</height>
+      </size>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" colspan="3">
+    <widget class="KComboBox" name="vob_list"/>
    </item>
   </layout>
  </widget>
index 72e043b09f0b3193792daadb728e924a275ddd52..e43077eeebebada1eecef1dc3f8ae0dc9d4c982d 100644 (file)
    <property name="spacing">
     <number>0</number>
    </property>
-   <item row="0" column="0">
-    <widget class="QFrame" name="audio_monitor">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="frameShape">
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Plain</enum>
-     </property>
-     <property name="lineWidth">
-      <number>0</number>
-     </property>
-    </widget>
-   </item>
    <item row="1" column="0">
-    <widget class="QFrame" name="video_frame">
-     <property name="font">
-      <font>
-       <stylestrategy>NoAntialias</stylestrategy>
-      </font>
-     </property>
-     <property name="lineWidth">
-      <number>0</number>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0">
     <widget class="QFrame" name="ruler_frame">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
      </property>
     </widget>
    </item>
-   <item row="3" column="0">
+   <item row="0" column="0">
+    <widget class="QFrame" name="video_frame">
+     <property name="font">
+      <font>
+       <stylestrategy>NoAntialias</stylestrategy>
+      </font>
+     </property>
+     <property name="lineWidth">
+      <number>0</number>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
     <widget class="QFrame" name="button_frame">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Maximum">