summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-01-11 21:20:47 +0100
committerCarl Hetherington <cth@carlh.net>2021-01-17 20:13:23 +0100
commite668388d1a552c845dbe9ae3cdcdfd979f2da582 (patch)
tree4ab2077764723436dc4e3f1264963e107d55de83
parentd95eacd3851a20e52202465ec22b4f72a4983dc8 (diff)
Change subtitle SubtitleAsset API to return const Subtitle pointers; add subtitles_in_reel().
-rw-r--r--src/subtitle_asset.cc43
-rw-r--r--src/subtitle_asset.h10
-rw-r--r--test/read_interop_subtitle_test.cc94
-rw-r--r--test/read_smpte_subtitle_test.cc27
-rw-r--r--tools/dcpinfo.cc6
5 files changed, 109 insertions, 71 deletions
diff --git a/src/subtitle_asset.cc b/src/subtitle_asset.cc
index 59aff6be..fc9b972a 100644
--- a/src/subtitle_asset.cc
+++ b/src/subtitle_asset.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
This file is part of libdcp.
@@ -41,6 +41,7 @@
#include "subtitle_image.h"
#include "dcp_assert.h"
#include "load_font_node.h"
+#include "reel_asset.h"
#include <asdcp/AS_DCP.h>
#include <asdcp/KM_util.h>
#include <libxml++/nodes/element.h>
@@ -56,6 +57,7 @@ using std::cerr;
using std::map;
using std::shared_ptr;
using std::vector;
+using std::make_shared;
using boost::shared_array;
using boost::optional;
using boost::lexical_cast;
@@ -407,11 +409,23 @@ SubtitleAsset::maybe_add_subtitle (string text, vector<ParseState> const & parse
}
}
-vector<shared_ptr<Subtitle>>
+
+vector<shared_ptr<const Subtitle>>
+SubtitleAsset::subtitles () const
+{
+ vector<shared_ptr<const Subtitle>> s;
+ for (auto i: _subtitles) {
+ s.push_back (i);
+ }
+ return s;
+}
+
+
+vector<shared_ptr<const Subtitle>>
SubtitleAsset::subtitles_during (Time from, Time to, bool starting) const
{
- vector<shared_ptr<Subtitle> > s;
- BOOST_FOREACH (shared_ptr<Subtitle> i, _subtitles) {
+ vector<shared_ptr<const Subtitle>> s;
+ for (auto i: _subtitles) {
if ((starting && from <= i->in() && i->in() < to) || (!starting && i->out() >= from && i->in() <= to)) {
s.push_back (i);
}
@@ -420,6 +434,27 @@ SubtitleAsset::subtitles_during (Time from, Time to, bool starting) const
return s;
}
+
+/* XXX: this needs a test */
+vector<shared_ptr<const Subtitle>>
+SubtitleAsset::subtitles_in_reel (shared_ptr<const dcp::ReelAsset> asset) const
+{
+ auto frame_rate = asset->edit_rate().as_float();
+ auto start = dcp::Time(asset->entry_point().get_value_or(0), frame_rate, time_code_rate());
+ auto during = subtitles_during (start, start + dcp::Time(asset->intrinsic_duration(), frame_rate, time_code_rate()), false);
+
+ vector<shared_ptr<const dcp::Subtitle>> corrected;
+ for (auto i: during) {
+ auto c = make_shared<dcp::Subtitle>(*i);
+ c->set_in (c->in() - start);
+ c->set_out (c->out() - start);
+ corrected.push_back (c);
+ }
+
+ return corrected;
+}
+
+
void
SubtitleAsset::add (shared_ptr<Subtitle> s)
{
diff --git a/src/subtitle_asset.h b/src/subtitle_asset.h
index 60ddc357..02976f7d 100644
--- a/src/subtitle_asset.h
+++ b/src/subtitle_asset.h
@@ -62,6 +62,7 @@ class FontNode;
class TextNode;
class SubtitleNode;
class LoadFontNode;
+class ReelAsset;
namespace order {
class Part;
@@ -88,10 +89,9 @@ public:
NoteHandler note
) const;
- std::vector<std::shared_ptr<Subtitle>> subtitles_during (Time from, Time to, bool starting) const;
- std::vector<std::shared_ptr<Subtitle>> const & subtitles () const {
- return _subtitles;
- }
+ std::vector<std::shared_ptr<const Subtitle>> subtitles_during (Time from, Time to, bool starting) const;
+ std::vector<std::shared_ptr<const Subtitle>> subtitles_in_reel(std::shared_ptr<const dcp::ReelAsset> asset) const;
+ std::vector<std::shared_ptr<const Subtitle>> subtitles () const;
virtual void add (std::shared_ptr<Subtitle>);
virtual void add_font (std::string id, dcp::ArrayData data) = 0;
@@ -107,6 +107,8 @@ public:
virtual std::vector<std::shared_ptr<LoadFontNode>> load_font_nodes () const = 0;
+ virtual int time_code_rate () const = 0;
+
std::string raw_xml () const {
return _raw_xml;
}
diff --git a/test/read_interop_subtitle_test.cc b/test/read_interop_subtitle_test.cc
index ba097222..d37e60d4 100644
--- a/test/read_interop_subtitle_test.cc
+++ b/test/read_interop_subtitle_test.cc
@@ -62,8 +62,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
auto 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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFontId"),
false,
false,
@@ -87,8 +87,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFontId"),
true,
false,
@@ -109,8 +109,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
dcp::Time (0, 0, 0, 1, 250),
dcp::Time (0, 0, 0, 1, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFontId"),
false,
false,
@@ -134,8 +134,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFontId"),
false,
false,
@@ -159,8 +159,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFontId"),
false,
true,
@@ -190,8 +190,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
auto 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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -212,8 +212,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -237,8 +237,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -259,8 +259,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -284,8 +284,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -306,8 +306,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -331,8 +331,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -353,8 +353,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -378,8 +378,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -400,8 +400,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -425,8 +425,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
false,
false,
@@ -447,8 +447,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
false,
false,
@@ -472,8 +472,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
false,
false,
@@ -494,8 +494,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
false,
false,
@@ -519,8 +519,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
false,
false,
@@ -541,8 +541,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
false,
false,
@@ -566,8 +566,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
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_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.front()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.front()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -588,8 +588,8 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
dcp::Time (0, 0, 0, 0, 250),
dcp::Time (0, 0, 0, 0, 250)
));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
- BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(s.back()));
+ BOOST_CHECK_EQUAL (*dynamic_pointer_cast<const dcp::SubtitleString>(s.back()), dcp::SubtitleString (
string ("theFont"),
true,
false,
@@ -618,7 +618,7 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test3)
dcp::InteropSubtitleAsset subs ("test/data/subs3.xml");
BOOST_REQUIRE_EQUAL (subs.subtitles().size(), 1);
- shared_ptr<dcp::SubtitleImage> si = dynamic_pointer_cast<dcp::SubtitleImage>(subs.subtitles().front());
+ auto si = dynamic_pointer_cast<const dcp::SubtitleImage>(subs.subtitles().front());
BOOST_REQUIRE (si);
BOOST_CHECK (si->png_image() == dcp::ArrayData("test/data/sub.png"));
}
diff --git a/test/read_smpte_subtitle_test.cc b/test/read_smpte_subtitle_test.cc
index 8fbf0214..15fc5dd8 100644
--- a/test/read_smpte_subtitle_test.cc
+++ b/test/read_smpte_subtitle_test.cc
@@ -73,12 +73,12 @@ BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test)
BOOST_CHECK_EQUAL (smpte_lfn->id, "theFontId");
BOOST_CHECK_EQUAL (smpte_lfn->urn, "9118bbce-4105-4a05-b37c-a5a6f75e1fea");
BOOST_REQUIRE_EQUAL (sc.subtitles().size(), 63);
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(sc.subtitles().front()));
- BOOST_CHECK_EQUAL (dynamic_pointer_cast<dcp::SubtitleString>(sc.subtitles().front())->text(), "Noch mal.");
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().front()));
+ BOOST_CHECK_EQUAL (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().front())->text(), "Noch mal.");
BOOST_CHECK_EQUAL (sc.subtitles().front()->in(), dcp::Time (0, 0, 25, 12, 25));
BOOST_CHECK_EQUAL (sc.subtitles().front()->out(), dcp::Time (0, 0, 26, 4, 25));
- BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(sc.subtitles().back()));
- BOOST_CHECK_EQUAL (dynamic_pointer_cast<dcp::SubtitleString>(sc.subtitles().back())->text(), "Prochainement");
+ BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().back()));
+ BOOST_CHECK_EQUAL (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().back())->text(), "Prochainement");
BOOST_CHECK_EQUAL (sc.subtitles().back()->in(), dcp::Time (0, 1, 57, 17, 25));
BOOST_CHECK_EQUAL (sc.subtitles().back()->out(), dcp::Time (0, 1, 58, 12, 25));
}
@@ -88,34 +88,35 @@ BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test2)
{
dcp::SMPTESubtitleAsset sc (private_test / "olsson.xml");
- BOOST_REQUIRE_EQUAL (sc.subtitles().size(), 6);
- auto i = sc.subtitles().begin();
- shared_ptr<dcp::SubtitleString> is = dynamic_pointer_cast<dcp::SubtitleString>(*i);
+ auto subs = sc.subtitles();
+ BOOST_REQUIRE_EQUAL (subs.size(), 6);
+ auto i = 0;
+ auto is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]);
BOOST_REQUIRE (is);
BOOST_CHECK_EQUAL (is->text(), "Testing is ");
BOOST_CHECK (!is->italic());
++i;
- is = dynamic_pointer_cast<dcp::SubtitleString>(*i);
+ is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]);
BOOST_REQUIRE (is);
BOOST_CHECK_EQUAL (is->text(), "really");
BOOST_CHECK (is->italic());
++i;
- is = dynamic_pointer_cast<dcp::SubtitleString>(*i);
+ is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]);
BOOST_REQUIRE (is);
BOOST_CHECK_EQUAL (is->text(), " fun!");
BOOST_CHECK (!is->italic());
++i;
- is = dynamic_pointer_cast<dcp::SubtitleString>(*i);
+ is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]);
BOOST_REQUIRE (is);
BOOST_CHECK_EQUAL (is->text(), "This is the ");
BOOST_CHECK (!is->italic());
++i;
- is = dynamic_pointer_cast<dcp::SubtitleString>(*i);
+ is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]);
BOOST_REQUIRE (is);
BOOST_CHECK_EQUAL (is->text(), "second");
BOOST_CHECK (is->italic());
++i;
- is = dynamic_pointer_cast<dcp::SubtitleString>(*i);
+ is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]);
BOOST_REQUIRE (is);
BOOST_CHECK_EQUAL (is->text(), " line!");
BOOST_CHECK (!is->italic());
@@ -127,7 +128,7 @@ BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test3)
dcp::SMPTESubtitleAsset subs ("test/data/subs.mxf");
BOOST_REQUIRE_EQUAL (subs.subtitles().size(), 1);
- shared_ptr<dcp::SubtitleImage> si = dynamic_pointer_cast<dcp::SubtitleImage>(subs.subtitles().front());
+ auto si = dynamic_pointer_cast<const dcp::SubtitleImage>(subs.subtitles()[0]);
BOOST_REQUIRE (si);
BOOST_CHECK (si->png_image() == dcp::ArrayData("test/data/sub.png"));
}
diff --git a/tools/dcpinfo.cc b/tools/dcpinfo.cc
index 18ed7886..5ca9b24f 100644
--- a/tools/dcpinfo.cc
+++ b/tools/dcpinfo.cc
@@ -259,14 +259,14 @@ main_subtitle (vector<string> const& only, shared_ptr<Reel> reel, bool list_subt
OUTPUT_SUBTITLE(" in %1\n", smpte->language().get());
}
if (list_subtitles) {
- BOOST_FOREACH (shared_ptr<Subtitle> k, subs) {
- shared_ptr<SubtitleString> ks = dynamic_pointer_cast<SubtitleString> (k);
+ for (auto k: subs) {
+ auto ks = dynamic_pointer_cast<const SubtitleString>(k);
if (ks) {
stringstream s;
s << *ks;
OUTPUT_SUBTITLE("%1\n", s.str());
}
- shared_ptr<SubtitleImage> is = dynamic_pointer_cast<SubtitleImage> (k);
+ auto is = dynamic_pointer_cast<const SubtitleImage>(k);
if (is) {
stringstream s;
s << *is;