#include "recmonitor.h"
#include "gentime.h"
+#include "mltdevicecapture.h"
#include "kdenlivesettings.h"
#include "managecapturesdialog.h"
+#include "monitormanager.h"
+#include "monitor.h"
+#include "profilesdialog.h"
#include <KDebug>
#include <KLocale>
-#include <QPainter>
#include <KStandardDirs>
#include <KComboBox>
#include <KIO/NetAccess>
#include <KFileItem>
#include <KMessageBox>
+#include <KApplication>
#if KDE_IS_VERSION(4,2,0)
#include <KDiskFreeSpaceInfo>
#include <QDir>
-RecMonitor::RecMonitor(QString name, QWidget *parent) :
- QWidget(parent),
- m_name(name),
- m_isActive(false),
- m_isCapturing(false),
- m_didCapture(false),
- m_isPlaying(false)
+RecMonitor::RecMonitor(QString name, MonitorManager *manager, QWidget *parent) :
+ AbstractMonitor(parent),
+ m_name(name),
+ m_isCapturing(false),
+ m_didCapture(false),
+ m_isPlaying(false),
+ m_bmCapture(NULL),
+ m_blackmagicCapturing(false),
+ m_manager(manager),
+ m_captureDevice(NULL),
+ m_analyse(false)
{
setupUi(this);
device_selector->setCurrentIndex(KdenliveSettings::defaultcapture());
connect(device_selector, SIGNAL(currentIndexChanged(int)), this, SLOT(slotVideoDeviceChanged(int)));
-
-
- QToolBar *toolbar = new QToolBar(name, this);
+ // Video widget holder
+ QVBoxLayout *l = new QVBoxLayout;
+ l->setContentsMargins(0, 0, 0, 0);
+ l->setSpacing(0);
+ m_videoBox = new VideoPreviewContainer();
+ m_videoBox->setContentsMargins(0, 0, 0, 0);
+ m_videoBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ l->addWidget(m_videoBox);
+ video_frame->setLayout(l);
+
+ QToolBar *toolbar = new QToolBar(this);
QHBoxLayout *layout = new QHBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
m_playIcon = KIcon("media-playback-start");
configAction->setCheckable(false);
layout->addWidget(toolbar);
-
+ layout->addWidget(&m_logger);
layout->addWidget(&m_dvinfo);
+ m_logger.setMaxCount(10);
+ m_logger.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_logger.setFrame(false);
+ //m_logger.setInsertPolicy(QComboBox::InsertAtTop);
#if KDE_IS_VERSION(4,2,0)
m_freeSpace = new KCapacityBar(KCapacityBar::DrawTextInline, this);
m_displayProcess->setEnvironment(env);
- if (KdenliveSettings::video4capture().isEmpty()) {
- QString captureCommand;
- if (!KdenliveSettings::video4adevice().isEmpty()) captureCommand = "-f " + KdenliveSettings::video4aformat() + " -i " + KdenliveSettings::video4adevice();
-
- captureCommand += " -f " + KdenliveSettings::video4vformat() + " -s " + KdenliveSettings::video4size() + " -r " + QString::number(KdenliveSettings::video4rate()) + " -i " + KdenliveSettings::video4vdevice();
- KdenliveSettings::setVideo4capture(captureCommand);
- }
-
kDebug() << "/////// BUILDING MONITOR, ID: " << video_frame->winId();
}
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;
}
-QString RecMonitor::name() const
+const QString RecMonitor::name() const
{
return m_name;
}
+void RecMonitor::stop()
+{
+ slotStopCapture();
+}
+
+void RecMonitor::start()
+{
+}
+
void RecMonitor::slotConfigure()
{
emit showConfigDialog(4, device_selector->currentIndex());
}
-void RecMonitor::slotUpdateCaptureFolder()
+void RecMonitor::slotUpdateCaptureFolder(const QString currentProjectFolder)
{
- if (m_captureProcess) m_captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder());
+ if (KdenliveSettings::capturetoprojectfolder()) m_capturePath = currentProjectFolder;
+ else m_capturePath = KdenliveSettings::capturefolder();
+ if (m_captureProcess) m_captureProcess->setWorkingDirectory(m_capturePath);
if (m_captureProcess->state() != QProcess::NotRunning) {
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());
- kDebug() << "// UPDATE CAPT FOLD: " << KdenliveSettings::capturefolder();
+ } else slotVideoDeviceChanged(device_selector->currentIndex());
#if KDE_IS_VERSION(4,2,0)
// update free space info
void RecMonitor::slotVideoDeviceChanged(int ix)
{
+ QString capturefile;
+ QString capturename;
+ video_capture->setHidden(true);
+ video_frame->setHidden(false);
+ m_fwdAction->setVisible(ix == FIREWIRE);
+ m_discAction->setVisible(ix == FIREWIRE);
+ m_rewAction->setVisible(ix == FIREWIRE);
+ m_logger.setVisible(ix == BLACKMAGIC);
+ if (m_captureDevice) {
+ // MLT capture still running, abort
+ m_captureDevice->stop();
+ //delete m_captureDevice;
+ //m_captureDevice = NULL;
+ }
switch (ix) {
case SCREENGRAB:
m_discAction->setEnabled(false);
if (rmdpath.isEmpty()) video_frame->setPixmap(mergeSideBySide(KIcon("dialog-warning").pixmap(QSize(50, 50)), i18n("Recordmydesktop utility not found,\n please install it for screen grabs")));
else KdenliveSettings::setRmd_path(rmdpath);
}
- if (!KdenliveSettings::rmd_path().isEmpty()) video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+ if (!KdenliveSettings::rmd_path().isEmpty()) video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", m_capturePath)));
//video_frame->setText(i18n("Press record button\nto start screen capture"));
break;
case VIDEO4LINUX:
m_playAction->setEnabled(true);
checkDeviceAvailability();
break;
+ case BLACKMAGIC:
+ createBlackmagicDevice();
+ m_recAction->setEnabled(false);
+ m_stopAction->setEnabled(false);
+ m_playAction->setEnabled(true);
+
+ capturefile = m_capturePath;
+ if (!capturefile.endsWith("/")) capturefile.append("/");
+ capturename = KdenliveSettings::hdmifilename();
+ capturename.append("xxx.raw");
+ 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;
default: // FIREWIRE
m_discAction->setEnabled(true);
m_recAction->setEnabled(false);
else KdenliveSettings::setDvgrab_path(dvgrabpath);
} else {
// Show capture info
- QString capturefile = KdenliveSettings::capturefolder();
+ capturefile = m_capturePath;
if (!capturefile.endsWith("/")) capturefile.append("/");
- QString capturename = KdenliveSettings::dvgrabfilename();
+ capturename = KdenliveSettings::dvgrabfilename();
if (capturename.isEmpty()) capturename = "capture";
QString extension;
switch (KdenliveSettings::firewireformat()) {
}
}
+void RecMonitor::createBlackmagicDevice()
+{
+ //video_capture->setVisible(true);
+ if (m_bmCapture == NULL) {
+ QVBoxLayout *lay = new QVBoxLayout;
+ m_bmCapture = new BmdCaptureHandler(lay);
+ connect(m_bmCapture, SIGNAL(gotTimeCode(ulong)), this, SLOT(slotGotBlackMagicFrameNumber(ulong)));
+ connect(m_bmCapture, SIGNAL(gotMessage(const QString &)), this, SLOT(slotGotBlackmagicMessage(const QString &)));
+ video_capture->setLayout(lay);
+ }
+}
+
+void RecMonitor::slotGotBlackmagicFrameNumber(ulong ix)
+{
+ m_dvinfo.setText(QString::number(ix));
+}
+
+void RecMonitor::slotGotBlackmagicMessage(const QString &message)
+{
+ m_logger.insertItem(0, message);
+}
+
QPixmap RecMonitor::mergeSideBySide(const QPixmap& pix, const QString txt)
{
QPainter p;
res.fill(Qt::transparent);
p.begin(&res);
p.drawPixmap(0, 0, pix);
+ p.setPen(kapp->palette().text().color());
p.drawText(QRect(pixWidth + 8, 0, strWidth, strHeight), 0, txt);
p.end();
return res;
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"));
- 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", KdenliveSettings::capturefolder())));
+ 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()
m_didCapture = false;
slotStartCapture(false);
m_discAction->setIcon(KIcon("network-disconnect"));
- m_discAction->setText(i18n("Disonnect"));
+ m_discAction->setText(i18n("Disconnect"));
m_recAction->setEnabled(true);
m_stopAction->setEnabled(true);
m_playAction->setEnabled(true);
void RecMonitor::slotStopCapture()
{
// stop capture
+ video_capture->setHidden(true);
+ video_frame->setHidden(false);
switch (device_selector->currentIndex()) {
case FIREWIRE:
m_captureProcess->write("\e", 2);
m_isPlaying = false;
break;
case VIDEO4LINUX:
- m_captureProcess->write("q\n", 3);
- QTimer::singleShot(1000, m_captureProcess, SLOT(kill()));
-
+ if (m_captureDevice) {
+ m_captureDevice->stop();
+ }
+ m_playAction->setEnabled(true);
+ m_stopAction->setEnabled(false);
break;
case SCREENGRAB:
m_captureProcess->write("q\n", 3);
QTimer::singleShot(1000, m_captureProcess, SLOT(kill()));
break;
+ case BLACKMAGIC:
+ m_bmCapture->stopPreview();
+ m_playAction->setEnabled(true);
+ m_stopAction->setEnabled(false);
+ m_recAction->setEnabled(false);
+ break;
default:
break;
}
m_displayArgs.clear();
m_isPlaying = false;
QString capturename = KdenliveSettings::dvgrabfilename();
+ QString path;
+ 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()) {
case FIREWIRE:
m_displayArgs << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
m_captureProcess->setStandardOutputProcess(m_displayProcess);
- m_captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder());
+ m_captureProcess->setWorkingDirectory(m_capturePath);
kDebug() << "Capture: Running dvgrab " << m_captureArgs.join(" ");
m_captureProcess->start(KdenliveSettings::dvgrab_path(), m_captureArgs);
m_discAction->setEnabled(true);
break;
case VIDEO4LINUX:
- m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-f" << "mpegts" << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-";
- m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
+ path = KStandardDirs::locateLocal("appdata", "profiles/video4linux");
+ m_manager->activateMonitor("record");
+ if (m_captureDevice == NULL) {
+ m_captureDevice = new MltDeviceCapture(path, m_videoBox, this);
+ m_captureDevice->sendFrameForAnalysis = m_analyse;
+ m_manager->updateScopeSource();
+ }
+ 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: "<<producer;
+ if (!m_captureDevice->slotStartPreview(producer)) {
+ // 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_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-f" << KdenliveSettings::video4container() << "-";
+ 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);
+ m_captureProcess->start("ffmpeg", m_captureArgs);*/
+ break;
+ case BLACKMAGIC:
+ m_bmCapture->startPreview(KdenliveSettings::hdmi_capturedevice(), KdenliveSettings::hdmi_capturemode());
+ m_playAction->setEnabled(false);
+ m_stopAction->setEnabled(true);
+ m_recAction->setEnabled(true);
break;
default:
break;
}
- if (device_selector->currentIndex() != SCREENGRAB) {
+ if (device_selector->currentIndex() == FIREWIRE) {
kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" ");
m_displayProcess->start("ffplay", m_displayArgs);
video_frame->setText(i18n("Initialising..."));
void RecMonitor::slotRecord()
{
+ if (device_selector->currentIndex() == BLACKMAGIC) {
+ if (m_blackmagicCapturing) {
+ // We are capturing, stop it
+ m_bmCapture->stopCapture();
+ m_blackmagicCapturing = false;
+ } else {
+ // Start capture, get capture filename first
+ QString path = m_capturePath;
+ if (!path.endsWith("/")) path.append("/");
+ path.append(KdenliveSettings::hdmifilename());
+ m_bmCapture->startCapture(path);
+ m_blackmagicCapturing = true;
+ }
+ return;
+ }
+
if (m_captureProcess->state() == QProcess::NotRunning && device_selector->currentIndex() == FIREWIRE) {
slotStartCapture();
}
m_recAction->setChecked(false);
break;
case VIDEO4LINUX:
- m_captureProcess->terminate();
slotStopCapture();
- //m_isCapturing = false;
- QTimer::singleShot(1000, this, SLOT(slotStartCapture()));
+ m_isCapturing = false;
+ m_recAction->setChecked(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_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_recAction->setChecked(true);
QString extension = "mp4";
if (device_selector->currentIndex() == SCREENGRAB) extension = "ogv"; //KdenliveSettings::screengrabextension();
- QString path = KdenliveSettings::capturefolder() + "/capture0000." + extension;
+ else if (device_selector->currentIndex() == VIDEO4LINUX) extension = KdenliveSettings::v4l_extension();
+ QString path = KUrl(m_capturePath).path(KUrl::AddTrailingSlash) + "capture0000." + extension;
int i = 1;
while (QFile::exists(path)) {
QString num = QString::number(i).rightJustified(4, '0', false);
- path = KdenliveSettings::capturefolder() + "/capture" + num + '.' + extension;
+ path = KUrl(m_capturePath).path(KUrl::AddTrailingSlash) + "capture" + num + '.' + extension;
i++;
}
m_captureFile = KUrl(path);
m_captureArgs.clear();
m_displayArgs.clear();
QString args;
+ QString playlist;
+ MltVideoProfile profile;
QString capturename = KdenliveSettings::dvgrabfilename();
if (capturename.isEmpty()) capturename = "capture";
switch (device_selector->currentIndex()) {
case VIDEO4LINUX:
- m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-y" << m_captureFile.path() << "-f" << "mpegts" << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-";
- m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
+ 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("<mlt title=\"capture\"><producer id=\"producer0\" in=\"0\" out=\"99999\"><property name=\"mlt_type\">producer</property><property name=\"length\">100000</property><property name=\"eof\">pause</property><property name=\"resource\">video4linux2:%1?width:%2&height:%3&frame_rate:%4</property><property name=\"mlt_service\">avformat-novalidate</property></producer><playlist id=\"playlist0\"><entry producer=\"producer0\" in=\"0\" out=\"99999\"/></playlist>").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("<producer id=\"producer1\" in=\"0\" out=\"99999\"><property name=\"mlt_type\">producer</property><property name=\"length\">100000</property><property name=\"eof\">pause</property><property name=\"resource\">alsa:%5</property><property name=\"audio_index\">0</property><property name=\"video_index\">-1</property><property name=\"mlt_service\">avformat</property></producer><playlist id=\"playlist1\"><entry producer=\"producer1\" in=\"0\" out=\"99999\"/></playlist>").arg(KdenliveSettings::v4l_alsadevicename()));
+ }
+
+
+ playlist.append("<tractor id=\"tractor0\" title=\"video0\" global_feed=\"1\" in=\"0\" out=\"99999\">");
+
+ playlist.append("<track producer=\"playlist0\"/>");
+
+ // Audio mix
+ if (KdenliveSettings::v4l_captureaudio()) {
+ playlist.append("<track producer=\"playlist1\"/>");
+ playlist.append("<transition id=\"transition0\" in=\"0\" out=\"0\"><property name=\"a_track\">0</property><property name=\"b_track\">1</property><property name=\"mlt_type\">transition</property><property name=\"mlt_service\">mix</property></transition>");
+ }
+
+ playlist.append("</tractor></mlt>");
+
+ if (m_captureDevice->slotStartCapture(KdenliveSettings::v4l_parameters(), m_captureFile.path(), playlist)) {
+ m_videoBox->setHidden(false);
+ m_isCapturing = true;
+ }
+ else {
+ video_frame->setText(i18n("Failed to start Video4Linux,\ncheck your parameters..."));
+ m_videoBox->setHidden(true);
+ m_isCapturing = false;
+ m_recAction->setChecked(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);
+ m_captureProcess->start("ffmpeg", m_captureArgs);*/
break;
case SCREENGRAB:
switch (KdenliveSettings::rmd_capture_type()) {
break;
default:
// Region capture
- m_captureArgs << "-width" << QString::number(KdenliveSettings::rmd_width()) << "-height" << QString::number(KdenliveSettings::rmd_height());
+ m_captureArgs << "--width" << QString::number(KdenliveSettings::rmd_width()) << "--height" << QString::number(KdenliveSettings::rmd_height());
if (!KdenliveSettings::rmd_follow_mouse()) {
m_captureArgs << "-x" << QString::number(KdenliveSettings::rmd_offsetx()) << "-y" << QString::number(KdenliveSettings::rmd_offsety());
} else {
}
break;
}
+ if (KdenliveSettings::rmd_hide_mouse()) m_captureArgs << "--no-cursor";
m_isCapturing = true;
if (KdenliveSettings::rmd_capture_audio()) {
- m_captureArgs << "-freq" << KdenliveSettings::rmd_freq();
- m_captureArgs << "-channels" << QString::number(KdenliveSettings::rmd_audio_channels());
+ m_captureArgs << "--freq" << KdenliveSettings::rmd_freq();
+ m_captureArgs << "--channels" << QString::number(KdenliveSettings::rmd_audio_channels());
if (KdenliveSettings::rmd_use_jack()) {
- m_captureArgs << "-use-jack" << KdenliveSettings::rmd_jackports();
+ m_captureArgs << "--use-jack";
+ QStringList ports = KdenliveSettings::rmd_jackports().split(" ", QString::SkipEmptyParts);
+ for (int i = 0; i < ports.count(); ++i) {
+ m_captureArgs << ports.at(i);
+ }
if (KdenliveSettings::rmd_jack_buffer() > 0.0)
- m_captureArgs << "-ring-buffer-size" << QString::number(KdenliveSettings::rmd_jack_buffer());
+ m_captureArgs << "--ring-buffer-size" << QString::number(KdenliveSettings::rmd_jack_buffer());
} else {
if (!KdenliveSettings::rmd_alsadevicename().isEmpty())
- m_captureArgs << "-device" << KdenliveSettings::rmd_alsadevicename();
+ m_captureArgs << "--device" << KdenliveSettings::rmd_alsadevicename();
if (KdenliveSettings::rmd_alsa_buffer() > 0)
- m_captureArgs << "-buffer-size" << QString::number(KdenliveSettings::rmd_alsa_buffer());
+ m_captureArgs << "--buffer-size" << QString::number(KdenliveSettings::rmd_alsa_buffer());
}
} else m_captureArgs << "--no-sound";
if (KdenliveSettings::rmd_fullshots()) m_captureArgs << "--full-shots";
- m_captureArgs << "-workdir" << KdenliveSettings::currenttmpfolder();
- m_captureArgs << "-fps" << QString::number(KdenliveSettings::rmd_fps()) << "-o" << m_captureFile.path();
+ m_captureArgs << "--v_bitrate" << QString::number(KdenliveSettings::rmd_bitrate());
+ m_captureArgs << "--v_quality" << QString::number(KdenliveSettings::rmd_quality());
+ m_captureArgs << "--workdir" << KdenliveSettings::currenttmpfolder();
+ m_captureArgs << "--fps" << QString::number(KdenliveSettings::rmd_fps()) << "-o" << m_captureFile.path();
m_captureProcess->start(KdenliveSettings::rmd_path(), m_captureArgs);
kDebug() << "// RecordMyDesktop params: " << m_captureArgs;
break;
}
- if (device_selector->currentIndex() != SCREENGRAB) {
+ if (device_selector->currentIndex() == FIREWIRE) {
m_isCapturing = true;
kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" ");
m_displayProcess->start("ffplay", m_displayArgs);
if (m_captureProcess && m_captureProcess->exitStatus() == QProcess::CrashExit) {
video_frame->setText(i18n("Capture crashed, please check your parameters"));
} else {
- if (device_selector->currentIndex() != SCREENGRAB) video_frame->setText(i18n("Not connected"));
- else video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+ if (device_selector->currentIndex() != SCREENGRAB) {
+ video_frame->setText(i18n("Not connected"));
+ } else {
+ if (m_captureProcess->exitCode() != 0) {
+ video_frame->setText(i18n("Capture crashed, please check your parameters\nRecordMyDesktop exit code: %1", QString::number(m_captureProcess->exitCode())));
+ } else {
+ video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", m_capturePath)));
+ }
+ }
}
m_isCapturing = false;
- m_spaceTimer.stop();
#if KDE_IS_VERSION(4,2,0)
+ m_spaceTimer.stop();
// update free space info
slotUpdateFreeSpace();
#endif
extension = ".m2t";
break;
}
- QDir dir(KdenliveSettings::capturefolder());
+ QDir dir(m_capturePath);
QStringList filters;
QString capturename = KdenliveSettings::dvgrabfilename();
if (capturename.isEmpty()) capturename = "capture";
filters << capturename + "*" + extension;
const QStringList result = dir.entryList(filters, QDir::Files, QDir::Time);
KUrl::List capturedFiles;
- foreach(const QString &name, result) {
+ foreach(const QString & name, result) {
KUrl url = KUrl(dir.filePath(name));
if (KIO::NetAccess::exists(url, KIO::NetAccess::SourceSide, this)) {
KFileItem file(KFileItem::Unknown, KFileItem::Unknown, url, true);
ManageCapturesDialog *d = new ManageCapturesDialog(capturedFiles, this);
if (d->exec() == QDialog::Accepted) {
capturedFiles = d->importFiles();
- foreach(const KUrl &url, capturedFiles) {
+ foreach(const KUrl & url, capturedFiles) {
emit addProjectClip(url);
}
}
void RecMonitor::slotUpdateFreeSpace()
{
#if KDE_IS_VERSION(4,2,0)
- KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(KdenliveSettings::capturefolder());
+ KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(m_capturePath);
if (info.isValid()) {
m_freeSpace->setValue(100 * info.used() / info.size());
m_freeSpace->setText(i18n("Free space: %1", KIO::convertSize(info.available())));
#endif
}
-void RecMonitor::activateRecMonitor()
-{
- //if (!m_isActive) m_monitorManager->activateRecMonitor(m_name);
-}
-
-void RecMonitor::stop()
-{
- m_isActive = false;
-
-}
-
-void RecMonitor::start()
-{
- m_isActive = true;
-
-}
-
void RecMonitor::refreshRecMonitor(bool visible)
{
if (visible) {
m_dvinfo.updateGeometry();
}
-#include "recmonitor.moc"
\ No newline at end of file
+AbstractRender *RecMonitor::abstractRender()
+{
+ return m_captureDevice;
+}
+
+
+void RecMonitor::analyseFrames(bool analyse)
+{
+ m_analyse = analyse;
+ if (m_captureDevice) m_captureDevice->sendFrameForAnalysis = analyse;
+}
+
+
+#include "recmonitor.moc"
+