X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FMXF.cpp;h=af406ee0da79debc6e1febe0b6c357e8096a1bc3;hb=719f213e91b4731d66a1e4b3e6d278b59f4a0c99;hp=b49fb83b5cfd1e4f18456dcf27279cb63091935f;hpb=7d74ebdfabeaa9611c125451bf6eedcbf6018074;p=asdcplib.git diff --git a/src/MXF.cpp b/src/MXF.cpp index b49fb83..af406ee 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -1545,6 +1545,35 @@ ASDCP::MXF::CreateObject(const Dictionary*& Dict, const UL& label) //------------------------------------------------------------------------------------------ +// +static bool +ul_is_an_mca_group(const ASDCP::UL& ul) +{ + if ( ul.Value()[10] == 2 ) // magic depends on UL "Essence Facet" byte (see ST 428-12) + { + return true; + } + + return false; +} + +// +static bool +ul_is_an_mca_channel(const ASDCP::UL& ul) +{ + if ( ul.Value()[10] == 1 ) // magic depends on UL "Essence Facet" byte (see ST 428-12) + { + return true; + } + + if ( ul == ASDCP::DefaultSMPTEDict().ul(ASDCP::MDD_AudioChannelSLVS) ) // not all ULs obey ST 428-12! + { + return true; + } + + return false; +} + // bool ASDCP::MXF::decode_mca_string(const std::string& s, const mca_label_map_t& labels, const Dictionary*& dict, const std::string& language, @@ -1592,7 +1621,7 @@ ASDCP::MXF::decode_mca_string(const std::string& s, const mca_label_map_t& label return false; } - if ( i->second.ul.Value()[10] != 2 ) // magic depends on UL "Essence Facet" byte (see ST 428-12) + if ( ! ul_is_an_mca_group(i->second.ul) ) { DefaultLogSink().Error("Not a soundfield group symbol: '%s'\n", symbol_buf.c_str()); return false; @@ -1664,7 +1693,7 @@ ASDCP::MXF::decode_mca_string(const std::string& s, const mca_label_map_t& label return false; } - if ( i->second.ul.Value()[10] != 1 ) // magic depends on UL "Essence Facet" byte (see ST 428-12) + if ( ! ul_is_an_mca_channel(i->second.ul) ) { DefaultLogSink().Error("Not a channel symbol: '%s'\n", symbol_buf.c_str()); return false; @@ -1760,6 +1789,7 @@ ASDCP::MXF::ASDCP_MCAConfigParser::ASDCP_MCAConfigParser(const Dictionary*& d) : m_LabelMap.insert(pair("FSKSync", label_traits("FSK Sync" , true, m_Dict->ul(MDD_DCAudioChannel_FSKSyncSignalChannel)))); m_LabelMap.insert(pair("DBOX", label_traits("D-BOX Motion Code Primary Stream" , false, m_Dict->ul(MDD_DBOXMotionCodePrimaryStream)))); m_LabelMap.insert(pair("DBOX2", label_traits("D-BOX Motion Code Secondary Stream", false, m_Dict->ul(MDD_DBOXMotionCodeSecondaryStream)))); + m_LabelMap.insert(pair("SLVS", label_traits("Sign Language Video Stream" , false, m_Dict->ul(MDD_AudioChannelSLVS)))); } //