From 428c59d9114ac97754f2bc06d07c4d1ba1860464 Mon Sep 17 00:00:00 2001 From: Kostya Date: Sat, 13 Aug 2011 16:44:04 +0000 Subject: avtools: reinitialise filter chain when input video stream changes dimensions Signed-off-by: Anton Khirnov --- avplay.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'avplay.c') diff --git a/avplay.c b/avplay.c index e9b58a817f..710c1b5469 100644 --- a/avplay.c +++ b/avplay.c @@ -1755,6 +1755,8 @@ static int video_thread(void *arg) AVFilterGraph *graph = avfilter_graph_alloc(); AVFilterContext *filt_out = NULL; int64_t pos; + int last_w = is->video_st->codec->width; + int last_h = is->video_st->codec->height; if ((ret = configure_video_filters(graph, is, vfilters)) < 0) goto the_end; @@ -1771,6 +1773,18 @@ static int video_thread(void *arg) while (is->paused && !is->videoq.abort_request) SDL_Delay(10); #if CONFIG_AVFILTER + if ( last_w != is->video_st->codec->width + || last_h != is->video_st->codec->height) { + av_dlog(NULL, "Changing size %dx%d -> %dx%d\n", last_w, last_h, + is->video_st->codec->width, is->video_st->codec->height); + avfilter_graph_free(&graph); + graph = avfilter_graph_alloc(); + if ((ret = configure_video_filters(graph, is, vfilters)) < 0) + goto the_end; + filt_out = is->out_video_filter; + last_w = is->video_st->codec->width; + last_h = is->video_st->codec->height; + } ret = get_filtered_video_frame(filt_out, frame, &picref, &tb); if (picref) { pts_int = picref->pts; -- cgit v1.2.3