#include "log.h"
#include "compose.hpp"
#include <libcxml/cxml.h>
+#include <dcp/filesystem.h>
#include <dcp/smpte_subtitle_asset.h>
#include <boost/algorithm/string.hpp>
using std::make_shared;
using std::shared_ptr;
using std::string;
-using boost::optional;
+using std::vector;
/** Create a Content object from an XML node.
std::shared_ptr<Content> content;
if (type == "FFmpeg") {
- /* SndfileContent is now handled by the FFmpeg code rather than by
- separate libsndfile-based code.
- */
- content.reset (new FFmpegContent(node, version, notes));
+ content = make_shared<FFmpegContent>(node, version, notes);
} else if (type == "Image") {
- content.reset (new ImageContent(node, version));
+ content = make_shared<ImageContent>(node, version);
} else if (type == "Sndfile") {
/* SndfileContent is now handled by the FFmpeg code rather than by
separate libsndfile-based code.
*/
- content.reset (new FFmpegContent(node, version, notes));
+ content = make_shared<FFmpegContent>(node, version, notes);
content->audio->set_stream (
make_shared<FFmpegAudioStream>(
"Stream", 0,
node->number_child<int> ("AudioFrameRate"),
node->number_child<Frame> ("AudioLength"),
- AudioMapping (node->node_child ("AudioMapping"), version)
+ AudioMapping(node->node_child("AudioMapping"), version),
+ 16
)
);
} else if (type == "SubRip" || type == "TextSubtitle") {
- content.reset (new StringTextFileContent(node, version));
+ content = make_shared<StringTextFileContent>(node, version, notes);
} else if (type == "DCP") {
- content.reset (new DCPContent(node, version));
+ content = make_shared<DCPContent>(node, version);
} else if (type == "DCPSubtitle") {
- content.reset (new DCPSubtitleContent(node, version));
+ content = make_shared<DCPSubtitleContent>(node, version);
} else if (type == "VideoMXF") {
- content.reset (new VideoMXFContent(node, version));
+ content = make_shared<VideoMXFContent>(node, version);
} else if (type == "AtmosMXF") {
- content.reset (new AtmosMXFContent(node, version));
+ content = make_shared<AtmosMXFContent>(node, version);
}
return content;
* @param path File or directory.
* @return Content objects.
*/
-list<shared_ptr<Content>>
+vector<shared_ptr<Content>>
content_factory (boost::filesystem::path path)
{
- list<shared_ptr<Content>> content;
+ vector<shared_ptr<Content>> content;
- if (boost::filesystem::is_directory (path)) {
+ if (dcp::filesystem::is_directory(path)) {
LOG_GENERAL ("Look in directory %1", path);
- if (boost::filesystem::is_empty (path)) {
+ if (dcp::filesystem::is_empty(path)) {
return content;
}
int image_files = 0;
int sound_files = 0;
int read = 0;
- for (boost::filesystem::directory_iterator i(path); i != boost::filesystem::directory_iterator() && read < 10; ++i) {
+ for (dcp::filesystem::directory_iterator i(path); i != dcp::filesystem::directory_iterator() && read < 10; ++i) {
LOG_GENERAL ("Checking file %1", i->path());
- if (boost::starts_with (i->path().leaf().string(), ".")) {
+ if (boost::starts_with(i->path().filename().string(), ".")) {
/* We ignore hidden files */
LOG_GENERAL ("Ignored %1 (starts with .)", i->path());
continue;
}
- if (!boost::filesystem::is_regular_file(i->path())) {
+ if (!dcp::filesystem::is_regular_file(i->path())) {
/* Ignore things which aren't files (probably directories) */
LOG_GENERAL ("Ignored %1 (not a regular file)", i->path());
continue;
if (image_files > 0 && sound_files == 0) {
content.push_back (make_shared<ImageContent>(path));
} else if (image_files == 0 && sound_files > 0) {
- for (auto i: boost::filesystem::directory_iterator(path)) {
+ for (auto i: dcp::filesystem::directory_iterator(path)) {
content.push_back (make_shared<FFmpegContent>(i.path()));
}
}
transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
if (valid_image_file (path)) {
- single.reset (new ImageContent(path));
- } else if (ext == ".srt" || ext == ".ssa" || ext == ".ass" || ext == ".stl") {
- single.reset (new StringTextFileContent(path));
+ single = make_shared<ImageContent>(path);
+ } else if (ext == ".srt" || ext == ".ssa" || ext == ".ass" || ext == ".stl" || ext == ".vtt") {
+ single = make_shared<StringTextFileContent>(path);
} else if (ext == ".xml") {
cxml::Document doc;
- doc.read_file (path);
+ doc.read_file(dcp::filesystem::fix_long_path(path));
if (doc.root_name() == "DCinemaSecurityMessage") {
throw KDMAsContentError ();
}
- single.reset (new DCPSubtitleContent(path));
+ single = make_shared<DCPSubtitleContent>(path);
} else if (ext == ".mxf" && dcp::SMPTESubtitleAsset::valid_mxf(path)) {
- single.reset (new DCPSubtitleContent(path));
+ single = make_shared<DCPSubtitleContent>(path);
} else if (ext == ".mxf" && VideoMXFContent::valid_mxf(path)) {
- single.reset (new VideoMXFContent(path));
+ single = make_shared<VideoMXFContent>(path);
} else if (ext == ".mxf" && AtmosMXFContent::valid_mxf(path)) {
- single.reset (new AtmosMXFContent(path));
+ single = make_shared<AtmosMXFContent>(path);
}
if (!single) {
- single.reset (new FFmpegContent(path));
+ single = make_shared<FFmpegContent>(path);
}
content.push_back (single);