summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-12-21 03:02:35 +0000
committerCarl Hetherington <cth@carlh.net>2014-12-21 03:02:35 +0000
commit3efca90ea10f09980190d33eea2cc8346185a79a (patch)
tree2c8756ff3fa7238c5e7ea344e3d30107e79e1c73 /src
parent2912464e4e2a11cd0543ee91b705a98104962daa (diff)
Build against libdcp1.
Diffstat (limited to 'src')
-rw-r--r--src/dcp_reader.cc61
-rw-r--r--src/dcp_reader.h2
-rw-r--r--src/reader_factory.cc8
-rw-r--r--src/wscript8
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')