summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-03-17 22:38:08 +0100
committerCarl Hetherington <cth@carlh.net>2021-03-17 22:38:08 +0100
commitb0b3c6f0cdc034ef515f72d72fd72fbb71d1ca63 (patch)
tree612b05b89e38c36581f7fba0726cb96e8b680327 /src
parent2c1faeb15715794525f48110c2b8a9df96b387c1 (diff)
Fix combining when two DCPs both contain copies of the same asset.
Diffstat (limited to 'src')
-rw-r--r--src/combine.cc25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/combine.cc b/src/combine.cc
index dd8a145c..da893cb7 100644
--- a/src/combine.cc
+++ b/src/combine.cc
@@ -140,10 +140,6 @@ dcp::combine (
continue;
}
- auto file = j->file();
- DCP_ASSERT (file);
- path new_path = make_unique(output / file->filename());
-
auto sub = dynamic_pointer_cast<dcp::InteropSubtitleAsset>(j);
if (sub) {
/* Interop fonts are really fiddly. The font files are assets (in the ASSETMAP)
@@ -155,16 +151,10 @@ dcp::combine (
for (auto const& k: fonts) {
sub->set_font_file (k.first, make_unique(output / k.second.filename()));
}
- sub->write (new_path);
- } else if (!dynamic_pointer_cast<dcp::FontAsset>(j)) {
- /* Take care of everything else that's not a Interop subtitle asset, Interop font file
- * or CPL.
- */
- auto file = j->file();
+ auto file = sub->file();
DCP_ASSERT (file);
path new_path = make_unique(output / file->filename());
- create_hard_link_or_copy (*file, new_path);
- j->set_file (new_path);
+ sub->write (new_path);
}
assets.push_back (j);
@@ -172,5 +162,16 @@ dcp::combine (
}
output_dcp.resolve_refs (assets);
+
+ for (auto i: output_dcp.assets()) {
+ if (!dynamic_pointer_cast<dcp::FontAsset>(i) && !dynamic_pointer_cast<dcp::CPL>(i)) {
+ auto file = i->file();
+ DCP_ASSERT (file);
+ path new_path = make_unique(output / file->filename());
+ create_hard_link_or_copy (*file, new_path);
+ i->set_file (new_path);
+ }
+ }
+
output_dcp.write_xml (*standard, issuer, creator, issue_date, annotation_text, signer);
}