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/dcp_reader.cc | |
| parent | 2912464e4e2a11cd0543ee91b705a98104962daa (diff) | |
Build against libdcp1.
Diffstat (limited to 'src/dcp_reader.cc')
| -rw-r--r-- | src/dcp_reader.cc | 61 |
1 files changed, 35 insertions, 26 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); } |
