diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-12-20 16:18:24 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-12-20 16:18:24 +0000 |
| commit | 3476f2f8251d5800abdd968963cac57b0df8a657 (patch) | |
| tree | dea2e82b66f7da44387023fe0c662253dfcec777 /src/lib | |
| parent | f8e6fdee828647bc5a6a1cc7627052a072a37dc6 (diff) | |
Allow content factory to return multiple content.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/content_factory.cc | 34 | ||||
| -rw-r--r-- | src/lib/content_factory.h | 2 |
2 files changed, 20 insertions, 16 deletions
diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc index d3905e4e7..9dd042037 100644 --- a/src/lib/content_factory.cc +++ b/src/lib/content_factory.cc @@ -100,22 +100,22 @@ content_factory (shared_ptr<const Film> film, cxml::NodePtr node, int version, l return content; } -/** Create a Content object from a file or directory. +/** Create some Content objects from a file or directory. * @param film Film that the content will be in. * @param path File or directory. - * @return Content object. + * @return Content objects. */ -shared_ptr<Content> +list<shared_ptr<Content> > content_factory (shared_ptr<const Film> film, boost::filesystem::path path) { - shared_ptr<Content> content; + list<shared_ptr<Content> > content; if (boost::filesystem::is_directory (path)) { LOG_GENERAL ("Look in directory %1", path); if (boost::filesystem::is_empty (path)) { - return shared_ptr<Content> (); + return content; } /* Guess if this is a DCP or a set of images: read the first ten filenames and if they @@ -152,33 +152,37 @@ content_factory (shared_ptr<const Film> film, boost::filesystem::path path) } if (is_dcp) { - content.reset (new DCPContent (film, path)); + content.push_back (shared_ptr<Content> (new DCPContent (film, path))); } else { - content.reset (new ImageContent (film, path)); + content.push_back (shared_ptr<Content> (new ImageContent (film, path))); } } else { + shared_ptr<Content> single; + string ext = path.extension().string (); transform (ext.begin(), ext.end(), ext.begin(), ::tolower); if (valid_image_file (path)) { - content.reset (new ImageContent (film, path)); + single.reset (new ImageContent (film, path)); } else if (ext == ".srt" || ext == ".ssa" || ext == ".ass") { - content.reset (new TextSubtitleContent (film, path)); + single.reset (new TextSubtitleContent (film, path)); } else if (ext == ".xml") { - content.reset (new DCPSubtitleContent (film, path)); + single.reset (new DCPSubtitleContent (film, path)); } else if (ext == ".mxf" && dcp::SMPTESubtitleAsset::valid_mxf (path)) { - content.reset (new DCPSubtitleContent (film, path)); + single.reset (new DCPSubtitleContent (film, path)); } else if (ext == ".mxf" && VideoMXFContent::valid_mxf (path)) { - content.reset (new VideoMXFContent (film, path)); + single.reset (new VideoMXFContent (film, path)); } else if (ext == ".mxf" && AtmosMXFContent::valid_mxf (path)) { - content.reset (new AtmosMXFContent (film, path)); + single.reset (new AtmosMXFContent (film, path)); } - if (!content) { - content.reset (new FFmpegContent (film, path)); + if (!single) { + single.reset (new FFmpegContent (film, path)); } + + content.push_back (single); } return content; diff --git a/src/lib/content_factory.h b/src/lib/content_factory.h index b319febfc..9c090c690 100644 --- a/src/lib/content_factory.h +++ b/src/lib/content_factory.h @@ -29,4 +29,4 @@ class Film; class Content; extern boost::shared_ptr<Content> content_factory (boost::shared_ptr<const Film>, cxml::NodePtr, int, std::list<std::string> &); -extern boost::shared_ptr<Content> content_factory (boost::shared_ptr<const Film>, boost::filesystem::path); +extern std::list<boost::shared_ptr<Content> > content_factory (boost::shared_ptr<const Film>, boost::filesystem::path); |
