X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frecmonitor.cpp;h=956d3e6dbb6e07c41443a26cba4b7570054dce01;hb=56aee6aedeeed3efd10ada8fe3c229eddc01ef05;hp=299c98a788f0534c2a3e18ad449a9f14edbf95d3;hpb=e0fa1332f109b6455207ea701da386b2fddddf09;p=kdenlive diff --git a/src/recmonitor.cpp b/src/recmonitor.cpp index 299c98a7..956d3e6d 100644 --- a/src/recmonitor.cpp +++ b/src/recmonitor.cpp @@ -26,9 +26,10 @@ #include "monitormanager.h" #include "monitor.h" #include "profilesdialog.h" +#include "widgets/videosurface.h" #include -#include +#include #include #include #include @@ -43,9 +44,10 @@ #include #include #include +#include -RecMonitor::RecMonitor(Kdenlive::MONITORID name, MonitorManager *manager, QWidget *parent) : +RecMonitor::RecMonitor(Kdenlive::MonitorId name, MonitorManager *manager, QWidget *parent) : AbstractMonitor(name, manager, parent), m_isCapturing(false), m_didCapture(false), @@ -181,15 +183,7 @@ RecMonitor::~RecMonitor() m_spaceTimer.stop(); delete m_captureProcess; delete m_displayProcess; - if (m_captureDevice) delete m_captureDevice; -} - -void RecMonitor::mouseDoubleClickEvent(QMouseEvent * event) -{ - if (!KdenliveSettings::openglmonitors() && videoBox && videoBox->isVisible()) { - videoBox->switchFullScreen(); - event->accept(); - } + delete m_captureDevice; } void RecMonitor::slotSwitchFullScreen() @@ -200,7 +194,7 @@ void RecMonitor::slotSwitchFullScreen() void RecMonitor::stop() { // Special case: when recording audio only, do not stop so that we can do voiceover. - if (device_selector->currentIndex() == SCREENGRAB || (device_selector->currentIndex() == VIDEO4LINUX && !rec_video->isChecked())) return; + if (device_selector->currentIndex() == ScreenBag || (device_selector->currentIndex() == Video4Linux && !rec_video->isChecked())) return; slotStopCapture(); } @@ -220,7 +214,7 @@ void RecMonitor::slotUpdateCaptureFolder(const QString ¤tProjectFolder) else m_capturePath = KdenliveSettings::capturefolder(); if (m_captureProcess) m_captureProcess->setWorkingDirectory(m_capturePath); if (m_captureProcess->state() != QProcess::NotRunning) { - if (device_selector->currentIndex() == FIREWIRE) + if (device_selector->currentIndex() == Firewire) KMessageBox::information(this, i18n("You need to disconnect and reconnect in the capture monitor to apply your changes"), i18n("Capturing")); else KMessageBox::information(this, i18n("You need to stop capture before your changes can be applied"), i18n("Capturing")); } else slotVideoDeviceChanged(device_selector->currentIndex()); @@ -242,14 +236,14 @@ void RecMonitor::slotVideoDeviceChanged(int ix) #endif } #endif - m_previewSettings->setEnabled(ix == VIDEO4LINUX || ix == BLACKMAGIC); - control_frame->setVisible(ix == VIDEO4LINUX); - m_playAction->setVisible(ix != SCREENGRAB); - m_fwdAction->setVisible(ix == FIREWIRE); - m_discAction->setVisible(ix == FIREWIRE); - m_rewAction->setVisible(ix == FIREWIRE); - m_recAction->setEnabled(ix != FIREWIRE); - m_logger.setVisible(ix == BLACKMAGIC); + m_previewSettings->setEnabled(ix == Video4Linux || ix == BlackMagic); + control_frame->setVisible(ix == Video4Linux); + m_playAction->setVisible(ix != ScreenBag); + m_fwdAction->setVisible(ix == Firewire); + m_discAction->setVisible(ix == Firewire); + m_rewAction->setVisible(ix == Firewire); + m_recAction->setEnabled(ix != Firewire); + m_logger.setVisible(ix == BlackMagic); if (m_captureDevice) { // MLT capture still running, abort m_monitorManager->clearScopeSource(); @@ -259,10 +253,10 @@ void RecMonitor::slotVideoDeviceChanged(int ix) } // The m_videoBox container has to be shown once before the MLT consumer is build, or preview will fail - videoBox->setHidden(ix != VIDEO4LINUX && ix != BLACKMAGIC); + videoBox->setHidden(ix != Video4Linux && ix != BlackMagic); videoBox->setHidden(true); switch (ix) { - case SCREENGRAB: + case ScreenBag: m_discAction->setEnabled(false); m_rewAction->setEnabled(false); m_fwdAction->setEnabled(false); @@ -287,12 +281,12 @@ void RecMonitor::slotVideoDeviceChanged(int ix) } //video_frame->setText(i18n("Press record button\nto start screen capture")); break; - case VIDEO4LINUX: + case Video4Linux: m_stopAction->setEnabled(false); m_playAction->setEnabled(true); checkDeviceAvailability(); break; - case BLACKMAGIC: + case BlackMagic: m_stopAction->setEnabled(false); m_playAction->setEnabled(true); capturefile = m_capturePath; @@ -420,17 +414,17 @@ void RecMonitor::slotStopCapture() control_frame->setEnabled(true); slotActivateMonitor(); switch (device_selector->currentIndex()) { - case FIREWIRE: + case Firewire: m_captureProcess->write("\e", 2); m_playAction->setIcon(m_playIcon); m_isPlaying = false; break; - case SCREENGRAB: + case ScreenBag: m_captureProcess->terminate(); QTimer::singleShot(1500, m_captureProcess, SLOT(kill())); break; - case VIDEO4LINUX: - case BLACKMAGIC: + case Video4Linux: + case BlackMagic: if (m_captureDevice) { m_captureDevice->stop(); } @@ -456,7 +450,7 @@ void RecMonitor::slotStopCapture() void RecMonitor::slotStartPreview(bool play) { if (m_captureProcess->state() != QProcess::NotRunning) { - if (device_selector->currentIndex() == FIREWIRE) { + if (device_selector->currentIndex() == Firewire) { videoBox->setHidden(false); if (m_isPlaying) { m_captureProcess->write("k", 1); @@ -483,9 +477,9 @@ void RecMonitor::slotStartPreview(bool play) QStringList dvargs = KdenliveSettings::dvgrabextra().simplified().split(' ', QString::SkipEmptyParts); int ix = device_selector->currentIndex(); bool isXml; - videoBox->setHidden(ix != VIDEO4LINUX && ix != BLACKMAGIC && ix != FIREWIRE); + videoBox->setHidden(ix != Video4Linux && ix != BlackMagic && ix != Firewire); switch (ix) { - case FIREWIRE: + case Firewire: switch (KdenliveSettings::firewireformat()) { case 0: // RAW DV CAPTURE @@ -527,7 +521,7 @@ void RecMonitor::slotStartPreview(bool play) if (play) m_captureProcess->write(" ", 1); m_discAction->setEnabled(true); break; - case VIDEO4LINUX: + case Video4Linux: path = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); buildMltDevice(path); profile = ProfilesDialog::getVideoProfile(path); @@ -546,7 +540,7 @@ void RecMonitor::slotStartPreview(bool play) } break; - case BLACKMAGIC: + case BlackMagic: path = KdenliveSettings::current_profile(); slotActivateMonitor(); buildMltDevice(path); @@ -568,7 +562,7 @@ void RecMonitor::slotStartPreview(bool play) control_frame->setEnabled(false); - if (device_selector->currentIndex() == FIREWIRE) { + if (device_selector->currentIndex() == Firewire) { kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" "); m_displayProcess->start(KdenliveSettings::ffplaypath(), m_displayArgs); //video_frame->setText(i18n("Initialising...")); @@ -580,14 +574,14 @@ void RecMonitor::slotStartPreview(bool play) void RecMonitor::slotRecord() { m_error.clear(); - if (m_captureProcess->state() == QProcess::NotRunning && device_selector->currentIndex() == FIREWIRE) { + if (m_captureProcess->state() == QProcess::NotRunning && device_selector->currentIndex() == Firewire) { slotStartPreview(); } if (m_isCapturing) { // User stopped capture slotStopCapture(); return; - } else if (device_selector->currentIndex() == FIREWIRE) { + } else if (device_selector->currentIndex() == Firewire) { m_isCapturing = true; m_didCapture = true; m_captureProcess->write("c\n", 3); @@ -598,15 +592,15 @@ void RecMonitor::slotRecord() m_logger.clear(); m_recAction->setChecked(true); QString extension = "mpg"; - if (device_selector->currentIndex() == SCREENGRAB) { + if (device_selector->currentIndex() == ScreenBag) { extension = KdenliveSettings::grab_extension(); } - else if (device_selector->currentIndex() == VIDEO4LINUX) { + else if (device_selector->currentIndex() == Video4Linux) { // TODO: when recording audio only, allow configuration? if (!rec_video->isChecked()) extension = "wav"; else extension = KdenliveSettings::v4l_extension(); } - else if (device_selector->currentIndex() == BLACKMAGIC) extension = KdenliveSettings::decklink_extension(); + else if (device_selector->currentIndex() == BlackMagic) extension = KdenliveSettings::decklink_extension(); QString path = KUrl(m_capturePath).path(KUrl::AddTrailingSlash) + "capture0000." + extension; int i = 1; while (QFile::exists(path)) { @@ -631,7 +625,7 @@ void RecMonitor::slotRecord() if (capturename.isEmpty()) capturename = "capture"; switch (device_selector->currentIndex()) { - case VIDEO4LINUX: + case Video4Linux: if (rec_video->isChecked()) slotActivateMonitor(); path = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); profile = ProfilesDialog::getVideoProfile(path); @@ -694,7 +688,7 @@ void RecMonitor::slotRecord() } break; - case BLACKMAGIC: + case BlackMagic: slotActivateMonitor(); path = KdenliveSettings::current_profile(); profile = ProfilesDialog::getVideoProfile(path); @@ -719,18 +713,18 @@ void RecMonitor::slotRecord() } break; - case SCREENGRAB: + case ScreenBag: m_captureArgs << "-f" << "x11grab"; if (KdenliveSettings::grab_follow_mouse()) m_captureArgs << "-follow_mouse" << "centered"; if (!KdenliveSettings::grab_hide_frame()) m_captureArgs << "-show_region" << "1"; + captureSize = ":0.0"; if (KdenliveSettings::grab_capture_type() == 0) { // Full screen capture - captureSize = ":0.0"; m_captureArgs << "-s" << QString::number(screenSize.width()) + "x" + QString::number(screenSize.height()); } else { // Region capture m_captureArgs << "-s" << QString::number(KdenliveSettings::grab_width()) + "x" + QString::number(KdenliveSettings::grab_height()); - captureSize = ":" + QString::number(KdenliveSettings::grab_offsetx()) + "." + QString::number(KdenliveSettings::grab_offsetx()); + captureSize.append("+" + QString::number(KdenliveSettings::grab_offsetx()) + "." + QString::number(KdenliveSettings::grab_offsetx())); } // fps m_captureArgs << "-r" << QString::number(KdenliveSettings::grab_fps()); @@ -773,7 +767,7 @@ void RecMonitor::slotRecord() } - if (device_selector->currentIndex() == FIREWIRE) { + if (device_selector->currentIndex() == Firewire) { m_isCapturing = true; kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" "); m_displayProcess->start(KdenliveSettings::ffplaypath(), m_displayArgs); @@ -799,7 +793,8 @@ void RecMonitor::showWarningMessage(const QString &text, bool logAction) m_infoMessage->addAction(manualAction); } #if KDE_IS_VERSION(4,10,0) - m_infoMessage->animatedShow(); + if (isVisible()) + m_infoMessage->animatedShow(); #else QTimer::singleShot(0, m_infoMessage, SLOT(animatedShow())); #endif @@ -815,7 +810,7 @@ void RecMonitor::showWarningMessage(const QString &text, bool logAction) #endif } -const QString RecMonitor::getV4lXmlPlaylist(MltVideoProfile profile, bool *isXml) +const QString RecMonitor::getV4lXmlPlaylist(const MltVideoProfile &profile, bool *isXml) { QString playlist; if (rec_video->isChecked() && rec_audio->isChecked()) { @@ -879,12 +874,12 @@ void RecMonitor::slotProcessStatus(QProcess::ProcessState status) { if (status == QProcess::NotRunning) { m_displayProcess->kill(); - if (m_isCapturing && device_selector->currentIndex() != FIREWIRE) + if (m_isCapturing && device_selector->currentIndex() != Firewire) if (m_addCapturedClip->isChecked() && !m_captureFile.isEmpty() && QFile::exists(m_captureFile.path())) { emit addProjectClip(m_captureFile); m_captureFile.clear(); } - if (device_selector->currentIndex() == FIREWIRE) { + if (device_selector->currentIndex() == Firewire) { m_discAction->setIcon(KIcon("network-connect")); m_discAction->setText(i18n("Connect")); m_playAction->setEnabled(false); @@ -903,7 +898,7 @@ void RecMonitor::slotProcessStatus(QProcess::ProcessState status) if (m_captureProcess && m_captureProcess->exitStatus() == QProcess::CrashExit) { showWarningMessage(i18n("Capture crashed, please check your parameters"), true); } else { - if (device_selector->currentIndex() != SCREENGRAB) { + if (device_selector->currentIndex() != ScreenBag) { video_frame->setText(i18n("Not connected")); } else { int code = m_captureProcess->exitCode(); @@ -969,7 +964,7 @@ void RecMonitor::manageCapturedFiles() kDebug() << "Found : " << capturedFiles.count() << " new capture files"; kDebug() << capturedFiles; - if (capturedFiles.count() > 0) { + if (!capturedFiles.isEmpty()) { QPointer d = new ManageCapturesDialog(capturedFiles, this); if (d->exec() == QDialog::Accepted) { emit addProjectClipList(d->importFiles()); @@ -1012,10 +1007,10 @@ void RecMonitor::slotPlay() void RecMonitor::slotReadProcessInfo() { QString data = m_captureProcess->readAllStandardError().simplified(); - if (device_selector->currentIndex() == SCREENGRAB) { + if (device_selector->currentIndex() == ScreenBag) { m_error.append(data + "\n"); } - else if (device_selector->currentIndex() == FIREWIRE) { + else if (device_selector->currentIndex() == Firewire) { data = data.section('"', 2, 2).simplified(); m_dvinfo.setText(data.left(11)); m_dvinfo.updateGeometry();