Merge branch 'master' into format-fix
authorCarl Hetherington <cth@carlh.net>
Mon, 15 Apr 2013 20:57:23 +0000 (21:57 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 15 Apr 2013 20:57:23 +0000 (21:57 +0100)
src/lib/format.cc
src/lib/format.h
src/wx/film_viewer.cc
test/test.cc

index faadcd79779edf22b266093c0ce3a4d5015d2f7f..640eee1670369911c5608eb5f308d51306bb5e79 100644 (file)
@@ -72,51 +72,51 @@ Format::setup_formats ()
 {
        /// TRANSLATORS: these are film picture aspect ratios; "Academy" means 1.37, "Flat" 1.85 and "Scope" 2.39.
        _formats.push_back (
-               new FixedFormat (119, libdcp::Size (1285, 1080), N_("119"), _("1.19"), N_("F")
+               new FixedFormat (1.19, libdcp::Size (1285, 1080), N_("119"), _("1.19"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (133, libdcp::Size (1436, 1080), N_("133"), _("1.33"), N_("F")
+               new FixedFormat (4.0 / 3.0, libdcp::Size (1436, 1080), N_("133"), _("4:3"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (138, libdcp::Size (1485, 1080), N_("138"), _("1.375"), N_("F")
+               new FixedFormat (1.38, libdcp::Size (1485, 1080), N_("138"), _("1.375"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (133, libdcp::Size (1998, 1080), N_("133-in-flat"), _("4:3 within Flat"), N_("F")
+               new FixedFormat (4.0 / 3.0, libdcp::Size (1998, 1080), N_("133-in-flat"), _("4:3 within Flat"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (137, libdcp::Size (1480, 1080), N_("137"), _("Academy"), N_("F")
+               new FixedFormat (1.37, libdcp::Size (1480, 1080), N_("137"), _("Academy"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (166, libdcp::Size (1793, 1080), N_("166"), _("1.66"), N_("F")
+               new FixedFormat (1.66, libdcp::Size (1793, 1080), N_("166"), _("1.66"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (166, libdcp::Size (1998, 1080), N_("166-in-flat"), _("1.66 within Flat"), N_("F")
+               new FixedFormat (1.66, libdcp::Size (1998, 1080), N_("166-in-flat"), _("1.66 within Flat"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (178, libdcp::Size (1998, 1080), N_("178-in-flat"), _("16:9 within Flat"), N_("F")
+               new FixedFormat (1.78, libdcp::Size (1998, 1080), N_("178-in-flat"), _("16:9 within Flat"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (178, libdcp::Size (1920, 1080), N_("178"), _("16:9"), N_("F")
+               new FixedFormat (1.78, libdcp::Size (1920, 1080), N_("178"), _("16:9"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (185, libdcp::Size (1998, 1080), N_("185"), _("Flat"), N_("F")
+               new FixedFormat (1.85, libdcp::Size (1998, 1080), N_("185"), _("Flat"), N_("F")
                        ));
        
        _formats.push_back (
-               new FixedFormat (178, libdcp::Size (2048, 858), N_("178-in-scope"), _("16:9 within Scope"), N_("S")
+               new FixedFormat (1.78, libdcp::Size (2048, 858), N_("178-in-scope"), _("16:9 within Scope"), N_("S")
                        ));
        
        _formats.push_back (
-               new FixedFormat (239, libdcp::Size (2048, 858), N_("239"), _("Scope"), N_("S")
+               new FixedFormat (2.39, libdcp::Size (2048, 858), N_("239"), _("Scope"), N_("S")
                        ));
                
        _formats.push_back (
@@ -181,12 +181,12 @@ Format::all ()
        return _formats;
 }
 
-/** @param r Ratio multiplied by 100 (e.g. 185)
+/** @param r Ratio
  *  @param dcp Size (in pixels) of the images that we should put in a DCP.
  *  @param id ID (e.g. 185)
  *  @param n Nick name (e.g. Flat)
  */
-FixedFormat::FixedFormat (int r, libdcp::Size dcp, string id, string n, string d)
+FixedFormat::FixedFormat (float r, libdcp::Size dcp, string id, string n, string d)
        : Format (dcp, id, n, d)
        , _ratio (r)
 {
@@ -199,7 +199,7 @@ FixedFormat::FixedFormat (int r, libdcp::Size dcp, string id, string n, string d
 int
 Format::dcp_padding (shared_ptr<const Film> f) const
 {
-       int p = rint ((_dcp_size.width - (_dcp_size.height * ratio_as_float(f))) / 2.0);
+       int p = rint ((_dcp_size.width - (_dcp_size.height * ratio(f))) / 2.0);
 
        /* This comes out -ve for Scope; bodge it */
        if (p < 0) {
@@ -210,7 +210,7 @@ Format::dcp_padding (shared_ptr<const Film> f) const
 }
 
 float
-Format::container_ratio_as_float () const
+Format::container_ratio () const
 {
        return static_cast<float> (_dcp_size.width) / _dcp_size.height;
 }
@@ -221,14 +221,8 @@ VariableFormat::VariableFormat (libdcp::Size dcp, string id, string n, string d)
 
 }
 
-int
-VariableFormat::ratio_as_integer (shared_ptr<const Film> f) const
-{
-       return rint (ratio_as_float (f) * 100);
-}
-
 float
-VariableFormat::ratio_as_float (shared_ptr<const Film> f) const
+VariableFormat::ratio (shared_ptr<const Film> f) const
 {
        libdcp::Size const c = f->cropped_size (f->size ());
        return float (c.width) / c.height;
index 783ff25ce455b31dd207fa4f37026d8fee132a1d..e953062329d9b583a0cfd078159499fb991320dc 100644 (file)
@@ -38,16 +38,8 @@ public:
                , _dci_name (d)
        {}
 
-       /** @return the aspect ratio multiplied by 100
-        *  (e.g. 239 for Cinemascope 2.39:1)
-        */
-       virtual int ratio_as_integer (boost::shared_ptr<const Film> f) const = 0;
-
-       /** @return the ratio as a floating point number */
-       virtual float ratio_as_float (boost::shared_ptr<const Film> f) const = 0;
-
-       /** @return the ratio of the container (including any padding) as a floating point number */
-       float container_ratio_as_float () const;
+       /** @return the ratio of the container (including any padding) */
+       float container_ratio () const;
 
        int dcp_padding (boost::shared_ptr<const Film> f) const;
 
@@ -84,6 +76,9 @@ public:
        static void setup_formats ();
 
 protected:     
+        /** @return the ratio */
+       virtual float ratio (boost::shared_ptr<const Film> f) const = 0;
+
        /** libdcp::Size in pixels of the images that we should
         *  put in a DCP for this ratio.  This size will not correspond
         *  to the ratio when we are doing things like 16:9 in a Flat frame.
@@ -107,22 +102,17 @@ private:
 class FixedFormat : public Format
 {
 public:
-       FixedFormat (int, libdcp::Size, std::string, std::string, std::string);
+       FixedFormat (float, libdcp::Size, std::string, std::string, std::string);
 
-       int ratio_as_integer (boost::shared_ptr<const Film>) const {
+       float ratio (boost::shared_ptr<const Film>) const {
                return _ratio;
        }
 
-       float ratio_as_float (boost::shared_ptr<const Film>) const {
-               return _ratio / 100.0;
-       }
-
        std::string name () const;
        
 private:
 
-       /** Ratio expressed as the actual ratio multiplied by 100 */
-       int _ratio;
+       float _ratio;
 };
 
 class VariableFormat : public Format
@@ -130,8 +120,7 @@ class VariableFormat : public Format
 public:
        VariableFormat (libdcp::Size, std::string, std::string, std::string);
 
-       int ratio_as_integer (boost::shared_ptr<const Film> f) const;
-       float ratio_as_float (boost::shared_ptr<const Film> f) const;
+       float ratio (boost::shared_ptr<const Film> f) const;
 
        std::string name () const;
 };
index dbbff37133ff5d7e97ffbacfb8e8e409f06da214..40b74ac39f3eaf5595fae713045e204ff9b8c878 100644 (file)
@@ -332,7 +332,7 @@ FilmViewer::calculate_sizes ()
        Format const * format = _film->format ();
        
        float const panel_ratio = static_cast<float> (_panel_size.width) / _panel_size.height;
-       float const film_ratio = format ? format->container_ratio_as_float () : 1.78;
+       float const film_ratio = format ? format->container_ratio () : 1.78;
                        
        if (panel_ratio < film_ratio) {
                /* panel is less widscreen than the film; clamp width */
index 6fad0986b4c8728c0d2f7fcdbf6e3a9de7ecbc75..4c468e22d86331a55d834f1ad8f322121835a3d5 100644 (file)
@@ -222,11 +222,13 @@ BOOST_AUTO_TEST_CASE (format_test)
        
        Format const * f = Format::from_nickname ("Flat");
        BOOST_CHECK (f);
-       BOOST_CHECK_EQUAL (f->ratio_as_integer(shared_ptr<const Film> ()), 185);
+       BOOST_CHECK_EQUAL (f->dcp_size().width, 1998);
+       BOOST_CHECK_EQUAL (f->dcp_size().height, 1080);
        
        f = Format::from_nickname ("Scope");
        BOOST_CHECK (f);
-       BOOST_CHECK_EQUAL (f->ratio_as_integer(shared_ptr<const Film> ()), 239);
+       BOOST_CHECK_EQUAL (f->dcp_size().width, 2048);
+       BOOST_CHECK_EQUAL (f->dcp_size().height, 858);
 }
 
 /* Test VariableFormat-based scaling of content */