#ifndef _KLV_H_
#define _KLV_H_
-#include <FileIO.h>
-#include <MemIO.h>
+#include <KM_fileio.h>
+#include <KM_memio.h>
+#include "AS_DCP.h"
+#include "MDD.h"
+
namespace ASDCP
{
const ui32_t IdentBufferLen = 128;
+const ui32_t IntBufferLen = 64;
+
+inline const char* i64sz(i64_t i, char* buf)
+{
+ assert(buf);
+#ifdef WIN32
+ snprintf(buf, IntBufferLen, "%I64d", i);
+#else
+ snprintf(buf, IntBufferLen, "%lld", i);
+#endif
+ return buf;
+}
+
+inline const char* ui64sz(ui64_t i, char* buf)
+{
+ assert(buf);
+#ifdef WIN32
+ snprintf(buf, IntBufferLen, "%I64u", i);
+#else
+ snprintf(buf, IntBufferLen, "%llu", i);
+#endif
+ return buf;
+}
+
struct TagValue
{
byte_t a;
}
};
- //
- class IArchive
+ using Kumu::UUID;
+
+ // Universal Label
+ class UL : public Kumu::Identifier<SMPTE_UL_LENGTH>
{
public:
- virtual ~IArchive() {}
- virtual Result_t ReadFrom(ASDCP::MemIOReader& Reader) = 0;
- virtual Result_t WriteTo(ASDCP::MemIOWriter& Writer) = 0;
- };
-} // namespace ASDCP
+ UL() {}
+ UL(const UL& rhs) : Kumu::Identifier<SMPTE_UL_LENGTH>(rhs) {}
+ UL(const byte_t* value) : Kumu::Identifier<SMPTE_UL_LENGTH>(value) {}
+ virtual ~UL() {}
-#include "Identifier.h"
+ const char* EncodeString(char* str_buf, ui32_t buf_len) const;
+ };
-namespace ASDCP
-{
- //
- class IPrimerLookup
+ // UMID
+ class UMID : public Kumu::Identifier<SMPTE_UMID_LENGTH>
{
public:
- virtual ~IPrimerLookup() {}
- virtual void ClearTagList() = 0;
- virtual Result_t InsertTag(const ASDCP::UL& Key, ASDCP::TagValue& Tag) = 0;
- virtual Result_t TagForKey(const ASDCP::UL& Key, ASDCP::TagValue& Tag) = 0;
+ UMID() {}
+ UMID(const UMID& rhs) : Kumu::Identifier<SMPTE_UMID_LENGTH>(rhs) {}
+ UMID(const byte_t* value) : Kumu::Identifier<SMPTE_UMID_LENGTH>(value) {}
+ virtual ~UMID() {}
+
+ void MakeUMID(int Type);
+ void MakeUMID(int Type, const UUID& ID);
+ 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
{
TagValue tag;
bool optional;
const char* name;
- const char* detail;
};
//
- const MDDEntry* GetMDDEntry(const byte_t*);
+ class Dict
+ {
+ 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) {
+ return Type(type_id).ul;
+ }
+
+ private:
+ Dict* m_Dict;
+ ASDCP_NO_COPY_CONSTRUCT(Dict);
+
+ protected:
+ Dict();
+
+ public:
+ ~Dict();
+ };
+
+ //
+ class IPrimerLookup
+ {
+ public:
+ virtual ~IPrimerLookup() {}
+ virtual void ClearTagList() = 0;
+ virtual Result_t InsertTag(const MDDEntry& Entry, ASDCP::TagValue& Tag) = 0;
+ virtual Result_t TagForKey(const ASDCP::UL& Key, ASDCP::TagValue& Tag) = 0;
+ };
//
class KLVPacket
KLVFilePacket() {}
virtual ~KLVFilePacket() {}
- virtual Result_t InitFromFile(const FileReader&);
- virtual Result_t InitFromFile(const FileReader&, const byte_t* label);
- virtual Result_t WriteKLToFile(FileWriter& Writer, const byte_t* label, ui32_t length);
+ 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);
};
} // namespace ASDCP