"git am" fails to apply the patch on top of the master branch (as it failed to apply the previous versions too, but I forgot to mention that earlier). On Fri, 2017-09-15 at 21:34 +0200, Colin Leroy wrote: > From ffda854fab9641a66eacdf7bdd812f41f2af65ce Mon Sep 17 00:00:00 2001 > From: Colin Leroy <colin at colino.net> > Date: Sat, 22 Jul 2017 14:50:40 +0200 > Subject: [PATCH] RAOP: Announce real latency > > Use predefined values depending on the server, and make it configurable. > AirPlay is supposed to have 2s of latency. With my hardware, this is > more 2.352 seconds after numerous tests. The commit message could explain also why pa_smoother_reset() is used instead of pause()/resume(). > + if (pa_modargs_get_value(ma, "latency_msec", NULL) != NULL) { > + if (pa_modargs_get_value_u32(ma, "latency_msec", &l) == 0) { > + u->latency_set = true; > + u->latency = l; > + } > + } Why do you check the return value of pa_modargs_get_value() before calling pa_modargs_get_value_u32()? As far as I can tell, that makes no difference. > @@ -119,6 +122,9 @@ static int64_t sink_get_latency(const struct userdata *u) { > > latency = pa_bytes_to_usec(u->write_count, &u->sink->sample_spec) - (int64_t) now; > > + /* RAOP default latency */ > + latency += u->latency * 1000; Nitpicking: the convention is to use the PA_USEC_PER_MSEC constant instead of bare "1000". -- Tanu https://www.patreon.com/tanuk