Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
QWidget(parent),
render(NULL),
- m_monitorManager(manager),
m_name(name),
- m_isActive(false),
+ m_monitorManager(manager),
m_currentClip(NULL),
+ m_ruler(new SmallRuler()),
+ m_overlay(NULL),
+ m_isActive(false),
+ m_scale(1),
m_length(0),
m_position(-1),
- m_dragStarted(false),
- m_overlay(NULL)
+ m_dragStarted(false)
{
m_ui.setupUi(this);
- m_scale = 1;
- m_ruler = new SmallRuler();
QVBoxLayout *layout = new QVBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_ruler);
connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int)));
connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int)));
+ connect(render, SIGNAL(blockMonitors()), this, SIGNAL(blockMonitors()));
//render->createVideoXWindow(m_ui.video_frame->winId(), -1);
showTips->setCheckable(true);
connect(showTips, SIGNAL(toggled(bool)), this, SLOT(slotSwitchMonitorInfo(bool)));
showTips->setChecked(KdenliveSettings::displayMonitorInfo());
+
+ QAction *dropFrames = m_contextMenu->addAction(KIcon(), i18n("Real time (drop frames)"));
+ dropFrames->setCheckable(true);
+ dropFrames->setChecked(true);
+ connect(dropFrames, SIGNAL(toggled(bool)), this, SLOT(slotSwitchDropFrames(bool)));
+
m_configMenu->addAction(showTips);
+ m_configMenu->addAction(dropFrames);
}
int position = m_position - diff;
m_position = qMax(position, 0);
render->seekToFrame(m_position);
- emit renderPosition(m_position)
+ emit renderPosition(m_position);
}
void Monitor::slotForwardOneFrame(int diff)
void Monitor::rendererStopped(int pos)
{
- //int rulerPos = (int)(pos * m_scale);
+ if (m_currentClip != NULL && m_playAction->isChecked()) {
+ // Clip monitor
+ if (pos >= m_length - 1) {
+ slotStart();
+ return;
+ }
+ }
m_ruler->slotNewValue(pos);
m_position = pos;
checkOverlay();
}
if (clip != m_currentClip) {
m_currentClip = clip;
- render->setProducer(clip->producer(), position);
+ if (render->setProducer(clip->producer(), position) == -1) {
+ // MLT CONSUMER is broken
+ emit blockMonitors();
+ }
m_position = position;
} else if (position != -1) render->seek(GenTime(position, render->fps()));
}
m_currentClip->setZone(pos);
}
+void Monitor::slotSwitchDropFrames(bool show)
+{
+ render->setDropFrames(show);
+}
+
void Monitor::slotSwitchMonitorInfo(bool show)
{
KdenliveSettings::setDisplayMonitorInfo(show);
}
}
+
MonitorRefresh::MonitorRefresh(QWidget* parent) : \
QWidget(parent),
m_renderer(NULL)
{
setAttribute(Qt::WA_PaintOnScreen);
- setAttribute(Qt::WA_OpaquePaintEvent); //setAttribute(Qt::WA_NoSystemBackground);
+ setAttribute(Qt::WA_OpaquePaintEvent);
+ //setAttribute(Qt::WA_NoSystemBackground);
}
void MonitorRefresh::setRenderer(Render* render)