| 
																	
																	
																		
																	
																	
																 | 
																@@ -85,7 +85,7 @@ static av_cold int init(AVFilterContext *ctx) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																    EvalContext *eval = ctx->priv; | 
																 | 
																 | 
																    EvalContext *eval = ctx->priv; | 
															
														
														
													
														
															
																 | 
																 | 
																    char *args1 = av_strdup(eval->exprs); | 
																 | 
																 | 
																    char *args1 = av_strdup(eval->exprs); | 
															
														
														
													
														
															
																 | 
																 | 
																    char *expr, *buf; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    char *expr, *last_expr, *buf; | 
															
														
														
													
														
															
																 | 
																 | 
																    int ret; | 
																 | 
																 | 
																    int ret; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    if (!args1) { | 
																 | 
																 | 
																    if (!args1) { | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -94,27 +94,39 @@ static av_cold int init(AVFilterContext *ctx) | 
															
														
														
													
														
															
																 | 
																 | 
																        goto end; | 
																 | 
																 | 
																        goto end; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#define ADD_EXPRESSION(expr_) do {                                      \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (!av_dynarray2_add((void **)&eval->expr, &eval->nb_channels, \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                              sizeof(*eval->expr), NULL)) {             \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            ret = AVERROR(ENOMEM);                                      \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            goto end;                                                   \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        }                                                               \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        eval->expr[eval->nb_channels-1] = NULL;                         \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        ret = av_expr_parse(&eval->expr[eval->nb_channels - 1], expr_,  \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                            var_names, NULL, NULL,                      \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                            NULL, NULL, 0, ctx);                        \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (ret < 0)                                                    \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            goto end;                                                   \ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } while (0) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    /* parse expressions */ | 
																 | 
																 | 
																    /* parse expressions */ | 
															
														
														
													
														
															
																 | 
																 | 
																    buf = args1; | 
																 | 
																 | 
																    buf = args1; | 
															
														
														
													
														
															
																 | 
																 | 
																    while (expr = av_strtok(buf, "|", &buf)) { | 
																 | 
																 | 
																    while (expr = av_strtok(buf, "|", &buf)) { | 
															
														
														
													
														
															
																 | 
																 | 
																        if (!av_dynarray2_add((void **)&eval->expr, &eval->nb_channels, sizeof(*eval->expr), NULL)) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            ret = AVERROR(ENOMEM); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            goto end; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        eval->expr[eval->nb_channels-1] = NULL; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        ret = av_expr_parse(&eval->expr[eval->nb_channels - 1], expr, var_names, | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                            NULL, NULL, NULL, NULL, 0, ctx); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        if (ret < 0) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            goto end; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        ADD_EXPRESSION(expr); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        last_expr = expr; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    if (eval->chlayout_str) { | 
																 | 
																 | 
																    if (eval->chlayout_str) { | 
															
														
														
													
														
															
																 | 
																 | 
																        int n; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        int i, n; | 
															
														
														
													
														
															
																 | 
																 | 
																        ret = ff_parse_channel_layout(&eval->chlayout, NULL, eval->chlayout_str, ctx); | 
																 | 
																 | 
																        ret = ff_parse_channel_layout(&eval->chlayout, NULL, eval->chlayout_str, ctx); | 
															
														
														
													
														
															
																 | 
																 | 
																        if (ret < 0) | 
																 | 
																 | 
																        if (ret < 0) | 
															
														
														
													
														
															
																 | 
																 | 
																            goto end; | 
																 | 
																 | 
																            goto end; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        n = av_get_channel_layout_nb_channels(eval->chlayout); | 
																 | 
																 | 
																        n = av_get_channel_layout_nb_channels(eval->chlayout); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (n > eval->nb_channels) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            for (i = eval->nb_channels; i < n; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                ADD_EXPRESSION(last_expr); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        if (n != eval->nb_channels) { | 
																 | 
																 | 
																        if (n != eval->nb_channels) { | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(ctx, AV_LOG_ERROR, | 
																 | 
																 | 
																            av_log(ctx, AV_LOG_ERROR, | 
															
														
														
													
														
															
																 | 
																 | 
																                   "Mismatch between the specified number of channels '%d' " | 
																 | 
																 | 
																                   "Mismatch between the specified number of channels '%d' " | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |