X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=vss.c;h=941f22fd69ccf40ba16ee7f2291656ea341dec49;hp=b47065880c1553e0747ffad7124e3a7d6272d7e5;hb=5ec0e807014e7e88d6e5e281fd51a391ad697ce1;hpb=2b245d8ac15316229e688ccb6a5993cdbf553d78 diff --git a/vss.c b/vss.c index b4706588..941f22fd 100644 --- a/vss.c +++ b/vss.c @@ -229,19 +229,17 @@ static int need_audio_header(struct fec_client *fc, struct vss_task *vsst) return 1; } -static int num_slices(long unsigned bytes, struct fec_client *fc, uint8_t *result) +static int num_slices(long unsigned bytes, struct fec_client *fc, int rs) { - unsigned long m = fc->fcp->max_slice_bytes - FEC_HEADER_SIZE; - unsigned rv, redundant_slices = fc->fcp->slices_per_group - - fc->fcp->data_slices_per_group; + int m = fc->fcp->max_slice_bytes - FEC_HEADER_SIZE; + int ret; - if (!m) - return -E_BAD_CT; - rv = (bytes + m - 1) / m; - if (rv + redundant_slices > 255) + assert(m > 0); + assert(rs > 0); + ret = (bytes + m - 1) / m; + if (ret + rs > 255) return -E_BAD_CT; - *result = rv; - return 1; + return ret; } /* set group start and group duration */ @@ -259,26 +257,27 @@ static void set_group_timing(struct fec_client *fc, struct fec_group *g) static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst) { int ret, i, k, data_slices; + int hs, ds, rs; /* header/data/redundant slices */ size_t len; const char *buf, *start_buf; struct fec_group *g = &fc->group; unsigned slice_bytes = fc->fcp->max_slice_bytes - FEC_HEADER_SIZE; uint32_t max_data_size; + rs = fc->fcp->slices_per_group - fc->fcp->data_slices_per_group; if (fc->first_stream_chunk < 0) { - uint8_t hs, ds; /* needed header/data slices */ - uint8_t rs = fc->fcp->slices_per_group - - fc->fcp->data_slices_per_group; /* redundant slices */ int n; - ret = num_slices(vsst->header_len, fc, &hs); + ret = num_slices(vsst->header_len, fc, rs); if (ret < 0) return ret; + hs = ret; ret = num_slices(afh_get_largest_chunk_size(&mmd->afd.afhi), - fc, &ds); + fc, rs); if (ret < 0) return ret; - k = (int)hs + ds; + ds = ret; + k = hs + ds; if (k > 255) return -E_BAD_CT; if (k < fc->fcp->data_slices_per_group) @@ -313,9 +312,10 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst) g->num++; } if (need_audio_header(fc, vsst)) { - ret = num_slices(vsst->header_len, fc, &g->num_header_slices); + ret = num_slices(vsst->header_len, fc, rs); if (ret < 0) return ret; + g->num_header_slices = ret; } else g->num_header_slices = 0; afh_get_chunk(g->first_chunk, &mmd->afd.afhi, vsst->map, &start_buf,