ffplay: flush video filters on seek

Actually we just re-create the filters, since there is no way to flush them.
Fixes hangup with yadif filter on seeking forward caused by a filtered frame
with a pts before the seek.

Signed-off-by: Marton Balint <cus@passwd.hu>
pull/8/head
Marton Balint 12 years ago
parent 1427c6842d
commit f65e57124f
  1. 5
      ffplay.c

@ -1810,6 +1810,7 @@ static int video_thread(void *arg)
int last_w = 0; int last_w = 0;
int last_h = 0; int last_h = 0;
enum AVPixelFormat last_format = -2; enum AVPixelFormat last_format = -2;
int last_serial = -1;
if (codec->codec->capabilities & CODEC_CAP_DR1) { if (codec->codec->capabilities & CODEC_CAP_DR1) {
is->use_dr1 = 1; is->use_dr1 = 1;
@ -1840,7 +1841,8 @@ static int video_thread(void *arg)
#if CONFIG_AVFILTER #if CONFIG_AVFILTER
if ( last_w != frame->width if ( last_w != frame->width
|| last_h != frame->height || last_h != frame->height
|| last_format != frame->format) { || last_format != frame->format
|| last_serial != serial) {
av_log(NULL, AV_LOG_INFO, "Frame changed from size:%dx%d to size:%dx%d\n", av_log(NULL, AV_LOG_INFO, "Frame changed from size:%dx%d to size:%dx%d\n",
last_w, last_h, frame->width, frame->height); last_w, last_h, frame->width, frame->height);
avfilter_graph_free(&graph); avfilter_graph_free(&graph);
@ -1858,6 +1860,7 @@ static int video_thread(void *arg)
last_w = frame->width; last_w = frame->width;
last_h = frame->height; last_h = frame->height;
last_format = frame->format; last_format = frame->format;
last_serial = serial;
} }
frame->pts = pts_int; frame->pts = pts_int;

Loading…
Cancel
Save