diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-07-06 00:28:09 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-07-06 00:28:09 +0100 |
| commit | b799c3b9671e815737f769533e40a3bad347f73e (patch) | |
| tree | d41ca395040bd237d62e1fd1c146abff0357b6e0 | |
| parent | 1b3d229a066410d58de0de5ecdd4d57461089ec0 (diff) | |
Extend SubtitleAsset::subtitles_during to allow asking for subtitles either starting during a particular timescale or overllapping it.
| -rw-r--r-- | src/subtitle_asset.cc | 4 | ||||
| -rw-r--r-- | src/subtitle_asset.h | 2 | ||||
| -rw-r--r-- | test/read_interop_subtitle_test.cc | 26 |
3 files changed, 16 insertions, 16 deletions
diff --git a/src/subtitle_asset.cc b/src/subtitle_asset.cc index 4d411e5a..077b5288 100644 --- a/src/subtitle_asset.cc +++ b/src/subtitle_asset.cc @@ -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); } } diff --git a/src/subtitle_asset.h b/src/subtitle_asset.h index 44ac455f..69bf40f8 100644 --- a/src/subtitle_asset.h +++ b/src/subtitle_asset.h @@ -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; } diff --git a/test/read_interop_subtitle_test.cc b/test/read_interop_subtitle_test.cc index aa1baeee..a66327f1 100644 --- a/test/read_interop_subtitle_test.cc +++ b/test/read_interop_subtitle_test.cc @@ -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"), |
