|  | @@ -356,23 +356,32 @@ static int channelmap_config_input(AVFilterLink *inlink) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | AVFilterContext *ctx = inlink->dst; |  |  | AVFilterContext *ctx = inlink->dst; | 
														
													
														
															
																|  |  | ChannelMapContext *s = ctx->priv; |  |  | ChannelMapContext *s = ctx->priv; | 
														
													
														
															
																|  |  |  |  |  | int nb_channels = av_get_channel_layout_nb_channels(inlink->channel_layout); | 
														
													
														
															
																|  |  | int i, err = 0; |  |  | int i, err = 0; | 
														
													
														
															
																|  |  | const char *channel_name; |  |  | const char *channel_name; | 
														
													
														
															
																|  |  | char layout_name[256]; |  |  | char layout_name[256]; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | if (s->mode == MAP_PAIR_STR_INT || s->mode == MAP_PAIR_STR_STR) { |  |  |  | 
														
													
														
															
																|  |  | for (i = 0; i < s->nch; i++) { |  |  |  | 
														
													
														
															
																|  |  |  |  |  | for (i = 0; i < s->nch; i++) { | 
														
													
														
															
																|  |  |  |  |  | if (s->mode == MAP_PAIR_STR_INT || s->mode == MAP_PAIR_STR_STR) { | 
														
													
														
															
																|  |  | s->map[i].in_channel_idx = av_get_channel_layout_channel_index( |  |  | s->map[i].in_channel_idx = av_get_channel_layout_channel_index( | 
														
													
														
															
																|  |  | inlink->channel_layout, s->map[i].in_channel); |  |  | inlink->channel_layout, s->map[i].in_channel); | 
														
													
														
															
																|  |  | if (s->map[i].in_channel_idx < 0) { |  |  |  | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | if (s->map[i].in_channel_idx < 0 || | 
														
													
														
															
																|  |  |  |  |  | s->map[i].in_channel_idx >= nb_channels) { | 
														
													
														
															
																|  |  |  |  |  | av_get_channel_layout_string(layout_name, sizeof(layout_name), | 
														
													
														
															
																|  |  |  |  |  | 0, inlink->channel_layout); | 
														
													
														
															
																|  |  |  |  |  | if (s->map[i].in_channel) { | 
														
													
														
															
																|  |  | channel_name = av_get_channel_name(s->map[i].in_channel); |  |  | channel_name = av_get_channel_name(s->map[i].in_channel); | 
														
													
														
															
																|  |  | av_get_channel_layout_string(layout_name, sizeof(layout_name), |  |  |  | 
														
													
														
															
																|  |  | 0, inlink->channel_layout); |  |  |  | 
														
													
														
															
																|  |  | av_log(ctx, AV_LOG_ERROR, |  |  | av_log(ctx, AV_LOG_ERROR, | 
														
													
														
															
																|  |  | "input channel '%s' not available from input layout '%s'\n", |  |  | "input channel '%s' not available from input layout '%s'\n", | 
														
													
														
															
																|  |  | channel_name, layout_name); |  |  | channel_name, layout_name); | 
														
													
														
															
																|  |  | err = AVERROR(EINVAL); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | } else { | 
														
													
														
															
																|  |  |  |  |  | av_log(ctx, AV_LOG_ERROR, | 
														
													
														
															
																|  |  |  |  |  | "input channel #%d not available from input layout '%s'\n", | 
														
													
														
															
																|  |  |  |  |  | s->map[i].in_channel_idx, layout_name); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  | err = AVERROR(EINVAL); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | 
 |