diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-03-01 21:35:41 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-03-01 21:35:41 +0000 |
| commit | 6a516da9a403ce05b2b78b3cf1376f4dfe4be3fe (patch) | |
| tree | 7c5307ceefa5a6fc6a11d39bbfb2deca0e29758d /src/lib/util.cc | |
| parent | dd7cf1ef6e860243b80f4c47a99393244f63a3d5 (diff) | |
Make film hold its DCP frame rate.
Diffstat (limited to 'src/lib/util.cc')
| -rw-r--r-- | src/lib/util.cc | 37 |
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); +} |
