aacdec: "consumed" is only used in mp4dec()
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index 0712cc2720683b3fa8f08194eba95fd5691ab996..29bae161682bc00f6fd133e3c29ca7e5df06994d 100644 (file)
--- a/afs.c
+++ b/afs.c
  * the current audio format, audio file selector and of the activated senders.
  */
 
  * 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 <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 #include "db.h"
-#include "server.h"
 #include "afs.h"
 #include "send.h"
 #include "error.h"
 #include "afs.h"
 #include "send.h"
 #include "error.h"
@@ -38,7 +38,7 @@ static struct timeval data_send_barrier;
 static struct timeval eof_barrier;
 
 extern struct misc_meta_data *mmd;
 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;
 
 extern struct sender senders[];
 extern struct gengetopt_args_info conf;
 
@@ -51,6 +51,9 @@ static FILE *audio_file = NULL;
 #ifdef HAVE_OGGVORBIS
        void ogg_init(void *);
 #endif
 #ifdef HAVE_OGGVORBIS
        void ogg_init(void *);
 #endif
+#ifdef HAVE_FAAD
+       void aac_afh_init(void *);
+#endif
 
 /**
  * the list of supported  audio formats
 
 /**
  * the list of supported  audio formats
@@ -67,6 +70,12 @@ struct audio_format afl[] = {
                .name = "ogg",
                .init = ogg_init,
        },
                .name = "ogg",
                .init = ogg_init,
        },
+#endif
+#ifdef HAVE_FAAD
+       {
+               .name = "aac",
+               .init = aac_afh_init,
+       },
 #endif
        {
                .name = NULL,
 #endif
        {
                .name = NULL,
@@ -150,7 +159,7 @@ void afs_init(void)
                afl[i].init(&afl[i]);
        }
        ms2tv(conf.announce_time_arg, &announce_tv);
                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]);
        for (i = 0; senders[i].name; i++) {
                PARA_NOTICE_LOG("initializing %s sender\n", senders[i].name);
                senders[i].init(&senders[i]);
@@ -233,7 +242,7 @@ static int update_mmd(void)
 
 static void get_song(void)
 {
 
 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)
        int i;
 
        if (!sl)
@@ -253,8 +262,8 @@ static void get_song(void)
                        continue;
                }
                mmd->num_played++;
                        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);
                PARA_DEBUG_LOG("%s", "success\n");
                mmd->new_afs_status_flags &= (~AFS_NEXT);
                gettimeofday(&now, NULL);
@@ -313,7 +322,7 @@ static struct timeval *afs_compute_timeout(void)
        if (chk_barrier("eof", &now, &eof_barrier, &the_timeout, 1) < 0)
                return &the_timeout;
        if (chk_barrier("data send", &now, &data_send_barrier,
        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;
                return &the_timeout;
        if (mmd->audio_format < 0 || !afs_playing() || !audio_file)
                return NULL;
@@ -398,10 +407,9 @@ again:
                        senders[i].shutdown_clients();
                if (af) {
                        struct timeval now;
                        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);
                                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)
                        if (afs_repos())
                                tv_add(&now, &announce_tv, &data_send_barrier);
                        if (mmd->new_afs_status_flags & AFS_NOMORE)
@@ -415,7 +423,7 @@ again:
                mmd->new_afs_status_flags &= ~(AFS_REPOS);
                mmd->current_chunk = mmd->repos_request;
        }
                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");
        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");
@@ -453,8 +461,13 @@ void afs_send_chunk(void)
        afs_next_chunk_time(&due);
        if (tv_diff(&due, &now, NULL) > 0)
                return;
        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);
        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;
        if (!buf) {
                if (ret < 0)
                        mmd->new_afs_status_flags = AFS_NEXT;