X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fratio.cc;h=29c22c78deadde5d6517a4574192359384f97ce5;hb=4dbc6ef917aeceb906b1ef1caf6911033e7e2c54;hp=fbd7022322c5b0e9e02d8e94785baaa54e23c4c5;hpb=04533b9cf34ce8089113015715083ee9c5b2b001;p=dcpomatic.git diff --git a/src/lib/ratio.cc b/src/lib/ratio.cc index fbd702232..29c22c78d 100644 --- a/src/lib/ratio.cc +++ b/src/lib/ratio.cc @@ -17,14 +17,14 @@ */ -#include #include "ratio.h" #include "util.h" +#include +#include #include "i18n.h" using std::string; -using std::stringstream; using std::vector; vector Ratio::_ratios; @@ -57,3 +57,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; +}