* Audio merging filter
*/
+#define FF_INTERNAL_FIELDS 1
+#include "framequeue.h"
+
#include "libavutil/avstring.h"
#include "libavutil/bprint.h"
#include "libavutil/channel_layout.h"
av_get_channel_layout_string(buf, sizeof(buf), 0, inlayout[i]);
av_log(ctx, AV_LOG_INFO, "Using \"%s\" for input %d\n", buf, i + 1);
}
- s->in[i].nb_ch = av_get_channel_layout_nb_channels(inlayout[i]);
- if (outlayout & inlayout[i])
+ s->in[i].nb_ch = FF_LAYOUT2COUNT(inlayout[i]);
+ if (s->in[i].nb_ch) {
overlap++;
- outlayout |= inlayout[i];
+ } else {
+ s->in[i].nb_ch = av_get_channel_layout_nb_channels(inlayout[i]);
+ if (outlayout & inlayout[i])
+ overlap++;
+ outlayout |= inlayout[i];
+ }
nb_ch += s->in[i].nb_ch;
}
if (nb_ch > SWR_CH_MAX) {
int i, ret;
for (i = 0; i < s->nb_inputs; i++)
- if (!s->in[i].nb_samples)
+ if (!s->in[i].nb_samples ||
+ /* detect EOF immediately */
+ (ctx->inputs[i]->status_in && !ctx->inputs[i]->status_out))
if ((ret = ff_request_frame(ctx->inputs[i])) < 0)
return ret;
return 0;