+ 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;
+
+ if (!m)
+ return -E_BAD_CT;
+ rv = (bytes + m - 1) / m;
+ if (rv + redundant_slices > 255)
+ return -E_BAD_CT;
+ *result = rv;
+ return 1;
+}
+
+static void set_slice_duration(struct fec_client *fc, struct fec_group *g)
+{
+ struct timeval group_duration, *chunk_tv = vss_chunk_time();
+
+ tv_scale(g->num_chunks, chunk_tv, &group_duration);
+ tv_divide(fc->fcp->slices_per_group + fc->num_extra_slices,
+ &group_duration, &g->slice_duration);
+ PARA_DEBUG_LOG("durations (group/chunk/slice): %lu/%lu/%lu\n",
+ tv2ms(&group_duration), tv2ms(chunk_tv), tv2ms(&g->slice_duration));