From 6dc179f7d08477ecc7bac1257b47dda048a1b878 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 18 Oct 2019 17:48:13 +0200 Subject: [PATCH] ISDCF name fixes with > 6 channels and HI/VI (#1633). --- src/lib/film.cc | 11 +++++++++-- src/lib/util.cc | 20 +++++++++++++++++--- test/isdcf_name_test.cc | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/lib/film.cc b/src/lib/film.cc index 93459661b..701eecc39 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -813,14 +813,21 @@ Film::isdcf_name (bool if_created_now) const /* Count mapped audio channels */ - pair ch = audio_channel_types (mapped_audio_channels(), audio_channels()); + list mapped = mapped_audio_channels (); + + pair 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(dcp::HI) && find(mapped.begin(), mapped.end(), dcp::HI) != mapped.end()) { + d += "-HI"; + } + if (audio_channels() > static_cast(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 2dedc32c1..cd2d5a368 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -779,7 +779,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 audio_channel_types (list mapped, int channels) @@ -793,10 +793,24 @@ audio_channel_types (list mapped, int channels) continue; } - if (static_cast (i) == dcp::LFE) { + switch (static_cast(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"); } -- 2.30.2