return -ERRNO_TO_PARA_ERROR(ENOTSUP);
}
-#define WMADEC_MAX_PENDING (640 * 1024)
-
-static void wmadec_pre_select(struct sched *s, struct task *t)
-{
- struct filter_node *fn = container_of(t, struct filter_node, task);
- size_t iqs = btr_get_input_queue_size(fn->btrn);
-
- t->error = 0;
- if (iqs == 0)
- return;
- if (btr_bytes_pending(fn->btrn) > WMADEC_MAX_PENDING)
- return; /* FIXME, should use reasonable bound on timeout */
- s->timeout.tv_sec = 0;
- s->timeout.tv_usec = 1;
-}
-
#define WMA_OUTPUT_BUFFER_SIZE (128 * 1024)
static void wmadec_post_select(__a_unused struct sched *s, struct task *t)
int ret, converted = 0;
struct private_wmadec_data *pwd = fn->private_data;
struct btr_node *btrn = fn->btrn;
- size_t len, min_len;
+ size_t len;
char *in;
- min_len = pwd? WMA_FRAME_SKIP + pwd->ahi.block_align : 8192;
next_buffer:
t->error = 0;
- ret = prepare_filter_node(btrn, min_len);
+ ret = prepare_filter_node(fn);
if (ret < 0)
goto err;
if (ret == 0)
return;
len = btr_next_buffer(btrn, (char **)&in);
ret = -E_WMADEC_EOF;
- if (len < min_len)
+ if (len < fn->min_iqs)
goto err;
if (!pwd) {
ret = wma_decode_init(in, len, &pwd);
if (ret < 0)
goto err;
if (ret == 0) {
- min_len += 4096;
+ fn->min_iqs += 4096;
goto next_buffer;
}
+ fn->min_iqs = WMA_FRAME_SKIP + pwd->ahi.block_align;
fn->private_data = pwd;
converted = pwd->ahi.header_len;
goto success;
fn->buf = para_malloc(fn->bufsize);
fn->private_data = NULL;
fn->loaded = 0;
+ fn->min_iqs = 4096;
}
/**
f->close = wmadec_close;
f->convert = wmadec_convert;
f->execute = wmadec_execute;
- f->pre_select = wmadec_pre_select;
+ f->pre_select = generic_filter_pre_select;
f->post_select = wmadec_post_select;
}