+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;
+
+ return decoder_execute(cmd, padd->sample_rate, padd->channels, result);
+}
+
+static void aacdec_open(struct filter_node *fn)
+{
+ NeAACDecConfigurationPtr c;
+ struct private_aacdec_data *padd = para_calloc(sizeof(*padd));
+
+ padd->handle = NeAACDecOpen();
+ c = NeAACDecGetCurrentConfiguration(padd->handle);
+ c->defObjectType = LC;
+ c->outputFormat = FAAD_FMT_16BIT;
+ c->downMatrix = 0;
+ NeAACDecSetConfiguration(padd->handle, c);
+
+ fn->private_data = padd;
+ fn->min_iqs = 2048;
+}
+
+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 int aacdec_post_select(__a_unused struct sched *s, void *context)