/*
* This file is part of DisOrder.
- * Copyright (C) 2007 Richard Kettlewell
+ * Copyright (C) 2007, 2008 Richard Kettlewell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* - it is safe to read uint32_t values without a lock protecting them
*/
-#include <config.h>
-#include "types.h"
+#include "common.h"
#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#include <locale.h>
#include <sys/uio.h>
-#include <string.h>
-#include <assert.h>
#include <errno.h>
#include <netinet/in.h>
#include <sys/time.h>
/** @brief Condition variable signalled whenever @ref packets is changed */
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-#if HAVE_ALSA_ASOUNDLIB_H
-# define DEFAULT_BACKEND playrtp_alsa
-#elif HAVE_SYS_SOUNDCARD_H || EMPEG_HOST
-# define DEFAULT_BACKEND playrtp_oss
-#elif HAVE_COREAUDIO_AUDIOHARDWARE_H
-# define DEFAULT_BACKEND playrtp_coreaudio
-#else
-# error No known backend
+#if DEFAULT_BACKEND == BACKEND_ALSA
+# define DEFAULT_PLAYRTP_BACKEND playrtp_alsa
+#elif DEFAULT_BACKEND == BACKEND_OSS
+# define DEFAULT_PLAYRTP_BACKEND playrtp_oss
+#elif DEFAULT_BACKEND == BACKEND_COREAUDIO
+# define DEFAULT_PLAYRTP_BACKEND playrtp_coreaudio
#endif
/** @brief Backend to play with */
-static void (*backend)(void) = &DEFAULT_BACKEND;
+static void (*backend)(void) = DEFAULT_PLAYRTP_BACKEND;
HEAP_DEFINE(pheap, struct packet *, lt_packet);
for(;;) {
/* Get the next packet */
pthread_mutex_lock(&receive_lock);
- while(!received_packets)
+ while(!received_packets) {
pthread_cond_wait(&receive_cond, &receive_lock);
+ }
p = received_packets;
received_packets = p->next;
if(!received_packets)
* out of order then we guarantee dropouts. But for now... */
if(nsamples >= maxbuffer) {
pthread_mutex_lock(&lock);
- while(nsamples >= maxbuffer)
+ while(nsamples >= maxbuffer) {
pthread_cond_wait(&cond, &lock);
+ }
pthread_mutex_unlock(&lock);
}
/* Add the packet to the receive queue */
while(nsamples)
drop_first_packet();
info("Buffering...");
- while(nsamples < readahead)
+ while(nsamples < readahead) {
pthread_cond_wait(&cond, &lock);
+ }
next_timestamp = pheap_first(&packets)->timestamp;
active = 1;
}
const char *dumpfile = 0;
static const struct addrinfo prefs = {
- AI_PASSIVE,
- PF_INET,
- SOCK_DGRAM,
- IPPROTO_UDP,
- 0,
- 0,
- 0,
- 0
+ .ai_flags = AI_PASSIVE,
+ .ai_family = PF_INET,
+ .ai_socktype = SOCK_DGRAM,
+ .ai_protocol = IPPROTO_UDP
};
mem_init();