+ if (!strcmp(cmd, "samplerate")) {
+ if (padd->samplerate == 0)
+ return -E_BTR_NAVAIL;
+ *result = make_message("%u", padd->samplerate);
+ return 1;
+ }
+ if (!strcmp(cmd, "channels")) {
+ if (padd->channels == 0)
+ return -E_BTR_NAVAIL;
+ *result = make_message("%u", padd->channels);
+ return 1;
+ }
+ return -ERRNO_TO_PARA_ERROR(ENOTSUP);
+}
+
+static void aacdec_open(struct filter_node *fn)
+{
+ struct private_aacdec_data *padd = para_calloc(sizeof(*padd));
+
+ fn->private_data = padd;
+ fn->min_iqs = 2048;
+ padd->handle = aac_open();
+}
+
+static void aacdec_close(struct filter_node *fn)
+{
+ struct private_aacdec_data *padd = fn->private_data;
+
+ NeAACDecClose(padd->handle);
+ free(padd);
+ fn->private_data = NULL;
+}
+
+static void aacdec_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;
+ struct private_aacdec_data *padd = fn->private_data;
+ int i, ret;
+ unsigned char *p, *inbuf, *outbuffer;
+ char *btr_buf;
+ size_t len, skip, consumed, loaded, iqs;