if (m_captureDevice) {
// MLT capture still running, abort
m_captureDevice->stop();
- //delete m_captureDevice;
- //m_captureDevice = NULL;
+ delete m_captureDevice;
+ m_captureDevice = NULL;
}
switch (ix) {
case SCREENGRAB:
checkDeviceAvailability();
break;
case BLACKMAGIC:
- createBlackmagicDevice();
- m_recAction->setEnabled(false);
+ m_recAction->setEnabled(true);
m_stopAction->setEnabled(false);
m_playAction->setEnabled(true);
capturefile = m_capturePath;
if (!capturefile.endsWith("/")) capturefile.append("/");
- capturename = KdenliveSettings::hdmifilename();
+ capturename = KdenliveSettings::decklink_filename();
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)));
}
}
-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)
+void RecMonitor::slotSetInfoMessage(const QString &message)
{
m_logger.insertItem(0, message);
}
QTimer::singleShot(1000, m_captureProcess, SLOT(kill()));
break;
case BLACKMAGIC:
- m_bmCapture->stopPreview();
+ if (m_captureDevice) {
+ m_captureDevice->stop();
+ }
+ //m_bmCapture->stopPreview();
m_playAction->setEnabled(true);
m_stopAction->setEnabled(false);
- m_recAction->setEnabled(false);
+ m_recAction->setEnabled(true);
break;
default:
break;
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);
+ //video_capture->setVisible(device_selector->currentIndex() == BLACKMAGIC);
+ //video_frame->setHidden(device_selector->currentIndex() == BLACKMAGIC);
switch (device_selector->currentIndex()) {
case FIREWIRE:
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();
}
m_captureProcess->start("ffmpeg", m_captureArgs);*/
break;
case BLACKMAGIC:
- m_bmCapture->startPreview(KdenliveSettings::hdmi_capturedevice(), KdenliveSettings::hdmi_capturemode());
+ 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();
+ }
+ profile = ProfilesDialog::getVideoProfile(path);
+ producer = QString("decklink:%1").arg(KdenliveSettings::decklink_capturedevice());
+ if (!m_captureDevice->slotStartPreview(producer)) {
+ // v4l capture failed to start
+ video_frame->setText(i18n("Failed to start Decklink,\ncheck your parameters..."));
+ m_videoBox->setHidden(true);
+
+ } else {
+ m_videoBox->setHidden(false);
+ m_playAction->setEnabled(false);
+ m_stopAction->setEnabled(true);
+ }
+ //m_bmCapture->startPreview(KdenliveSettings::decklink_capturedevice(), KdenliveSettings::hdmi_capturemode());
m_playAction->setEnabled(false);
m_stopAction->setEnabled(true);
m_recAction->setEnabled(true);
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();
}
if (m_isCapturing) {
+ // User stopped capture
switch (device_selector->currentIndex()) {
case FIREWIRE:
m_captureProcess->write("\e", 2);
m_recAction->setChecked(false);
break;
case VIDEO4LINUX:
+ case BLACKMAGIC:
slotStopCapture();
+ slotSetInfoMessage(i18n("Capture stopped"));
m_isCapturing = false;
m_recAction->setChecked(false);
if (autoaddbox->isChecked() && QFile::exists(m_captureFile.path())) emit addProjectClip(m_captureFile);
}
if (m_captureProcess->state() == QProcess::NotRunning) {
m_recAction->setChecked(true);
- QString extension = "mp4";
+ QString extension = "mpg";
if (device_selector->currentIndex() == SCREENGRAB) extension = "ogv"; //KdenliveSettings::screengrabextension();
else if (device_selector->currentIndex() == VIDEO4LINUX) extension = KdenliveSettings::v4l_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)) {
playlist.append("</tractor></mlt>");
- if (m_captureDevice->slotStartCapture(KdenliveSettings::v4l_parameters(), m_captureFile.path(), playlist)) {
+ if (m_captureDevice->slotStartCapture(KdenliveSettings::v4l_parameters(), m_captureFile.path(), playlist, enable_preview->isChecked())) {
m_videoBox->setHidden(false);
m_isCapturing = true;
}
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();
+ }
+
+ playlist = QString("<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\">%1</property><property name=\"mlt_service\">decklink</property></producer>").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)) {
+ m_videoBox->setHidden(false);
+ m_isCapturing = true;
+ slotSetInfoMessage(i18n("Capturing to %1", m_captureFile.fileName()));
+ }
+ else {
+ video_frame->setText(i18n("Failed to start Decklink,\ncheck your parameters..."));
+ slotSetInfoMessage(i18n("Failed to start capture"));
+ m_videoBox->setHidden(true);
+ m_isCapturing = false;
+ m_recAction->setChecked(false);
+ }
+ break;
+
case SCREENGRAB:
switch (KdenliveSettings::rmd_capture_type()) {
case 0:
if (m_captureDevice) m_captureDevice->sendFrameForAnalysis = analyse;
}
+void RecMonitor::slotDroppedFrames(int dropped)
+{
+ slotSetInfoMessage(i18n("%1 dropped frames", dropped));
+}
#include "recmonitor.moc"