X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fratio.cc;h=bc83ae87c4059d0ba07b5d2d50cba70c64ec7c1c;hb=58f0530b1687673ea6e24a083063c3fdf2bff0b2;hp=275f4ef15ab5215a14b6679b6e52ed58b01b77dd;hpb=034feb503b0a38eb82c21ae8d9f83522fc63a25c;p=dcpomatic.git diff --git a/src/lib/ratio.cc b/src/lib/ratio.cc index 275f4ef15..bc83ae87c 100644 --- a/src/lib/ratio.cc +++ b/src/lib/ratio.cc @@ -24,7 +24,6 @@ #include "i18n.h" using std::string; -using std::stringstream; using std::vector; vector Ratio::_ratios; @@ -32,12 +31,12 @@ vector Ratio::_ratios; void Ratio::setup_ratios () { - _ratios.push_back (new Ratio (float(1290) / 1080, "119", _("1.19"), "F")); - _ratios.push_back (new Ratio (float(1440) / 1080, "133", _("4:3"), "F")); - _ratios.push_back (new Ratio (float(1480) / 1080, "137", _("Academy"), "F")); - _ratios.push_back (new Ratio (float(1485) / 1080, "138", _("1.375"), "F")); - _ratios.push_back (new Ratio (float(1800) / 1080, "166", _("1.66"), "F")); - _ratios.push_back (new Ratio (float(1920) / 1080, "178", _("16:9"), "F")); + _ratios.push_back (new Ratio (float(1290) / 1080, "119", _("1.19"), "119")); + _ratios.push_back (new Ratio (float(1440) / 1080, "133", _("4:3"), "133")); + _ratios.push_back (new Ratio (float(1480) / 1080, "137", _("Academy"), "137")); + _ratios.push_back (new Ratio (float(1485) / 1080, "138", _("1.375"), "137")); + _ratios.push_back (new Ratio (float(1800) / 1080, "166", _("1.66"), "166")); + _ratios.push_back (new Ratio (float(1920) / 1080, "178", _("16:9"), "178")); _ratios.push_back (new Ratio (float(1998) / 1080, "185", _("Flat"), "F")); _ratios.push_back (new Ratio (float(2048) / 858, "239", _("Scope"), "S")); _ratios.push_back (new Ratio (float(2048) / 1080, "full-frame", _("Full frame"), "C")); @@ -57,3 +56,36 @@ Ratio::from_id (string i) return *j; } + +/** @return Ratio corresponding to a given fractional ratio (+/- 0.01), or 0 */ +Ratio const * +Ratio::from_ratio (float r) +{ + vector::iterator j = _ratios.begin (); + while (j != _ratios.end() && fabs ((*j)->ratio() - r) > 0.01) { + ++j; + } + + if (j == _ratios.end ()) { + return 0; + } + + return *j; +} + +Ratio const * +Ratio::nearest_from_ratio (float r) +{ + Ratio const * nearest = 0; + float distance = FLT_MAX; + + for (vector::iterator i = _ratios.begin (); i != _ratios.end(); ++i) { + float const d = fabs ((*i)->ratio() - r); + if (d < distance) { + distance = d; + nearest = *i; + } + } + + return nearest; +}