diff --git a/src/kits/media/MediaEventLooper.cpp b/src/kits/media/MediaEventLooper.cpp index bf3c8d0012..c5928454d9 100644 --- a/src/kits/media/MediaEventLooper.cpp +++ b/src/kits/media/MediaEventLooper.cpp @@ -215,7 +215,6 @@ BMediaEventLooper::ControlLoop() status_t err; bigtime_t waitUntil = B_INFINITE_TIMEOUT; - bigtime_t tempLateness = 0; bool hasRealtime = false; bool hasEvent = false; @@ -237,11 +236,11 @@ BMediaEventLooper::ControlLoop() err = fRealTimeQueue.RemoveFirstEvent(&event); if (err == B_OK) { - tempLateness -= TimeSource()->RealTime(); - if (tempLateness < 0) - tempLateness = 0; + bigtime_t lateness = waitUntil - TimeSource()->RealTime(); + if (lateness < 0) + lateness = 0; - DispatchEvent(&event, tempLateness, hasRealtime); + DispatchEvent(&event, lateness, hasRealtime); } } else if (err != B_OK) return; @@ -255,29 +254,23 @@ BMediaEventLooper::ControlLoop() if (hasEvent) { waitUntil = TimeSource()->RealTimeFor( - fEventQueue.FirstEvent()->event_time, + fEventQueue.FirstEventTime(), fEventLatency + fSchedulingLatency); } else if (!hasRealtime) { waitUntil = B_INFINITE_TIMEOUT; continue; } - if (hasEvent && hasRealtime) { - if (fRealTimeQueue.FirstEventTime() - - fSchedulingLatency <= waitUntil) { + if (hasRealtime) { + bigtime_t realtimeWait = fRealTimeQueue.FirstEventTime() + - fSchedulingLatency; + + if (!hasEvent || realtimeWait <= waitUntil) { + waitUntil = realtimeWait; hasEvent = false; } else hasRealtime = false; } - - if (hasRealtime) { - waitUntil = fRealTimeQueue.FirstEventTime() - - fSchedulingLatency; - } - - tempLateness = waitUntil; - if (waitUntil < TimeSource()->RealTime()) - waitUntil = 0; } }