/*
-Copyright (c) 2005-2009, 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
virtual ~UL() {}
const char* EncodeString(char* str_buf, ui32_t buf_len) const;
+ bool operator==(const UL& rhs) const;
+ bool MatchIgnoreStream(const UL& rhs) const;
+ bool ExactMatch(const UL& rhs) const;
};
// UMID
const char* name;
};
+ const MDDEntry& MXFInterop_OPAtom_Entry();
+ const MDDEntry& SMPTE_390_OPAtom_Entry();
+
//
class Dictionary
{
- public:
-#if 0
- 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;
- }
-#endif
+ std::map<ASDCP::UL, ui32_t> m_md_lookup;
+ std::map<std::string, ui32_t> m_md_sym_lookup;
+ std::map<ui32_t, ASDCP::UL> m_md_rev_lookup;
- private:
- // Dictionary* m_Dict;
ASDCP_NO_COPY_CONSTRUCT(Dictionary);
-
public:
+ MDDEntry m_MDD_Table[(ui32_t)ASDCP::MDD_Max];
+
Dictionary();
~Dictionary();
+ void Init();
+ bool AddEntry(const MDDEntry& Entry, ui32_t index);
+ bool DeleteEntry(ui32_t index);
+
const MDDEntry* FindUL(const byte_t*) const;
+ const MDDEntry* FindSymbol(const std::string&) const;
+ const MDDEntry& Type(MDD_t type_id) const;
inline const byte_t* ul(MDD_t type_id) const {
return Type(type_id).ul;
}
- const MDDEntry& Type(MDD_t type_id) const;
+ void Dump(FILE* = 0) const;
};
const Dictionary& DefaultInteropDict();
const Dictionary& DefaultCompositeDict();
+ void default_md_object_init();
//
class IPrimerLookup
const byte_t* m_KeyStart;
ui32_t m_KLLength;
const byte_t* m_ValueStart;
- ui32_t m_ValueLength;
+ ui64_t m_ValueLength;
+ UL m_UL;
public:
KLVPacket() : m_KeyStart(0), m_KLLength(0), m_ValueStart(0), m_ValueLength(0) {}
virtual ~KLVPacket() {}
- ui32_t PacketLength() {
+ inline ui64_t PacketLength() {
return m_KLLength + m_ValueLength;
}
+ inline ui64_t ValueLength() {
+ return m_ValueLength;
+ }
+
+ inline ui32_t KLLength() {
+ return m_KLLength;
+ }
+
+ virtual UL GetUL();
+ virtual bool SetUL(const UL&);
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 UL& label);
virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer&, const UL& label, ui32_t length);
+
+ virtual Result_t WriteKLToBuffer(ASDCP::FrameBuffer& fb, ui32_t length)
+ {
+ if ( ! m_UL.HasValue() )
+ {
+ return RESULT_STATE;
+ }
+
+ return WriteKLToBuffer(fb, m_UL, length);
+ }
+
virtual void Dump(FILE*, const Dictionary& Dict, bool show_value);
};
{
ASDCP_NO_COPY_CONSTRUCT(KLVFilePacket);
- protected:
+ public:
ASDCP::FrameBuffer m_Buffer;
- public:
KLVFilePacket() {}
virtual ~KLVFilePacket() {}