[PATCH] Fix jerky and inaccurate clip monitor ruler and playback

farid abdelnour snd.noise at gmail.com
Mon Jan 30 12:46:55 UTC 2017


hello, has anyone looked into this?

2017-01-19 21:41 GMT-02:00 Mikko Rapeli <mikko.rapeli at iki.fi>:

> Kdenlive used to have frame accurate preview on my slow i686 Thinkpad
> laptop, not in real-time but close enough in HD resolutions.
> Changes to buffering, asynchronous processing and frame dropping
> screwed my time line accurace in clip and timeline previews.
>
> For example, zone playbacks were stopping 25 frames before end of zone
> and quickly seeking to the last frame. Sometimes timeline ruler was
> left off. Then stopping playback included always a 5 frame jump to the
> future. These map to the buffer size and drop_max properties of
> https://www.mltframework.org/doxygen/structmlt__consumer__s.html
>
> With these tunings set, I get a pretty and accurate timeline again.
> Especially when using proxy clips which my PC can play in real time.
>
> Well, almost. Stopping clip playback with space or mouse clicks jumps the
> time line cursor a few frames to the future. Luckily setting
> zone in and out points works fine. Maybe there is some similar fix required
> somewhere else?
>
> I thikn on faster modern machines users don't see problems like these,
> except under heavy load, but to me these setting seem good defaults.
> Accuracy is more important to me than real-time playback when working
> with a video timeline.
>
> Signed-off-by: Mikko Rapeli <mikko.rapeli at iki.fi>
> ---
>  src/monitor/glwidget.cpp |  4 +++-
>  src/renderer.cpp         | 18 ++++++------------
>  2 files changed, 9 insertions(+), 13 deletions(-)
>
> diff --git a/src/monitor/glwidget.cpp b/src/monitor/glwidget.cpp
> index b6a5117..becd94b 100644
> --- a/src/monitor/glwidget.cpp
> +++ b/src/monitor/glwidget.cpp
> @@ -993,7 +993,7 @@ int GLWidget::reconfigure(Mlt::Profile *profile)
>              if (!KdenliveSettings::monitor_dropframes()) {
>                  dropFrames = -dropFrames;
>              }
> -            m_consumer->set("real_time", dropFrames);
> +            m_consumer->set("real_time", 0);
>              m_threadCreateEvent = m_consumer->listen("consumer-thread-create",
> this, (mlt_listener) onThreadCreate);
>              m_threadJoinEvent = m_consumer->listen("consumer-thread-join",
> this, (mlt_listener) onThreadJoin);
>          }
> @@ -1049,6 +1049,8 @@ int GLWidget::reconfigure(Mlt::Profile *profile)
>          m_consumer->set("deinterlace_method", KdenliveSettings::
> mltdeinterlacer().toUtf8().constData());
>          m_consumer->set("buffer", 25);
>          m_consumer->set("prefill", 1);
> +        m_consumer->set("real_time", 0);
> +        m_consumer->set("drop_max", 0);
>          m_consumer->set("scrub_audio", 1);
>          if (KdenliveSettings::monitor_gamma() == 0) {
>              m_consumer->set("color_trc", "iec61966_2_1");
> diff --git a/src/renderer.cpp b/src/renderer.cpp
> index ceb40b8..4306074 100644
> --- a/src/renderer.cpp
> +++ b/src/renderer.cpp
> @@ -736,13 +736,10 @@ void Render::switchPlay(bool play, double speed)
>              m_mltProducer->seek(0);
>          }
>          if (m_mltConsumer->get_int("real_time") !=
> m_qmlView->realTime()) {
> -            m_mltConsumer->set("real_time", m_qmlView->realTime());
> +            m_mltConsumer->set("real_time", 0);
>              m_mltConsumer->set("buffer", 25);
>              m_mltConsumer->set("prefill", 1);
> -            // Changes to real_time require a consumer restart if running.
> -            if (!m_mltConsumer->is_stopped()) {
> -                m_mltConsumer->stop();
> -            }
> +            m_mltConsumer->set("drop_max", 0);
>          }
>          if (currentSpeed == 0) {
>              m_mltConsumer->start();
> @@ -757,9 +754,9 @@ void Render::switchPlay(bool play, double speed)
>          m_mltConsumer->purge();
>          m_mltProducer->set_speed(0.0);
>          m_mltConsumer->stop();
> -        m_mltConsumer->set("buffer", 0);
> +        m_mltConsumer->set("buffer", 25);
>          m_mltConsumer->set("prefill", 0);
> -        m_mltConsumer->set("real_time", -1);
> +        m_mltConsumer->set("real_time", 0);
>          m_mltProducer->seek(m_mltConsumer->position() + 1);
>      }
>  }
> @@ -778,13 +775,10 @@ void Render::play(double speed)
>          resetZoneMode();
>      }
>      if (speed != 0 && m_mltConsumer->get_int("real_time") !=
> m_qmlView->realTime()) {
> -        m_mltConsumer->set("real_time", m_qmlView->realTime());
> +        m_mltConsumer->set("real_time", 0);
>          m_mltConsumer->set("buffer", 25);
>          m_mltConsumer->set("prefill", 1);
> -        // Changes to real_time require a consumer restart if running.
> -        if (!m_mltConsumer->is_stopped()) {
> -            m_mltConsumer->stop();
> -        }
> +        m_mltConsumer->set("drop_max", 0);
>      }
>      if (current_speed == 0) {
>          m_mltConsumer->start();
> --
> 2.10.2
>
>


-- 
1111.1010.r.i.1101|n.o.i.s.1110|i.m.1010.g.1110|مقاومة
fsf member #5439
usuario GNU/Linux #471966
|_|0|_|
|_|_|0|
|0|0|0|
<a href="http://www.gunga.com.br">gunga</a>
<a href="http://www.tempoecoarte.com.br">tempoecoarte</a>
<a href="http://www.atelier-labs.org">atelier-labs</a>
<a href="http://www.mocambos.net">rede mocambos</a>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdenlive/attachments/20170130/ff71630b/attachment.html>


More information about the kdenlive mailing list