[client] audio: ignore jitter after underruns

Do not learn late delivery from packets that already caused an
underrun and media-clock rebase. Preserve learned jitter only across
continuous playback.
This commit is contained in:
Geoffrey McRae
2026-08-22 17:04:25 +10:00
parent 7476e56ded
commit 5b106015de
3 changed files with 36 additions and 3 deletions

View File

@@ -819,6 +819,7 @@ if(ENABLE_AUDIO)
convert
provider
playback-retry
jitter
consent
quiesce
)

View File

@@ -624,6 +624,36 @@ static void testPlaybackRetry(void)
stopAudio();
}
static void testPlaybackJitter(void)
{
PlaybackSourceData source = { 0 };
playbackPrepareMediaClock(&source, NULL);
bool discontinuity = false;
playbackMapMediaTime(&source, NULL, 480, 48000, 0,
&discontinuity);
source.inputPosition = 480;
source.lastArrivalTime = 0;
discontinuity = true;
playbackMapMediaTime(&source, NULL, 480, 48000,
INT64_C(110000000), &discontinuity);
CHECK(discontinuity);
CHECK(source.arrivalJitterSec == 0.0);
memset(&source, 0, sizeof(source));
playbackPrepareMediaClock(&source, NULL);
discontinuity = false;
playbackMapMediaTime(&source, NULL, 480, 48000, 0,
&discontinuity);
source.inputPosition = 480;
source.lastArrivalTime = 0;
playbackMapMediaTime(&source, NULL, 480, 48000,
INT64_C(20000000), &discontinuity);
CHECK(source.arrivalJitterSec > 0.009);
CHECK(source.arrivalJitterSec < 0.011);
}
static void testConsent(void)
{
reset();
@@ -750,6 +780,7 @@ static const struct Test tests[] =
{ "convert" , testConvert },
{ "provider" , testProvider },
{ "playback-retry", testPlaybackRetry },
{ "jitter" , testPlaybackJitter },
{ "consent" , testConsent },
{ "quiesce" , testQuiesce },
};