BMediaEventLooper: Make lateness calculus in real time
* After having this patch applied locally for some time, I'm going to be sure that we have to deal only with real_time values. * Since RealTime() is just a system_time() wrapper, the code will be slightly improved in performances too. * Additionally it performs very well when the thread is externally stopped (such as debugging it), so that the audio recover almost immediately.
This commit is contained in:
@@ -241,12 +241,11 @@ BMediaEventLooper::ControlLoop()
|
|||||||
err = fRealTimeQueue.RemoveFirstEvent(&event);
|
err = fRealTimeQueue.RemoveFirstEvent(&event);
|
||||||
|
|
||||||
if (err == B_OK) {
|
if (err == B_OK) {
|
||||||
// We are going to do this calculus in performance time
|
// We are going to do this calculus in real time
|
||||||
// because otherwise we could get erroneous values.
|
// because otherwise we could get erroneous values.
|
||||||
// This calculus allow us to detect both early and late
|
// This calculus allow us to detect both early and late
|
||||||
// buffers, this is the meaning of the lateness concept.
|
// buffers, this is the meaning of the lateness concept.
|
||||||
bigtime_t lateness = event.event_time - fEventLatency
|
bigtime_t lateness = waitUntil - TimeSource()->RealTime();
|
||||||
- fSchedulingLatency - TimeSource()->Now();
|
|
||||||
DispatchEvent(&event, -lateness, hasRealtime);
|
DispatchEvent(&event, -lateness, hasRealtime);
|
||||||
}
|
}
|
||||||
} else if (err != B_OK)
|
} else if (err != B_OK)
|
||||||
|
|||||||
Reference in New Issue
Block a user