* the current audio format, audio file selector and of the activated senders.
*/
+#include "server.h"
#include <sys/time.h> /* gettimeofday */
#include "server.cmdline.h"
#include "db.h"
-#include "server.h"
#include "afs.h"
#include "send.h"
#include "error.h"
static struct timeval eof_barrier;
extern struct misc_meta_data *mmd;
-extern struct audio_file_selector dblist[];
+extern struct audio_file_selector selectors[];
extern struct sender senders[];
extern struct gengetopt_args_info conf;
#ifdef HAVE_OGGVORBIS
void ogg_init(void *);
#endif
+#ifdef HAVE_FAAD
+ void aac_afh_init(void *);
+#endif
/**
* the list of supported audio formats
*/
-struct audio_format afl[] = {
+struct audio_format_handler afl[] = {
#if 1
{
.name = "mp3",
.name = "ogg",
.init = ogg_init,
},
+#endif
+#ifdef HAVE_FAAD
+ {
+ .name = "aac",
+ .init = aac_afh_init,
+ },
#endif
{
.name = NULL,
afl[i].init(&afl[i]);
}
ms2tv(conf.announce_time_arg, &announce_tv);
- PARA_INFO_LOG("announce timeval: %lu:%lu\n", announce_tv.tv_sec, announce_tv.tv_usec);
+ PARA_INFO_LOG("announce timeval: %lums\n", tv2ms(&announce_tv));
for (i = 0; senders[i].name; i++) {
PARA_NOTICE_LOG("initializing %s sender\n", senders[i].name);
senders[i].init(&senders[i]);
static void get_song(void)
{
- char **sl = dblist[mmd->selector_num].get_audio_file_list(10);
+ char **sl = selectors[mmd->selector_num].get_audio_file_list(10);
int i;
if (!sl)
continue;
}
mmd->num_played++;
- if (dblist[mmd->selector_num].update_audio_file)
- dblist[mmd->selector_num].update_audio_file(sl[i]);
+ if (selectors[mmd->selector_num].update_audio_file)
+ selectors[mmd->selector_num].update_audio_file(sl[i]);
PARA_DEBUG_LOG("%s", "success\n");
mmd->new_afs_status_flags &= (~AFS_NEXT);
gettimeofday(&now, NULL);
return &the_timeout;
}
-static void afs_eof(struct audio_format *af)
+static void afs_eof(struct audio_format_handler *af)
{
struct timeval now;
int i;
*/
struct timeval *afs_preselect(void)
{
- struct audio_format *af = NULL;
+ struct audio_format_handler *af = NULL;
int i, format;
struct timeval *ret;
again:
void afs_send_chunk(void)
{
int i;
- struct audio_format *af;
+ struct audio_format_handler *af;
char *buf;
ssize_t ret;
struct timeval now, due;
afs_next_chunk_time(&due);
if (tv_diff(&due, &now, NULL) > 0)
return;
+ if (chk_barrier("eof", &now, &eof_barrier, &due, 1) < 0)
+ return;
+ if (chk_barrier("data send", &now, &data_send_barrier,
+ &due, 1) < 0)
+ return;
buf = af->read_chunk(mmd->current_chunk, &ret);
mmd->new_afs_status_flags &= ~AFS_REPOS;
if (!buf) {