/*
-Copyright (c) 2005-2006, John Hurst
+Copyright (c) 2005-2011, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
#include <KM_memio.h>
#include "AS_DCP.h"
#include "MDD.h"
+#include <map>
namespace ASDCP
const ui32_t SMPTE_UL_LENGTH = 16;
const ui32_t SMPTE_UMID_LENGTH = 32;
const byte_t SMPTE_UL_START[4] = { 0x06, 0x0e, 0x2b, 0x34 };
+
+#ifndef MAX_KLV_PACKET_LENGTH
const ui32_t MAX_KLV_PACKET_LENGTH = 1024*1024*64;
+#endif
const ui32_t IdentBufferLen = 128;
-
-const ui32_t IntBufferLen = 64;
+ const ui32_t IntBufferLen = 64;
inline const char* i64sz(i64_t i, char* buf)
{
virtual ~UL() {}
const char* EncodeString(char* str_buf, ui32_t buf_len) const;
+ bool operator==(const UL& rhs) const;
+ bool ExactMatch(const UL& rhs) const;
};
// UMID
const char* EncodeString(char* str_buf, ui32_t buf_len) const;
};
+ const byte_t nil_UMID[SMPTE_UMID_LENGTH] = {0};
+ const UMID NilUMID(nil_UMID);
//
struct MDDEntry
const char* name;
};
+ const MDDEntry& MXFInterop_OPAtom_Entry();
+ const MDDEntry& SMPTE_390_OPAtom_Entry();
+
//
- class Dict
+ class Dictionary
{
+ std::map<ASDCP::UL, ui32_t> m_md_lookup;
+ std::map<ui32_t, ASDCP::UL> m_md_rev_lookup;
+ MDDEntry m_MDD_Table[(ui32_t)ASDCP::MDD_Max];
+
+ ASDCP_NO_COPY_CONSTRUCT(Dictionary);
+
public:
- static const MDDEntry* FindUL(const byte_t*);
- static const MDDEntry* FindName(const char*);
- static const MDDEntry& Type(MDD_t type_id);
- static bool Replace(const MDDEntry& Entry);
- static void Restore(const byte_t* ul);
- static void RestoreAll();
-
- inline static const byte_t* ul(MDD_t type_id) {
+ Dictionary();
+ ~Dictionary();
+
+ // bool operator==(const Dictionary& rhs) const { return this == &rhs; }
+
+ void Init();
+ bool AddEntry(const MDDEntry& Entry, ui32_t index);
+ bool DeleteEntry(ui32_t index);
+
+ const MDDEntry* FindUL(const byte_t*) const;
+ const MDDEntry& Type(MDD_t type_id) const;
+
+ inline const byte_t* ul(MDD_t type_id) const {
return Type(type_id).ul;
}
- private:
- Dict* m_Dict;
- ASDCP_NO_COPY_CONSTRUCT(Dict);
+ void Dump(FILE* = 0) const;
+ };
- protected:
- Dict();
- public:
- ~Dict();
- };
+ const Dictionary& DefaultSMPTEDict();
+ const Dictionary& DefaultInteropDict();
+ const Dictionary& DefaultCompositeDict();
+
//
class IPrimerLookup
return m_KLLength + m_ValueLength;
}
+ ui32_t ValueLength() {
+ return m_ValueLength;
+ }
+
+ ui32_t KLLength() {
+ return m_KLLength;
+ }
+
+ virtual UL GetUL();
virtual bool HasUL(const byte_t*);
virtual Result_t InitFromBuffer(const byte_t*, ui32_t);
- virtual Result_t InitFromBuffer(const byte_t*, ui32_t, const byte_t* label);
- virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer&, const byte_t* label, ui32_t length);
- virtual void Dump(FILE*, bool);
+ virtual Result_t InitFromBuffer(const byte_t*, ui32_t, const UL& label);
+ virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer&, const UL& label, ui32_t length);
+ virtual void Dump(FILE*, const Dictionary& Dict, bool show_value);
};
//
virtual ~KLVFilePacket() {}
virtual Result_t InitFromFile(const Kumu::FileReader&);
- virtual Result_t InitFromFile(const Kumu::FileReader&, const byte_t* label);
- virtual Result_t WriteKLToFile(Kumu::FileWriter& Writer, const byte_t* label, ui32_t length);
+ virtual Result_t InitFromFile(const Kumu::FileReader&, const UL& label);
+ virtual Result_t WriteKLToFile(Kumu::FileWriter& Writer, const UL& label, ui32_t length);
};
} // namespace ASDCP