* 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
.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->dbt_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->dbt_num].update_audio_file)
- dblist[mmd->dbt_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);
if (chk_barrier("eof", &now, &eof_barrier, &the_timeout, 1) < 0)
return &the_timeout;
if (chk_barrier("data send", &now, &data_send_barrier,
- &the_timeout, 1) < 0)
+ &the_timeout, 1) < 0)
return &the_timeout;
if (mmd->audio_format < 0 || !afs_playing() || !audio_file)
return NULL;
senders[i].shutdown_clients();
if (af) {
struct timeval now;
- if (!afs_paused() || mmd->chunks_sent) {
- gettimeofday(&now, NULL);
+ gettimeofday(&now, NULL);
+ if (!afs_paused() || mmd->chunks_sent)
tv_add(&af->eof_tv, &now, &eof_barrier);
- }
if (afs_repos())
tv_add(&now, &announce_tv, &data_send_barrier);
if (mmd->new_afs_status_flags & AFS_NOMORE)
mmd->new_afs_status_flags &= ~(AFS_REPOS);
mmd->current_chunk = mmd->repos_request;
}
- ret = afs_compute_timeout();
+ ret = afs_compute_timeout();
if (!ret && !audio_file && afs_playing() &&
!(mmd->new_afs_status_flags & AFS_NOMORE)) {
PARA_DEBUG_LOG("%s", "ready and playing, but no audio file\n");
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_NEXT | AFS_REPOS);
+ mmd->new_afs_status_flags &= ~AFS_REPOS;
if (!buf) {
if (ret < 0)
mmd->new_afs_status_flags = AFS_NEXT;