From: <j-...@us...> - 2011-04-23 21:13:25
|
Revision: 5549 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5549&view=rev Author: j-b-m Date: 2011-04-23 21:13:18 +0000 (Sat, 23 Apr 2011) Log Message: ----------- don't use proxy when exporting frame: http://www.kdenlive.org/mantis/view.php?id=2096 Modified Paths: -------------- trunk/kdenlive/src/monitor.cpp trunk/kdenlive/src/renderer.cpp trunk/kdenlive/src/renderer.h trunk/kdenlive/src/titlewidget.cpp Modified: trunk/kdenlive/src/monitor.cpp =================================================================== --- trunk/kdenlive/src/monitor.cpp 2011-04-23 20:41:06 UTC (rev 5548) +++ trunk/kdenlive/src/monitor.cpp 2011-04-23 21:13:18 UTC (rev 5549) @@ -566,7 +566,13 @@ 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); Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-04-23 20:41:06 UTC (rev 5548) +++ trunk/kdenlive/src/renderer.cpp 2011-04-23 21:13:18 UTC (rev 5549) @@ -406,14 +406,26 @@ 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; Modified: trunk/kdenlive/src/renderer.h =================================================================== --- trunk/kdenlive/src/renderer.h 2011-04-23 20:41:06 UTC (rev 5548) +++ trunk/kdenlive/src/renderer.h 2011-04-23 21:13:18 UTC (rev 5549) @@ -131,7 +131,7 @@ 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 */ Modified: trunk/kdenlive/src/titlewidget.cpp =================================================================== --- trunk/kdenlive/src/titlewidget.cpp 2011-04-23 20:41:06 UTC (rev 5548) +++ trunk/kdenlive/src/titlewidget.cpp 2011-04-23 21:13:18 UTC (rev 5549) @@ -782,7 +782,7 @@ 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))); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |