Pad times with zeros; add Time::rebase().
authorCarl Hetherington <cth@carlh.net>
Wed, 6 May 2015 22:58:16 +0000 (23:58 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 6 May 2015 22:58:16 +0000 (23:58 +0100)
src/dcp_time.cc
src/dcp_time.h
test/dcp_time_test.cc
test/write_subtitle_test.cc

index c3c60f662e59890bdba810f0210659f1fa837622..8e152ad28ca51e9c23bfce229afbbda11e941d8c 100644 (file)
@@ -238,12 +238,15 @@ dcp::operator/ (Time a, Time const & b)
        return float (at) / bt;
 }
 
-/** @return A string of the form h:m:s:e */
+/** @return A string of the form h:m:s:e padded as in 00:00:00:000 */
 string
 Time::to_string () const
 {
        stringstream str;
-       str << h << ":" << m << ":" << s << ":" << e;
+       str << setw(2) << setfill('0') << h << ":"
+           << setw(2) << setfill('0') << m << ":"
+           << setw(2) << setfill('0') << s << ":"
+           << setw(3) << setfill('0') << e;
        return str.str ();
 }
 
@@ -258,3 +261,9 @@ Time::to_seconds () const
 {
        return h * 3600 + m * 60 + s + double(e) / tcr;
 }
+
+Time
+Time::rebase (int tcr_) const
+{
+       return Time (h, m, s, rint (float (e) * tcr_ / tcr), tcr_);
+}
index c7391e636ced139bddd3c537487afd4f04ad9baa..907a83065c129cb5ca8dbaf738c5f38890ae88cd 100644 (file)
@@ -72,6 +72,7 @@ public:
        std::string to_string () const;
        double to_seconds () const;
        int64_t to_editable_units (int tcr_) const;
+       Time rebase (int tcr_) const;
 
 private:
        void set (double seconds, int tcr);
index c987517ea9e40425d1ceb3dec6bf095fc95dfb06..3315523bf3bcc141fc6cded9759fa21aa829d012 100644 (file)
@@ -30,7 +30,7 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        BOOST_CHECK_EQUAL (t.s, 34);
        BOOST_CHECK_EQUAL (t.m, 18);
        BOOST_CHECK_EQUAL (t.h, 11);
-       BOOST_CHECK_EQUAL (t.to_string(), "11:18:34:73");
+       BOOST_CHECK_EQUAL (t.to_string(), "11:18:34:073");
 
        /* Use a tcr of 24 so that the editable event is a frame */
        dcp::Time a (3, 2, 3, 4, 24);
@@ -41,7 +41,7 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        BOOST_CHECK_EQUAL (r.m, 58);
        BOOST_CHECK_EQUAL (r.s, 58);
        BOOST_CHECK_EQUAL (r.e, 23);
-       BOOST_CHECK_EQUAL (r.to_string(), "0:58:58:23");
+       BOOST_CHECK_EQUAL (r.to_string(), "00:58:58:023");
 
        /* Different tcr (25) */
        a = dcp::Time (1, 58, 56, 2, 25);
@@ -51,7 +51,7 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        BOOST_CHECK_EQUAL (r.m, 6);
        BOOST_CHECK_EQUAL (r.s, 8);
        BOOST_CHECK_EQUAL (r.e, 3);
-       BOOST_CHECK_EQUAL (r.to_string(), "3:6:8:3");
+       BOOST_CHECK_EQUAL (r.to_string(), "03:06:08:003");
 
        /* Another arbitrary tcr (30) */
        a = dcp::Time (24, 12, 6, 3, 30);
@@ -88,4 +88,10 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        b = dcp::Time (0, 0, 0, 4, 48);
        r = a + b;
        BOOST_CHECK_EQUAL (r, dcp::Time (0, 0, 0, 240, 1152));
+
+       /* Check rebase() */
+       a = dcp::Time (1, 58, 56, 2, 25);
+       BOOST_CHECK_EQUAL (a.rebase (250), dcp::Time (1, 58, 56, 20, 250));
+       b = dcp::Time (9, 12, 41, 17, 99);
+       BOOST_CHECK_EQUAL (b.rebase (250), dcp::Time (9, 12, 41, 43, 250));
 }
index 8416abfb5945d7849ac91f04c8b666c38726d781..b5daa2b1774f1befd8d02f9d3fdff7c0cf7a460f 100644 (file)
@@ -77,12 +77,12 @@ BOOST_AUTO_TEST_CASE (write_subtitle_test)
                "  <ReelNumber>1</ReelNumber>\n"
                "  <Language>EN</Language>\n"
                "  <Font Id=\"Frutiger\" Italic=\"no\" Color=\"FFFFFFFF\" Size=\"48\" Effect=\"none\" EffectColor=\"FF000000\" Script=\"normal\" Underlined=\"no\" Weight=\"normal\">\n"
-               "    <Subtitle SpotNumber=\"1\" TimeIn=\"0:4:9:22\" TimeOut=\"0:4:11:22\" FadeUpTime=\"0\" FadeDownTime=\"0\">\n"
+               "    <Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:022\" TimeOut=\"00:04:11:022\" FadeUpTime=\"0\" FadeDownTime=\"0\">\n"
                "      <Text VAlign=\"top\" VPosition=\"80\">Hello world</Text>\n"
                "    </Subtitle>\n"
                "  </Font>\n"
                "  <Font Italic=\"yes\" Color=\"FF800040\" Size=\"91\" Effect=\"border\" EffectColor=\"FF010203\" Script=\"normal\" Underlined=\"no\" Weight=\"normal\">\n"
-               "    <Subtitle SpotNumber=\"2\" TimeIn=\"5:41:0:21\" TimeOut=\"6:12:15:21\" FadeUpTime=\"930790\" FadeDownTime=\"4591830\">\n"
+               "    <Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:021\" TimeOut=\"06:12:15:021\" FadeUpTime=\"930790\" FadeDownTime=\"4591830\">\n"
                "      <Text VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>\n"
                "    </Subtitle>\n"
                "  </Font>\n"