+static void fecdec_post_select(__a_unused struct sched *s, struct task *t)
+{
+ struct filter_node *fn = container_of(t, struct filter_node, task);
+ struct btr_node *btrn = fn->btrn;
+ int ret;
+ struct fec_header h;
+ char *buf;
+ size_t len;
+
+next_buffer:
+ ret = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL);
+ if (ret <= 0)
+ goto out;
+ btr_merge(btrn, fn->min_iqs);
+ len = btr_next_buffer(btrn, &buf);
+ ret = read_fec_header(buf, len, &h);
+ if (ret <= 0)
+ goto out;
+ ret = -E_BAD_SLICE_SIZE;
+ if (!h.slice_bytes)
+ goto out;
+ ret = -E_BAD_SLICE_NUM;
+ if (h.slice_num > h.slices_per_group)
+ goto out;
+ ret = dispatch_slice(buf + FEC_HEADER_SIZE, len - FEC_HEADER_SIZE,
+ &h, fn);
+ //PARA_INFO_LOG("ret: %d, len: %d, slice_bytes: %d\n", ret, len, h.slice_bytes);
+ if (ret <= 0)
+ goto out;
+ btr_consume(btrn, FEC_HEADER_SIZE + h.slice_bytes);
+ goto next_buffer;
+out:
+ t->error = ret;
+ if (ret < 0)
+ btr_remove_node(btrn);
+}
+