#define NUM_FEC_GROUPS 3
/** Size of the output buffer of the fecdec filter. */
-#define FECDEC_OUTBUF_SIZE 81920
+#define FECDEC_OUTBUF_SIZE (128 * 1024)
/** Data read from the header of a slice. */
struct fec_header {
{
int i;
- if (!group_complete(fg) && !group_empty(fg))
- PARA_WARNING_LOG("Clearing incomplete group %d "
- "(contains %d slices)\n", fg->h.group_num,
- fg->num_received_slices);
for (i = 0; i < fg->num_slices; i++) {
free(fg->data[i]);
fg->data[i] = NULL;
FOR_EACH_FECDEC_GROUP(fg, pfd) {
if (fg->h.group_num != h->group_num)
continue;
- /* FIXME: Add some more sanity checks here */
+ if (fg->h.slices_per_group != h->slices_per_group)
+ continue;
+ if (fg->h.data_slices_per_group != h->data_slices_per_group)
+ continue;
*result = fg;
return 1;
}
if (!oldest || oldest->h.group_num > fg->h.group_num)
oldest = fg;
}
+ if (!group_complete(oldest) && !group_empty(oldest))
+ PARA_WARNING_LOG("Clearing incomplete group %d "
+ "(contains %d slices)\n", fg->h.group_num,
+ fg->num_received_slices);
clear_group(oldest);
return oldest;
}
/* group not found */
fg = find_unused_group(pfd);
if (fg)
- goto update_header;
+ goto success;
fg = try_to_free_group(pfd);
if (fg)
- goto update_header;
+ goto success;
fg = free_oldest_group(pfd);
-update_header:
- fg->h = *h;
success:
+ fg->h = *h;
*result = fg;
return 1;
}
h->slice_num);
return 1;
}
- fg->h = *h;
ret = add_slice(buf, fg);
if (ret < 0)
return ret;