*
* Don't make this too big or arithmetic will start to overflow.
*/
-#define NETWORK_BYTES 1024
+#define NETWORK_BYTES (1024+sizeof(struct rtp_header))
-/** @brief Maximum RTP playahead (seconds) */
-#define RTP_AHEAD 2
+/** @brief Maximum RTP playahead (ms) */
+#define RTP_AHEAD_MS 1000
/** @brief Maximum number of FDs to poll for */
#define NFDS 256
0
};
static const int one = 1;
+ int sndbuf, target_sndbuf = 131072;
+ socklen_t len;
char *sockname, *ssockname;
#if API_ALSA
int alsa_nslots = -1, err;
res->ai_protocol)) < 0)
fatal(errno, "error creating broadcast socket");
if(setsockopt(bfd, SOL_SOCKET, SO_BROADCAST, &one, sizeof one) < 0)
- fatal(errno, "error settting SO_BROADCAST on broadcast socket");
+ fatal(errno, "error setting SO_BROADCAST on broadcast socket");
+ len = sizeof sndbuf;
+ if(getsockopt(bfd, SOL_SOCKET, SO_SNDBUF,
+ &sndbuf, &len) < 0)
+ fatal(errno, "error getting SO_SNDBUF");
+ if(setsockopt(bfd, SOL_SOCKET, SO_SNDBUF,
+ &target_sndbuf, sizeof target_sndbuf) < 0)
+ error(errno, "error setting SO_SNDBUF to %d", target_sndbuf);
+ else
+ info("changed socket send buffer size from %d to %d",
+ sndbuf, target_sndbuf);
/* We might well want to set additional broadcast- or multicast-related
* options here */
if(sres && bind(bfd, sres->ai_addr, sres->ai_addrlen) < 0)
struct timeval now;
uint64_t target_us;
uint64_t target_rtp_time;
- const uint64_t ahead = RTP_AHEAD * config->sample_format.rate
- * config->sample_format.channels;
-
+ const int64_t samples_ahead = ((uint64_t)RTP_AHEAD_MS
+ * config->sample_format.rate
+ * config->sample_format.channels
+ / 1000);
+#if 0
static unsigned logit;
+#endif
/* If we're starting then initialize the base time */
if(!rtp_time)
* config->sample_format.channels)
/ 1000000;
+#if 0
/* TODO remove logging guff */
if(!(logit++ & 1023))
info("rtp_time %llu target %llu difference %lld [%lld]",
rtp_time, target_rtp_time,
rtp_time - target_rtp_time,
- ahead);
- if(rtp_time < target_rtp_time
- || rtp_time - target_rtp_time < ahead)
+ samples_ahead);
+#endif
+ if((int64_t)(rtp_time - target_rtp_time) < samples_ahead)
bfd_slot = addfd(bfd, POLLOUT);
break;
}