void Render::stop()
{
+ requestedSeekPosition = SEEK_INACTIVE;
m_refreshTimer.stop();
QMutexLocker locker(&m_mutex);
if (m_mltProducer == NULL) return;
void Render::stop(const GenTime & startTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
m_refreshTimer.stop();
QMutexLocker locker(&m_mutex);
if (m_mltProducer) {
void Render::pause()
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
if (m_mltProducer->get_speed() == 0.0) return;
void Render::play(double speed)
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer)
return;
// if (speed == 0.0) m_mltProducer->set("out", m_mltProducer->get_length() - 1);
void Render::play(const GenTime & startTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
m_mltProducer->seek((int)(startTime.frames(m_fps)));
void Render::loopZone(const GenTime & startTime, const GenTime & stopTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
//m_mltProducer->set("eof", "loop");
void Render::playZone(const GenTime & startTime, const GenTime & stopTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
if (!m_isZoneMode) m_originalOut = m_mltProducer->get_playtime() - 1;
void Render::seekToFrameDiff(int diff)
{
resetZoneMode();
- seek(m_mltProducer->position() + diff);
+ if (requestedSeekPosition == SEEK_INACTIVE)
+ seek(m_mltProducer->position() + diff);
+ else seek(requestedSeekPosition + diff);
}
void Render::doRefresh()
}
-void Render::mltCutClip(int track, GenTime position)
+bool Render::mltCutClip(int track, GenTime position)
{
Mlt::Service service(m_mltProducer->parent().get_service());
if (service.type() != tractor_type) {
kWarning() << "// TRACTOR PROBLEM";
- return;
+ return false;
}
Mlt::Tractor tractor(service);
int clipIndex = trackPlaylist.get_clip_index_at(cutPos);
if (trackPlaylist.is_blank(clipIndex)) {
kDebug() << "// WARNING, TRYING TO CUT A BLANK";
- return;
+ return false;
}
service.lock();
int clipStart = trackPlaylist.clip_start(clipIndex);
// duplicate effects
Mlt::Producer *original = trackPlaylist.get_clip_at(clipStart);
Mlt::Producer *clip = trackPlaylist.get_clip_at(cutPos);
-
+
if (original == NULL || clip == NULL) {
kDebug() << "// ERROR GRABBING CLIP AFTER SPLIT";
+ return false;
}
+
Mlt::Service clipService(original->get_service());
Mlt::Service dupService(clip->get_service());
+
+
delete original;
delete clip;
int ct = 0;
ct++;
filter = clipService.filter(ct);
}
-
+ return true;
/* // Display playlist info
kDebug()<<"//////////// AFTER";
for (int i = 0; i < trackPlaylist.count(); i++) {
return true;
}
+
+
#include "renderer.moc"