[FFmpeg-cvslog] yadif: Flush filter on eof.
Robert Nagy
git at videolan.org
Wed May 16 02:30:34 CEST 2012
ffmpeg | branch: master | Robert Nagy <ronag89 at gmail.com> | Mon May 14 14:25:25 2012 +0200| [394a0267abd6a292932f858949449b5cd6f8efda] | committer: Anton Khirnov
yadif: Flush filter on eof.
Signed-off-by: Anton Khirnov <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=394a0267abd6a292932f858949449b5cd6f8efda
---
libavfilter/vf_yadif.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c
index fac0e5b..1cecdd9 100644
--- a/libavfilter/vf_yadif.c
+++ b/libavfilter/vf_yadif.c
@@ -61,6 +61,7 @@ typedef struct {
int w, int prefs, int mrefs, int parity, int mode);
const AVPixFmtDescriptor *csp;
+ int eof;
} YADIFContext;
#define CHECK(j)\
@@ -304,8 +305,21 @@ static int request_frame(AVFilterLink *link)
do {
int ret;
- if ((ret = avfilter_request_frame(link->src->inputs[0])))
+ if (yadif->eof)
+ return AVERROR_EOF;
+
+ ret = avfilter_request_frame(link->src->inputs[0]);
+
+ if (ret == AVERROR_EOF && yadif->next) {
+ AVFilterBufferRef *next = avfilter_ref_buffer(yadif->next, AV_PERM_READ);
+ next->pts = yadif->next->pts * 2 - yadif->cur->pts;
+
+ start_frame(link->src->inputs[0], next);
+ end_frame(link->src->inputs[0]);
+ yadif->eof = 1;
+ } else if (ret < 0) {
return ret;
+ }
} while (!yadif->cur);
return 0;
More information about the ffmpeg-cvslog
mailing list