@ -104,6 +104,7 @@ static av_cold int init(AVFilterContext *ctx)
char * arg , * arg0 , * tokenizer , * args = av_strdup ( pan - > args ) ;
int out_ch_id , in_ch_id , len , named , ret , sign = 1 ;
int nb_in_channels [ 2 ] = { 0 , 0 } ; // number of unnamed and named input channels
int used_out_ch [ MAX_CHANNELS ] = { 0 } ;
double gain ;
if ( ! pan - > args ) {
@ -127,6 +128,7 @@ static av_cold int init(AVFilterContext *ctx)
/* parse channel specifications */
while ( ( arg = arg0 = av_strtok ( NULL , " | " , & tokenizer ) ) ) {
int used_in_ch [ MAX_CHANNELS ] = { 0 } ;
/* channel name */
if ( parse_channel_name ( & arg , & out_ch_id , & named ) ) {
av_log ( ctx , AV_LOG_ERROR ,
@ -153,6 +155,13 @@ static av_cold int init(AVFilterContext *ctx)
ret = AVERROR ( EINVAL ) ;
goto fail ;
}
if ( used_out_ch [ out_ch_id ] ) {
av_log ( ctx , AV_LOG_ERROR ,
" Can not reference out channel %d twice \n " , out_ch_id ) ;
ret = AVERROR ( EINVAL ) ;
goto fail ;
}
used_out_ch [ out_ch_id ] = 1 ;
skip_spaces ( & arg ) ;
if ( * arg = = ' = ' ) {
arg + + ;
@ -184,6 +193,13 @@ static av_cold int init(AVFilterContext *ctx)
ret = AVERROR ( EINVAL ) ;
goto fail ;
}
if ( used_in_ch [ in_ch_id ] ) {
av_log ( ctx , AV_LOG_ERROR ,
" Can not reference in channel %d twice \n " , in_ch_id ) ;
ret = AVERROR ( EINVAL ) ;
goto fail ;
}
used_in_ch [ in_ch_id ] = 1 ;
pan - > gain [ out_ch_id ] [ in_ch_id ] = sign * gain ;
skip_spaces ( & arg ) ;
if ( ! * arg )