mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 10:19:59 +01:00
Improved time management for software framerate limiter.
This commit is contained in:
@@ -188,7 +188,7 @@ void Mixer::update()
|
||||
update_time_ = gst_util_get_timestamp ();
|
||||
guint64 current_time = gst_util_get_timestamp ();
|
||||
// dt is in milisecond, with fractional precision (from micro seconds)
|
||||
dt_ = static_cast<float>( GST_TIME_AS_USECONDS(current_time - update_time_) * 0.001f);
|
||||
dt_ = static_cast<float>( GST_TIME_AS_USECONDS(current_time - update_time_) ) * 0.001f;
|
||||
update_time_ = current_time;
|
||||
|
||||
// update session and associated sources
|
||||
|
||||
@@ -229,6 +229,8 @@ void Rendering::pushBackDrawCallback(RenderingCallback function)
|
||||
|
||||
void Rendering::draw()
|
||||
{
|
||||
// guint64 _time = gst_util_get_timestamp ();
|
||||
|
||||
// operate on main window context
|
||||
main_.makeCurrent();
|
||||
|
||||
@@ -275,10 +277,13 @@ void Rendering::draw()
|
||||
|
||||
// software framerate limiter 60FPS if not v-sync
|
||||
if ( Settings::application.render.vsync < 1 ) {
|
||||
int dt = 18000 - int( 1000.f * Mixer::manager().dt() );
|
||||
if (dt > 100)
|
||||
g_usleep( dt );
|
||||
static GTimer *timer = g_timer_new ();
|
||||
double elapsed = g_timer_elapsed (timer, NULL) * 1000000.0;
|
||||
if (elapsed < 16000)
|
||||
g_usleep( 16000 - (gulong)elapsed );
|
||||
g_timer_start(timer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user