+static int aacdec_execute(struct btr_node *btrn, const char *cmd, char **result)
+{
+ struct filter_node *fn = btr_context(btrn);
+ struct private_aacdec_data *padd = fn->private_data;
+
+ if (!strcmp(cmd, "samplerate")) {
+ if (padd->samplerate == 0)
+ return -ERRNO_TO_PARA_ERROR(ENAVAIL);
+ *result = make_message("%u", padd->samplerate);
+ return 1;
+ }
+ if (!strcmp(cmd, "channels")) {
+ if (padd->channels == 0)
+ return -ERRNO_TO_PARA_ERROR(ENAVAIL);
+ *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)