<div dir="ltr">hello, has anyone looked into this? <br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-01-19 21:41 GMT-02:00 Mikko Rapeli <span dir="ltr"><<a href="mailto:mikko.rapeli@iki.fi" target="_blank">mikko.rapeli@iki.fi</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Kdenlive used to have frame accurate preview on my slow i686 Thinkpad<br>
laptop, not in real-time but close enough in HD resolutions.<br>
Changes to buffering, asynchronous processing and frame dropping<br>
screwed my time line accurace in clip and timeline previews.<br>
<br>
For example, zone playbacks were stopping 25 frames before end of zone<br>
and quickly seeking to the last frame. Sometimes timeline ruler was<br>
left off. Then stopping playback included always a 5 frame jump to the<br>
future. These map to the buffer size and drop_max properties of<br>
<a href="https://www.mltframework.org/doxygen/structmlt__consumer__s.html" rel="noreferrer" target="_blank">https://www.mltframework.org/<wbr>doxygen/structmlt__consumer__<wbr>s.html</a><br>
<br>
With these tunings set, I get a pretty and accurate timeline again.<br>
Especially when using proxy clips which my PC can play in real time.<br>
<br>
Well, almost. Stopping clip playback with space or mouse clicks jumps the<br>
time line cursor a few frames to the future. Luckily setting<br>
zone in and out points works fine. Maybe there is some similar fix required<br>
somewhere else?<br>
<br>
I thikn on faster modern machines users don't see problems like these,<br>
except under heavy load, but to me these setting seem good defaults.<br>
Accuracy is more important to me than real-time playback when working<br>
with a video timeline.<br>
<br>
Signed-off-by: Mikko Rapeli <<a href="mailto:mikko.rapeli@iki.fi">mikko.rapeli@iki.fi</a>><br>
---<br>
src/monitor/glwidget.cpp | 4 +++-<br>
src/renderer.cpp | 18 ++++++------------<br>
2 files changed, 9 insertions(+), 13 deletions(-)<br>
<br>
diff --git a/src/monitor/glwidget.cpp b/src/monitor/glwidget.cpp<br>
index b6a5117..becd94b 100644<br>
--- a/src/monitor/glwidget.cpp<br>
+++ b/src/monitor/glwidget.cpp<br>
@@ -993,7 +993,7 @@ int GLWidget::reconfigure(Mlt::<wbr>Profile *profile)<br>
if (!KdenliveSettings::monitor_<wbr>dropframes()) {<br>
dropFrames = -dropFrames;<br>
}<br>
- m_consumer->set("real_time", dropFrames);<br>
+ m_consumer->set("real_time", 0);<br>
m_threadCreateEvent = m_consumer->listen("consumer-<wbr>thread-create", this, (mlt_listener) onThreadCreate);<br>
m_threadJoinEvent = m_consumer->listen("consumer-<wbr>thread-join", this, (mlt_listener) onThreadJoin);<br>
}<br>
@@ -1049,6 +1049,8 @@ int GLWidget::reconfigure(Mlt::<wbr>Profile *profile)<br>
m_consumer->set("deinterlace_<wbr>method", KdenliveSettings::<wbr>mltdeinterlacer().toUtf8().<wbr>constData());<br>
m_consumer->set("buffer", 25);<br>
m_consumer->set("prefill", 1);<br>
+ m_consumer->set("real_time", 0);<br>
+ m_consumer->set("drop_max", 0);<br>
m_consumer->set("scrub_audio", 1);<br>
if (KdenliveSettings::monitor_<wbr>gamma() == 0) {<br>
m_consumer->set("color_trc", "iec61966_2_1");<br>
diff --git a/src/renderer.cpp b/src/renderer.cpp<br>
index ceb40b8..4306074 100644<br>
--- a/src/renderer.cpp<br>
+++ b/src/renderer.cpp<br>
@@ -736,13 +736,10 @@ void Render::switchPlay(bool play, double speed)<br>
m_mltProducer->seek(0);<br>
}<br>
if (m_mltConsumer->get_int("real_<wbr>time") != m_qmlView->realTime()) {<br>
- m_mltConsumer->set("real_time"<wbr>, m_qmlView->realTime());<br>
+ m_mltConsumer->set("real_time"<wbr>, 0);<br>
m_mltConsumer->set("buffer", 25);<br>
m_mltConsumer->set("prefill", 1);<br>
- // Changes to real_time require a consumer restart if running.<br>
- if (!m_mltConsumer->is_stopped()) {<br>
- m_mltConsumer->stop();<br>
- }<br>
+ m_mltConsumer->set("drop_max", 0);<br>
}<br>
if (currentSpeed == 0) {<br>
m_mltConsumer->start();<br>
@@ -757,9 +754,9 @@ void Render::switchPlay(bool play, double speed)<br>
m_mltConsumer->purge();<br>
m_mltProducer->set_speed(0.0);<br>
m_mltConsumer->stop();<br>
- m_mltConsumer->set("buffer", 0);<br>
+ m_mltConsumer->set("buffer", 25);<br>
m_mltConsumer->set("prefill", 0);<br>
- m_mltConsumer->set("real_time"<wbr>, -1);<br>
+ m_mltConsumer->set("real_time"<wbr>, 0);<br>
m_mltProducer->seek(m_<wbr>mltConsumer->position() + 1);<br>
}<br>
}<br>
@@ -778,13 +775,10 @@ void Render::play(double speed)<br>
resetZoneMode();<br>
}<br>
if (speed != 0 && m_mltConsumer->get_int("real_<wbr>time") != m_qmlView->realTime()) {<br>
- m_mltConsumer->set("real_time"<wbr>, m_qmlView->realTime());<br>
+ m_mltConsumer->set("real_time"<wbr>, 0);<br>
m_mltConsumer->set("buffer", 25);<br>
m_mltConsumer->set("prefill", 1);<br>
- // Changes to real_time require a consumer restart if running.<br>
- if (!m_mltConsumer->is_stopped()) {<br>
- m_mltConsumer->stop();<br>
- }<br>
+ m_mltConsumer->set("drop_max", 0);<br>
}<br>
if (current_speed == 0) {<br>
m_mltConsumer->start();<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.10.2<br>
<br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">1111.1010.r.i.1101|n.o.i.s.1110|i.m.1010.g.1110|مقاومة<br>fsf member #5439<br>usuario GNU/Linux #471966<br>|_|0|_|<br>|_|_|0|<br>|0|0|0|<br><a href="<a href="http://www.gunga.com.br" target="_blank">http://www.gunga.com.br</a>">gunga</a><br><a href="<a href="http://www.tempoecoarte.com.br" target="_blank">http://www.tempoecoarte.com.br</a>">tempoecoarte</a><div><a href="<a href="http://www.atelier-labs.org" target="_blank">http://www.atelier-labs.org</a>">atelier-labs</a></div><div><a href="<a href="http://www.mocambos.net" target="_blank">http://www.mocambos.net</a>">rede mocambos</a><br></div></div>
</div>