/*
- Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "i18n.h"
+using std::string;
+
static bool
-about_equal (float a, float b)
+about_equal (double a, double b)
{
/* A film of F seconds at f FPS will be Ff frames;
Consider some delta FPS d, so if we run the same
= Ff + Fd - Ff frames
= Fd frames
= Fd/f seconds
-
+
So if we accept a difference of 1 frame, ie 1/f seconds, we can
say that
1/f = Fd/f
ie 1 = Fd
ie d = 1/F
-
+
So for a 3hr film, ie F = 3 * 60 * 60 = 10800, the acceptable
FPS error is 1/F ~= 0.0001 ~= 10-e4
*/
}
-FrameRateChange::FrameRateChange (float source, int dcp)
- : skip (false)
+FrameRateChange::FrameRateChange (double source_, int dcp_)
+ : source (source_)
+ , dcp (dcp_)
+ , skip (false)
, repeat (1)
, change_speed (false)
{
speed_up = dcp / (source * factor());
change_speed = !about_equal (speed_up, 1.0);
+}
+
+string
+FrameRateChange::description () const
+{
+ string description;
if (!skip && repeat == 1 && !change_speed) {
description = _("Content and DCP have the same rate.\n");
}
if (change_speed) {
- float const pc = dcp * 100 / (source * factor());
+ double const pc = dcp * 100 / (source * factor());
description += String::compose (_("DCP will run at %1%% of the content speed.\n"), pc);
}
}
+
+ return description;
}