summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-07-02 00:17:24 +0100
committerCarl Hetherington <cth@carlh.net>2014-07-02 00:17:24 +0100
commitbd491319f52ba7f37ef5763960b4c0c00434b5f9 (patch)
treec8578912077611e7fcbd5ba804abea97adce7b32
parentd87f979ea98a19614f164a0d49fccc1be926e789 (diff)
Tweaks: don't use shared_ptr for dcp::SubtitleString; SubtitleContent::write_xml takes a path.
-rw-r--r--src/subtitle_content.cc108
-rw-r--r--src/subtitle_content.h11
-rw-r--r--src/wscript1
-rw-r--r--test/rewrite_subs.cc2
-rw-r--r--test/subtitle_tests.cc50
-rw-r--r--tools/dcpinfo.cc30
6 files changed, 101 insertions, 101 deletions
diff --git a/src/subtitle_content.cc b/src/subtitle_content.cc
index a622e7b0..7e11dea4 100644
--- a/src/subtitle_content.cc
+++ b/src/subtitle_content.cc
@@ -169,32 +169,30 @@ SubtitleContent::maybe_add_subtitle (string text, ParseState const & parse_state
dcp::Subtitle effective_subtitle (*parse_state.subtitle_nodes.back ());
_subtitles.push_back (
- shared_ptr<SubtitleString> (
- new SubtitleString (
- font_id_to_name (effective_font.id),
- effective_font.italic.get(),
- effective_font.color.get(),
- effective_font.size,
- effective_subtitle.in,
- effective_subtitle.out,
- effective_text.v_position,
- effective_text.v_align,
- text,
- effective_font.effect ? effective_font.effect.get() : NONE,
- effective_font.effect_color.get(),
- effective_subtitle.fade_up_time,
- effective_subtitle.fade_down_time
- )
+ SubtitleString (
+ font_id_to_name (effective_font.id),
+ effective_font.italic.get(),
+ effective_font.color.get(),
+ effective_font.size,
+ effective_subtitle.in,
+ effective_subtitle.out,
+ effective_text.v_position,
+ effective_text.v_align,
+ text,
+ effective_font.effect ? effective_font.effect.get() : NONE,
+ effective_font.effect_color.get(),
+ effective_subtitle.fade_up_time,
+ effective_subtitle.fade_down_time
)
);
}
-list<shared_ptr<SubtitleString> >
+list<SubtitleString>
SubtitleContent::subtitles_at (Time t) const
{
- list<shared_ptr<SubtitleString> > s;
- for (list<shared_ptr<SubtitleString> >::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
- if ((*i)->in() <= t && t <= (*i)->out ()) {
+ list<SubtitleString> s;
+ for (list<SubtitleString>::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
+ if (i->in() <= t && t <= i->out ()) {
s.push_back (*i);
}
}
@@ -222,25 +220,25 @@ SubtitleContent::font_id_to_name (string id) const
}
void
-SubtitleContent::add (shared_ptr<SubtitleString> s)
+SubtitleContent::add (SubtitleString s)
{
_subtitles.push_back (s);
_need_sort = true;
}
struct SubtitleSorter {
- bool operator() (shared_ptr<SubtitleString> a, shared_ptr<SubtitleString> b) {
- if (a->in() != b->in()) {
- return a->in() < b->in();
+ bool operator() (SubtitleString const & a, SubtitleString const & b) {
+ if (a.in() != b.in()) {
+ return a.in() < b.in();
}
- return a->v_position() < b->v_position();
+ return a.v_position() < b.v_position();
}
};
void
-SubtitleContent::write_xml () const
+SubtitleContent::write_xml (boost::filesystem::path p) const
{
- FILE* f = fopen_boost (file (), "r");
+ FILE* f = fopen_boost (p, "r");
Glib::ustring const s = xml_as_string ();
fwrite (s.c_str(), 1, s.length(), f);
fclose (f);
@@ -272,7 +270,7 @@ SubtitleContent::xml_as_string () const
}
}
- list<shared_ptr<SubtitleString> > sorted = _subtitles;
+ list<SubtitleString> sorted = _subtitles;
if (_need_sort) {
sorted.sort (SubtitleSorter ());
}
@@ -294,7 +292,7 @@ SubtitleContent::xml_as_string () const
xmlpp::Element* font = 0;
xmlpp::Element* subtitle = 0;
- for (list<shared_ptr<SubtitleString> >::iterator i = sorted.begin(); i != sorted.end(); ++i) {
+ for (list<SubtitleString>::iterator i = sorted.begin(); i != sorted.end(); ++i) {
/* We will start a new <Font>...</Font> whenever some font property changes.
I suppose we should really make an optimal hierarchy of <Font> tags, but
@@ -302,18 +300,18 @@ SubtitleContent::xml_as_string () const
*/
bool const font_changed =
- italic != (*i)->italic() ||
- color != (*i)->color() ||
- size != (*i)->size() ||
- effect != (*i)->effect() ||
- effect_color != (*i)->effect_color();
+ italic != i->italic() ||
+ color != i->color() ||
+ size != i->size() ||
+ effect != i->effect() ||
+ effect_color != i->effect_color();
if (font_changed) {
- italic = (*i)->italic ();
- color = (*i)->color ();
- size = (*i)->size ();
- effect = (*i)->effect ();
- effect_color = (*i)->effect_color ();
+ italic = i->italic ();
+ color = i->color ();
+ size = i->size ();
+ effect = i->effect ();
+ effect_color = i->effect_color ();
}
if (!font || font_changed) {
@@ -334,29 +332,29 @@ SubtitleContent::xml_as_string () const
}
if (!subtitle || font_changed ||
- (last_in != (*i)->in() ||
- last_out != (*i)->out() ||
- last_fade_up_time != (*i)->fade_up_time() ||
- last_fade_down_time != (*i)->fade_down_time()
+ (last_in != i->in() ||
+ last_out != i->out() ||
+ last_fade_up_time != i->fade_up_time() ||
+ last_fade_down_time != i->fade_down_time()
)) {
subtitle = font->add_child ("Subtitle");
subtitle->set_attribute ("SpotNumber", raw_convert<string> (spot_number++));
- subtitle->set_attribute ("TimeIn", (*i)->in().to_string());
- subtitle->set_attribute ("TimeOut", (*i)->out().to_string());
- subtitle->set_attribute ("FadeUpTime", raw_convert<string> ((*i)->fade_up_time().to_ticks()));
- subtitle->set_attribute ("FadeDownTime", raw_convert<string> ((*i)->fade_down_time().to_ticks()));
-
- last_in = (*i)->in ();
- last_out = (*i)->out ();
- last_fade_up_time = (*i)->fade_up_time ();
- last_fade_down_time = (*i)->fade_down_time ();
+ subtitle->set_attribute ("TimeIn", i->in().to_string());
+ subtitle->set_attribute ("TimeOut", i->out().to_string());
+ subtitle->set_attribute ("FadeUpTime", raw_convert<string> (i->fade_up_time().to_ticks()));
+ subtitle->set_attribute ("FadeDownTime", raw_convert<string> (i->fade_down_time().to_ticks()));
+
+ last_in = i->in ();
+ last_out = i->out ();
+ last_fade_up_time = i->fade_up_time ();
+ last_fade_down_time = i->fade_down_time ();
}
xmlpp::Element* text = subtitle->add_child ("Text");
- text->set_attribute ("VAlign", valign_to_string ((*i)->v_align()));
- text->set_attribute ("VPosition", raw_convert<string> ((*i)->v_position()));
- text->add_child_text ((*i)->text());
+ text->set_attribute ("VAlign", valign_to_string (i->v_align()));
+ text->set_attribute ("VPosition", raw_convert<string> (i->v_position()));
+ text->add_child_text (i->text());
}
return doc.write_to_string_formatted ("UTF-8");
diff --git a/src/subtitle_content.h b/src/subtitle_content.h
index 1ddb9122..c00c3f31 100644
--- a/src/subtitle_content.h
+++ b/src/subtitle_content.h
@@ -22,6 +22,7 @@
#include "content.h"
#include "dcp_time.h"
+#include "subtitle_string.h"
#include <libcxml/cxml.h>
namespace dcp
@@ -63,14 +64,14 @@ public:
return _language;
}
- std::list<boost::shared_ptr<SubtitleString> > subtitles_at (Time t) const;
- std::list<boost::shared_ptr<SubtitleString> > const & subtitles () const {
+ std::list<SubtitleString> subtitles_at (Time t) const;
+ std::list<SubtitleString> const & subtitles () const {
return _subtitles;
}
- void add (boost::shared_ptr<SubtitleString>);
+ void add (SubtitleString);
- void write_xml () const;
+ void write_xml (boost::filesystem::path) const;
Glib::ustring xml_as_string () const;
protected:
@@ -111,7 +112,7 @@ private:
std::string _language;
std::list<boost::shared_ptr<LoadFont> > _load_font_nodes;
- std::list<boost::shared_ptr<SubtitleString> > _subtitles;
+ std::list<SubtitleString> _subtitles;
bool _need_sort;
};
diff --git a/src/wscript b/src/wscript
index e5f0c2a5..e9b3c955 100644
--- a/src/wscript
+++ b/src/wscript
@@ -99,6 +99,7 @@ def build(bld):
reel_picture_asset.h
reel_sound_asset.h
reel_stereo_picture_asset.h
+ reel_subtitle_asset.h
ref.h
argb_frame.h
signer.h
diff --git a/test/rewrite_subs.cc b/test/rewrite_subs.cc
index 553c6291..1a3cfbff 100644
--- a/test/rewrite_subs.cc
+++ b/test/rewrite_subs.cc
@@ -51,7 +51,7 @@ main (int argc, char* argv[])
for (list<shared_ptr<Reel> >::iterator j = reels.begin(); j != reels.end(); ++j) {
if ((*j)->main_subtitle()) {
- (*j)->main_subtitle()->subtitle_content()->write_xml ();
+ (*j)->main_subtitle()->subtitle_content()->write_xml ((*j)->main_subtitle()->subtitle_content()->file ());
}
}
}
diff --git a/test/subtitle_tests.cc b/test/subtitle_tests.cc
index 2f733194..f90218e5 100644
--- a/test/subtitle_tests.cc
+++ b/test/subtitle_tests.cc
@@ -31,9 +31,9 @@ BOOST_AUTO_TEST_CASE (subtitles1)
BOOST_CHECK_EQUAL (subs.language(), "French");
- list<shared_ptr<dcp::SubtitleString> > s = subs.subtitles_at (dcp::Time (0, 0, 6, 1));
+ list<dcp::SubtitleString> s = subs.subtitles_at (dcp::Time (0, 0, 6, 1));
BOOST_CHECK_EQUAL (s.size(), 1);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -51,7 +51,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
s = subs.subtitles_at (dcp::Time (0, 0, 7, 190));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
dcp::Time (0, 0, 0, 1),
dcp::Time (0, 0, 0, 1)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -84,7 +84,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
s = subs.subtitles_at (dcp::Time (0, 0, 11, 95));
BOOST_CHECK_EQUAL (s.size(), 1);
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -102,7 +102,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
s = subs.subtitles_at (dcp::Time (0, 0, 14, 42));
BOOST_CHECK_EQUAL (s.size(), 1);
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -124,9 +124,9 @@ BOOST_AUTO_TEST_CASE (subtitles2)
{
dcp::SubtitleContent subs ("test/data/subs2.xml", false);
- list<shared_ptr<dcp::SubtitleString> > s = subs.subtitles_at (dcp::Time (0, 0, 42, 100));
+ list<dcp::SubtitleString> s = subs.subtitles_at (dcp::Time (0, 0, 42, 100));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -141,7 +141,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -159,7 +159,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 0, 50, 50));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -174,7 +174,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -192,7 +192,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 1, 2, 300));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -207,7 +207,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -225,7 +225,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 1, 15, 50));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -240,7 +240,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -258,7 +258,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 1, 27, 200));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -273,7 +273,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -291,7 +291,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 1, 42, 300));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -306,7 +306,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -324,7 +324,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 1, 45, 200));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -339,7 +339,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -357,7 +357,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 1, 47, 249));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -372,7 +372,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
@@ -390,7 +390,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
s = subs.subtitles_at (dcp::Time (0, 2, 6, 210));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
@@ -405,7 +405,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
diff --git a/tools/dcpinfo.cc b/tools/dcpinfo.cc
index 0c41b0c3..a705d5f4 100644
--- a/tools/dcpinfo.cc
+++ b/tools/dcpinfo.cc
@@ -79,24 +79,24 @@ main_subtitle (shared_ptr<Reel> reel, bool list_subtitles)
return;
}
- list<shared_ptr<SubtitleString> > subs = reel->main_subtitle()->subtitle_content()->subtitles ();
+ list<SubtitleString> subs = reel->main_subtitle()->subtitle_content()->subtitles ();
cout << " Subtitle: " << subs.size() << " subtitles in " << reel->main_subtitle()->subtitle_content()->language() << "\n";
if (list_subtitles) {
- for (list<shared_ptr<SubtitleString> >::const_iterator k = subs.begin(); k != subs.end(); ++k) {
- cout << " " << (*k)->text() << "\n";
+ for (list<SubtitleString>::const_iterator k = subs.begin(); k != subs.end(); ++k) {
+ cout << " " << k->text() << "\n";
cout << " "
- << "font:" << (*k)->font() << "; "
- << "italic:" << (*k)->italic() << "; "
- << "color:" << (*k)->color() << "; "
- << "in:" << (*k)->in() << "; "
- << "out:" << (*k)->out() << "; "
- << "v_position:" << (*k)->v_position() << "; "
- << "v_align:" << (*k)->v_align() << "; "
- << "effect:" << (*k)->effect() << "; "
- << "effect_color:" << (*k)->effect_color() << "; "
- << "fade_up_time:" << (*k)->fade_up_time() << "; "
- << "fade_down_time:" << (*k)->fade_down_time() << "; "
- << "size: " << (*k)->size() << "\n";
+ << "font:" << k->font() << "; "
+ << "italic:" << k->italic() << "; "
+ << "color:" << k->color() << "; "
+ << "in:" << k->in() << "; "
+ << "out:" << k->out() << "; "
+ << "v_position:" << k->v_position() << "; "
+ << "v_align:" << k->v_align() << "; "
+ << "effect:" << k->effect() << "; "
+ << "effect_color:" << k->effect_color() << "; "
+ << "fade_up_time:" << k->fade_up_time() << "; "
+ << "fade_down_time:" << k->fade_down_time() << "; "
+ << "size: " << k->size() << "\n";
}
}
}