slotVideoDeviceChanged(ui.device_selector->currentIndex());
displayProcess = new QProcess;
captureProcess = new QProcess;
- alsaProcess = new QProcess;
connect(captureProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(slotProcessStatus(QProcess::ProcessState)));
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() + " -f " + KdenliveSettings::video4vencoding();
+ captureCommand += " -f " + KdenliveSettings::video4vformat() + " -s " + KdenliveSettings::video4size() + " -r " + QString::number(KdenliveSettings::video4rate()) + " -i " + KdenliveSettings::video4vdevice();
KdenliveSettings::setVideo4capture(captureCommand);
}
- if (KdenliveSettings::video4playback().isEmpty()) {
- QString playbackCommand;
- playbackCommand = "-f " + KdenliveSettings::video4vencoding();
- KdenliveSettings::setVideo4playback(playbackCommand);
- }
kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId();
}
RecMonitor::~RecMonitor() {
delete captureProcess;
delete displayProcess;
- delete alsaProcess;
}
QString RecMonitor::name() const {
m_recAction->setEnabled(true);
m_stopAction->setEnabled(false);
m_playAction->setEnabled(false);
- ui.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()) {
+ QString rmdpath = KStandardDirs::findExe("recordmydesktop");
+ if (rmdpath.isEmpty()) ui.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()) ui.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())));
//ui.video_frame->setText(i18n("Press record button\nto start screen capture"));
break;
case VIDEO4LINUX:
m_rewAction->setEnabled(false);
m_fwdAction->setEnabled(false);
//ui.video_frame->setText(i18n("Plug your camcorder and\npress connect button\nto initialize connection"));
- ui.video_frame->setPixmap(mergeSideBySide(KIcon("network-connect").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress connect button\nto initialize connection\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+ if (KdenliveSettings::dvgrab_path().isEmpty()) {
+ QString dvgrabpath = KStandardDirs::findExe("dvgrab");
+ if (dvgrabpath.isEmpty()) ui.video_frame->setPixmap(mergeSideBySide(KIcon("dialog-warning").pixmap(QSize(50, 50)), i18n("dvgrab utility not found,\n please install it for firewire capture")));
+ else KdenliveSettings::setDvgrab_path(dvgrabpath);
+ }
+
+ if (!KdenliveSettings::dvgrab_path().isEmpty()) ui.video_frame->setPixmap(mergeSideBySide(KIcon("network-connect").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress connect button\nto initialize connection\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
break;
}
}
captureProcess->setStandardOutputProcess(displayProcess);
captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder());
kDebug() << "Capture: Running dvgrab " << m_captureArgs.join(" ");
- captureProcess->start("dvgrab", m_captureArgs);
+ captureProcess->start(KdenliveSettings::dvgrab_path(), m_captureArgs);
if (play) captureProcess->write(" ", 1);
m_discAction->setEnabled(true);
break;
case VIDEO4LINUX:
- m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << "-";
- m_displayArgs << KdenliveSettings::video4playback().simplified().split(' ') << "-x" << QString::number(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-";
+ m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-f" << "mpegts" << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-";
+ m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-";
captureProcess->setStandardOutputProcess(displayProcess);
kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
captureProcess->start("ffmpeg", m_captureArgs);
}
if (ui.device_selector->currentIndex() != SCREENGRAB) {
- kDebug() << "Capture: Running ffplay " << m_captureArgs.join(" ");
+ kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" ");
displayProcess->start("ffplay", m_displayArgs);
ui.video_frame->setText(i18n("Initialising..."));
} else {
QTimer::singleShot(1000, this, SLOT(slotStartCapture()));
break;
case SCREENGRAB:
- captureProcess->write("q\n", 3);
+ //captureProcess->write("q\n", 3);
captureProcess->terminate();
- alsaProcess->terminate();
- alsaProcess->kill();
+ ui.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()));
+ //QTimer::singleShot(1000, captureProcess, SLOT(kill()));
break;
}
return;
}
if (captureProcess->state() == QProcess::NotRunning) {
m_recAction->setChecked(true);
- QString extension = "mpg";
- if (ui.device_selector->currentIndex() == SCREENGRAB) extension = KdenliveSettings::screengrabextension();
+ QString extension = "mp4";
+ if (ui.device_selector->currentIndex() == SCREENGRAB) extension = "ogv"; //KdenliveSettings::screengrabextension();
QString path = KdenliveSettings::capturefolder() + "/capture0000." + extension;
int i = 1;
while (QFile::exists(path)) {
m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-";
captureProcess->setStandardOutputProcess(displayProcess);
kDebug() << "Capture: Running dvgrab " << m_captureArgs.join(" ");
- captureProcess->start("dvgrab", m_captureArgs);
+ captureProcess->start(KdenliveSettings::dvgrab_path(), m_captureArgs);
break;
case VIDEO4LINUX:
- m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << "-y" << m_captureFile.path() << "-f" << KdenliveSettings::video4vencoding() << "-";
- m_displayArgs << KdenliveSettings::video4playback().simplified().split(' ') << "-x" << QString::number(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-";
+ 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(ui.video_frame->width()) << "-y" << QString::number(ui.video_frame->height()) << "-";
captureProcess->setStandardOutputProcess(displayProcess);
kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
captureProcess->start("ffmpeg", m_captureArgs);
break;
case SCREENGRAB:
- if (KdenliveSettings::fullscreengrab()) {
- const QRect rect = QApplication::desktop()->screenGeometry();
- args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(rect.width()) + "x" + QString::number(rect.height())).replace("%offset", QString());
- if (KdenliveSettings::screengrabenableaudio()) {
- // also capture audio
- if (KdenliveSettings::useosscapture()) m_captureArgs << KdenliveSettings::screengrabosscapture().simplified().split(' ');
- else m_captureArgs << KdenliveSettings::screengrabalsacapture2().simplified().split(' ');
- }
- m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path();
- ui.video_frame->setText(i18n("Capturing..."));
- m_isCapturing = true;
- if (KdenliveSettings::screengrabenableaudio() && !KdenliveSettings::useosscapture()) {
- QStringList alsaArgs = KdenliveSettings::screengrabalsacapture().simplified().split(' ');
- alsaProcess->setStandardOutputProcess(captureProcess);
- kDebug() << "Capture: Running arecord " << alsaArgs.join(" ");
- alsaProcess->start("arecord", alsaArgs);
+ switch (KdenliveSettings::rmd_capture_type()) {
+ case 0:
+ // Full screen capture, nothing special to do
+ break;
+ default:
+ // Region capture
+ 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 {
+ m_captureArgs << "--follow-mouse";
+ if (KdenliveSettings::rmd_hide_frame()) m_captureArgs << "--no-frame";
}
- kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
- captureProcess->start("ffmpeg", m_captureArgs);
- } else {
- ui.video_frame->setText(i18n("Select region..."));
- rgnGrab = new RegionGrabber();
- connect(rgnGrab, SIGNAL(regionGrabbed(const QRect&)), SLOT(slotStartGrab(const QRect &)));
+ break;
}
+ m_isCapturing = true;
+ if (KdenliveSettings::rmd_capture_audio()) {
+ 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();
+ if (KdenliveSettings::rmd_jack_buffer() > 0.0)
+ m_captureArgs << "-ring-buffer-size" << QString::number(KdenliveSettings::rmd_jack_buffer());
+ } else {
+ if (!KdenliveSettings::rmd_alsadevicename().isEmpty())
+ m_captureArgs << "-device" << KdenliveSettings::rmd_alsadevicename();
+ if (KdenliveSettings::rmd_alsa_buffer() > 0)
+ 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();
+ captureProcess->start(KdenliveSettings::rmd_path(), m_captureArgs);
+ kDebug() << "// RecordMyDesktop params: " << m_captureArgs;
break;
default:
break;
}
- //ui.video_frame->setScaledContents(false);
+
if (ui.device_selector->currentIndex() != SCREENGRAB) {
m_isCapturing = true;
kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" ");
} else {
// stop capture
displayProcess->kill();
- captureProcess->kill();
- alsaProcess->kill();
+ //captureProcess->kill();
QTimer::singleShot(1000, this, SLOT(slotRecord()));
}
}
+/*
void RecMonitor::slotStartGrab(const QRect &rect) {
rgnGrab->deleteLater();
QApplication::restoreOverrideCursor();
}
kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
captureProcess->start("ffmpeg", m_captureArgs);
-}
+}*/
void RecMonitor::slotProcessStatus(QProcess::ProcessState status) {
if (status == QProcess::NotRunning) {
if (captureProcess && captureProcess->exitStatus() == QProcess::CrashExit) {
ui.video_frame->setText(i18n("Capture crashed, please check your parameters"));
} else {
- ui.video_frame->setText(i18n("Not connected"));
+ if (ui.device_selector->currentIndex() != SCREENGRAB) ui.video_frame->setText(i18n("Not connected"));
+ else ui.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())));
}
m_isCapturing = false;
} else {