diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-01-12 21:21:30 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-01-19 22:44:58 +0100 |
| commit | d4024848dfe293b06440d20a9f48894b2b008316 (patch) | |
| tree | 86b3e460245131300d92024460e9b5238637365b /src/types.cc | |
| parent | 3c379a4ec4d030a8f7fbbc0ddf2621e4d39be238 (diff) | |
Move MainSoundConfiguration and MCASoundField into separate files.
Diffstat (limited to 'src/types.cc')
| -rw-r--r-- | src/types.cc | 257 |
1 files changed, 0 insertions, 257 deletions
diff --git a/src/types.cc b/src/types.cc index a17966b4..bbb66e3a 100644 --- a/src/types.cc +++ b/src/types.cc @@ -410,100 +410,6 @@ dcp::operator== (Luminance const& a, Luminance const& b) } -MainSoundConfiguration::MainSoundConfiguration (string s) -{ - vector<string> parts; - boost::split (parts, s, boost::is_any_of("/")); - if (parts.empty()) { - throw MainSoundConfigurationError(s); - } - - if (parts[0] == "51") { - _field = MCASoundField::FIVE_POINT_ONE; - } else if (parts[0] == "71") { - _field = MCASoundField::SEVEN_POINT_ONE; - } else { - _field = MCASoundField::OTHER; - } - - if (parts.size() < 2) { - /* I think it's OK to just have the sound field descriptor with no channels, though - * to me it's not clear and I might be wrong. - */ - return; - } - - vector<string> channels; - boost::split (channels, parts[1], boost::is_any_of(",")); - - if (channels.size() > 16) { - throw MainSoundConfigurationError (s); - } - - for (auto i: channels) { - if (i == "-") { - _channels.push_back(optional<Channel>()); - } else { - _channels.push_back(mca_id_to_channel(i)); - } - } -} - - -MainSoundConfiguration::MainSoundConfiguration (MCASoundField field, int channels) - : _field (field) -{ - _channels.resize (channels); -} - - -string -MainSoundConfiguration::to_string () const -{ - string c; - switch (_field) { - case MCASoundField::FIVE_POINT_ONE: - c = "51/"; - break; - case MCASoundField::SEVEN_POINT_ONE: - c = "71/"; - break; - default: - DCP_ASSERT(false); - } - - for (auto i: _channels) { - if (!i) { - c += "-,"; - } else { - c += channel_to_mca_id(*i, _field) + ","; - } - } - - if (c.length() > 0) { - c = c.substr(0, c.length() - 1); - } - - return c; -} - - -optional<Channel> -MainSoundConfiguration::mapping (int index) const -{ - DCP_ASSERT (static_cast<size_t>(index) < _channels.size()); - return _channels[index]; -} - - -void -MainSoundConfiguration::set_mapping (int index, Channel c) -{ - DCP_ASSERT (static_cast<size_t>(index) < _channels.size()); - _channels[index] = c; -} - - string dcp::status_to_string (Status s) { @@ -535,169 +441,6 @@ dcp::string_to_status (string s) } -Channel -dcp::mca_id_to_channel (string id) -{ - transform(id.begin(), id.end(), id.begin(), ::tolower); - - if (id == "l") { - return Channel::LEFT; - } else if (id == "r") { - return Channel::RIGHT; - } else if (id == "c") { - return Channel::CENTRE; - } else if (id == "lfe") { - return Channel::LFE; - } else if (id == "ls" || id == "lss" || id == "lslss") { - return Channel::LS; - } else if (id == "rs" || id == "rss" || id == "rsrss") { - return Channel::RS; - } else if (id == "hi") { - 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" || id == "dbox2" || id == "mtn") { - return Channel::MOTION_DATA; - } else if (id == "sync" || id == "fsksync") { - return Channel::SYNC_SIGNAL; - } else if (id == "slvs") { - return Channel::SIGN_LANGUAGE; - } - - throw UnknownChannelIdError (id); -} - - -string -dcp::channel_to_mca_id (Channel c, MCASoundField field) -{ - switch (c) { - case Channel::LEFT: - return "L"; - case Channel::RIGHT: - return "R"; - case Channel::CENTRE: - return "C"; - case Channel::LFE: - return "LFE"; - case Channel::LS: - return field == MCASoundField::FIVE_POINT_ONE ? "Ls" : "Lss"; - case Channel::RS: - return field == MCASoundField::FIVE_POINT_ONE ? "Rs" : "Rss"; - case Channel::HI: - return "HI"; - case Channel::VI: - return "VIN"; - case Channel::BSL: - return "Lrs"; - case Channel::BSR: - return "Rrs"; - case Channel::MOTION_DATA: - return "DBOX"; - case Channel::SYNC_SIGNAL: - return "FSKSync"; - case Channel::SIGN_LANGUAGE: - return "SLVS"; - default: - break; - } - - DCP_ASSERT (false); -} - - -string -dcp::channel_to_mca_name (Channel c, MCASoundField field) -{ - switch (c) { - case Channel::LEFT: - return "Left"; - case Channel::RIGHT: - return "Right"; - case Channel::CENTRE: - return "Center"; - case Channel::LFE: - return "LFE"; - case Channel::LS: - return field == MCASoundField::FIVE_POINT_ONE ? "Left Surround" : "Left Side Surround"; - case Channel::RS: - return field == MCASoundField::FIVE_POINT_ONE ? "Right Surround" : "Right Side Surround"; - case Channel::HI: - return "Hearing Impaired"; - case Channel::VI: - return "Visually Impaired-Narrative"; - case Channel::BSL: - return "Left Rear Surround"; - case Channel::BSR: - return "Right Rear Surround"; - case Channel::MOTION_DATA: - return "D-BOX Motion Code Primary Stream"; - case Channel::SYNC_SIGNAL: - return "FSK Sync"; - case Channel::SIGN_LANGUAGE: - return "Sign Language Video Stream"; - default: - break; - } - - DCP_ASSERT (false); -} - - -ASDCP::UL -dcp::channel_to_mca_universal_label (Channel c, MCASoundField field, ASDCP::Dictionary const* dict) -{ - static byte_t sync_signal[] = { - 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, 0x03, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00 - }; - - static byte_t sign_language[] = { - 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, 0x0d, 0x0f, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00 - }; - - switch (c) { - case Channel::LEFT: - return dict->ul(ASDCP::MDD_DCAudioChannel_L); - case Channel::RIGHT: - return dict->ul(ASDCP::MDD_DCAudioChannel_R); - case Channel::CENTRE: - return dict->ul(ASDCP::MDD_DCAudioChannel_C); - case Channel::LFE: - return dict->ul(ASDCP::MDD_DCAudioChannel_LFE); - case Channel::LS: - return dict->ul(field == MCASoundField::FIVE_POINT_ONE ? ASDCP::MDD_DCAudioChannel_Ls : ASDCP::MDD_DCAudioChannel_Lss); - case Channel::RS: - return dict->ul(field == MCASoundField::FIVE_POINT_ONE ? ASDCP::MDD_DCAudioChannel_Rs : ASDCP::MDD_DCAudioChannel_Rss); - case Channel::HI: - return dict->ul(ASDCP::MDD_DCAudioChannel_HI); - case Channel::VI: - return dict->ul(ASDCP::MDD_DCAudioChannel_VIN); - case Channel::BSL: - return dict->ul(ASDCP::MDD_DCAudioChannel_Lrs); - case Channel::BSR: - return dict->ul(ASDCP::MDD_DCAudioChannel_Rrs); - case Channel::MOTION_DATA: - return dict->ul(ASDCP::MDD_DBOXMotionCodePrimaryStream); - case Channel::SYNC_SIGNAL: - return ASDCP::UL(sync_signal); - case Channel::SIGN_LANGUAGE: - return ASDCP::UL(sign_language); - default: - break; - } - - DCP_ASSERT (false); -} - - vector<dcp::Channel> dcp::used_audio_channels () { |
