void Controller::seek(int position) { setVolume(m_volume, false); if (m_producer) { // Always pause before seeking (if not already paused). if (!Settings.playerGPU()) if (m_consumer && m_consumer->is_valid() && m_producer->get_speed() != 0) { // Disable real_time behavior and buffering for frame accurate seeking. m_consumer->set("real_time", -1); m_consumer->set("buffer", 0); m_consumer->set("prefill", 0); } m_producer->set_speed(0); m_producer->seek(position); if (m_consumer && m_consumer->is_valid()) { if (m_consumer->is_stopped()) { m_consumer->start(); } else { m_consumer->purge(); refreshConsumer(Settings.playerScrubAudio()); } } } if (m_jackFilter) mlt_events_fire(m_jackFilter->get_properties(), "jack-seek", &position, NULL); }
void Controller::onJackStarted(int position) { if (m_producer) { m_producer->set_speed(1); m_producer->seek(position); refreshConsumer(); } }
void Controller::seek(int position) { if (m_producer) { m_producer->set_speed(0); if (m_consumer && m_consumer->is_valid()) m_consumer->purge(); m_producer->seek(position); } if (m_jackFilter) mlt_events_fire(m_jackFilter->get_properties(), "jack-seek", &position, NULL); refreshConsumer(); }
void Controller::play(double speed) { if (m_producer) m_producer->set_speed(speed); // If we are paused, then we need to "unlock" sdl_still. if (m_consumer) { m_consumer->start(); refreshConsumer(); } if (m_jackFilter) m_jackFilter->fire_event("jack-start"); }
void Controller::onJackStopped(int position) { if (m_producer) { if (m_producer->get_speed() != 0) { Event *event = m_consumer->setup_wait_for("consumer-sdl-paused"); int result = m_producer->set_speed(0); if (result == 0 && m_consumer->is_valid() && !m_consumer->is_stopped()) m_consumer->wait_for(event); delete event; } m_producer->seek(position); } if (m_consumer && m_consumer->get_int("real_time") >= -1) m_consumer->purge(); refreshConsumer(); }
void Controller::play(double speed) { if (m_producer) m_producer->set_speed(speed); if (m_consumer) { // Restore real_time behavior and work-ahead buffering if (!Settings.playerGPU()) if (m_consumer->get_int("real_time") != realTime()) { m_consumer->set("real_time", realTime()); m_consumer->set("buffer", 25); m_consumer->set("prefill", 1); // Changes to real_time require a consumer restart if running. if (!m_consumer->is_stopped()) m_consumer->stop(); } m_consumer->start(); refreshConsumer(Settings.playerScrubAudio()); } if (m_jackFilter) m_jackFilter->fire_event("jack-start"); setVolume(m_volume); }
void Controller::onWindowResize() { refreshConsumer(); }