From 3efca90ea10f09980190d33eea2cc8346185a79a Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 21 Dec 2014 03:02:35 +0000 Subject: Build against libdcp1. --- src/dcp_reader.cc | 61 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 26 deletions(-) (limited to 'src/dcp_reader.cc') 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 -#include +#include +#include +#include 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 > subs = asset.subtitles (); - for (list >::const_iterator i = subs.begin(); i != subs.end(); ++i) { + shared_ptr content; + if (interop) { + content.reset (new dcp::InteropSubtitleContent (file)); + } else { + content.reset (new dcp::SMPTESubtitleContent (file)); + } + + list subs = content->subtitles (); + for (list::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); } -- cgit v1.2.3