summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-05-13 13:19:18 +0200
committerCarl Hetherington <cth@carlh.net>2024-05-13 20:35:23 +0200
commit4d03b76ff759e30ea079944c31a87e2b3e7a21ac (patch)
tree15d6dc10168a25b81e246727d4b3f6eea0f8a98e
parent869462070671b273ac528e075ac1c00a417cc8a0 (diff)
Support some more random MCA tags seen in the field (EasyDCP 4.2.0).
-rw-r--r--src/types.cc6
-rw-r--r--src/types.h3
-rw-r--r--test/cpl_metadata_test.cc24
-rw-r--r--test/stream_operators.cc6
4 files changed, 37 insertions, 2 deletions
diff --git a/src/types.cc b/src/types.cc
index f4bf8db0..e2165548 100644
--- a/src/types.cc
+++ b/src/types.cc
@@ -547,11 +547,15 @@ dcp::mca_id_to_channel (string id)
return Channel::HI;
} else if (id == "vin" || id == "vi-n") {
return Channel::VI;
+ } else if (id == "lc") {
+ return Channel::LC;
+ } else if (id == "rc") {
+ return Channel::RC;
} else if (id == "lrs" || id == "lsr") {
return Channel::BSL;
} else if (id == "rrs" || id == "rsr") {
return Channel::BSR;
- } else if (id == "dbox") {
+ } else if (id == "dbox" || id == "mtn") {
return Channel::MOTION_DATA;
} else if (id == "sync" || id == "fsksync") {
return Channel::SYNC_SIGNAL;
diff --git a/src/types.h b/src/types.h
index 183ce638..65840e6d 100644
--- a/src/types.h
+++ b/src/types.h
@@ -99,7 +99,8 @@ enum class Channel {
RS = 5, ///< right surround
HI = 6,
VI = 7,
- /* 8 and 9 are not used */
+ LC = 8, ///< not used, but referred to in MainSoundConfiguration in some CPLs
+ RC = 9, ///< not used, but referred to in MainSoundConfiguration in some CPLs
BSL = 10,
BSR = 11,
MOTION_DATA = 12,
diff --git a/test/cpl_metadata_test.cc b/test/cpl_metadata_test.cc
index a811e56f..906f1bc4 100644
--- a/test/cpl_metadata_test.cc
+++ b/test/cpl_metadata_test.cc
@@ -154,6 +154,30 @@ BOOST_AUTO_TEST_CASE (main_sound_configuration_test5)
}
+BOOST_AUTO_TEST_CASE(main_sound_configuration_test6)
+{
+ dcp::MainSoundConfiguration msc("WTF/L,R,C,LFE,LsLss,RsRss,HI,VIN,Lc,Rc,Lrs,Rrs,Mtn,FSKSync,SLVS,-");
+ BOOST_CHECK_EQUAL(msc.channels(), 16);
+ BOOST_CHECK_EQUAL(msc.field(), dcp::MCASoundField::OTHER);
+ BOOST_CHECK_EQUAL(msc.mapping(0).get(), dcp::Channel::LEFT);
+ BOOST_CHECK_EQUAL(msc.mapping(1).get(), dcp::Channel::RIGHT);
+ BOOST_CHECK_EQUAL(msc.mapping(2).get(), dcp::Channel::CENTRE);
+ BOOST_CHECK_EQUAL(msc.mapping(3).get(), dcp::Channel::LFE);
+ BOOST_CHECK_EQUAL(msc.mapping(4).get(), dcp::Channel::LS);
+ BOOST_CHECK_EQUAL(msc.mapping(5).get(), dcp::Channel::RS);
+ BOOST_CHECK_EQUAL(msc.mapping(6).get(), dcp::Channel::HI);
+ BOOST_CHECK_EQUAL(msc.mapping(7).get(), dcp::Channel::VI);
+ BOOST_CHECK_EQUAL(msc.mapping(8).get(), dcp::Channel::LC);
+ BOOST_CHECK_EQUAL(msc.mapping(9).get(), dcp::Channel::RC);
+ BOOST_CHECK_EQUAL(msc.mapping(10).get(), dcp::Channel::BSL);
+ BOOST_CHECK_EQUAL(msc.mapping(11).get(), dcp::Channel::BSR);
+ BOOST_CHECK_EQUAL(msc.mapping(12).get(), dcp::Channel::MOTION_DATA);
+ BOOST_CHECK_EQUAL(msc.mapping(13).get(), dcp::Channel::SYNC_SIGNAL);
+ BOOST_CHECK_EQUAL(msc.mapping(14).get(), dcp::Channel::SIGN_LANGUAGE);
+ BOOST_CHECK(!msc.mapping(15));
+}
+
+
/* 482-12 says that implementations may use case-insensitive comparisons for the channel identifiers,
* and there is one DCP in the private test suite (made by Disney) that uses LS for left surround.
*/
diff --git a/test/stream_operators.cc b/test/stream_operators.cc
index 87949e84..0ed0d05f 100644
--- a/test/stream_operators.cc
+++ b/test/stream_operators.cc
@@ -130,6 +130,12 @@ dcp::operator<<(ostream& s, Channel c)
case Channel::VI:
s << "vi(7)";
break;
+ case Channel::LC:
+ s << "lc(8)";
+ break;
+ case Channel::RC:
+ s << "rc(9)";
+ break;
case Channel::BSL:
s << "bsl(10)";
break;