Commit fixes found in porting.
[asdcplib.git] / src / KLV.h
index d940ff354013b486f6dc0bd274805c827c0bbddb..d685cf974a9aabe159c9a051409b3fc9f583f3da 100755 (executable)
--- a/src/KLV.h
+++ b/src/KLV.h
@@ -32,8 +32,11 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #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
 {
@@ -46,6 +49,30 @@ 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;
@@ -64,30 +91,37 @@ namespace ASDCP
     }
   };
 
-  //
-  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
   {
@@ -95,11 +129,43 @@ namespace ASDCP
     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
@@ -139,9 +205,9 @@ namespace ASDCP
       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