int ret, converted = 0;
struct private_wmadec_data *pwd = fn->private_data;
struct btr_node *btrn = fn->btrn;
- size_t iqs, len, min_len;
+ size_t len, min_len;
char *in;
min_len = pwd? WMA_FRAME_SKIP + pwd->ahi.block_align : 8192;
next_buffer:
t->error = 0;
- if (btr_bytes_pending(btrn) > WMADEC_MAX_PENDING)
+ ret = prepare_filter_node(btrn, min_len);
+ if (ret < 0)
+ goto err;
+ if (ret == 0)
return;
- iqs = btr_get_input_queue_size(btrn);
- if (iqs < min_len) {
- if (!btr_no_parent(btrn)) /* wait for more data */
- return;
- ret = -E_WMADEC_EOF;
+ len = btr_next_buffer(btrn, (char **)&in);
+ ret = -E_WMADEC_EOF;
+ if (len < min_len)
goto err;
- }
- /* avoid "buffer too small" errors from the decoder */
- btr_merge_to(btrn, min_len);
- len = btr_next_buffer(btrn, &in);
- assert(len >= min_len);
if (!pwd) {
ret = wma_decode_init(in, len, &pwd);
if (ret < 0)