/*
- Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2022 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
#include "atmos_content.h"
-#include "dcp_content.h"
-#include "video_content.h"
#include "audio_content.h"
-#include "dcp_examiner.h"
-#include "job.h"
-#include "film.h"
-#include "config.h"
-#include "overlaps.h"
#include "compose.hpp"
+#include "config.h"
+#include "dcp_content.h"
#include "dcp_decoder.h"
-#include "log.h"
+#include "dcp_examiner.h"
#include "dcpomatic_log.h"
+#include "film.h"
+#include "job.h"
+#include "log.h"
+#include "overlaps.h"
#include "text_content.h"
+#include "video_content.h"
#include <dcp/dcp.h>
#include <dcp/raw_convert.h>
#include <dcp/exceptions.h>
#include "i18n.h"
+
using std::cout;
-using std::distance;
+using std::dynamic_pointer_cast;
+using std::function;
using std::list;
using std::make_shared;
-using std::map;
-using std::pair;
using std::shared_ptr;
using std::string;
using std::vector;
-using boost::scoped_ptr;
using boost::optional;
-using boost::function;
-using std::dynamic_pointer_cast;
+using boost::scoped_ptr;
#if BOOST_VERSION >= 106100
using namespace boost::placeholders;
#endif
using dcp::raw_convert;
using namespace dcpomatic;
+
int const DCPContentProperty::NEEDS_ASSETS = 600;
int const DCPContentProperty::NEEDS_KDM = 601;
int const DCPContentProperty::REFERENCE_VIDEO = 602;
int const DCPContentProperty::TEXTS = 606;
int const DCPContentProperty::CPL = 607;
+
DCPContent::DCPContent (boost::filesystem::path p)
: _encrypted (false)
, _needs_assets (false)
DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
: Content (node)
{
- video = VideoContent::from_xml (this, node, version);
+ video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
audio = AudioContent::from_xml (this, node, version);
- text = TextContent::from_xml (this, node, version);
+ list<string> notes;
+ text = TextContent::from_xml (this, node, version, notes);
atmos = AtmosContent::from_xml (this, node);
for (int i = 0; i < static_cast<int>(TextType::COUNT); ++i) {
bool have_assetmap = false;
bool have_metadata = false;
- for (directory_iterator i(p); i != directory_iterator(); ++i) {
- if (i->path().filename() == "ASSETMAP" || i->path().filename() == "ASSETMAP.xml") {
+ for (auto i: directory_iterator(p)) {
+ if (i.path().filename() == "ASSETMAP" || i.path().filename() == "ASSETMAP.xml") {
have_assetmap = true;
- } else if (i->path().filename() == "metadata.xml") {
+ } else if (i.path().filename() == "metadata.xml") {
have_metadata = true;
}
}
if (!have_metadata) {
throw DCPError ("No ASSETMAP or ASSETMAP.xml file found: is this a DCP?");
} else {
- throw DCPError (
- "This looks like a DCP-o-matic project folder, which cannot be added to a different project. "
- "Choose the DCP directory inside the DCP-o-matic project folder if that's what you want to import."
- );
+ throw ProjectFolderError ();
}
}
if (boost::filesystem::is_regular_file(i.path())) {
LOG_GENERAL ("Inside there's regular file %1", i.path().string());
add_path (i.path());
- } else if (boost::filesystem::is_directory (i.path())) {
+ } else if (boost::filesystem::is_directory(i.path()) && i.path().filename() != ".AppleDouble") {
LOG_GENERAL ("Inside there's directory %1", i.path().string());
read_sub_directory (i.path());
}
atmos->set_length (examiner->atmos_length());
}
- list<shared_ptr<TextContent> > new_text;
- for (int i = 0; i < static_cast<int>(TextType::COUNT); ++i) {
- for (int j = 0; j < examiner->text_count(static_cast<TextType>(i)); ++j) {
- auto c = make_shared<TextContent>(this, static_cast<TextType>(i), static_cast<TextType>(i));
- if (i == static_cast<int>(TextType::CLOSED_CAPTION)) {
- c->set_dcp_track (examiner->dcp_text_track(j));
- }
- new_text.push_back (c);
- }
+ list<shared_ptr<TextContent>> new_text;
+
+ for (int i = 0; i < examiner->text_count(TextType::OPEN_SUBTITLE); ++i) {
+ auto c = make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE);
+ c->set_language (examiner->open_subtitle_language());
+ new_text.push_back (c);
+ }
+
+ for (int i = 0; i < examiner->text_count(TextType::CLOSED_CAPTION); ++i) {
+ auto c = make_shared<TextContent>(this, TextType::CLOSED_CAPTION, TextType::CLOSED_CAPTION);
+ c->set_dcp_track (examiner->dcp_text_track(i));
+ new_text.push_back (c);
}
{
{
shared_ptr<DCPDecoder> decoder;
try {
- decoder.reset (new DCPDecoder (film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()));
+ decoder = make_shared<DCPDecoder>(film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>());
} catch (dcp::ReadError &) {
/* We couldn't read the DCP, so it's probably missing */
return false;
{
shared_ptr<DCPDecoder> decoder;
try {
- decoder.reset (new DCPDecoder (film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()));
+ decoder = make_shared<DCPDecoder>(film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>());
} catch (dcp::ReadError &) {
/* We couldn't read the DCP, so it's probably missing */
return false;
return false;
} else if (i->main_subtitle()->entry_point().get_value_or(0) != 0) {
/// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- why_not = _("one if its subtitle reels has a non-zero entry point so it must be re-written.");
+ why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written.");
return false;
}
}
for (auto j: i->closed_captions()) {
if (j->entry_point().get_value_or(0) != 0) {
/// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- why_not = _("one if its closed caption has a non-zero entry point so it must be re-written.");
+ why_not = _("one of its closed caption has a non-zero entry point so it must be re-written.");
return false;
}
}