@ -729,12 +729,12 @@ static int reduce_formats_on_filter(AVFilterContext *filter)
/* reduce channel layouts */
for ( i = 0 ; i < filter - > nb_inputs ; i + + ) {
AVFilterLink * inlink = filter - > inputs [ i ] ;
AVChannelLayout fmt = { 0 } ;
const AVChannelLayout * fmt ;
if ( ! inlink - > outcfg . channel_layouts | |
inlink - > outcfg . channel_layouts - > nb_channel_layouts ! = 1 )
continue ;
av_channel_layout_copy ( & fmt , & inlink - > outcfg . channel_layouts - > channel_layouts [ 0 ] ) ;
fmt = & inlink - > outcfg . channel_layouts - > channel_layouts [ 0 ] ;
for ( j = 0 ; j < filter - > nb_outputs ; j + + ) {
AVFilterLink * outlink = filter - > outputs [ j ] ;
@ -745,24 +745,25 @@ static int reduce_formats_on_filter(AVFilterContext *filter)
continue ;
if ( fmts - > all_layouts & &
( KNOWN ( & fmt ) | | fmts - > all_counts ) ) {
( KNOWN ( fmt ) | | fmts - > all_counts ) ) {
/* Turn the infinite list into a singleton */
fmts - > all_layouts = fmts - > all_counts = 0 ;
if ( ff_add_channel_layout ( & outlink - > incfg . channel_layouts , & fmt ) < 0 )
if ( ff_add_channel_layout ( & outlink - > incfg . channel_layouts , fmt ) < 0 )
ret = 1 ;
break ;
}
for ( k = 0 ; k < outlink - > incfg . channel_layouts - > nb_channel_layouts ; k + + ) {
if ( ! av_channel_layout_compare ( & fmts - > channel_layouts [ k ] , & fmt ) ) {
av_channel_layout_copy ( & fmts - > channel_layouts [ 0 ] , & fmt ) ;
if ( ! av_channel_layout_compare ( & fmts - > channel_layouts [ k ] , fmt ) ) {
ret = av_channel_layout_copy ( & fmts - > channel_layouts [ 0 ] , fmt ) ;
if ( ret < 0 )
return ret ;
fmts - > nb_channel_layouts = 1 ;
ret = 1 ;
break ;
}
}
}
av_channel_layout_uninit ( & fmt ) ;
}
return ret ;