avfilter/avfilter: Error out if audio parameters change instead of failing an assert
Filters which support such changes should be excluded from these checks Fixes Ticket4884 Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		
							parent
							
								
									97be5d4d20
								
							
						
					
					
						commit
						377883c4be
					
				@ -1147,10 +1147,22 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
 | 
			
		||||
            av_assert1(frame->height               == link->h);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        av_assert1(frame->format                == link->format);
 | 
			
		||||
        av_assert1(av_frame_get_channels(frame) == link->channels);
 | 
			
		||||
        av_assert1(frame->channel_layout        == link->channel_layout);
 | 
			
		||||
        av_assert1(frame->sample_rate           == link->sample_rate);
 | 
			
		||||
        if (frame->format != link->format) {
 | 
			
		||||
            av_log(link->dst, AV_LOG_ERROR, "Format change is not supported\n");
 | 
			
		||||
            goto error;
 | 
			
		||||
        }
 | 
			
		||||
        if (av_frame_get_channels(frame) != link->channels) {
 | 
			
		||||
            av_log(link->dst, AV_LOG_ERROR, "Channel count change is not supported\n");
 | 
			
		||||
            goto error;
 | 
			
		||||
        }
 | 
			
		||||
        if (frame->channel_layout != link->channel_layout) {
 | 
			
		||||
            av_log(link->dst, AV_LOG_ERROR, "Channel layout change is not supported\n");
 | 
			
		||||
            goto error;
 | 
			
		||||
        }
 | 
			
		||||
        if (frame->sample_rate != link->sample_rate) {
 | 
			
		||||
            av_log(link->dst, AV_LOG_ERROR, "Sample rate change is not supported\n");
 | 
			
		||||
            goto error;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Go directly to actual filtering if possible */
 | 
			
		||||
@ -1163,6 +1175,9 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
 | 
			
		||||
    } else {
 | 
			
		||||
        return ff_filter_frame_framed(link, frame);
 | 
			
		||||
    }
 | 
			
		||||
error:
 | 
			
		||||
    av_frame_free(&frame);
 | 
			
		||||
    return AVERROR_PATCHWELCOME;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const AVClass *avfilter_get_class(void)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user