X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fstopmotion%2Fstopmotion.cpp;h=b937eff3dbdd605a8b8b93dece083131b63ee7f3;hb=bddf7dbd05d7a0c980934baa9caa71b991b92b2a;hp=28ce8a89443c94cdb376e6391ed24bce32674df7;hpb=ff42e084bde7be764bb867843d38633c98d6879f;p=kdenlive diff --git a/src/stopmotion/stopmotion.cpp b/src/stopmotion/stopmotion.cpp index 28ce8a89..b937eff3 100644 --- a/src/stopmotion/stopmotion.cpp +++ b/src/stopmotion/stopmotion.cpp @@ -16,17 +16,17 @@ ***************************************************************************/ #include "stopmotion.h" -#include "../blackmagic/devices.h" -#include "../v4l/v4lcapture.h" -#include "../slideshowclip.h" -#include "../profilesdialog.h" -#include "../mltdevicecapture.h" -#include "../recmonitor.h" -#include "../monitormanager.h" +#ifdef USE_V4L +#include "v4l/v4lcapture.h" +#endif +#include "slideshowclip.h" +#include "profilesdialog.h" +#include "mltdevicecapture.h" +#include "recmonitor.h" +#include "monitormanager.h" #include "ui_smconfig_ui.h" #include "kdenlivesettings.h" - #include #include #include @@ -90,16 +90,21 @@ void MyLabel::paintEvent(QPaintEvent* event) } -StopmotionMonitor::StopmotionMonitor(QWidget *parent) : - AbstractMonitor(parent), +StopmotionMonitor::StopmotionMonitor(MonitorManager *manager, QWidget *parent) : + AbstractMonitor(Kdenlive::stopmotionMonitor, manager, parent), m_captureDevice(NULL) { + createVideoSurface(); } StopmotionMonitor::~StopmotionMonitor() { } +void StopmotionMonitor::slotSwitchFullScreen() +{ +} + void StopmotionMonitor::setRender(MltDeviceCapture *render) { m_captureDevice = render; @@ -110,9 +115,9 @@ AbstractRender *StopmotionMonitor::abstractRender() return m_captureDevice; } -const QString StopmotionMonitor::name() const +Kdenlive::MONITORID StopmotionMonitor::id() const { - return QString("stopmotion"); + return Kdenlive::stopmotionMonitor; } @@ -126,6 +131,14 @@ void StopmotionMonitor::start() { } +void StopmotionMonitor::slotPlay() +{ +} + +void StopmotionMonitor::slotMouseSeek(int /*eventDelta*/, bool /*fast*/) +{ +} + StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, QList< QAction* > actions, QWidget* parent) : QDialog(parent) , Ui::Stopmotion_UI() @@ -135,7 +148,7 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, , m_animatedIndex(-1) , m_animate(false) , m_manager(manager) - , m_monitor(new StopmotionMonitor(this)) + , m_monitor(new StopmotionMonitor(manager, this)) { //setAttribute(Qt::WA_DeleteOnClose); //HACK: the monitor widget is hidden, it is just used to control the capturedevice from monitormanager @@ -172,10 +185,10 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, intervalCapture->setCheckable(true); intervalCapture->setChecked(false); capture_interval->setDefaultAction(intervalCapture); - + preview_button->setIcon(KIcon("media-playback-start")); capture_button->setEnabled(false); - + // Build config menu QMenu* confMenu = new QMenu; @@ -184,7 +197,7 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, overlay_button->setDefaultAction(m_showOverlay); //confMenu->addAction(m_showOverlay); - m_effectIndex = KdenliveSettings::stopmotioneffect(); + m_effectIndex = KdenliveSettings::stopmotioneffect(); QMenu* effectsMenu = new QMenu(i18n("Overlay effect")); QActionGroup* effectGroup = new QActionGroup(this); QAction* noEffect = new QAction(i18n("No Effect"), effectGroup); @@ -243,19 +256,15 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, QVBoxLayout *layout = new QVBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); - m_videoBox = new VideoPreviewContainer(); - m_videoBox->setContentsMargins(0, 0, 0, 0); - m_videoBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - //m_videoBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - m_videoBox->setLineWidth(4); - layout->addWidget(m_videoBox); - - - if (BMInterface::getBlackMagicDeviceList(capture_device, NULL)) { + m_monitor->videoBox->setLineWidth(4); + layout->addWidget(m_monitor->videoBox); + + if (KdenliveSettings::decklink_device_found()) { // Found a BlackMagic device } + if (QFile::exists(KdenliveSettings::video4vdevice())) { -#if !defined(Q_WS_MAC) && !defined(Q_OS_FREEBSD) +#ifdef USE_V4L // Video 4 Linux device detection for (int i = 0; i < 10; i++) { QString path = "/dev/video" + QString::number(i); @@ -269,15 +278,15 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, } } } -#endif +#endif /* USE_V4L */ } connect(capture_device, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDeviceHandler())); /*if (m_bmCapture) { - connect(m_bmCapture, SIGNAL(frameSaved(const QString)), this, SLOT(slotNewThumb(const QString))); + connect(m_bmCapture, SIGNAL(frameSaved(const QString &)), this, SLOT(slotNewThumb(const QString &))); connect(m_bmCapture, SIGNAL(gotFrame(QImage)), this, SIGNAL(gotFrame(QImage))); } else live_button->setEnabled(false);*/ - + m_frame_preview = new MyLabel(this); connect(m_frame_preview, SIGNAL(seek(bool)), this, SLOT(slotSeekFrame(bool))); connect(m_frame_preview, SIGNAL(switchToLive()), this, SLOT(slotSwitchLive())); @@ -297,12 +306,12 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, // Decklink capture profilePath = KdenliveSettings::current_profile(); } - - m_captureDevice = new MltDeviceCapture(profilePath, m_videoBox, this); + + m_captureDevice = new MltDeviceCapture(profilePath, m_monitor->videoSurface, this); m_captureDevice->sendFrameForAnalysis = KdenliveSettings::analyse_stopmotion(); m_monitor->setRender(m_captureDevice); - connect(m_captureDevice, SIGNAL(frameSaved(const QString)), this, SLOT(slotNewThumb(const QString))); - + connect(m_captureDevice, SIGNAL(frameSaved(const QString &)), this, SLOT(slotNewThumb(const QString &))); + live_button->setChecked(false); button_addsequence->setEnabled(false); connect(live_button, SIGNAL(toggled(bool)), this, SLOT(slotLive(bool))); @@ -324,8 +333,7 @@ StopmotionWidget::StopmotionWidget(MonitorManager *manager, KUrl projectFolder, StopmotionWidget::~StopmotionWidget() { - /*if (m_bmCapture) - m_bmCapture->stopPreview();*/ + m_manager->removeMonitor(m_monitor); if (m_captureDevice) { m_captureDevice->stop(); delete m_captureDevice; @@ -362,7 +370,7 @@ void StopmotionWidget::slotConfigure() ui.sm_prenotify->setChecked(KdenliveSettings::sm_prenotify()); ui.sm_loop->setChecked(KdenliveSettings::sm_loop()); ui.sm_framesplayback->setValue(KdenliveSettings::sm_framesplayback()); - + if (d.exec() == QDialog::Accepted) { KdenliveSettings::setSm_loop(ui.sm_loop->isChecked()); KdenliveSettings::setCaptureinterval(ui.sm_interval->value()); @@ -399,7 +407,7 @@ void StopmotionWidget::slotUpdateDeviceHandler() } m_layout->removeWidget(m_frame_preview); if (data == "v4l") { -#if !defined(Q_WS_MAC) && !defined(Q_OS_FREEBSD) +#ifdef USE_V4L m_bmCapture = new V4lCaptureHandler(m_layout); m_bmCapture->setDevice(capture_device->itemData(capture_device->currentIndex(), Qt::UserRole + 1).toString(), capture_device->itemData(capture_device->currentIndex(), Qt::UserRole + 2).toString()); #endif @@ -426,8 +434,8 @@ void StopmotionWidget::parseExistingSequences() //dir.setNameFilters(filters); QStringList sequences = dir.entryList(filters, QDir::Files, QDir::Name); //kDebug()<<"PF: "<<<<", sm: "<addItem(sequencename.section("_", 0, -2)); + foreach(const QString &sequencename, sequences) { + sequence_name->addItem(sequencename.section('_', 0, -2)); } } @@ -459,7 +467,8 @@ void StopmotionWidget::slotLive(bool isOn) capture_button->setEnabled(false); if (isOn) { m_frame_preview->setHidden(true); - m_videoBox->setHidden(false); + m_monitor->videoBox->setHidden(false); + QLocale locale; MltVideoProfile profile; QString resource; @@ -483,13 +492,13 @@ void StopmotionWidget::slotLive(bool isOn) } if (m_captureDevice == NULL) { - m_captureDevice = new MltDeviceCapture(profilePath, m_videoBox, this); + m_captureDevice = new MltDeviceCapture(profilePath, m_monitor->videoSurface, this); m_captureDevice->sendFrameForAnalysis = KdenliveSettings::analyse_stopmotion(); m_monitor->setRender(m_captureDevice); - connect(m_captureDevice, SIGNAL(frameSaved(const QString)), this, SLOT(slotNewThumb(const QString))); + connect(m_captureDevice, SIGNAL(frameSaved(const QString &)), this, SLOT(slotNewThumb(const QString &))); } - - m_manager->activateMonitor("stopmotion"); + + m_manager->activateMonitor(Kdenlive::stopmotionMonitor); QString producer = createProducer(profile, service, resource); if (m_captureDevice->slotStartPreview(producer, true)) { if (m_showOverlay->isChecked()) { @@ -498,7 +507,7 @@ void StopmotionWidget::slotLive(bool isOn) } capture_button->setEnabled(true); live_button->setChecked(true); - log_box->insertItem(-1, i18n("Playing %1x%2 (%3 fps)", profile.width, profile.height, QString::number((double)profile.frame_rate_num/profile.frame_rate_den).rightJustified(2, '0'))); + log_box->insertItem(-1, i18n("Playing %1x%2 (%3 fps)", profile.width, profile.height, locale.toString((double)profile.frame_rate_num/profile.frame_rate_den).rightJustified(2, '0'))); log_box->setCurrentIndex(0); } else { @@ -512,14 +521,14 @@ void StopmotionWidget::slotLive(bool isOn) live_button->setChecked(false); if (m_captureDevice) { m_captureDevice->stop(); - m_videoBox->setHidden(true); + m_monitor->videoBox->setHidden(true); log_box->insertItem(-1, i18n("Stopped")); log_box->setCurrentIndex(0); //delete m_captureDevice; //m_captureDevice = NULL; } } - + /* if (isOn && m_bmCapture) { //m_frame_preview->setImage(QImage()); @@ -662,13 +671,13 @@ void StopmotionWidget::slotPreNotify() } -void StopmotionWidget::slotNewThumb(const QString path) +void StopmotionWidget::slotNewThumb(const QString &path) { if (!KdenliveSettings::showstopmotionthumbs()) return; m_filesList.append(path); if (m_showOverlay->isChecked()) reloadOverlay(); if (!m_future.isRunning()) m_future = QtConcurrent::run(this, &StopmotionWidget::slotPrepareThumbs); - + } void StopmotionWidget::slotPrepareThumbs() @@ -709,7 +718,7 @@ void StopmotionWidget::slotCreateThumbs(QImage img, int ix) QString StopmotionWidget::getPathForFrame(int ix, QString seqName) { if (seqName.isEmpty()) seqName = m_sequenceName; - return m_projectFolder.path(KUrl::AddTrailingSlash) + seqName + "_" + QString::number(ix).rightJustified(4, '0', false) + ".png"; + return m_projectFolder.path(KUrl::AddTrailingSlash) + seqName + '_' + QString::number(ix).rightJustified(4, '0', false) + ".png"; } void StopmotionWidget::slotShowFrame(const QString& path) @@ -720,7 +729,7 @@ void StopmotionWidget::slotShowFrame(const QString& path) slotLive(false); if (!img.isNull()) { //m_videoBox->setHidden(true); - + m_frame_preview->setImage(img); m_frame_preview->setHidden(false); m_frame_preview->update(); @@ -881,9 +890,11 @@ void StopmotionWidget::slotSwitchMirror(bool isOn) if (m_captureDevice) m_captureDevice->mirror(isOn); } -const QString StopmotionWidget::createProducer(MltVideoProfile profile, const QString service, const QString resource) -{ - + +const QString StopmotionWidget::createProducer(MltVideoProfile profile, const QString &service, const QString &resource) +{ + Q_UNUSED(profile) + QString playlist = "producer100000pause" + resource + "" + service + ""; // overlay track @@ -897,7 +908,7 @@ const QString StopmotionWidget::createProducer(MltVideoProfile profile, const QS playlist.append(""); playlist.append(""); - + return playlist; }