summaryrefslogtreecommitdiff
path: root/src/lib/util.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-03-01 21:35:41 +0000
committerCarl Hetherington <cth@carlh.net>2013-03-01 21:35:41 +0000
commit6a516da9a403ce05b2b78b3cf1376f4dfe4be3fe (patch)
tree7c5307ceefa5a6fc6a11d39bbfb2deca0e29758d /src/lib/util.cc
parentdd7cf1ef6e860243b80f4c47a99393244f63a3d5 (diff)
Make film hold its DCP frame rate.
Diffstat (limited to 'src/lib/util.cc')
-rw-r--r--src/lib/util.cc37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc
index de69636da..85a04ed17 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -375,21 +375,12 @@ public:
, dcp (dcp_)
{}
- bool skip () const {
- return !about_equal (source, dcp) && source > dcp;
- }
-
- bool repeat () const {
- return !about_equal (source, dcp) && source < dcp;
- }
-
float source;
int dcp;
};
-/** @param fps Arbitrary source frames-per-second value */
-/** XXX: this could be slow-ish */
-DCPFrameRate::DCPFrameRate (float source_fps)
+int
+best_dcp_frame_rate (float source_fps)
{
list<int> const allowed_dcp_frame_rates = Config::instance()->allowed_dcp_frame_rates ();
@@ -427,14 +418,8 @@ DCPFrameRate::DCPFrameRate (float source_fps)
++i;
}
- if (!best) {
- throw EncodeError (_("cannot find a suitable DCP frame rate for this source"));
- }
-
- frames_per_second = best->dcp;
- skip = best->skip ();
- repeat = best->repeat ();
- change_speed = !about_equal (source_fps * factor(), frames_per_second);
+ assert (best);
+ return best->dcp;
}
/** @param An arbitrary sampling rate.
@@ -962,3 +947,17 @@ AudioMapping::dcp_channels () const
return _source_channels;
}
+
+FrameRateConversion::FrameRateConversion (float source, int dcp)
+ : skip (false)
+ , repeat (false)
+ , change_speed (false)
+{
+ if (fabs (source / 2.0 - dcp) < (fabs (source - dcp))) {
+ skip = true;
+ } else if (fabs (source * 2 - dcp) < fabs (source - dcp)) {
+ repeat = true;
+ }
+
+ change_speed = !about_equal (source * factor(), dcp);
+}