summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/atmos_mxf_content.cc4
-rw-r--r--src/lib/atmos_mxf_content.h2
-rw-r--r--src/lib/content.cc26
-rw-r--r--src/lib/content.h2
-rw-r--r--src/lib/content_factory.cc40
-rw-r--r--src/lib/content_factory.h3
-rw-r--r--src/lib/dcp_content.cc4
-rw-r--r--src/lib/dcp_content.h2
-rw-r--r--src/lib/dcp_subtitle_content.cc4
-rw-r--r--src/lib/dcp_subtitle_content.h2
-rw-r--r--src/lib/ffmpeg_content.cc4
-rw-r--r--src/lib/ffmpeg_content.h2
-rw-r--r--src/lib/film.cc2
-rw-r--r--src/lib/image_content.cc4
-rw-r--r--src/lib/image_content.h2
-rw-r--r--src/lib/path_behaviour.h3
-rw-r--r--src/lib/playlist.cc3
-rw-r--r--src/lib/string_text_file_content.cc4
-rw-r--r--src/lib/string_text_file_content.h2
-rw-r--r--src/lib/video_mxf_content.cc4
-rw-r--r--src/lib/video_mxf_content.h2
-rw-r--r--test/relative_paths_test.cc44
-rw-r--r--test/time_calculation_test.cc8
-rw-r--r--test/wscript1
24 files changed, 106 insertions, 68 deletions
diff --git a/src/lib/atmos_mxf_content.cc b/src/lib/atmos_mxf_content.cc
index 55ceddb8c..403f98933 100644
--- a/src/lib/atmos_mxf_content.cc
+++ b/src/lib/atmos_mxf_content.cc
@@ -48,8 +48,8 @@ AtmosMXFContent::AtmosMXFContent (boost::filesystem::path path)
}
-AtmosMXFContent::AtmosMXFContent (cxml::ConstNodePtr node, int)
- : Content (node)
+AtmosMXFContent::AtmosMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int)
+ : Content(node, film_directory)
{
atmos = AtmosContent::from_xml (this, node);
}
diff --git a/src/lib/atmos_mxf_content.h b/src/lib/atmos_mxf_content.h
index 4d2d9f509..b0bdeb92f 100644
--- a/src/lib/atmos_mxf_content.h
+++ b/src/lib/atmos_mxf_content.h
@@ -27,7 +27,7 @@ class AtmosMXFContent : public Content
{
public:
AtmosMXFContent (boost::filesystem::path path);
- AtmosMXFContent (cxml::ConstNodePtr node, int version);
+ AtmosMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version);
std::shared_ptr<AtmosMXFContent> shared_from_this () {
return std::dynamic_pointer_cast<AtmosMXFContent> (Content::shared_from_this());
diff --git a/src/lib/content.cc b/src/lib/content.cc
index 067a4cffc..be30ccf43 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -84,10 +84,14 @@ Content::Content (boost::filesystem::path p)
}
-Content::Content (cxml::ConstNodePtr node)
+Content::Content(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory)
{
for (auto i: node->node_children("Path")) {
- _paths.push_back (i->content());
+ if (film_directory) {
+ _paths.push_back(boost::filesystem::weakly_canonical(boost::filesystem::absolute(i->content(), *film_directory)));
+ } else {
+ _paths.push_back(i->content());
+ }
auto const mod = i->optional_number_attribute<time_t>("mtime");
if (mod) {
_last_write_times.push_back (*mod);
@@ -147,19 +151,9 @@ Content::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_beh
if (with_paths) {
for (size_t i = 0; i < _paths.size(); ++i) {
auto path = _paths[i];
- switch (path_behaviour) {
- case PathBehaviour::MAKE_ABSOLUTE:
- DCPOMATIC_ASSERT(film_directory);
- if (path.is_relative()) {
- path = boost::filesystem::canonical(path, *film_directory);
- }
- break;
- case PathBehaviour::MAKE_RELATIVE:
+ if (path_behaviour == PathBehaviour::MAKE_RELATIVE) {
DCPOMATIC_ASSERT(film_directory);
path = boost::filesystem::relative(path, *film_directory);
- break;
- case PathBehaviour::KEEP:
- break;
}
auto p = cxml::add_child(element, "Path");
p->add_child_text(path.string());
@@ -300,16 +294,16 @@ Content::set_trim_end (ContentTime t)
shared_ptr<Content>
-Content::clone () const
+Content::clone() const
{
/* This is a bit naughty, but I can't think of a compelling reason not to do it ... */
xmlpp::Document doc;
auto node = doc.create_root_node ("Content");
- as_xml(node, true, PathBehaviour::KEEP, {});
+ as_xml(node, true, PathBehaviour::KEEP_ABSOLUTE, {});
/* notes is unused here (we assume) */
list<string> notes;
- return content_factory (make_shared<cxml::Node>(node), Film::current_state_version, notes);
+ return content_factory(make_shared<cxml::Node>(node), {}, Film::current_state_version, notes);
}
diff --git a/src/lib/content.h b/src/lib/content.h
index a14c35774..29dce2c9e 100644
--- a/src/lib/content.h
+++ b/src/lib/content.h
@@ -76,7 +76,7 @@ public:
explicit Content ();
Content (dcpomatic::DCPTime);
Content (boost::filesystem::path);
- Content (cxml::ConstNodePtr);
+ Content (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> directory);
Content (std::vector<std::shared_ptr<Content>>);
virtual ~Content () {}
diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc
index bac41f940..5d36c2aea 100644
--- a/src/lib/content_factory.cc
+++ b/src/lib/content_factory.cc
@@ -48,7 +48,6 @@
using std::list;
-using std::make_shared;
using std::shared_ptr;
using std::string;
using std::vector;
@@ -56,29 +55,30 @@ using std::vector;
/** Create a Content object from an XML node.
* @param node XML description.
+ * @param directory "Current" directory for any relative file paths mentioned in the XML.
* @param version XML state version.
* @param notes A list to which is added descriptions of any non-critial warnings / messages.
* @return Content object, or 0 if no content was recognised in the XML.
*/
shared_ptr<Content>
-content_factory (cxml::ConstNodePtr node, int version, list<string>& notes)
+content_factory(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes)
{
auto const type = node->string_child ("Type");
std::shared_ptr<Content> content;
if (type == "FFmpeg") {
- content = make_shared<FFmpegContent>(node, version, notes);
+ content = std::make_shared<FFmpegContent>(node, film_directory, version, notes);
} else if (type == "Image") {
- content = make_shared<ImageContent>(node, version);
+ content = std::make_shared<ImageContent>(node, film_directory, version);
} else if (type == "Sndfile") {
/* SndfileContent is now handled by the FFmpeg code rather than by
separate libsndfile-based code.
*/
- content = make_shared<FFmpegContent>(node, version, notes);
+ content = std::make_shared<FFmpegContent>(node, film_directory, version, notes);
content->audio->set_stream (
- make_shared<FFmpegAudioStream>(
+ std::make_shared<FFmpegAudioStream>(
"Stream", 0,
node->number_child<int> ("AudioFrameRate"),
node->number_child<Frame> ("AudioLength"),
@@ -88,15 +88,15 @@ content_factory (cxml::ConstNodePtr node, int version, list<string>& notes)
);
} else if (type == "SubRip" || type == "TextSubtitle") {
- content = make_shared<StringTextFileContent>(node, version, notes);
+ content = std::make_shared<StringTextFileContent>(node, film_directory, version, notes);
} else if (type == "DCP") {
- content = make_shared<DCPContent>(node, version);
+ content = std::make_shared<DCPContent>(node, film_directory, version);
} else if (type == "DCPSubtitle") {
- content = make_shared<DCPSubtitleContent>(node, version);
+ content = std::make_shared<DCPSubtitleContent>(node, film_directory, version);
} else if (type == "VideoMXF") {
- content = make_shared<VideoMXFContent>(node, version);
+ content = std::make_shared<VideoMXFContent>(node, film_directory, version);
} else if (type == "AtmosMXF") {
- content = make_shared<AtmosMXFContent>(node, version);
+ content = std::make_shared<AtmosMXFContent>(node, film_directory, version);
}
return content;
@@ -153,10 +153,10 @@ content_factory (boost::filesystem::path path)
}
if (image_files > 0 && sound_files == 0) {
- content.push_back (make_shared<ImageContent>(path));
+ content.push_back(std::make_shared<ImageContent>(path));
} else if (image_files == 0 && sound_files > 0) {
for (auto i: dcp::filesystem::directory_iterator(path)) {
- content.push_back (make_shared<FFmpegContent>(i.path()));
+ content.push_back(std::make_shared<FFmpegContent>(i.path()));
}
}
@@ -168,26 +168,26 @@ content_factory (boost::filesystem::path path)
transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
if (valid_image_file (path)) {
- single = make_shared<ImageContent>(path);
+ single = std::make_shared<ImageContent>(path);
} else if (ext == ".srt" || ext == ".ssa" || ext == ".ass" || ext == ".stl" || ext == ".vtt") {
- single = make_shared<StringTextFileContent>(path);
+ single = std::make_shared<StringTextFileContent>(path);
} else if (ext == ".xml") {
cxml::Document doc;
doc.read_file(dcp::filesystem::fix_long_path(path));
if (doc.root_name() == "DCinemaSecurityMessage") {
throw KDMAsContentError ();
}
- single = make_shared<DCPSubtitleContent>(path);
+ single = std::make_shared<DCPSubtitleContent>(path);
} else if (ext == ".mxf" && dcp::SMPTETextAsset::valid_mxf(path)) {
- single = make_shared<DCPSubtitleContent>(path);
+ single = std::make_shared<DCPSubtitleContent>(path);
} else if (ext == ".mxf" && VideoMXFContent::valid_mxf(path)) {
- single = make_shared<VideoMXFContent>(path);
+ single = std::make_shared<VideoMXFContent>(path);
} else if (ext == ".mxf" && AtmosMXFContent::valid_mxf(path)) {
- single = make_shared<AtmosMXFContent>(path);
+ single = std::make_shared<AtmosMXFContent>(path);
}
if (!single) {
- single = make_shared<FFmpegContent>(path);
+ single = std::make_shared<FFmpegContent>(path);
}
content.push_back (single);
diff --git a/src/lib/content_factory.h b/src/lib/content_factory.h
index 2cef84034..b4ce161fb 100644
--- a/src/lib/content_factory.h
+++ b/src/lib/content_factory.h
@@ -28,9 +28,8 @@
#include <vector>
-class Film;
class Content;
-extern std::shared_ptr<Content> content_factory (cxml::ConstNodePtr, int, std::list<std::string> &);
+extern std::shared_ptr<Content> content_factory(cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int, std::list<std::string> &);
extern std::vector<std::shared_ptr<Content>> content_factory (boost::filesystem::path);
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index 48d382c41..6a6ed0b0c 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -89,8 +89,8 @@ DCPContent::DCPContent (boost::filesystem::path p)
set_default_colour_conversion ();
}
-DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+DCPContent::DCPContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content(node, film_directory)
{
video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
audio = AudioContent::from_xml (this, node, version);
diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h
index 023b5d194..a866703f2 100644
--- a/src/lib/dcp_content.h
+++ b/src/lib/dcp_content.h
@@ -60,7 +60,7 @@ class DCPContent : public Content
{
public:
DCPContent (boost::filesystem::path p);
- DCPContent (cxml::ConstNodePtr, int version);
+ DCPContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int version);
std::shared_ptr<DCPContent> shared_from_this () {
return std::dynamic_pointer_cast<DCPContent> (Content::shared_from_this ());
diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc
index cbd8638f3..b18d14318 100644
--- a/src/lib/dcp_subtitle_content.cc
+++ b/src/lib/dcp_subtitle_content.cc
@@ -49,8 +49,8 @@ DCPSubtitleContent::DCPSubtitleContent (boost::filesystem::path path)
text.push_back (make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE));
}
-DCPSubtitleContent::DCPSubtitleContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+DCPSubtitleContent::DCPSubtitleContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content (node, film_directory)
, _length (node->number_child<ContentTime::Type> ("Length"))
{
list<string> notes;
diff --git a/src/lib/dcp_subtitle_content.h b/src/lib/dcp_subtitle_content.h
index 53b2eaf5c..14d36fb69 100644
--- a/src/lib/dcp_subtitle_content.h
+++ b/src/lib/dcp_subtitle_content.h
@@ -25,7 +25,7 @@ class DCPSubtitleContent : public DCPSubtitle, public Content
{
public:
DCPSubtitleContent (boost::filesystem::path);
- DCPSubtitleContent (cxml::ConstNodePtr, int);
+ DCPSubtitleContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int);
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override;
std::string summary () const override;
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index 61a7dd4df..5a99ecaa5 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -88,8 +88,8 @@ get_optional_enum (cxml::ConstNodePtr node, string name)
}
-FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list<string>& notes)
- : Content (node)
+FFmpegContent::FFmpegContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes)
+ : Content(node, film_directory)
{
_color_range = get_optional_enum<AVColorRange>(node, "ColorRange");
diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h
index 1b3d3376e..a0fe9a0c0 100644
--- a/src/lib/ffmpeg_content.h
+++ b/src/lib/ffmpeg_content.h
@@ -55,7 +55,7 @@ class FFmpegContent : public Content
{
public:
FFmpegContent (boost::filesystem::path);
- FFmpegContent (cxml::ConstNodePtr, int version, std::list<std::string> &);
+ FFmpegContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int version, std::list<std::string> &);
FFmpegContent (std::vector<std::shared_ptr<Content>>);
std::shared_ptr<FFmpegContent> shared_from_this () {
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 835719868..ded96ab45 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -477,7 +477,7 @@ Film::metadata (bool with_content_paths) const
_playlist->as_xml(
cxml::add_child(root, "Playlist"),
with_content_paths,
- Config::instance()->relative_paths() ? PathBehaviour::MAKE_RELATIVE : PathBehaviour::MAKE_ABSOLUTE,
+ Config::instance()->relative_paths() ? PathBehaviour::MAKE_RELATIVE : PathBehaviour::KEEP_ABSOLUTE,
directory()
);
diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc
index 034ccb98d..e7ba88194 100644
--- a/src/lib/image_content.cc
+++ b/src/lib/image_content.cc
@@ -61,8 +61,8 @@ ImageContent::ImageContent (boost::filesystem::path p)
}
-ImageContent::ImageContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+ImageContent::ImageContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content(node, film_directory)
{
video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
}
diff --git a/src/lib/image_content.h b/src/lib/image_content.h
index 6208a0053..73ae696ad 100644
--- a/src/lib/image_content.h
+++ b/src/lib/image_content.h
@@ -27,7 +27,7 @@ class ImageContent : public Content
{
public:
ImageContent (boost::filesystem::path);
- ImageContent (cxml::ConstNodePtr, int);
+ ImageContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int);
std::shared_ptr<ImageContent> shared_from_this () {
return std::dynamic_pointer_cast<ImageContent> (Content::shared_from_this ());
diff --git a/src/lib/path_behaviour.h b/src/lib/path_behaviour.h
index 90390e015..cf966af5a 100644
--- a/src/lib/path_behaviour.h
+++ b/src/lib/path_behaviour.h
@@ -24,9 +24,8 @@
enum class PathBehaviour {
- MAKE_ABSOLUTE,
+ KEEP_ABSOLUTE,
MAKE_RELATIVE,
- KEEP
};
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index b6b796840..ebeac47e2 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -25,6 +25,7 @@
#include "content_factory.h"
#include "dcp_content.h"
#include "digester.h"
+#include "film.h"
#include "ffmpeg_content.h"
#include "ffmpeg_decoder.h"
#include "image_decoder.h"
@@ -226,7 +227,7 @@ Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, in
boost::mutex::scoped_lock lm (_mutex);
for (auto i: node->node_children ("Content")) {
- auto content = content_factory (i, version, notes);
+ auto content = content_factory(i, film->directory(), version, notes);
/* See if this content should be nudged to start on a video frame */
auto const old_pos = content->position();
diff --git a/src/lib/string_text_file_content.cc b/src/lib/string_text_file_content.cc
index 6ae9fc627..4f7fbb241 100644
--- a/src/lib/string_text_file_content.cc
+++ b/src/lib/string_text_file_content.cc
@@ -52,8 +52,8 @@ StringTextFileContent::StringTextFileContent (boost::filesystem::path path)
}
-StringTextFileContent::StringTextFileContent (cxml::ConstNodePtr node, int version, list<string>& notes)
- : Content (node)
+StringTextFileContent::StringTextFileContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes)
+ : Content (node, film_directory)
, _length (node->number_child<ContentTime::Type>("Length"))
{
text = TextContent::from_xml (this, node, version, notes);
diff --git a/src/lib/string_text_file_content.h b/src/lib/string_text_file_content.h
index 2edf475c3..abfd72906 100644
--- a/src/lib/string_text_file_content.h
+++ b/src/lib/string_text_file_content.h
@@ -32,7 +32,7 @@ class StringTextFileContent : public Content
{
public:
StringTextFileContent (boost::filesystem::path);
- StringTextFileContent (cxml::ConstNodePtr, int, std::list<std::string>&);
+ StringTextFileContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int, std::list<std::string>&);
std::shared_ptr<StringTextFileContent> shared_from_this () {
return std::dynamic_pointer_cast<StringTextFileContent> (Content::shared_from_this ());
diff --git a/src/lib/video_mxf_content.cc b/src/lib/video_mxf_content.cc
index 9ae439be5..ded81e6bf 100644
--- a/src/lib/video_mxf_content.cc
+++ b/src/lib/video_mxf_content.cc
@@ -49,8 +49,8 @@ VideoMXFContent::VideoMXFContent (boost::filesystem::path path)
}
-VideoMXFContent::VideoMXFContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+VideoMXFContent::VideoMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content(node, film_directory)
{
video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
}
diff --git a/src/lib/video_mxf_content.h b/src/lib/video_mxf_content.h
index d45ec591a..0def6008c 100644
--- a/src/lib/video_mxf_content.h
+++ b/src/lib/video_mxf_content.h
@@ -26,7 +26,7 @@ class VideoMXFContent : public Content
{
public:
VideoMXFContent (boost::filesystem::path path);
- VideoMXFContent (cxml::ConstNodePtr node, int version);
+ VideoMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version);
std::shared_ptr<VideoMXFContent> shared_from_this () {
return std::dynamic_pointer_cast<VideoMXFContent>(Content::shared_from_this());
diff --git a/test/relative_paths_test.cc b/test/relative_paths_test.cc
new file mode 100644
index 000000000..cf40a8465
--- /dev/null
+++ b/test/relative_paths_test.cc
@@ -0,0 +1,44 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "lib/content.h"
+#include "lib/content_factory.h"
+#include "lib/config.h"
+#include "lib/film.h"
+#include "test.h"
+#include <boost/test/unit_test.hpp>
+
+
+BOOST_AUTO_TEST_CASE(relative_paths_test)
+{
+ ConfigRestorer cr;
+ Config::instance()->set_relative_paths(true);
+
+ auto picture = content_factory("test/data/flat_red.png")[0];
+ auto film = new_test_film("relative_paths_test", { picture });
+ film->write_metadata();
+
+ auto film2 = std::make_shared<Film>(boost::filesystem::path("build/test/relative_paths_test"));
+ film2->read_metadata();
+ BOOST_REQUIRE_EQUAL(film2->content().size(), 1U);
+ BOOST_REQUIRE(film2->content()[0]->paths_valid());
+}
+
diff --git a/test/time_calculation_test.cc b/test/time_calculation_test.cc
index 0e09ae2c3..28a1c61ab 100644
--- a/test/time_calculation_test.cc
+++ b/test/time_calculation_test.cc
@@ -138,7 +138,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_time_calculation_test)
doc->read_string (xml);
list<string> notes;
- auto content = make_shared<FFmpegContent>(doc, film->state_version(), notes);
+ auto content = std::make_shared<FFmpegContent>(doc, boost::none, film->state_version(), notes);
/* 25fps content, 25fps DCP */
film->set_video_frame_rate (25);
@@ -192,7 +192,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1)
doc->read_string (xml);
list<string> notes;
- auto content = make_shared<FFmpegContent>(doc, film->state_version(), notes);
+ auto content = std::make_shared<FFmpegContent>(doc, boost::none, film->state_version(), notes);
film->set_sequence (false);
film->add_content (content);
@@ -398,7 +398,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
doc->read_string (xml);
list<string> notes;
- auto content = make_shared<FFmpegContent>(doc, film->state_version(), notes);
+ auto content = std::make_shared<FFmpegContent>(doc, boost::none, film->state_version(), notes);
film->set_sequence (false);
film->add_content (content);
@@ -574,7 +574,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3)
doc->read_string (xml);
list<string> notes;
- auto content = make_shared<FFmpegContent>(doc, film->state_version(), notes);
+ auto content = std::make_shared<FFmpegContent>(doc, boost::none, film->state_version(), notes);
auto stream = content->audio->streams().front();
film->set_sequence (false);
film->add_content (content);
diff --git a/test/wscript b/test/wscript
index 2802a4678..e9f24f0fe 100644
--- a/test/wscript
+++ b/test/wscript
@@ -132,6 +132,7 @@ def build(bld):
playlist_test.cc
pulldown_detect_test.cc
ratio_test.cc
+ relative_paths_test.cc
release_notes_test.cc
repeat_frame_test.cc
recover_test.cc