Before sending patch, I had tested a variety of settings like this: for r in 25 10 2 1; do for t in 1 2; do ./ffmpeg -r $r -t $t \ -i fate-suite/ffmpeg-synthetic/vsynth1/%02d.pgm \ ${filt2} -y /tmp/none.flv 2>&1 | tail -n 1 ... do some comparsions between old and new done done
And found that for one frame we got no output. Results for rate 1, time 1: Rate: 1 Time 1 Num frames 1 [Parsed_idet_0 @ 0x299e7f0] Multi frame detection: TFF:0 BFF:0 Progressive:0 Undetermined:0 [Parsed_idet_0 @ 0x19537f0] Multi frame detection: TFF:0 BFF:0 Progressive:0 Undetermined:0 On Wed, Oct 22, 2014 at 11:18 AM, Thierry Foucu <tfo...@gmail.com> wrote: > On Wed, Oct 22, 2014 at 7:43 AM, Pascal Massimino < > pascal.massim...@gmail.com> wrote: > > > Hi, > > > > On Tue, Oct 21, 2014 at 11:40 PM, Neil Birkbeck <neil.birkb...@gmail.com > > > > wrote: > > > > > Uses a similar approach as vf_yadif to flush the last frame in idet. > > > > > > Quick test with 50 frames from vsynth1: > > > ./ffmpeg.old -i fate-suite/ffmpeg-synthetic/vsynth1/%02d.pgm -vf idet > -f > > > mp4 -y /dev/null 2>&1 | grep Multi > > > (gives) [Parsed_idet_0 @ 0x261ebb0] Multi frame detection: TFF:0 BFF:0 > > > Progressive:48 Undetermined:1 > > > > > > ./ffmpeg -i fate-suite/ffmpeg-synthetic/vsynth1/%02d.pgm -vf idet -f > mp4 > > > -y /dev/null 2>&1 | grep Multi > > > (gives) [Parsed_idet_0 @ 0x35a0bb0] Multi frame detection: TFF:0 BFF:0 > > > Progressive:49 Undetermined:1 > > > > > > > > Seems ok. > > Note that it seems to be reporting one extra frame always. E.g.: > > > > ./ffmpeg -i test.mov -vframes 3 -an -vf idet -f null /dev/null 2>&1 | > grep > > idet > > [Parsed_idet_0 @ 0x7feab8500160] Single frame detection: TFF:0 BFF:0 > > Progressive:4 Undetermined:0 > > [Parsed_idet_0 @ 0x7feab8500160] Multi frame detection: TFF:0 BFF:0 > > Progressive:4 Undetermined:0 > > > > or, with 1 frame: > > ./ffmpeg -i test.mov -vframes 1 -an -vf idet -f null /dev/null 2>&1 | > grep > > idet > > [Parsed_idet_0 @ 0x7fc958600c80] Single frame detection: TFF:0 BFF:0 > > Progressive:2 Undetermined:0 > > [Parsed_idet_0 @ 0x7fc958600c80] Multi frame detection: TFF:0 BFF:0 > > Progressive:2 Undetermined:0 > > > > > > > it seems the option -vframes is applied after the filter chain. > > You can check by doing: > > ffmpeg -i test.mov -vframes 1 -vf showinfo,idet,showinfo -f null /dev/null > 2>&1 | grep Parsed_showinfo_0 > [Parsed_showinfo_0 @ 0x3643860] n:0 pts:4 pts_time:4.44444e-05 pos:564959 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:1 type:I checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:1 pts:3758 pts_time:0.0417556 pos:565077 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:2 pts:7512 pts_time:0.0834667 pos:565094 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:3 pts:11265 pts_time:0.125167 pos:565058 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:P checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:4 pts:15019 pts_time:0.166878 pos:565131 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:5 pts:18773 pts_time:0.208589 pos:565148 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:6 pts:22527 pts_time:0.2503 pos:565111 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:P checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:7 pts:26280 pts_time:0.292 pos:565184 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:8 pts:30034 pts_time:0.333711 pos:565201 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:9 pts:33788 pts_time:0.375422 pos:565165 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:P checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:10 pts:37542 pts_time:0.417133 pos:565237 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:11 pts:41295 pts_time:0.458833 pos:573273 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:12 pts:45049 pts_time:0.500544 pos:565218 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:P checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:13 pts:48803 pts_time:0.542256 pos:573309 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:B checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > [Parsed_showinfo_0 @ 0x3643860] n:14 pts:56310 pts_time:0.625667 pos:573290 > fmt:yuv420p sar:0/1 s:640x360 i:P iskey:0 type:P checksum:A1E65077 > plane_checksum:[A0094348 02828690 02828690] > > > and you will see that more than 1 frame are injected in the filter. > but if you look at the output file, it will contains 1 frame only. > > > > > > > > > Fate tests have been updated. > > > > > > (In testing, it seems this filter will also need a subsequent patch for > > > single frame input) > > > > > > Signed-off-by: Neil Birkbeck <neil.birkb...@gmail.com> > > > --- > > > libavfilter/vf_idet.c | 31 +++++++++++++++++++++++++++++++ > > > libavfilter/vf_idet.h | 1 + > > > tests/ref/fate/filter-idet | 2 +- > > > 3 files changed, 33 insertions(+), 1 deletion(-) > > > > > > diff --git a/libavfilter/vf_idet.c b/libavfilter/vf_idet.c > > > index 339f4a6..b9c4070 100644 > > > --- a/libavfilter/vf_idet.c > > > +++ b/libavfilter/vf_idet.c > > > @@ -191,6 +191,35 @@ static int filter_frame(AVFilterLink *link, > AVFrame > > > *picref) > > > return ff_filter_frame(ctx->outputs[0], > av_frame_clone(idet->cur)); > > > } > > > > > > +static int request_frame(AVFilterLink *link) > > > +{ > > > + AVFilterContext *ctx = link->src; > > > + IDETContext *idet = ctx->priv; > > > + > > > + do { > > > + int ret; > > > + > > > + if (idet->eof) > > > + return AVERROR_EOF; > > > + > > > + ret = ff_request_frame(link->src->inputs[0]); > > > + > > > + if (ret == AVERROR_EOF && idet->cur) { > > > + AVFrame *next = av_frame_clone(idet->next); > > > + > > > + if (!next) > > > + return AVERROR(ENOMEM); > > > + > > > + filter_frame(link->src->inputs[0], next); > > > + idet->eof = 1; > > > + } else if (ret < 0) { > > > + return ret; > > > + } > > > + } while (!idet->cur); > > > + > > > + return 0; > > > +} > > > + > > > static av_cold void uninit(AVFilterContext *ctx) > > > { > > > IDETContext *idet = ctx->priv; > > > @@ -253,6 +282,7 @@ static av_cold int init(AVFilterContext *ctx) > > > { > > > IDETContext *idet = ctx->priv; > > > > > > + idet->eof = 0; > > > idet->last_type = UNDETERMINED; > > > memset(idet->history, UNDETERMINED, HIST_SIZE); > > > > > > @@ -279,6 +309,7 @@ static const AVFilterPad idet_outputs[] = { > > > .name = "default", > > > .type = AVMEDIA_TYPE_VIDEO, > > > .config_props = config_output, > > > + .request_frame = request_frame > > > }, > > > { NULL } > > > }; > > > diff --git a/libavfilter/vf_idet.h b/libavfilter/vf_idet.h > > > index ef29fff..57332df 100644 > > > --- a/libavfilter/vf_idet.h > > > +++ b/libavfilter/vf_idet.h > > > @@ -50,6 +50,7 @@ typedef struct { > > > ff_idet_filter_func filter_line; > > > > > > const AVPixFmtDescriptor *csp; > > > + int eof; > > > } IDETContext; > > > > > > void ff_idet_init_x86(IDETContext *idet, int for_16b); > > > diff --git a/tests/ref/fate/filter-idet b/tests/ref/fate/filter-idet > > > index f1396c5..2f9f11c 100644 > > > --- a/tests/ref/fate/filter-idet > > > +++ b/tests/ref/fate/filter-idet > > > @@ -1 +1 @@ > > > -idet 1790336872e844c867a53150b8ee8810 > > > +idet 005e6ddc8a5daf11cf866a1ec76c2572 > > > -- > > > 2.1.0.rc2.206.gedb03e5 > > > > > > _______________________________________________ > > > ffmpeg-devel mailing list > > > ffmpeg-devel@ffmpeg.org > > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel