From 2d4ce06468d0cd9a3f048ff918581d22aff10e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 12 Apr 2010 21:51:40 +0000 Subject: [PATCH] * Changed the latency computation a bit to make it somewhat clearer. * Only report lateness if it is beyond the accepted jitter. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36205 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp b/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp index dce2e198a0..dd3b81f012 100644 --- a/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp +++ b/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp @@ -90,6 +90,9 @@ multi_audio_format_specialize(media_multi_audio_format *format, const static bigtime_t kMaxLatency = 150000; // 150 ms is the maximum latency we publish +const bigtime_t kMinMixingTime = 3500; +const bigtime_t kMaxJitter = 1500; + AudioMixer::AudioMixer(BMediaAddOn *addOn, bool isSystemMixer) : @@ -311,7 +314,7 @@ AudioMixer::BufferReceived(BBuffer *buffer) void AudioMixer::HandleInputBuffer(BBuffer* buffer, bigtime_t lateness) { - if (lateness > 0) { + if (lateness > kMaxJitter) { debug_printf("Received buffer %Ld usec late\n", lateness); if (RunMode() == B_DROP_DATA || RunMode() == B_DECREASE_PRECISION || RunMode() == B_INCREASE_LATENCY) { @@ -907,8 +910,9 @@ AudioMixer::Connect(status_t error, const media_source &source, TRACE("AudioMixer: buffer duration is %Ld usecs\n", BufferDuration()); // Our internal latency is at least the length of a full output buffer + // plus mixing time, plus jitter fInternalLatency = BufferDuration() - + max(4500LL, bigtime_t(0.5 * BufferDuration())); + + max(kMinMixingTime, bigtime_t(0.5 * BufferDuration())) + kMaxJitter; TRACE("AudioMixer: Internal latency is %Ld usecs\n", fInternalLatency); SetEventLatency(fDownstreamLatency + fInternalLatency);