Extend SubtitleAsset::subtitles_during to allow asking for subtitles either starting...
authorCarl Hetherington <cth@carlh.net>
Sun, 5 Jul 2015 23:28:09 +0000 (00:28 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 5 Jul 2015 23:28:09 +0000 (00:28 +0100)
src/subtitle_asset.cc
src/subtitle_asset.h
test/read_interop_subtitle_test.cc

index 4d411e5adcbb14e07f45bd32788c6c75a3f5ed3f..077b52889ee0993caeada9b7d1d592c57a003076 100644 (file)
@@ -148,11 +148,11 @@ SubtitleAsset::maybe_add_subtitle (string text, ParseState const & parse_state)
 }
 
 list<SubtitleString>
-SubtitleAsset::subtitles_during (Time from, Time to) const
+SubtitleAsset::subtitles_during (Time from, Time to, bool starting) const
 {
        list<SubtitleString> s;
        for (list<SubtitleString>::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
-               if (i->out() >= from && i->in() <= to) {
+               if ((starting && from <= i->in() && i->in() < to) || (!starting && i->out() >= from && i->in() <= to)) {
                        s.push_back (*i);
                }
        }
index 44ac455f5fff44e483174e820b10d7482d1e86cd..69bf40f86e56d56798e75135d8f097fef9e1e687 100644 (file)
@@ -63,7 +63,7 @@ public:
                NoteHandler note
                ) const;
 
-       std::list<SubtitleString> subtitles_during (Time from, Time to) const;
+       std::list<SubtitleString> subtitles_during (Time from, Time to, bool starting) const;
        std::list<SubtitleString> const & subtitles () const {
                return _subtitles;
        }
index aa1baeee63ab87c65d580d2c611895c90565147d..a66327f1c59e73e629888c0f13028eef7a53b147 100644 (file)
@@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
        BOOST_CHECK_EQUAL (interop_lfn->id, "theFontId");
        BOOST_CHECK_EQUAL (interop_lfn->uri, "arial.ttf");
 
-       list<dcp::SubtitleString> s = subs.subtitles_during (dcp::Time (0, 0, 6, 1, 250), dcp::Time (0, 0, 6, 2, 250));
+       list<dcp::SubtitleString> s = subs.subtitles_during (dcp::Time (0, 0, 6, 1, 250), dcp::Time (0, 0, 6, 2, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 1);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFontId"),
@@ -65,7 +65,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
                                   dcp::Time (0, 0, 0, 1, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 0, 7, 190, 250), dcp::Time (0, 0, 7, 191, 250));
+       s = subs.subtitles_during (dcp::Time (0, 0, 7, 190, 250), dcp::Time (0, 0, 7, 191, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFontId"),
@@ -104,7 +104,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
                                   dcp::Time (0, 0, 0, 1, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 0, 11, 95, 250), dcp::Time (0, 0, 11, 96, 250));
+       s = subs.subtitles_during (dcp::Time (0, 0, 11, 95, 250), dcp::Time (0, 0, 11, 96, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 1);
        BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
                                   string ("theFontId"),
@@ -125,7 +125,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
                                   dcp::Time (0, 0, 0, 1, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 0, 14, 42, 250), dcp::Time (0, 0, 14, 43, 250));
+       s = subs.subtitles_during (dcp::Time (0, 0, 14, 42, 250), dcp::Time (0, 0, 14, 43, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 1);
        BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
                                   string ("theFontId"),
@@ -152,7 +152,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
 {
        dcp::InteropSubtitleAsset subs ("test/data/subs2.xml");
 
-       list<dcp::SubtitleString> s = subs.subtitles_during (dcp::Time (0, 0, 42, 100, 250), dcp::Time (0, 0, 42, 101, 250));
+       list<dcp::SubtitleString> s = subs.subtitles_during (dcp::Time (0, 0, 42, 100, 250), dcp::Time (0, 0, 42, 101, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -191,7 +191,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 0, 50, 50, 250), dcp::Time (0, 0, 50, 51, 250));
+       s = subs.subtitles_during (dcp::Time (0, 0, 50, 50, 250), dcp::Time (0, 0, 50, 51, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -230,7 +230,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 1, 2, 300, 250), dcp::Time (0, 1, 2, 301, 250));
+       s = subs.subtitles_during (dcp::Time (0, 1, 2, 300, 250), dcp::Time (0, 1, 2, 301, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -269,7 +269,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 1, 15, 50, 250), dcp::Time (0, 1, 15, 51, 250));
+       s = subs.subtitles_during (dcp::Time (0, 1, 15, 50, 250), dcp::Time (0, 1, 15, 51, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -308,7 +308,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 1, 27, 200, 250), dcp::Time (0, 1, 27, 201, 250));
+       s = subs.subtitles_during (dcp::Time (0, 1, 27, 200, 250), dcp::Time (0, 1, 27, 201, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -347,7 +347,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 1, 42, 300, 250), dcp::Time (0, 1, 42, 301, 250));
+       s = subs.subtitles_during (dcp::Time (0, 1, 42, 300, 250), dcp::Time (0, 1, 42, 301, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -386,7 +386,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 1, 45, 200, 250), dcp::Time (0, 1, 45, 201, 250));
+       s = subs.subtitles_during (dcp::Time (0, 1, 45, 200, 250), dcp::Time (0, 1, 45, 201, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -425,7 +425,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 1, 47, 249, 250), dcp::Time (0, 1, 47, 250, 250));
+       s = subs.subtitles_during (dcp::Time (0, 1, 47, 249, 250), dcp::Time (0, 1, 47, 250, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),
@@ -464,7 +464,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
                                   dcp::Time (0, 0, 0, 0, 250)
                                   ));
 
-       s = subs.subtitles_during (dcp::Time (0, 2, 6, 210, 250), dcp::Time (0, 2, 6, 211, 250));
+       s = subs.subtitles_during (dcp::Time (0, 2, 6, 210, 250), dcp::Time (0, 2, 6, 211, 250), false);
        BOOST_REQUIRE_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
                                   string ("theFont"),