|  |  | @@ -533,7 +533,7 @@ static int query_formats(AVFilterContext *ctx) | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_RGB0, | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_NONE | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | int ret, i; | 
		
	
		
			
			|  |  |  | int ret; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (s->response) { | 
		
	
		
			
			|  |  |  | AVFilterLink *videolink = ctx->outputs[1]; | 
		
	
	
		
			
				|  |  | @@ -543,12 +543,25 @@ static int query_formats(AVFilterContext *ctx) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | layouts = ff_all_channel_counts(); | 
		
	
		
			
			|  |  |  | if ((ret = ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts)) < 0) | 
		
	
		
			
			|  |  |  | return ret; | 
		
	
		
			
			|  |  |  | if (!layouts) | 
		
	
		
			
			|  |  |  | return AVERROR(ENOMEM); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (s->ir_format) { | 
		
	
		
			
			|  |  |  | ret = ff_set_common_channel_layouts(ctx, layouts); | 
		
	
		
			
			|  |  |  | if (ret < 0) | 
		
	
		
			
			|  |  |  | return ret; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | AVFilterChannelLayouts *mono = NULL; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (i = 0; i < 2; i++) { | 
		
	
		
			
			|  |  |  | layouts = ff_all_channel_counts(); | 
		
	
		
			
			|  |  |  | if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts)) < 0) | 
		
	
		
			
			|  |  |  | ret = ff_add_channel_layout(&mono, AV_CH_LAYOUT_MONO); | 
		
	
		
			
			|  |  |  | if (ret) | 
		
	
		
			
			|  |  |  | return ret; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[0]->out_channel_layouts)) < 0) | 
		
	
		
			
			|  |  |  | return ret; | 
		
	
		
			
			|  |  |  | if ((ret = ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts)) < 0) | 
		
	
		
			
			|  |  |  | return ret; | 
		
	
		
			
			|  |  |  | if ((ret = ff_channel_layouts_ref(mono, &ctx->inputs[1]->out_channel_layouts)) < 0) | 
		
	
		
			
			|  |  |  | return ret; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -565,14 +578,6 @@ static int config_output(AVFilterLink *outlink) | 
		
	
		
			
			|  |  |  | AVFilterContext *ctx = outlink->src; | 
		
	
		
			
			|  |  |  | AudioFIRContext *s = ctx->priv; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (ctx->inputs[0]->channels != ctx->inputs[1]->channels && | 
		
	
		
			
			|  |  |  | ctx->inputs[1]->channels != 1) { | 
		
	
		
			
			|  |  |  | av_log(ctx, AV_LOG_ERROR, | 
		
	
		
			
			|  |  |  | "Second input must have same number of channels as first input or " | 
		
	
		
			
			|  |  |  | "exactly 1 channel.\n"); | 
		
	
		
			
			|  |  |  | return AVERROR(EINVAL); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | s->one2many = ctx->inputs[1]->channels == 1; | 
		
	
		
			
			|  |  |  | outlink->sample_rate = ctx->inputs[0]->sample_rate; | 
		
	
		
			
			|  |  |  | outlink->time_base   = ctx->inputs[0]->time_base; | 
		
	
	
		
			
				|  |  | @@ -739,6 +744,9 @@ static const AVOption afir_options[] = { | 
		
	
		
			
			|  |  |  | {  "dc",    "DC gain",           0,                  AV_OPT_TYPE_CONST, {.i64=1},    0,  0, AF, "gtype" }, | 
		
	
		
			
			|  |  |  | {  "gn",    "gain to noise",     0,                  AV_OPT_TYPE_CONST, {.i64=2},    0,  0, AF, "gtype" }, | 
		
	
		
			
			|  |  |  | { "irgain", "set IR gain",       OFFSET(ir_gain),    AV_OPT_TYPE_FLOAT, {.dbl=1},    0,  1, AF }, | 
		
	
		
			
			|  |  |  | { "irfmt",  "set IR format",     OFFSET(ir_format),  AV_OPT_TYPE_INT,   {.i64=1},    0,  1, AF, "irfmt" }, | 
		
	
		
			
			|  |  |  | {  "mono",  "single channel",    0,                  AV_OPT_TYPE_CONST, {.i64=0},    0,  0, AF, "irfmt" }, | 
		
	
		
			
			|  |  |  | {  "input", "same as input",     0,                  AV_OPT_TYPE_CONST, {.i64=1},    0,  0, AF, "irfmt" }, | 
		
	
		
			
			|  |  |  | { "maxir",  "set max IR length", OFFSET(max_ir_len), AV_OPT_TYPE_FLOAT, {.dbl=30}, 0.1, 60, AF }, | 
		
	
		
			
			|  |  |  | { "response", "show IR frequency response", OFFSET(response), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, VF }, | 
		
	
		
			
			|  |  |  | { "channel", "set IR channel to display frequency response", OFFSET(ir_channel), AV_OPT_TYPE_INT, {.i64=0}, 0, 1024, VF }, | 
		
	
	
		
			
				|  |  | 
 |