X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frecmonitor.cpp;h=067fca0a1f9b21088133c40eb0aeff4a25695142;hb=9c08cc81e3c13aad75c90103ac9d1bdfc6502d0d;hp=c0d7af19dc65fc07665606d37177acdd294950fa;hpb=39e387e732db729eaf44c1826d86cd45e3878482;p=kdenlive diff --git a/src/recmonitor.cpp b/src/recmonitor.cpp index c0d7af19..067fca0a 100644 --- a/src/recmonitor.cpp +++ b/src/recmonitor.cpp @@ -35,11 +35,7 @@ #include #include #include - -#if KDE_IS_VERSION(4,2,0) #include -#endif - #include #include #include @@ -53,8 +49,6 @@ RecMonitor::RecMonitor(QString name, MonitorManager *manager, QWidget *parent) : m_isCapturing(false), m_didCapture(false), m_isPlaying(false), - m_bmCapture(NULL), - m_blackmagicCapturing(false), m_manager(manager), m_captureDevice(NULL), m_analyse(false) @@ -88,7 +82,7 @@ RecMonitor::RecMonitor(QString name, MonitorManager *manager, QWidget *parent) : connect(m_rewAction, SIGNAL(triggered()), this, SLOT(slotRewind())); m_playAction = toolbar->addAction(m_playIcon, i18n("Play")); - connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotStartCapture())); + connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotStartPreview())); m_stopAction = toolbar->addAction(KIcon("media-playback-stop"), i18n("Stop")); connect(m_stopAction, SIGNAL(triggered()), this, SLOT(slotStopCapture())); @@ -98,6 +92,7 @@ RecMonitor::RecMonitor(QString name, MonitorManager *manager, QWidget *parent) : m_recAction = toolbar->addAction(KIcon("media-record"), i18n("Record")); connect(m_recAction, SIGNAL(triggered()), this, SLOT(slotRecord())); + m_recAction->setCheckable(true); toolbar->addSeparator(); @@ -113,7 +108,6 @@ RecMonitor::RecMonitor(QString name, MonitorManager *manager, QWidget *parent) : m_logger.setFrame(false); //m_logger.setInsertPolicy(QComboBox::InsertAtTop); -#if KDE_IS_VERSION(4,2,0) m_freeSpace = new KCapacityBar(KCapacityBar::DrawTextInline, this); m_freeSpace->setMaximumWidth(150); QFontMetricsF fontMetrics(font()); @@ -123,39 +117,49 @@ RecMonitor::RecMonitor(QString name, MonitorManager *manager, QWidget *parent) : connect(&m_spaceTimer, SIGNAL(timeout()), this, SLOT(slotUpdateFreeSpace())); m_spaceTimer.setInterval(30000); m_spaceTimer.setSingleShot(false); -#endif control_frame_firewire->setLayout(layout); - - slotVideoDeviceChanged(device_selector->currentIndex()); m_displayProcess = new QProcess; m_captureProcess = new QProcess; connect(m_captureProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(slotProcessStatus(QProcess::ProcessState))); connect(m_captureProcess, SIGNAL(readyReadStandardError()), this, SLOT(slotReadDvgrabInfo())); + + QString videoDriver = KdenliveSettings::videodrivername(); +#if QT_VERSION >= 0x040600 + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("SDL_WINDOWID", QString::number(video_frame->winId())); + if (!videoDriver.isEmpty()) { + if (videoDriver == "x11_noaccel") { + env.insert("SDL_VIDEO_YUV_HWACCEL", "0"); + env.insert("SDL_VIDEODRIVER", "x11"); + } else env.insert("SDL_VIDEODRIVER", videoDriver); + } + m_displayProcess->setProcessEnvironment(env); +#else QStringList env = QProcess::systemEnvironment(); env << "SDL_WINDOWID=" + QString::number(video_frame->winId()); - - QString videoDriver = KdenliveSettings::videodrivername(); if (!videoDriver.isEmpty()) { if (videoDriver == "x11_noaccel") { env << "SDL_VIDEO_YUV_HWACCEL=0"; env << "SDL_VIDEODRIVER=x11"; } else env << "SDL_VIDEODRIVER=" + videoDriver; } - setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 1); - m_displayProcess->setEnvironment(env); +#endif + setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 1); kDebug() << "/////// BUILDING MONITOR, ID: " << video_frame->winId(); + slotVideoDeviceChanged(device_selector->currentIndex()); + recording_preview->setToolTip(i18n("Capture preview settings")); + recording_preview->setCurrentIndex(KdenliveSettings::recording_preview()); + connect(recording_preview, SIGNAL(currentIndexChanged(int)), this, SLOT(slotChangeRecordingPreview(int))); } RecMonitor::~RecMonitor() { -#if KDE_IS_VERSION(4,2,0) m_spaceTimer.stop(); -#endif delete m_captureProcess; delete m_displayProcess; if (m_captureDevice) delete m_captureDevice; @@ -180,7 +184,7 @@ void RecMonitor::slotConfigure() emit showConfigDialog(4, device_selector->currentIndex()); } -void RecMonitor::slotUpdateCaptureFolder(const QString currentProjectFolder) +void RecMonitor::slotUpdateCaptureFolder(const QString ¤tProjectFolder) { if (KdenliveSettings::capturetoprojectfolder()) m_capturePath = currentProjectFolder; else m_capturePath = KdenliveSettings::capturefolder(); @@ -191,18 +195,15 @@ void RecMonitor::slotUpdateCaptureFolder(const QString currentProjectFolder) else KMessageBox::information(this, i18n("You need to stop capture before your changes can be applied"), i18n("Capturing")); } else slotVideoDeviceChanged(device_selector->currentIndex()); -#if KDE_IS_VERSION(4,2,0) // update free space info slotUpdateFreeSpace(); -#endif } void RecMonitor::slotVideoDeviceChanged(int ix) { QString capturefile; QString capturename; - video_capture->setHidden(true); - video_frame->setHidden(false); + recording_preview->setHidden(ix != VIDEO4LINUX && ix != BLACKMAGIC); m_fwdAction->setVisible(ix == FIREWIRE); m_discAction->setVisible(ix == FIREWIRE); m_rewAction->setVisible(ix == FIREWIRE); @@ -215,6 +216,10 @@ void RecMonitor::slotVideoDeviceChanged(int ix) m_captureDevice = NULL; m_manager->clearScopeSource(); } + + // The m_videoBox container has to be shown once before the MLT consumer is build, or preview will fail + m_videoBox->setHidden(ix != VIDEO4LINUX && ix != BLACKMAGIC); + m_videoBox->setHidden(true); switch (ix) { case SCREENGRAB: m_discAction->setEnabled(false); @@ -241,7 +246,8 @@ void RecMonitor::slotVideoDeviceChanged(int ix) capturefile = m_capturePath; if (!capturefile.endsWith("/")) capturefile.append("/"); capturename = KdenliveSettings::decklink_filename(); - capturename.append("xxx.raw"); + capturename.append("xxx."); + capturename.append(KdenliveSettings::decklink_extension()); capturefile.append(capturename); video_frame->setPixmap(mergeSideBySide(KIcon("camera-photo").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress play button\nto start preview.\nFiles will be saved in:\n%1", capturefile))); break; @@ -284,17 +290,12 @@ void RecMonitor::slotVideoDeviceChanged(int ix) } } -void RecMonitor::slotGotBlackmagicFrameNumber(ulong ix) -{ - m_dvinfo.setText(QString::number(ix)); -} - void RecMonitor::slotSetInfoMessage(const QString &message) { m_logger.insertItem(0, message); } -QPixmap RecMonitor::mergeSideBySide(const QPixmap& pix, const QString txt) +QPixmap RecMonitor::mergeSideBySide(const QPixmap& pix, const QString &txt) { QPainter p; QRect r = QApplication::fontMetrics().boundingRect(QRect(0, 0, video_frame->width(), video_frame->height()), Qt::AlignLeft, txt); @@ -319,9 +320,9 @@ void RecMonitor::checkDeviceAvailability() m_playAction->setEnabled(false); m_recAction->setEnabled(false); video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice()))); - //video_frame->setText(i18n("Cannot read from device %1\nPlease check drivers and access rights.", KdenliveSettings::video4vdevice())); - } else //video_frame->setText(i18n("Press play or record button\nto start video capture")); + } else { video_frame->setPixmap(mergeSideBySide(KIcon("camera-web").pixmap(QSize(50, 50)), i18n("Press play or record button\nto start video capture\nFiles will be saved in:\n%1", m_capturePath))); + } } void RecMonitor::slotDisconnect() @@ -330,7 +331,7 @@ void RecMonitor::slotDisconnect() m_captureTime = KDateTime::currentLocalDateTime(); kDebug() << "CURRENT TIME: " << m_captureTime.toString(); m_didCapture = false; - slotStartCapture(false); + slotStartPreview(false); m_discAction->setIcon(KIcon("network-disconnect")); m_discAction->setText(i18n("Disconnect")); m_recAction->setEnabled(true); @@ -359,8 +360,8 @@ void RecMonitor::slotForward() void RecMonitor::slotStopCapture() { // stop capture - video_capture->setHidden(true); - video_frame->setHidden(false); + if (!m_isCapturing && !m_isPlaying) return; + m_videoBox->setHidden(true); switch (device_selector->currentIndex()) { case FIREWIRE: m_captureProcess->write("\e", 2); @@ -369,6 +370,8 @@ void RecMonitor::slotStopCapture() break; case SCREENGRAB: m_captureProcess->write("q\n", 3); + m_captureProcess->terminate(); + video_frame->setText(i18n("Encoding captured video...")); QTimer::singleShot(1000, m_captureProcess, SLOT(kill())); break; case VIDEO4LINUX: @@ -376,16 +379,26 @@ void RecMonitor::slotStopCapture() if (m_captureDevice) { m_captureDevice->stop(); } + recording_preview->setEnabled(true); + m_isCapturing = false; + m_isPlaying = false; m_playAction->setEnabled(true); m_stopAction->setEnabled(false); m_recAction->setEnabled(true); + slotSetInfoMessage(i18n("Capture stopped")); + m_isCapturing = false; + m_recAction->setChecked(false); + if (autoaddbox->isChecked() && !m_captureFile.isEmpty() && QFile::exists(m_captureFile.path())) { + emit addProjectClip(m_captureFile); + m_captureFile.clear(); + } break; default: break; } } -void RecMonitor::slotStartCapture(bool play) +void RecMonitor::slotStartPreview(bool play) { if (m_captureProcess->state() != QProcess::NotRunning) { if (device_selector->currentIndex() == FIREWIRE) { @@ -410,10 +423,9 @@ void RecMonitor::slotStartCapture(bool play) MltVideoProfile profile; QString producer; QStringList dvargs = KdenliveSettings::dvgrabextra().simplified().split(" ", QString::SkipEmptyParts); - //video_capture->setVisible(device_selector->currentIndex() == BLACKMAGIC); - //video_frame->setHidden(device_selector->currentIndex() == BLACKMAGIC); - - switch (device_selector->currentIndex()) { + int ix = device_selector->currentIndex(); + m_videoBox->setHidden(ix != VIDEO4LINUX && ix != BLACKMAGIC); + switch (ix) { case FIREWIRE: switch (KdenliveSettings::firewireformat()) { case 0: @@ -459,35 +471,27 @@ void RecMonitor::slotStartCapture(bool play) case VIDEO4LINUX: path = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); m_manager->activateMonitor("record"); - if (m_captureDevice == NULL) { - m_captureDevice = new MltDeviceCapture(path, m_videoBox, this); - connect(m_captureDevice, SIGNAL(droppedFrames(int)), this, SLOT(slotDroppedFrames(int))); - m_captureDevice->sendFrameForAnalysis = m_analyse; - m_manager->updateScopeSource(); - } + buildMltDevice(path); profile = ProfilesDialog::getVideoProfile(path); - producer = QString("avformat-novalidate:video4linux2:%1?width:%2&height:%3&frame_rate:%4").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den); - kDebug()<< "PROD: "<slotStartPreview(producer)) { + producer = getV4lXmlPlaylist(profile); + + //producer = QString("avformat-novalidate:video4linux2:%1?width:%2&height:%3&frame_rate:%4").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den); + if (!m_captureDevice->slotStartPreview(producer, true)) { // v4l capture failed to start video_frame->setText(i18n("Failed to start Video4Linux,\ncheck your parameters...")); m_videoBox->setHidden(true); } else { - m_videoBox->setHidden(false); m_playAction->setEnabled(false); m_stopAction->setEnabled(true); + m_isPlaying = true; } break; case BLACKMAGIC: path = KdenliveSettings::current_profile(); m_manager->activateMonitor("record"); - if (m_captureDevice == NULL) { - m_captureDevice = new MltDeviceCapture(path, m_videoBox, this); - m_captureDevice->sendFrameForAnalysis = m_analyse; - m_manager->updateScopeSource(); - } + buildMltDevice(path); profile = ProfilesDialog::getVideoProfile(path); producer = QString("decklink:%1").arg(KdenliveSettings::decklink_capturedevice()); if (!m_captureDevice->slotStartPreview(producer)) { @@ -496,9 +500,9 @@ void RecMonitor::slotStartCapture(bool play) m_videoBox->setHidden(true); } else { - m_videoBox->setHidden(false); m_playAction->setEnabled(false); m_stopAction->setEnabled(true); + m_isPlaying = true; } break; default: @@ -517,47 +521,21 @@ void RecMonitor::slotStartCapture(bool play) void RecMonitor::slotRecord() { if (m_captureProcess->state() == QProcess::NotRunning && device_selector->currentIndex() == FIREWIRE) { - slotStartCapture(); + slotStartPreview(); } if (m_isCapturing) { // User stopped capture - switch (device_selector->currentIndex()) { - case FIREWIRE: - m_captureProcess->write("\e", 2); - m_playAction->setIcon(m_playIcon); - m_isCapturing = false; - m_isPlaying = false; - m_recAction->setChecked(false); - break; - case VIDEO4LINUX: - case BLACKMAGIC: - slotStopCapture(); - slotSetInfoMessage(i18n("Capture stopped")); - m_isCapturing = false; - m_recAction->setEnabled(true); - m_stopAction->setEnabled(false); - if (autoaddbox->isChecked() && QFile::exists(m_captureFile.path())) emit addProjectClip(m_captureFile); - //QTimer::singleShot(1000, this, SLOT(slotStartCapture())); - break; - case SCREENGRAB: - //captureProcess->write("q\n", 3); - m_captureProcess->terminate(); - video_frame->setText(i18n("Encoding captured video...")); - // in case ffmpeg doesn't exit with the 'q' command, kill it one second later - //QTimer::singleShot(1000, captureProcess, SLOT(kill())); - break; - } + slotStopCapture(); return; } else if (device_selector->currentIndex() == FIREWIRE) { m_isCapturing = true; m_didCapture = true; m_captureProcess->write("c\n", 3); -#if KDE_IS_VERSION(4,2,0) m_spaceTimer.start(); -#endif return; } if (m_captureProcess->state() == QProcess::NotRunning) { + m_logger.clear(); m_recAction->setChecked(true); QString extension = "mpg"; if (device_selector->currentIndex() == SCREENGRAB) extension = "ogv"; //KdenliveSettings::screengrabextension(); @@ -576,6 +554,7 @@ void RecMonitor::slotRecord() m_displayArgs.clear(); QString args; QString playlist; + QString v4lparameters; MltVideoProfile profile; QString capturename = KdenliveSettings::dvgrabfilename(); if (capturename.isEmpty()) capturename = "capture"; @@ -584,69 +563,70 @@ void RecMonitor::slotRecord() case VIDEO4LINUX: path = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); profile = ProfilesDialog::getVideoProfile(path); - if (m_captureDevice == NULL) { - m_captureDevice = new MltDeviceCapture(path, m_videoBox, this); - m_captureDevice->sendFrameForAnalysis = m_analyse; - m_manager->updateScopeSource(); - } - playlist = QString("producer100000pausevideo4linux2:%1?width:%2&height:%3&frame_rate:%4avformat-novalidate").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den); - - // Add alsa audio capture - if (KdenliveSettings::v4l_captureaudio()) { - playlist.append(QString("producer100000pausealsa:%50-1avformat").arg(KdenliveSettings::v4l_alsadevicename())); - } - + m_videoBox->setRatio((double) profile.display_aspect_num / profile.display_aspect_den); + buildMltDevice(path); + playlist = getV4lXmlPlaylist(profile); - playlist.append(""); + v4lparameters = KdenliveSettings::v4l_parameters(); - playlist.append(""); - - // Audio mix - if (KdenliveSettings::v4l_captureaudio()) { - playlist.append(""); - playlist.append("01transitionmix"); + // Add alsa audio capture + if (!KdenliveSettings::v4l_captureaudio()) { + // if we do not want audio, make sure that we don't have audio encoding parameters + // this is required otherwise the MLT avformat consumer will not close properly + if (v4lparameters.contains("acodec")) { + QString endParam = v4lparameters.section("acodec", 1); + int vcodec = endParam.indexOf(" vcodec"); + int format = endParam.indexOf(" f="); + int cutPosition = -1; + if (vcodec > -1) { + if (format > -1) { + cutPosition = qMin(vcodec, format); + } + else cutPosition = vcodec; + } + else if (format > -1) { + cutPosition = format; + } + else { + // nothing interesting in end params + endParam.clear(); + } + if (cutPosition > -1) { + endParam.remove(0, cutPosition); + } + v4lparameters = QString(v4lparameters.section("acodec", 0, 0) + "an=1 " + endParam).simplified(); + } } - playlist.append(""); - - if (m_captureDevice->slotStartCapture(KdenliveSettings::v4l_parameters(), m_captureFile.path(), playlist, enable_preview->isChecked())) { + if (m_captureDevice->slotStartCapture(v4lparameters, m_captureFile.path(), playlist, recording_preview->currentIndex())) { m_videoBox->setHidden(false); m_isCapturing = true; m_recAction->setEnabled(false); m_stopAction->setEnabled(true); + recording_preview->setEnabled(false); } else { video_frame->setText(i18n("Failed to start Video4Linux,\ncheck your parameters...")); m_videoBox->setHidden(true); m_isCapturing = false; } - - /* - m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-y" << m_captureFile.path() << "-f" << KdenliveSettings::video4container() << "-acodec" << KdenliveSettings::video4acodec() << "-vcodec" << KdenliveSettings::video4vcodec() << "-"; - m_displayArgs << "-f" << KdenliveSettings::video4container() << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-"; - m_captureProcess->setStandardOutputProcess(m_displayProcess); - kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" "); - m_captureProcess->start("ffmpeg", m_captureArgs);*/ break; case BLACKMAGIC: path = KdenliveSettings::current_profile(); profile = ProfilesDialog::getVideoProfile(path); - if (m_captureDevice == NULL) { - m_captureDevice = new MltDeviceCapture(path, m_videoBox, this); - connect(m_captureDevice, SIGNAL(droppedFrames(int)), this, SLOT(slotDroppedFrames(int))); - m_captureDevice->sendFrameForAnalysis = m_analyse; - m_manager->updateScopeSource(); - } + m_videoBox->setRatio((double) profile.display_aspect_num / profile.display_aspect_den); + buildMltDevice(path); playlist = QString("producer100000pause%1decklink").arg(KdenliveSettings::decklink_capturedevice()); - if (m_captureDevice->slotStartCapture(KdenliveSettings::decklink_parameters(), m_captureFile.path(), QString("decklink:%1").arg(KdenliveSettings::decklink_capturedevice()), enable_preview->isChecked(), false)) { + if (m_captureDevice->slotStartCapture(KdenliveSettings::decklink_parameters(), m_captureFile.path(), QString("decklink:%1").arg(KdenliveSettings::decklink_capturedevice()), recording_preview->currentIndex(), false)) { m_videoBox->setHidden(false); m_isCapturing = true; slotSetInfoMessage(i18n("Capturing to %1", m_captureFile.fileName())); m_recAction->setEnabled(false); m_stopAction->setEnabled(true); + recording_preview->setEnabled(false); } else { video_frame->setText(i18n("Failed to start Decklink,\ncheck your parameters...")); @@ -720,6 +700,24 @@ void RecMonitor::slotRecord() } } +const QString RecMonitor::getV4lXmlPlaylist(MltVideoProfile profile) { + + QString playlist = QString("").arg(profile.width).arg(profile.height).arg(profile.progressive).arg(profile.sample_aspect_num).arg(profile.sample_aspect_den).arg(profile.display_aspect_num).arg(profile.display_aspect_den).arg(profile.frame_rate_num).arg(profile.frame_rate_den).arg(profile.colorspace); + + playlist.append(QString("producer1000000loopvideo4linux2:%1?width:%2&height:%3&frame_rate:%4avformat-novalidate").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den)); + + + if (KdenliveSettings::v4l_captureaudio()) { + playlist.append(QString("producer1000000loopalsa:%50-1avformat-novalidate").arg(KdenliveSettings::v4l_alsadevicename())); + } + playlist.append(""); + playlist.append(""); + if (KdenliveSettings::v4l_captureaudio()) playlist.append(""); + playlist.append(""); + + return playlist; +} + /* void RecMonitor::slotStartGrab(const QRect &rect) { rgnGrab->deleteLater(); @@ -754,7 +752,10 @@ void RecMonitor::slotProcessStatus(QProcess::ProcessState status) if (status == QProcess::NotRunning) { m_displayProcess->kill(); if (m_isCapturing && device_selector->currentIndex() != FIREWIRE) - if (autoaddbox->isChecked() && QFile::exists(m_captureFile.path())) emit addProjectClip(m_captureFile); + if (autoaddbox->isChecked() && !m_captureFile.isEmpty() && QFile::exists(m_captureFile.path())) { + emit addProjectClip(m_captureFile); + m_captureFile.clear(); + } if (device_selector->currentIndex() == FIREWIRE) { m_discAction->setIcon(KIcon("network-connect")); m_discAction->setText(i18n("Connect")); @@ -783,12 +784,9 @@ void RecMonitor::slotProcessStatus(QProcess::ProcessState status) } m_isCapturing = false; -#if KDE_IS_VERSION(4,2,0) m_spaceTimer.stop(); // update free space info slotUpdateFreeSpace(); -#endif - } else { if (device_selector->currentIndex() != SCREENGRAB) m_stopAction->setEnabled(true); device_selector->setEnabled(false); @@ -821,7 +819,19 @@ void RecMonitor::manageCapturedFiles() KUrl url = KUrl(dir.filePath(name)); if (KIO::NetAccess::exists(url, KIO::NetAccess::SourceSide, this)) { KFileItem file(KFileItem::Unknown, KFileItem::Unknown, url, true); - if (file.time(KFileItem::ModificationTime) > m_captureTime) capturedFiles.append(url); + if (file.time(KFileItem::ModificationTime) > m_captureTime) { + // The file was captured in the last batch + if (url.fileName().contains(':')) { + // Several dvgrab options (--timecode,...) use : in the file name, which is + // not supported by MLT, so rename them + QString newUrl = url.directory(KUrl::AppendTrailingSlash) + url.fileName().replace(':', '_'); + if (QFile::rename(url.path(), newUrl)) { + url = KUrl(newUrl); + } + + } + capturedFiles.append(url); + } } } kDebug() << "Found : " << capturedFiles.count() << " new capture files"; @@ -830,10 +840,7 @@ void RecMonitor::manageCapturedFiles() if (capturedFiles.count() > 0) { ManageCapturesDialog *d = new ManageCapturesDialog(capturedFiles, this); if (d->exec() == QDialog::Accepted) { - capturedFiles = d->importFiles(); - foreach(const KUrl & url, capturedFiles) { - emit addProjectClip(url); - } + emit addProjectClipList(d->importFiles()); } delete d; } @@ -842,21 +849,17 @@ void RecMonitor::manageCapturedFiles() // virtual void RecMonitor::mousePressEvent(QMouseEvent * /*event*/) { -#if KDE_IS_VERSION(4,2,0) if (m_freeSpace->underMouse()) slotUpdateFreeSpace(); -#endif } void RecMonitor::slotUpdateFreeSpace() { -#if KDE_IS_VERSION(4,2,0) KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(m_capturePath); - if (info.isValid()) { + if (info.isValid() && info.size() > 0) { m_freeSpace->setValue(100 * info.used() / info.size()); m_freeSpace->setText(i18n("Free space: %1", KIO::convertSize(info.available()))); m_freeSpace->update(); } -#endif } void RecMonitor::refreshRecMonitor(bool visible) @@ -899,5 +902,20 @@ void RecMonitor::slotDroppedFrames(int dropped) slotSetInfoMessage(i18n("%1 dropped frames", dropped)); } +void RecMonitor::buildMltDevice(const QString &path) +{ + if (m_captureDevice == NULL) { + m_captureDevice = new MltDeviceCapture(path, m_videoBox, this); + connect(m_captureDevice, SIGNAL(droppedFrames(int)), this, SLOT(slotDroppedFrames(int))); + m_captureDevice->sendFrameForAnalysis = m_analyse; + m_manager->updateScopeSource(); + } +} + +void RecMonitor::slotChangeRecordingPreview(int ix) +{ + KdenliveSettings::setRecording_preview(ix); +} + #include "recmonitor.moc"