summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libaf/af.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libaf/af.c b/libaf/af.c
index 82a7d7398b..e4015727ac 100644
--- a/libaf/af.c
+++ b/libaf/af.c
@@ -278,6 +278,11 @@ static void af_print_filter_chain(af_stream_t* s)
mp_msg(MSGT_AFILTER, MSGL_V, "\n");
}
+// Warning:
+// A failed af_reinit() leaves the audio chain behind in a useless, broken
+// state (for example, format filters that were tentatively inserted stay
+// inserted).
+// In that case, you should always rebuild the filter chain, or abort.
int af_reinit(af_stream_t* s, af_instance_t* af)
{
do{
@@ -587,7 +592,9 @@ af_instance_t* af_add(af_stream_t* s, char* name){
// Reinitalize the filter list
if(AF_OK != af_reinit(s, s->first) ||
AF_OK != fixup_output_format(s)){
- free(new);
+ while (s->first)
+ af_remove(s, s->first);
+ af_init(s);
return NULL;
}
return new;