diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-12-21 03:02:35 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-12-21 03:02:35 +0000 |
| commit | 3efca90ea10f09980190d33eea2cc8346185a79a (patch) | |
| tree | 2c8756ff3fa7238c5e7ea344e3d30107e79e1c73 /src | |
| parent | 2912464e4e2a11cd0543ee91b705a98104962daa (diff) | |
Build against libdcp1.
Diffstat (limited to 'src')
| -rw-r--r-- | src/dcp_reader.cc | 61 | ||||
| -rw-r--r-- | src/dcp_reader.h | 2 | ||||
| -rw-r--r-- | src/reader_factory.cc | 8 | ||||
| -rw-r--r-- | src/wscript | 8 |
4 files changed, 46 insertions, 33 deletions
diff --git a/src/dcp_reader.cc b/src/dcp_reader.cc index b192b76..863cb68 100644 --- a/src/dcp_reader.cc +++ b/src/dcp_reader.cc @@ -21,7 +21,9 @@ #include "vertical_reference.h" #include "xml.h" #include <libcxml/cxml.h> -#include <libdcp/subtitle_asset.h> +#include <dcp/interop_subtitle_content.h> +#include <dcp/smpte_subtitle_content.h> +#include <dcp/subtitle.h> using std::list; using std::cout; @@ -29,13 +31,13 @@ using boost::shared_ptr; using namespace sub; static MetricTime -dcp_to_metric (libdcp::Time t) +dcp_to_metric (dcp::Time t) { return MetricTime (t.h, t.m, t.s, t.t * 4); } static Colour -dcp_to_colour (libdcp::Color c) +dcp_to_colour (dcp::Color c) { return Colour (float (c.r) / 255, float (c.g) / 255, float (c.b) / 255); } @@ -43,48 +45,55 @@ dcp_to_colour (libdcp::Color c) /** @class DCPReader * @brief A class to read DCP subtitles. */ -DCPReader::DCPReader (boost::filesystem::path file) +DCPReader::DCPReader (boost::filesystem::path file, bool interop) { - libdcp::SubtitleAsset asset (file.parent_path().string(), file.leaf().string()); - list<shared_ptr<libdcp::Subtitle> > subs = asset.subtitles (); - for (list<shared_ptr<libdcp::Subtitle> >::const_iterator i = subs.begin(); i != subs.end(); ++i) { + shared_ptr<dcp::SubtitleContent> content; + if (interop) { + content.reset (new dcp::InteropSubtitleContent (file)); + } else { + content.reset (new dcp::SMPTESubtitleContent (file)); + } + + list<dcp::SubtitleString> subs = content->subtitles (); + for (list<dcp::SubtitleString>::const_iterator i = subs.begin(); i != subs.end(); ++i) { RawSubtitle sub; - sub.vertical_position.proportional = float ((*i)->v_position ()) / 100; - switch ((*i)->v_align ()) { - case libdcp::TOP: + sub.vertical_position.proportional = float (i->v_position ()) / 100; + switch (i->v_align ()) { + case dcp::TOP: sub.vertical_position.reference = TOP_OF_SCREEN; break; - case libdcp::CENTER: + case dcp::CENTER: sub.vertical_position.reference = CENTRE_OF_SCREEN; break; - case libdcp::BOTTOM: + case dcp::BOTTOM: sub.vertical_position.reference = BOTTOM_OF_SCREEN; break; } - sub.from.set_metric (dcp_to_metric ((*i)->in ())); - sub.to.set_metric (dcp_to_metric ((*i)->out ())); - sub.fade_up = dcp_to_metric ((*i)->fade_up_time ()); - sub.fade_down = dcp_to_metric ((*i)->fade_down_time ()); + sub.from.set_metric (dcp_to_metric (i->in ())); + sub.to.set_metric (dcp_to_metric (i->out ())); + sub.fade_up = dcp_to_metric (i->fade_up_time ()); + sub.fade_down = dcp_to_metric (i->fade_down_time ()); - sub.text = (*i)->text (); - sub.font = (*i)->font (); - sub.font_size.set_proportional (float ((*i)->size ()) / (72 * 11)); - switch ((*i)->effect ()) { - case libdcp::NONE: + sub.text = i->text (); + /* XXX: should sub.font be optional? */ + sub.font = i->font().get_value_or (""); + sub.font_size.set_proportional (float (i->size ()) / (72 * 11)); + switch (i->effect ()) { + case dcp::NONE: break; - case libdcp::BORDER: + case dcp::BORDER: sub.effect = BORDER; break; - case libdcp::SHADOW: + case dcp::SHADOW: sub.effect = SHADOW; break; } - sub.effect_colour = dcp_to_colour ((*i)->effect_color ()); - sub.colour = dcp_to_colour ((*i)->color ()); - sub.italic = (*i)->italic (); + sub.effect_colour = dcp_to_colour (i->effect_color ()); + sub.colour = dcp_to_colour (i->color ()); + sub.italic = i->italic (); _subs.push_back (sub); } diff --git a/src/dcp_reader.h b/src/dcp_reader.h index 6d4fa71..09d9f6a 100644 --- a/src/dcp_reader.h +++ b/src/dcp_reader.h @@ -36,7 +36,7 @@ namespace sub { class DCPReader : public Reader { public: - DCPReader (boost::filesystem::path file); + DCPReader (boost::filesystem::path file, bool interop); }; } diff --git a/src/reader_factory.cc b/src/reader_factory.cc index 31a205b..18783da 100644 --- a/src/reader_factory.cc +++ b/src/reader_factory.cc @@ -36,8 +36,12 @@ sub::reader_factory (boost::filesystem::path file_name) string ext = file_name.extension().string(); transform (ext.begin(), ext.end(), ext.begin(), ::tolower); - if (ext == ".xml" || ext == ".mxf") { - return shared_ptr<Reader> (new DCPReader (file_name)); + if (ext == ".xml") { + return shared_ptr<Reader> (new DCPReader (file_name, true)); + } + + if (ext == ".mxf") { + return shared_ptr<Reader> (new DCPReader (file_name, false)); } if (ext == ".stl") { diff --git a/src/wscript b/src/wscript index 599e2af..7dcd97c 100644 --- a/src/wscript +++ b/src/wscript @@ -6,8 +6,8 @@ def build(bld): else: obj = bld(features='cxx cxxshlib') - obj.name = 'libsub' - obj.target = 'sub' + obj.name = 'libsub-1.0' + obj.target = 'sub-1.0' obj.uselib = 'CXML DCP BOOST_FILESYSTEM BOOST_LOCALE' obj.export_includes = ['.'] obj.source = """ @@ -53,6 +53,6 @@ def build(bld): vertical_reference.h """ - bld.install_files('${PREFIX}/include/libsub', headers) + bld.install_files('${PREFIX}/include/libsub-1.0', headers) if bld.env.STATIC: - bld.install_files('${PREFIX}/lib', 'libsub.a') + bld.install_files('${PREFIX}/lib', 'libsub-1.0.a') |
