void Render::seek(GenTime time)
{
+ if (!m_mltProducer)
+ return;
int pos = time.frames(m_fps);
seek(pos);
}
void Render::seek(int time)
{
- if (!m_mltProducer)
- return;
+ resetZoneMode();
if (requestedSeekPosition == SEEK_INACTIVE) {
requestedSeekPosition = time;
m_mltProducer->seek(time);
m_paused = true;
m_mltProducer->set_speed(0.0);
m_mltConsumer->set("refresh", 0);
+ if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
m_mltProducer->seek(m_mltConsumer->position());
}
m_paused = true;
m_mltProducer->set_speed(0.0);
m_mltConsumer->set("refresh", 0);
+ if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
m_mltProducer->seek(m_mltConsumer->position());
- if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
- if (m_isZoneMode) resetZoneMode();
-
- //emitConsumerStopped();
- /*m_mltConsumer->set("refresh", 0);
- m_mltConsumer->stop();
- m_mltConsumer->purge();
- m_mltProducer->set_speed(0.0);
- //m_framePosition = m_mltProducer->position();
- m_mltProducer->seek(m_framePosition);
- emit rendererPosition(m_framePosition);*/
}
}
if (!m_mltProducer) return;
double current_speed = m_mltProducer->get_speed();
if (current_speed == speed) return;
+ if (m_isZoneMode) resetZoneMode();
// if (speed == 0.0) m_mltProducer->set("out", m_mltProducer->get_length() - 1);
m_mltProducer->set_speed(speed);
if (m_mltConsumer->is_stopped() && speed != 0) {
requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
+ m_paused = false;
m_mltProducer->seek((int)(startTime.frames(m_fps)));
m_mltProducer->set_speed(1.0);
m_mltConsumer->set("refresh", 1);
{
requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
- return;
- if (!m_isZoneMode) m_originalOut = m_mltProducer->get_playtime() - 1;
+ return;
m_mltProducer->set("out", (int)(stopTime.frames(m_fps)));
m_mltProducer->seek((int)(startTime.frames(m_fps)));
+ m_paused = false;
m_mltProducer->set_speed(1.0);
m_mltConsumer->set("refresh", 1);
if (m_mltConsumer->is_stopped()) m_mltConsumer->start();
void Render::resetZoneMode()
{
- if (!m_mltProducer || (!m_isZoneMode && !m_isLoopMode)) return;
- m_mltProducer->set("out", m_originalOut);
+ if (!m_isZoneMode && !m_isLoopMode) return;
+ m_mltProducer->set("out", m_mltProducer->get_length());
//m_mltProducer->set("eof", "pause");
m_isZoneMode = false;
m_isLoopMode = false;
void Render::seekToFrame(int pos)
{
+ if (!m_mltProducer)
+ return;
resetZoneMode();
seek(pos);
}
void Render::seekToFrameDiff(int diff)
{
+ if (!m_mltProducer)
+ return;
resetZoneMode();
if (requestedSeekPosition == SEEK_INACTIVE)
seek(m_mltProducer->position() + diff);
int trackNb = tractor->count();
int duration = 0;
int trackDuration;
+ if (m_isZoneMode) resetZoneMode();
if (trackNb == 1) {
Mlt::Producer trackProducer(tractor->track(0));
duration = trackProducer.get_playtime() - 1;