summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-12-13 21:22:00 +0100
committerCarl Hetherington <cth@carlh.net>2021-01-17 20:13:22 +0100
commitea454d8c6eabe0dfa3e82b36e5813012cf93395c (patch)
tree8c307f78eeee4a09a2a825d7788f7a29fb9a642f
parent197b0139dc0765ef5cd67acf6770ef9037718235 (diff)
Throw an exception on making a DCP with no reels.
-rw-r--r--src/cpl.cc4
-rw-r--r--src/exceptions.cc8
-rw-r--r--src/exceptions.h6
-rw-r--r--test/cpl_ratings_test.cc11
4 files changed, 28 insertions, 1 deletions
diff --git a/src/cpl.cc b/src/cpl.cc
index b19d6d89..22abfb69 100644
--- a/src/cpl.cc
+++ b/src/cpl.cc
@@ -198,6 +198,10 @@ CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<cons
auto reel_list = root->add_child ("ReelList");
+ if (_reels.empty()) {
+ throw NoReelsError ();
+ }
+
bool first = true;
for (auto i: _reels) {
auto asset_list = i->write_to_cpl (reel_list, standard);
diff --git a/src/exceptions.cc b/src/exceptions.cc
index ebe8609a..37e699e6 100644
--- a/src/exceptions.cc
+++ b/src/exceptions.cc
@@ -169,3 +169,11 @@ UnknownChannelIdError::UnknownChannelIdError (std::string id)
{
}
+
+
+NoReelsError::NoReelsError ()
+ : runtime_error ("Cannot make a DCP when no reels have been added")
+{
+
+}
+
diff --git a/src/exceptions.h b/src/exceptions.h
index b9bcfd37..76a66808 100644
--- a/src/exceptions.h
+++ b/src/exceptions.h
@@ -283,6 +283,12 @@ public:
};
+class NoReelsError : public std::runtime_error
+{
+public:
+ NoReelsError ();
+};
+
}
#endif
diff --git a/test/cpl_ratings_test.cc b/test/cpl_ratings_test.cc
index 931359b4..1cb6394e 100644
--- a/test/cpl_ratings_test.cc
+++ b/test/cpl_ratings_test.cc
@@ -38,6 +38,7 @@
using std::list;
using std::string;
using std::vector;
+using std::shared_ptr;
BOOST_AUTO_TEST_CASE (cpl_ratings)
{
@@ -48,6 +49,9 @@ BOOST_AUTO_TEST_CASE (cpl_ratings)
ratings.push_back (dcp::Rating("http://www.movielabs.com/md/ratings/GB/BBFC/1/12A%3C/Agency", "12A"));
cpl.set_ratings (ratings);
+ shared_ptr<dcp::Reel> reel(new dcp::Reel());
+ cpl.add (reel);
+
cpl.write_xml ("build/test/cpl_ratings.xml", dcp::SMPTE, std::shared_ptr<dcp::CertificateChain>());
list<string> ignore;
@@ -81,7 +85,12 @@ BOOST_AUTO_TEST_CASE (cpl_ratings)
" <Label>12A</Label>\n"
" </Rating>\n"
" </RatingList>\n"
- " <ReelList/>\n"
+ " <ReelList>\n"
+ " <Reel>\n"
+ " <Id>urn:uuid:56a781ed-ace3-4cdf-8391-93b1bcea54eb</Id>\n"
+ " <AssetList/>\n"
+ " </Reel>\n"
+ " </ReelList>\n"
"</CompositionPlaylist>\n",
ignore
);