avfilter/vf_framerate: simplify filter
authorMarton Balint <cus@passwd.hu>
Tue, 19 Dec 2017 22:49:41 +0000 (23:49 +0100)
committerMarton Balint <cus@passwd.hu>
Fri, 12 Jan 2018 22:40:41 +0000 (23:40 +0100)
commit0c31a3876d9a522add43ab62a9bcd3d857b28436
tree1284ebd9d6f917baaa065120c8ee2d88d2b7f5d2
parent860d991fcd715233b5b9eb1f6c7bf0aadefb6061
avfilter/vf_framerate: simplify filter

The framerate filter was quite convoluted with some filter_frame /
request_frame logic bugs. It seemed easier to rewrite the whole filter_frame /
request_frame part and also the frame interpolation ratio calculation part in
one step.

Notable changes:
- The filter now only stores 2 frames instead of 3
- filter_frame outputs all the frames it can to be able to handle consecutive
  filter_frame calls which previously caused early drops of buffered frames.
- because of this, request_frame is largely simplified and it only outputs
  frames on flush. Previously consecuitve request_frame calls could cause the
  filter to think it is in flush mode filling its buffer with the same frames
  causing a "ghost" effect on the output.
- PTS discontinuities are handled better
- frames with unknown PTS values are now dropped

Fixes ticket #4870.
Probably fixes ticket #5493.

Signed-off-by: Marton Balint <cus@passwd.hu>
libavfilter/vf_framerate.c
tests/ref/fate/filter-framerate-12bit-up