X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FDict.cpp;h=e2aadcbf28385f2d7aefc04155cb3f029c5c6f14;hb=830570c46c4d39a8a5767f83875e3ef2f79ecc98;hp=fe2988015befd3612d44dbd833f09c819bf02157;hpb=dde89765744dad9a6b9d13126092d9bfc2dbc0d7;p=asdcplib.git diff --git a/src/Dict.cpp b/src/Dict.cpp index fe29880..e2aadcb 100755 --- a/src/Dict.cpp +++ b/src/Dict.cpp @@ -30,10 +30,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "KM_mutex.h" #include "KLV.h" #include "MDD.cpp" #include +static Kumu::Mutex s_Lock; static bool s_md_init = false; static std::map s_md_lookup; @@ -54,14 +56,30 @@ ASDCP::Dict::FindUL(const byte_t* ul_buf) { if ( ! s_md_init ) { - for ( ui32_t x = 0; x < s_MDD_Table_size; x++ ) - s_md_lookup.insert(std::map::value_type(UL(s_MDD_Table[x].ul), x)); + Kumu::AutoMutex AL(s_Lock); + + if ( ! s_md_init ) + { + for ( ui32_t x = 0; x < s_MDD_Table_size; x++ ) + s_md_lookup.insert(std::map::value_type(UL(s_MDD_Table[x].ul), x)); + + s_md_init = true; + } } std::map::iterator i = s_md_lookup.find(UL(ul_buf)); if ( i == s_md_lookup.end() ) - return 0; + { + byte_t tmp_ul[SMPTE_UL_LENGTH]; + memcpy(tmp_ul, ul_buf, SMPTE_UL_LENGTH); + tmp_ul[SMPTE_UL_LENGTH-1] = 0; + + i = s_md_lookup.find(UL(tmp_ul)); + + if ( i == s_md_lookup.end() ) + return 0; + } return &s_MDD_Table[(*i).second]; }