diff options
author | Neil Birkbeck <neil.birkbeck@gmail.com> | 2014-11-28 13:41:02 -0800 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-11-28 23:38:59 +0100 |
commit | dd5d61795690e339ae271692e7ab9df66b5eb153 (patch) | |
tree | 0d5fc6fb7282bb6b525d4daa9592332d3dea9ab4 /libavfilter/vf_idet.c | |
parent | 27897d2ef6d3a267bf1d9417f8b43bee8ba710a9 (diff) | |
download | ffmpeg-dd5d61795690e339ae271692e7ab9df66b5eb153.tar.gz |
avfilter/vf_idet: Fixing idet for single-frame inputs.
Handle single frame inputs similar to yadif (e.g., https://github.com/FFmpeg/FFmpeg/commit/0f9f24c9cfd291c7ece4d3bad64fdf06d107168a and https://github.com/FFmpeg/FFmpeg/commit/681e008d06d2241d50abe6316c908a184ddc5942)
Example:
ffmpeg -r 1 -t 1 -i fate-suite/ffmpeg-synthetic/vsynth1/%02d.pgm -vf idet,showinfo -f null -y /dev/null
Previously:
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
[Parsed_idet_0 @ 0x36389d0] Repeated Fields: Neither: 0 Top: 0 Bottom: 0
After patch:
[Parsed_showinfo_1 @ 0x1909810] n:0 pts:0 pts_time:0 pos:-1 fmt:gray sar:0/1 s:352x432 ...
[Parsed_idet_0 @ 0x18f9bb0] Repeated Fields: Neither: 1 Top: 0 Bottom: 0
Fate looks good.
Signed-off-by: Neil Birkbeck <neil.birkbeck@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/vf_idet.c')
-rw-r--r-- | libavfilter/vf_idet.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libavfilter/vf_idet.c b/libavfilter/vf_idet.c index ed21eea467..9a25042a89 100644 --- a/libavfilter/vf_idet.c +++ b/libavfilter/vf_idet.c @@ -241,11 +241,12 @@ static int filter_frame(AVFilterLink *link, AVFrame *picref) idet->cur = idet->next; idet->next = picref; - if (!idet->cur) - return 0; + if (!idet->cur && + !(idet->cur = av_frame_clone(idet->next))) + return AVERROR(ENOMEM); if (!idet->prev) - idet->prev = av_frame_clone(idet->cur); + return 0; if (!idet->csp) idet->csp = av_pix_fmt_desc_get(link->format); @@ -284,7 +285,7 @@ static int request_frame(AVFilterLink *link) } else if (ret < 0) { return ret; } - } while (!idet->cur); + } while (!idet->prev); return 0; } |