diff options
Diffstat (limited to 'src/lib/util.cc')
| -rw-r--r-- | src/lib/util.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc index 15efcc099..96b834fcc 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -763,12 +763,17 @@ FrameRateConversion::FrameRateConversion (float source, int dcp) , repeat (1) , change_speed (false) { - if (source > (dcp * 2)) { + if (fabs (source / 2.0 - dcp) < fabs (source - dcp)) { + /* The difference between source and DCP frame rate will be lower + (i.e. better) if we skip. + */ skip = true; - } - - if (source < dcp) { - repeat = floor (dcp / source); + } else if (fabs (source * 2 - dcp) < fabs (source - dcp)) { + /* The difference between source and DCP frame rate would be better + if we repeated each frame once; it may be better still if we + repeated more than once. Work out the required repeat. + */ + repeat = round (dcp / source); } change_speed = !about_equal (source * factor(), dcp); |
