diff options
| author | jhurst <jhurst@cinecert.com> | 2013-07-01 22:14:16 +0000 |
|---|---|---|
| committer | jhurst <> | 2013-07-01 22:14:16 +0000 |
| commit | 5584493c50cfa0541398527741253a0db8cdbf18 (patch) | |
| tree | 8d751b6c3ccc1e1ba7d8c58846015ec44bbf2242 /src/MXF.cpp | |
| parent | 4c79dd9e68c9f58660343524506712bc32ced077 (diff) | |
IMF MCA labels
cinecanvas fade time now okay with HH:MM:SS:
Diffstat (limited to 'src/MXF.cpp')
| -rwxr-xr-x | src/MXF.cpp | 139 |
1 files changed, 86 insertions, 53 deletions
diff --git a/src/MXF.cpp b/src/MXF.cpp index 6686e6a..d3351ef 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -1449,44 +1449,14 @@ ASDCP::MXF::CreateObject(const Dictionary*& Dict, const UL& label) //------------------------------------------------------------------------------------------ - -ASDCP::MXF::MCAConfigParser::MCAConfigParser(const Dictionary*& d) : m_Dict(d), m_ChannelCount(0) -{ - label_map.insert(label_map_t::value_type("L", m_Dict->ul(MDD_DCAudioChannel_L))); - label_map.insert(label_map_t::value_type("R", m_Dict->ul(MDD_DCAudioChannel_R))); - label_map.insert(label_map_t::value_type("C", m_Dict->ul(MDD_DCAudioChannel_C))); - label_map.insert(label_map_t::value_type("LFE", m_Dict->ul(MDD_DCAudioChannel_LFE))); - label_map.insert(label_map_t::value_type("Ls", m_Dict->ul(MDD_DCAudioChannel_Ls))); - label_map.insert(label_map_t::value_type("Rs", m_Dict->ul(MDD_DCAudioChannel_Rs))); - label_map.insert(label_map_t::value_type("Lss", m_Dict->ul(MDD_DCAudioChannel_Lss))); - label_map.insert(label_map_t::value_type("Rss", m_Dict->ul(MDD_DCAudioChannel_Rss))); - label_map.insert(label_map_t::value_type("Lrs", m_Dict->ul(MDD_DCAudioChannel_Lrs))); - label_map.insert(label_map_t::value_type("Rrs", m_Dict->ul(MDD_DCAudioChannel_Rrs))); - label_map.insert(label_map_t::value_type("Lc", m_Dict->ul(MDD_DCAudioChannel_Lc))); - label_map.insert(label_map_t::value_type("Rc", m_Dict->ul(MDD_DCAudioChannel_Rc))); - label_map.insert(label_map_t::value_type("Cs", m_Dict->ul(MDD_DCAudioChannel_Cs))); - label_map.insert(label_map_t::value_type("HI", m_Dict->ul(MDD_DCAudioChannel_HI))); - label_map.insert(label_map_t::value_type("VIN", m_Dict->ul(MDD_DCAudioChannel_VIN))); - label_map.insert(label_map_t::value_type("51", m_Dict->ul(MDD_DCAudioSoundfield_51))); - label_map.insert(label_map_t::value_type("71", m_Dict->ul(MDD_DCAudioSoundfield_71))); - label_map.insert(label_map_t::value_type("SDS", m_Dict->ul(MDD_DCAudioSoundfield_SDS))); - label_map.insert(label_map_t::value_type("61", m_Dict->ul(MDD_DCAudioSoundfield_61))); - label_map.insert(label_map_t::value_type("M", m_Dict->ul(MDD_DCAudioSoundfield_M))); -} - // -ui32_t -ASDCP::MXF::MCAConfigParser::ChannelCount() const -{ - return m_ChannelCount; -} - -// 51(L,R,C,LFE,Ls,Rs),HI,VIN bool -ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::string& language) +ASDCP::MXF::decode_mca_string(const std::string& s, const mca_label_map_t& labels, const Dictionary& dict, const std::string& language, + InterchangeObject_list_t& descriptor_list, ui32_t& channel_count) { + const Dictionary *dictp = &dict; std::string symbol_buf; - m_ChannelCount = 0; + channel_count = 0; ASDCP::MXF::SoundfieldGroupLabelSubDescriptor *current_soundfield = 0; std::string::const_iterator i; @@ -1506,9 +1476,9 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin return false; } - label_map_t::const_iterator i = label_map.find(symbol_buf); + mca_label_map_t::const_iterator i = labels.find(symbol_buf); - if ( i == label_map.end() ) + if ( i == labels.end() ) { fprintf(stderr, "Unknown symbol: '%s'\n", symbol_buf.c_str()); return false; @@ -1520,7 +1490,7 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin return false; } - current_soundfield = new ASDCP::MXF::SoundfieldGroupLabelSubDescriptor(m_Dict); + current_soundfield = new ASDCP::MXF::SoundfieldGroupLabelSubDescriptor(dictp); GenRandomValue(current_soundfield->InstanceUID); GenRandomValue(current_soundfield->MCALinkID); @@ -1528,7 +1498,7 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin current_soundfield->MCATagName = i->first; current_soundfield->RFC5646SpokenLanguage = language; current_soundfield->MCALabelDictionaryID = i->second; - push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(current_soundfield)); + descriptor_list.push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(current_soundfield)); symbol_buf.clear(); } else if ( *i == ')' ) @@ -1545,26 +1515,26 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin return false; } - label_map_t::const_iterator i = label_map.find(symbol_buf); + mca_label_map_t::const_iterator i = labels.find(symbol_buf); - if ( i == label_map.end() ) + if ( i == labels.end() ) { fprintf(stderr, "Unknown symbol: '%s'\n", symbol_buf.c_str()); return false; } ASDCP::MXF::AudioChannelLabelSubDescriptor *channel_descr = - new ASDCP::MXF::AudioChannelLabelSubDescriptor(m_Dict); + new ASDCP::MXF::AudioChannelLabelSubDescriptor(dictp); GenRandomValue(channel_descr->InstanceUID); assert(current_soundfield); channel_descr->MCALinkID = current_soundfield->MCALinkID; - channel_descr->MCAChannelID = m_ChannelCount++; + channel_descr->MCAChannelID = channel_count++; channel_descr->MCATagSymbol = "ch" + i->first; channel_descr->MCATagName = i->first; channel_descr->RFC5646SpokenLanguage = language; channel_descr->MCALabelDictionaryID = i->second; - push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(channel_descr)); + descriptor_list.push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(channel_descr)); symbol_buf.clear(); current_soundfield = 0; } @@ -1572,9 +1542,9 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin { if ( ! symbol_buf.empty() ) { - label_map_t::const_iterator i = label_map.find(symbol_buf); + mca_label_map_t::const_iterator i = labels.find(symbol_buf); - if ( i == label_map.end() ) + if ( i == labels.end() ) { fprintf(stderr, "Unknown symbol: '%s'\n", symbol_buf.c_str()); return false; @@ -1587,7 +1557,7 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin } ASDCP::MXF::AudioChannelLabelSubDescriptor *channel_descr = - new ASDCP::MXF::AudioChannelLabelSubDescriptor(m_Dict); + new ASDCP::MXF::AudioChannelLabelSubDescriptor(dictp); GenRandomValue(channel_descr->InstanceUID); @@ -1596,12 +1566,12 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin channel_descr->MCALinkID = current_soundfield->MCALinkID; } - channel_descr->MCAChannelID = m_ChannelCount++; + channel_descr->MCAChannelID = channel_count++; channel_descr->MCATagSymbol = "ch" + i->first; channel_descr->MCATagName = i->first; channel_descr->RFC5646SpokenLanguage = language; channel_descr->MCALabelDictionaryID = i->second; - push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(channel_descr)); + descriptor_list.push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(channel_descr)); symbol_buf.clear(); } } @@ -1618,16 +1588,16 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin if ( ! symbol_buf.empty() ) { - label_map_t::const_iterator i = label_map.find(symbol_buf); + mca_label_map_t::const_iterator i = labels.find(symbol_buf); - if ( i == label_map.end() ) + if ( i == labels.end() ) { fprintf(stderr, "Unknown symbol: '%s'\n", symbol_buf.c_str()); return false; } ASDCP::MXF::AudioChannelLabelSubDescriptor *channel_descr = - new ASDCP::MXF::AudioChannelLabelSubDescriptor(m_Dict); + new ASDCP::MXF::AudioChannelLabelSubDescriptor(dictp); GenRandomValue(channel_descr->InstanceUID); @@ -1636,18 +1606,81 @@ ASDCP::MXF::MCAConfigParser::DecodeString(const std::string& s, const std::strin channel_descr->MCALinkID = current_soundfield->MCALinkID; } - channel_descr->MCAChannelID = m_ChannelCount++; + channel_descr->MCAChannelID = channel_count++; channel_descr->MCATagSymbol = "ch" + i->first; channel_descr->MCATagName = i->first; channel_descr->RFC5646SpokenLanguage = language; channel_descr->MCALabelDictionaryID = i->second; - push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(channel_descr)); + descriptor_list.push_back(reinterpret_cast<ASDCP::MXF::InterchangeObject*>(channel_descr)); } return true; } +ASDCP::MXF::ASDCP_MCAConfigParser::ASDCP_MCAConfigParser(const Dictionary*& d) : m_Dict(d), m_ChannelCount(0) +{ + m_LabelMap.insert(mca_label_map_t::value_type("L", m_Dict->ul(MDD_DCAudioChannel_L))); + m_LabelMap.insert(mca_label_map_t::value_type("R", m_Dict->ul(MDD_DCAudioChannel_R))); + m_LabelMap.insert(mca_label_map_t::value_type("C", m_Dict->ul(MDD_DCAudioChannel_C))); + m_LabelMap.insert(mca_label_map_t::value_type("LFE", m_Dict->ul(MDD_DCAudioChannel_LFE))); + m_LabelMap.insert(mca_label_map_t::value_type("Ls", m_Dict->ul(MDD_DCAudioChannel_Ls))); + m_LabelMap.insert(mca_label_map_t::value_type("Rs", m_Dict->ul(MDD_DCAudioChannel_Rs))); + m_LabelMap.insert(mca_label_map_t::value_type("Lss", m_Dict->ul(MDD_DCAudioChannel_Lss))); + m_LabelMap.insert(mca_label_map_t::value_type("Rss", m_Dict->ul(MDD_DCAudioChannel_Rss))); + m_LabelMap.insert(mca_label_map_t::value_type("Lrs", m_Dict->ul(MDD_DCAudioChannel_Lrs))); + m_LabelMap.insert(mca_label_map_t::value_type("Rrs", m_Dict->ul(MDD_DCAudioChannel_Rrs))); + m_LabelMap.insert(mca_label_map_t::value_type("Lc", m_Dict->ul(MDD_DCAudioChannel_Lc))); + m_LabelMap.insert(mca_label_map_t::value_type("Rc", m_Dict->ul(MDD_DCAudioChannel_Rc))); + m_LabelMap.insert(mca_label_map_t::value_type("Cs", m_Dict->ul(MDD_DCAudioChannel_Cs))); + m_LabelMap.insert(mca_label_map_t::value_type("HI", m_Dict->ul(MDD_DCAudioChannel_HI))); + m_LabelMap.insert(mca_label_map_t::value_type("VIN", m_Dict->ul(MDD_DCAudioChannel_VIN))); + m_LabelMap.insert(mca_label_map_t::value_type("51", m_Dict->ul(MDD_DCAudioSoundfield_51))); + m_LabelMap.insert(mca_label_map_t::value_type("71", m_Dict->ul(MDD_DCAudioSoundfield_71))); + m_LabelMap.insert(mca_label_map_t::value_type("SDS", m_Dict->ul(MDD_DCAudioSoundfield_SDS))); + m_LabelMap.insert(mca_label_map_t::value_type("61", m_Dict->ul(MDD_DCAudioSoundfield_61))); + m_LabelMap.insert(mca_label_map_t::value_type("M", m_Dict->ul(MDD_DCAudioSoundfield_M))); +} + +// +ui32_t +ASDCP::MXF::ASDCP_MCAConfigParser::ChannelCount() const +{ + return m_ChannelCount; +} + +// 51(L,R,C,LFE,Ls,Rs),HI,VIN +bool +ASDCP::MXF::ASDCP_MCAConfigParser::DecodeString(const std::string& s, const std::string& language) +{ + return decode_mca_string(s, m_LabelMap, *m_Dict, language, *this, m_ChannelCount); +} + + + +ASDCP::MXF::AS02_MCAConfigParser::AS02_MCAConfigParser(const Dictionary*& d) : ASDCP::MXF::ASDCP_MCAConfigParser(d) +{ + m_LabelMap.insert(mca_label_map_t::value_type("M1", m_Dict->ul(MDD_IMFAudioChannel_M1))); + m_LabelMap.insert(mca_label_map_t::value_type("M2", m_Dict->ul(MDD_IMFAudioChannel_M2))); + m_LabelMap.insert(mca_label_map_t::value_type("Lt", m_Dict->ul(MDD_IMFAudioChannel_Lt))); + m_LabelMap.insert(mca_label_map_t::value_type("Rt", m_Dict->ul(MDD_IMFAudioChannel_Rt))); + m_LabelMap.insert(mca_label_map_t::value_type("Lst", m_Dict->ul(MDD_IMFAudioChannel_Lst))); + m_LabelMap.insert(mca_label_map_t::value_type("Rst", m_Dict->ul(MDD_IMFAudioChannel_Rst))); + m_LabelMap.insert(mca_label_map_t::value_type("S", m_Dict->ul(MDD_IMFAudioChannel_S))); + m_LabelMap.insert(mca_label_map_t::value_type("ST", m_Dict->ul(MDD_IMFAudioSoundfield_ST))); + m_LabelMap.insert(mca_label_map_t::value_type("DM", m_Dict->ul(MDD_IMFAudioSoundfield_DM))); + m_LabelMap.insert(mca_label_map_t::value_type("DNS", m_Dict->ul(MDD_IMFAudioSoundfield_DNS))); + m_LabelMap.insert(mca_label_map_t::value_type("30", m_Dict->ul(MDD_IMFAudioSoundfield_30))); + m_LabelMap.insert(mca_label_map_t::value_type("40", m_Dict->ul(MDD_IMFAudioSoundfield_40))); + m_LabelMap.insert(mca_label_map_t::value_type("50", m_Dict->ul(MDD_IMFAudioSoundfield_50))); + m_LabelMap.insert(mca_label_map_t::value_type("60", m_Dict->ul(MDD_IMFAudioSoundfield_60))); + m_LabelMap.insert(mca_label_map_t::value_type("70", m_Dict->ul(MDD_IMFAudioSoundfield_70))); + m_LabelMap.insert(mca_label_map_t::value_type("LtRt", m_Dict->ul(MDD_IMFAudioSoundfield_LtRt))); + m_LabelMap.insert(mca_label_map_t::value_type("51Ex", m_Dict->ul(MDD_IMFAudioSoundfield_51Ex))); + m_LabelMap.insert(mca_label_map_t::value_type("HI", m_Dict->ul(MDD_IMFAudioSoundfield_HI))); + m_LabelMap.insert(mca_label_map_t::value_type("VIN", m_Dict->ul(MDD_IMFAudioSoundfield_VIN))); +} + // // end MXF.cpp // |
