Message ID | 359f2292a67679b5dab5d9d1fda280bc80f34c40.1619389023.git.deborahbrouwer3563@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | cec-follower: increase accuracy Audio Rate Control | expand |
On 26/04/2021 00:54, Deborah Brouwer wrote: > Measure the interval since the last audio rate control message in > nanoseconds instead of seconds. Increasing the precision catches audio > rate messages that are late by less than a second. > > Signed-off-by: Deborah Brouwer <deborahbrouwer3563@gmail.com> > --- > utils/cec-follower/cec-processing.cpp | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp > index 93db4059..243c9d09 100644 > --- a/utils/cec-follower/cec-processing.cpp > +++ b/utils/cec-follower/cec-processing.cpp > @@ -29,8 +29,8 @@ > /* Time between each polling message sent to a device */ > #define POLL_PERIOD 15000 > > -/* The maximum interval in seconds between audio rate messages as defined in the spec */ > -#define MAX_AUD_RATE_MSG_INTERVAL 2 > +/* The maximum interval in nanoseconds between audio rate messages as defined in the spec */ > +#define MAX_AUD_RATE_MSG_INTERVAL 2000000000 It's a bit easier to read if you write this as: #define MAX_AUD_RATE_MSG_INTERVAL_NS (2 * 1000000000ULL) It's helpful to add the unit as a suffix to the define name and to write it as a multiplication of seconds times nsecs_per_sec. Also ULL helps cast the expression to an unsigned long long (64 bit). Not strictly necessary, but since we check intervals using __u64 it doesn't hurt either. Regards, Hans > > struct cec_enum_values { > const char *type_name; > @@ -241,7 +241,8 @@ static void aud_rate_msg_interval_check(__u64 ts_new, __u64 ts_old) > * turned off the audio rate control. > */ > if (ts_old) { > - unsigned interval = (ts_new - ts_old) / 1000000000; > + __u64 interval = ts_new - ts_old; > + > if (interval > MAX_AUD_RATE_MSG_INTERVAL) { > warn("The interval between Audio Rate Control messages was greater\n"); > warn("than the Maxiumum Audio Rate Message Interval (2s).\n"); >
diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp index 93db4059..243c9d09 100644 --- a/utils/cec-follower/cec-processing.cpp +++ b/utils/cec-follower/cec-processing.cpp @@ -29,8 +29,8 @@ /* Time between each polling message sent to a device */ #define POLL_PERIOD 15000 -/* The maximum interval in seconds between audio rate messages as defined in the spec */ -#define MAX_AUD_RATE_MSG_INTERVAL 2 +/* The maximum interval in nanoseconds between audio rate messages as defined in the spec */ +#define MAX_AUD_RATE_MSG_INTERVAL 2000000000 struct cec_enum_values { const char *type_name; @@ -241,7 +241,8 @@ static void aud_rate_msg_interval_check(__u64 ts_new, __u64 ts_old) * turned off the audio rate control. */ if (ts_old) { - unsigned interval = (ts_new - ts_old) / 1000000000; + __u64 interval = ts_new - ts_old; + if (interval > MAX_AUD_RATE_MSG_INTERVAL) { warn("The interval between Audio Rate Control messages was greater\n"); warn("than the Maxiumum Audio Rate Message Interval (2s).\n");
Measure the interval since the last audio rate control message in nanoseconds instead of seconds. Increasing the precision catches audio rate messages that are late by less than a second. Signed-off-by: Deborah Brouwer <deborahbrouwer3563@gmail.com> --- utils/cec-follower/cec-processing.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)