m_isActive(false),
m_isCapturing(false),
m_didCapture(false),
- m_isPlaying(false)
+ m_isPlaying(false),
+ m_bmCapture(NULL),
+ m_blackmagicCapturing(false)
{
setupUi(this);
device_selector->setCurrentIndex(KdenliveSettings::defaultcapture());
connect(device_selector, SIGNAL(currentIndexChanged(int)), this, SLOT(slotVideoDeviceChanged(int)));
-
-
- QToolBar *toolbar = new QToolBar(name, this);
+ 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);
void RecMonitor::slotVideoDeviceChanged(int ix)
{
+ QString capturefile;
+ QString capturename;
+ video_capture->setHidden(true);
+ video_frame->setHidden(false);
+ m_fwdAction->setVisible(ix != BLACKMAGIC);
+ m_discAction->setVisible(ix != BLACKMAGIC);
+ m_rewAction->setVisible(ix != BLACKMAGIC);
+ m_logger.setVisible(ix == BLACKMAGIC);
switch (ix) {
case SCREENGRAB:
m_discAction->setEnabled(false);
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 = m_capturePath;
+ 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;
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_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_isPlaying = false;
QString capturename = KdenliveSettings::dvgrabfilename();
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:
case 3:
// HDV CAPTURE
m_captureArgs << "--format" << "hdv";
- m_displayArgs << "-f" << KdenliveSettings::video4container();
+ m_displayArgs << "-f" << "mpegts";
break;
}
if (KdenliveSettings::firewireautosplit()) m_captureArgs << "--autosplit";
kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
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 || device_selector->currentIndex() == VIDEO4LINUX) {
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();
}