summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
3814235)
This reverts commit
35f9051506345255c7ed3c076b7df5f3b7d26039.
Currently, filters must not change their output buffer on the fly
because the writer might already have a reference to the old buffer
and keeps using this buffer.
As dealing with changing output buffers requires much more work,
including changes to the generic filter and writer code, let's defer
this change to post 0.3.4.
*/
#define NUM_FEC_GROUPS 3
*/
#define NUM_FEC_GROUPS 3
-/** Default size of the output buffer of the fecdec filter. */
-#define FECDEC_DEFAULT_OUTBUF_SIZE (16 * 1024)
-/** Maximal size of the output buffer of the fecdec filter. */
-#define FECDEC_MAX_OUTBUF_SIZE (1024 * 1024)
+/** Size of the output buffer of the fecdec filter. */
+#define FECDEC_OUTBUF_SIZE (1024 * 1024) /* FIXME: This has to depend on the fec params */
/** Data read from the header of a slice. */
struct fec_header {
/** Data read from the header of a slice. */
struct fec_header {
static int decode_group(struct fecdec_group *fg, struct filter_node *fn)
{
int i, ret, sb = fg->h.slice_bytes;
static int decode_group(struct fecdec_group *fg, struct filter_node *fn)
{
int i, ret, sb = fg->h.slice_bytes;
- size_t written = 0, need;
struct private_fecdec_data *pfd = fn->private_data;
enum fec_group_usability u = group_is_usable(fg, pfd);
struct private_fecdec_data *pfd = fn->private_data;
enum fec_group_usability u = group_is_usable(fg, pfd);
PARA_DEBUG_LOG("writing group %d (%d/%d decoded data bytes)\n",
fg->h.group_num, fg->h.group_bytes,
fg->h.data_slices_per_group * sb);
PARA_DEBUG_LOG("writing group %d (%d/%d decoded data bytes)\n",
fg->h.group_num, fg->h.group_bytes,
fg->h.data_slices_per_group * sb);
- need = fn->loaded + (fg->h.data_slices_per_group - i)* sb;
- if (need > fn->bufsize) {
- fn->bufsize = PARA_MAX(fn->bufsize * 2, need);
- if (fn->bufsize > FECDEC_MAX_OUTBUF_SIZE)
- return -E_FECDEC_OVERRUN;
- PARA_INFO_LOG("increasing fec buf to %zu\n", fn->bufsize);
- fn->buf = para_realloc(fn->buf, fn->bufsize);
- }
for (; i < fg->h.data_slices_per_group; i++) {
size_t n = sb;
if (n + written > fg->h.group_bytes)
n = fg->h.group_bytes - written;
for (; i < fg->h.data_slices_per_group; i++) {
size_t n = sb;
if (n + written > fg->h.group_bytes)
n = fg->h.group_bytes - written;
+ if (fn->loaded + n > fn->bufsize)
+ return -E_FECDEC_OVERRUN;
memcpy(fn->buf + fn->loaded, fg->data[i], n);
fn->loaded += n;
written += n;
memcpy(fn->buf + fn->loaded, fg->data[i], n);
fn->loaded += n;
written += n;
static void fecdec_open(struct filter_node *fn)
{
static void fecdec_open(struct filter_node *fn)
{
- fn->bufsize = FECDEC_DEFAULT_OUTBUF_SIZE;
+ fn->bufsize = FECDEC_OUTBUF_SIZE;
fn->buf = para_malloc(fn->bufsize);
fn->private_data = para_calloc(sizeof(struct private_fecdec_data));
fn->loaded = 0;
fn->buf = para_malloc(fn->bufsize);
fn->private_data = para_calloc(sizeof(struct private_fecdec_data));
fn->loaded = 0;