Various fixes to make tests pass again.
[dcpomatic.git] / src / lib / util.cc
index 15efcc099555637ca58b8775305c7f14de83fabc..96b834fcc88fe70d3f1be8429b25920a8322318f 100644 (file)
@@ -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);