af_amix: avoid spurious EAGAIN.
authorAnton Khirnov <anton@khirnov.net>
Thu, 5 Jul 2012 19:51:44 +0000 (21:51 +0200)
committerAnton Khirnov <anton@khirnov.net>
Fri, 6 Jul 2012 11:51:58 +0000 (13:51 +0200)
Input on/off state can change in request_samples(), which can result in
a state where only the first input is active. get_available_samples()
will then return 0, and request_frame() will fail with EAGAIN even
though there is data on the single active input.

Take this into account and check the number of active inputs again after
calling request_samples().

libavfilter/af_amix.c

index deeaa03..439231f 100644 (file)
@@ -437,7 +437,9 @@ static int request_frame(AVFilterLink *outlink)
         ret = calc_active_inputs(s);
         if (ret < 0)
             return ret;
+    }
 
+    if (s->active_inputs > 1) {
         available_samples = get_available_samples(s);
         if (!available_samples)
             return AVERROR(EAGAIN);