summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-10-18 17:48:13 +0200
committerCarl Hetherington <cth@carlh.net>2019-10-18 17:49:51 +0200
commita2cba59a791eb8a65d730aa170586117f120e437 (patch)
tree7cd754392485ccd24d5b8db803cb7a3131a91150
parent392d675f5799671abbcf1a9a47820321bcbdcca2 (diff)
ISDCF name fixes with > 6 channels and HI/VI (#1633).
-rw-r--r--src/lib/film.cc11
-rw-r--r--src/lib/util.cc20
-rw-r--r--test/isdcf_name_test.cc33
3 files changed, 58 insertions, 6 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index cc60ab303..0d2adce4a 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -780,14 +780,21 @@ Film::isdcf_name (bool if_created_now) const
/* Count mapped audio channels */
- pair<int, int> ch = audio_channel_types (mapped_audio_channels(), audio_channels());
+ list<int> mapped = mapped_audio_channels ();
+
+ pair<int, int> ch = audio_channel_types (mapped, audio_channels());
if (!ch.first && !ch.second) {
d += "_MOS";
} else if (ch.first) {
d += String::compose("_%1%2", ch.first, ch.second);
}
- /* XXX: HI/VI */
+ if (audio_channels() > static_cast<int>(dcp::HI) && find(mapped.begin(), mapped.end(), dcp::HI) != mapped.end()) {
+ d += "-HI";
+ }
+ if (audio_channels() > static_cast<int>(dcp::VI) && find(mapped.begin(), mapped.end(), dcp::VI) != mapped.end()) {
+ d += "-VI";
+ }
d += "_" + resolution_to_string (_resolution);
diff --git a/src/lib/util.cc b/src/lib/util.cc
index a17ac54f5..765fc3bf5 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -777,7 +777,7 @@ careful_string_filter (string s)
/** @param mapped List of mapped audio channels from a Film.
* @param channels Total number of channels in the Film.
- * @return First: number of non-LFE channels, second: number of LFE channels.
+ * @return First: number of non-LFE soundtrack channels (L/R/C/Ls/Rs/Lc/Rc/Bsl/Bsr), second: number of LFE channels.
*/
pair<int, int>
audio_channel_types (list<int> mapped, int channels)
@@ -791,10 +791,24 @@ audio_channel_types (list<int> mapped, int channels)
continue;
}
- if (static_cast<dcp::Channel> (i) == dcp::LFE) {
+ switch (static_cast<dcp::Channel>(i)) {
+ case dcp::LFE:
++lfe;
- } else {
+ break;
+ case dcp::LEFT:
+ case dcp::RIGHT:
+ case dcp::CENTRE:
+ case dcp::LS:
+ case dcp::RS:
+ case dcp::LC:
+ case dcp::RC:
+ case dcp::BSL:
+ case dcp::BSR:
++non_lfe;
+ break;
+ case dcp::HI:
+ case dcp::VI:
+ break;
}
}
diff --git a/test/isdcf_name_test.cc b/test/isdcf_name_test.cc
index 8181ffc43..3315833b0 100644
--- a/test/isdcf_name_test.cc
+++ b/test/isdcf_name_test.cc
@@ -180,11 +180,42 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
mapping.set (0, dcp::HI, 1.0);
sound->audio->set_mapping (mapping);
BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+
film->set_audio_channels (8);
mapping.set (0, dcp::HI, 1.0);
sound->audio->set_mapping (mapping);
- BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_61_4K_DI_20140704_PP_SMPTE_OV");
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PP_SMPTE_OV");
mapping.set (0, dcp::VI, 1.0);
sound->audio->set_mapping (mapping);
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+
+ film->set_audio_channels(10);
+ mapping.set (0, dcp::LC, 1.0);
+ mapping.set (0, dcp::RC, 1.0);
+ mapping.set (0, dcp::HI, 0.0);
+ mapping.set (0, dcp::VI, 0.0);
+ sound->audio->set_mapping (mapping);
BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71_4K_DI_20140704_PP_SMPTE_OV");
+ mapping.set (0, dcp::HI, 1.0);
+ sound->audio->set_mapping (mapping);
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI_4K_DI_20140704_PP_SMPTE_OV");
+ mapping.set (0, dcp::VI, 1.0);
+ sound->audio->set_mapping (mapping);
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+
+ film->set_audio_channels(12);
+ mapping.set (0, dcp::LC, 0.0);
+ mapping.set (0, dcp::RC, 0.0);
+ mapping.set (0, dcp::BSL, 1.0);
+ mapping.set (0, dcp::BSR, 1.0);
+ mapping.set (0, dcp::HI, 0.0);
+ mapping.set (0, dcp::VI, 0.0);
+ sound->audio->set_mapping (mapping);
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71_4K_DI_20140704_PP_SMPTE_OV");
+ mapping.set (0, dcp::HI, 1.0);
+ sound->audio->set_mapping (mapping);
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI_4K_DI_20140704_PP_SMPTE_OV");
+ mapping.set (0, dcp::VI, 1.0);
+ sound->audio->set_mapping (mapping);
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
}