From 4d3b23990367919e280638f82412fa8642c1aa87 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 23 Apr 2011 21:13:18 +0000 Subject: [PATCH] don't use proxy when exporting frame: http://www.kdenlive.org/mantis/view.php?id=2096 svn path=/trunk/kdenlive/; revision=5549 --- src/monitor.cpp | 8 +++++++- src/renderer.cpp | 16 ++++++++++++++-- src/renderer.h | 2 +- src/titlewidget.cpp | 2 +- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/monitor.cpp b/src/monitor.cpp index 0c2e057c..96be7c03 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -566,7 +566,13 @@ void Monitor::slotSetThumbFrame() void Monitor::slotExtractCurrentFrame() { - QImage frame = render->extractFrame(render->seekFramePosition()); + QImage frame; + // check if we are using a proxy + if (m_currentClip && !m_currentClip->getProperty("proxy").isEmpty() && m_currentClip->getProperty("proxy") != "-") { + // using proxy, use original clip url to get frame + frame = render->extractFrame(render->seekFramePosition(), m_currentClip->fileURL().path()); + } + else frame = render->extractFrame(render->seekFramePosition()); KFileDialog *fs = new KFileDialog(KUrl(), "image/png", this); fs->setOperationMode(KFileDialog::Saving); fs->setMode(KFile::File); diff --git a/src/renderer.cpp b/src/renderer.cpp index 646c5611..68ed5459 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -406,14 +406,26 @@ int Render::renderHeight() const return m_mltProfile->height(); } -QImage Render::extractFrame(int frame_position, int width, int height) +QImage Render::extractFrame(int frame_position, QString path, int width, int height) { if (width == -1) { width = renderWidth(); height = renderHeight(); } else if (width % 2 == 1) width++; - if (!m_mltProducer) { + if (!path.isEmpty()) { + Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile, path.toUtf8().constData()); + if (producer) { + if (producer->is_valid()) { + QImage img = KThumb::getFrame(producer, frame_position, width, height); + delete producer; + return img; + } + else delete producer; + } + } + + if (!m_mltProducer || !path.isEmpty()) { QImage pix(width, height, QImage::Format_RGB32); pix.fill(Qt::black); return pix; diff --git a/src/renderer.h b/src/renderer.h index 69626224..e6ab0b8f 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -131,7 +131,7 @@ Q_OBJECT public: void stop(const GenTime & startTime); int volume() const; - QImage extractFrame(int frame_position, int width = -1, int height = -1); + QImage extractFrame(int frame_position, QString path = QString(), int width = -1, int height = -1); /** @brief Plays the scene starting from a specific time. * @param startTime time to start playing the scene from */ diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index e9ac9175..7af47ac4 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -782,7 +782,7 @@ void TitleWidget::displayBackgroundFrame() p.end(); m_frameImage->setPixmap(bg); } else { - m_frameImage->setPixmap(QPixmap::fromImage(m_render->extractFrame((int) m_render->seekPosition().frames(m_render->fps()), m_frameWidth / 2, m_frameHeight / 2))); + m_frameImage->setPixmap(QPixmap::fromImage(m_render->extractFrame((int) m_render->seekPosition().frames(m_render->fps()), QString(), m_frameWidth / 2, m_frameHeight / 2))); } } -- 2.39.2