]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - vss.c
Work around some clang warnings.
[paraslash.git] / vss.c
diff --git a/vss.c b/vss.c
index 2dab278dfff9c20983e3353e9a86a7147904262a..2068563cf557d9531b84f508cb869d16120e584c 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -12,7 +12,6 @@
  */
 
 #include <regex.h>
-#include <dirent.h>
 #include <osl.h>
 
 #include "para.h"
@@ -338,6 +337,26 @@ static int initialize_fec_client(struct fec_client *fc, struct vss_task *vsst)
        return 1;
 }
 
+static void vss_get_chunk(int chunk_num, struct vss_task *vsst,
+               char **buf, size_t *sz)
+{
+       /*
+        * Chunk zero is special for header streams: It is the first portion of
+        * the audio file which consists of the audio file header. It may be
+        * arbitrary large due to embedded meta data. Audio format handlers may
+        * replace the header by a stripped one with meta data omitted which is
+        * of bounded size. We always use the stripped header for streaming
+        * rather than the unmodified header (chunk zero).
+        */
+       if (chunk_num == 0 && vsst->header_len > 0) {
+               *buf = vsst->header_buf; /* stripped header */
+               *sz = vsst->header_len;
+               return;
+       }
+       afh_get_chunk(chunk_num, &mmd->afd.afhi, vsst->map, (const char **)buf,
+               sz);
+}
+
 static void compute_group_size(struct vss_task *vsst, struct fec_group *g,
                int max_bytes)
 {
@@ -352,7 +371,7 @@ static void compute_group_size(struct vss_task *vsst, struct fec_group *g,
         * of exactly one chunk for these audio formats.
         */
        for (i = 0;; i++) {
-               const char *buf;
+               char *buf;
                size_t len;
                int chunk_num = g->first_chunk + i;
 
@@ -360,7 +379,7 @@ static void compute_group_size(struct vss_task *vsst, struct fec_group *g,
                        break;
                if (chunk_num >= mmd->afd.afhi.chunks_total) /* eof */
                        break;
-               afh_get_chunk(chunk_num, &mmd->afd.afhi, vsst->map, &buf, &len);
+               vss_get_chunk(chunk_num, vsst, &buf, &len);
                if (g->bytes + len > max_bytes)
                        break;
                /* Include this chunk */
@@ -482,7 +501,7 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst)
 {
        int ret, i, k, n, data_slices;
        size_t len;
-       const char *buf;
+       char *buf;
        struct fec_group *g = &fc->group;
 
        if (fc->state == FEC_STATE_NONE) {
@@ -522,6 +541,7 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst)
        /* setup header slices */
        buf = vsst->header_buf;
        for (i = 0; i < g->num_header_slices; i++) {
+               uint32_t payload_size;
                if (buf + g->slice_bytes <= vsst->header_buf + vsst->header_len) {
                        fc->src_data[i] = (const unsigned char *)buf;
                        buf += g->slice_bytes;
@@ -532,8 +552,7 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst)
                 * goes beyond the buffer. This slice will not be fully
                 * used.
                 */
-               uint32_t payload_size = vsst->header_buf
-                       + vsst->header_len - buf;
+               payload_size = vsst->header_buf + vsst->header_len - buf;
                memcpy(fc->extra_header_buf, buf, payload_size);
                if (payload_size < g->slice_bytes)
                        memset(fc->extra_header_buf + payload_size, 0,
@@ -543,7 +562,7 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst)
        }
 
        /* setup data slices */
-       afh_get_chunk(g->first_chunk, &mmd->afd.afhi, vsst->map, &buf, &len);
+       vss_get_chunk(g->first_chunk, vsst, &buf, &len);
        for (; i < g->num_header_slices + data_slices; i++) {
                if (buf + g->slice_bytes > vsst->map + mmd->size) {
                        /*
@@ -1062,7 +1081,7 @@ static void vss_send(struct vss_task *vsst)
        compute_chunk_time(mmd->chunks_sent, &mmd->afd.afhi.chunk_tv,
                &mmd->stream_start, &due);
        if (tv_diff(&due, now, NULL) <= 0) {
-               const char *buf;
+               char *buf;
                size_t len;
 
                if (!mmd->chunks_sent) {
@@ -1075,8 +1094,7 @@ static void vss_send(struct vss_task *vsst)
                 * they might have still some data queued which can be sent in
                 * this case.
                 */
-               afh_get_chunk(mmd->current_chunk, &mmd->afd.afhi, vsst->map,
-                       &buf, &len);
+               vss_get_chunk(mmd->current_chunk, vsst, &buf, &len);
                for (i = 0; senders[i].name; i++) {
                        if (!senders[i].send)
                                continue;
@@ -1167,5 +1185,6 @@ void init_vss_task(int afs_socket)
                tv_add(&vsst->autoplay_barrier, &vsst->announce_tv,
                        &vsst->data_send_barrier);
        }
+       sprintf(vsst->task.status, "vss task");
        register_task(&vsst->task);
 }