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)));
QStringList env = QProcess::systemEnvironment();
env << "SDL_WINDOWID=" + QString::number(ui.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);
+
displayProcess->setEnvironment(env);
if (KdenliveSettings::video4capture().isEmpty()) {
kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId();
}
+RecMonitor::~RecMonitor() {
+ delete captureProcess;
+ delete displayProcess;
+ delete alsaProcess;
+}
+
QString RecMonitor::name() const {
return m_name;
}
m_recAction->setChecked(false);
break;
case VIDEO4LINUX:
+ captureProcess->terminate();
slotStopCapture();
//m_isCapturing = false;
QTimer::singleShot(1000, this, SLOT(slotStartCapture()));
break;
case SCREENGRAB:
captureProcess->write("q\n", 3);
+ captureProcess->terminate();
+ alsaProcess->terminate();
+ alsaProcess->kill();
// in case ffmpeg doesn't exit with the 'q' command, kill it one second later
QTimer::singleShot(1000, captureProcess, SLOT(kill()));
break;
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());
- kDebug() << "// capture params: " << args;
if (KdenliveSettings::screengrabenableaudio()) {
// also capture audio
- m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' ');
+ 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);
+ const QString alsaBinary = alsaArgs.takeFirst();
+ alsaProcess->start(alsaBinary, alsaArgs);
+ }
captureProcess->start("ffmpeg", m_captureArgs);
} else {
ui.video_frame->setText(i18n("Select region..."));
// stop capture
displayProcess->kill();
captureProcess->kill();
+ alsaProcess->kill();
QTimer::singleShot(1000, this, SLOT(slotRecord()));
}
}
if (width % 2 != 0) width--;
if (height % 2 != 0) height--;
QString args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(width) + "x" + QString::number(height)).replace("%offset", "+" + QString::number(rect.x()) + "," + QString::number(rect.y()));
- kDebug() << "// capture params: " << args;
if (KdenliveSettings::screengrabenableaudio()) {
// also capture audio
- m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' ');
+ 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();
m_isCapturing = true;
ui.video_frame->setText(i18n("Capturing..."));
+ if (KdenliveSettings::screengrabenableaudio() && !KdenliveSettings::useosscapture()) {
+ QStringList alsaArgs = KdenliveSettings::screengrabalsacapture().simplified().split(' ');
+ alsaProcess->setStandardOutputProcess(captureProcess);
+ alsaProcess->start(alsaArgs.takeFirst(), alsaArgs);
+ }
captureProcess->start("ffmpeg", m_captureArgs);
}
QDir dir(KdenliveSettings::capturefolder());
QStringList filters;
filters << "capture*" + extension;
- QStringList result = dir.entryList(filters, QDir::Files, QDir::Time);
+ const QStringList result = dir.entryList(filters, QDir::Files, QDir::Time);
KUrl::List capturedFiles;
foreach(QString name, result) {
KUrl url = KUrl(dir.filePath(name));