#include <locale.h>
#include <errno.h>
#include <stdlib.h>
+#include <sys/uio.h>
#include "syscalls.h"
#include "timeval.h"
static uint32_t serial;
/** @brief Size of ring buffer */
-#define RINGSIZE 16384
+#define RINGSIZE 131072
/** @brief Ring buffer */
static struct entry ring[RINGSIZE];
* @param n How many frames of audio data we received
*/
static void frames(const struct timeval *when, size_t n) {
+ const time_t prev = ring[(ringtail - 1) % RINGSIZE].when.tv_sec;
+
ring[ringtail].when = *when;
ring[ringtail].serial = serial;
serial += n;
ringtail = (ringtail + 1) % RINGSIZE;
- // Report rates every couple of hundred packets
- if(!(ringtail & 1023)) {
-
- if(printf("%8.2f %8.2f %8.2f\n",
+ // Report once a second
+ if(prev != when->tv_sec) {
+ if(printf("%8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f\n",
+ rate((ringtail - RINGSIZE / 128) % RINGSIZE,
+ (ringtail - 1) % RINGSIZE),
+ rate((ringtail - RINGSIZE / 64) % RINGSIZE,
+ (ringtail - 1) % RINGSIZE),
+ rate((ringtail - RINGSIZE / 32) % RINGSIZE,
+ (ringtail - 1) % RINGSIZE),
+ rate((ringtail - RINGSIZE / 16) % RINGSIZE,
+ (ringtail - 1) % RINGSIZE),
rate((ringtail - RINGSIZE / 8) % RINGSIZE,
(ringtail - 1) % RINGSIZE),
rate((ringtail - RINGSIZE / 4) % RINGSIZE,