Hi! Attached patch fixes ticket #4990 for me, I tested the following command line: $ ffmpeg -loglevel debug -i bugged.avi -vf fieldmatch,decimate -f null -
The first frames show the following debug output: before: [Parsed_decimate_0 @ 0x329e160] 1/5 frame drop: [Parsed_decimate_0 @ 0x329e160] #1: totdiff=7fffffffffffffff maxbdiff=7fffffffffffffff sc [DROP] [Parsed_decimate_0 @ 0x329e160] #2: totdiff=00ca660c maxbdiff=000130d8 [Parsed_decimate_0 @ 0x329e160] #3: totdiff=015715f3 maxbdiff=00022e12 [Parsed_decimate_0 @ 0x329e160] #4: totdiff=00c6e459 maxbdiff=0001df5b [Parsed_decimate_0 @ 0x329e160] #5: totdiff=000d4fce maxbdiff=00000d05 lowest after: [Parsed_decimate_1 @ 0x2714720] 1/5 frame drop: [Parsed_decimate_1 @ 0x2714720] #1: totdiff=04ba4100 maxbdiff=7fffffffffffffff [Parsed_decimate_1 @ 0x2714720] #2: totdiff=00ca660c maxbdiff=000130d8 [Parsed_decimate_1 @ 0x2714720] #3: totdiff=015715f3 maxbdiff=00022e12 [Parsed_decimate_1 @ 0x2714720] #4: totdiff=00c6e459 maxbdiff=0001df5b [Parsed_decimate_1 @ 0x2714720] #5: totdiff=000d4fce maxbdiff=00000d05 lowest [DROP] With the patch, the frame with the lowest diff is actually dropped instead of the first frame that indicates a scene change without the patch (iiuc). Please review, Carl Eugen
diff --git a/libavfilter/vf_decimate.c b/libavfilter/vf_decimate.c index 8b950b4..91c6d7f 100644 --- a/libavfilter/vf_decimate.c +++ b/libavfilter/vf_decimate.c @@ -169,7 +169,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) prv = dm->fid ? dm->queue[dm->fid - 1].frame : dm->last; if (!prv) { dm->queue[dm->fid].maxbdiff = INT64_MAX; - dm->queue[dm->fid].totdiff = INT64_MAX; + dm->queue[dm->fid].totdiff = dm->scthresh; } else { calc_diffs(dm, &dm->queue[dm->fid], prv, in); }
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel