Make the IMP stuff usable.
[asdcplib-cth.git] / src / MXFTypes.h
diff --git a/src/MXFTypes.h b/src/MXFTypes.h
deleted file mode 100755 (executable)
index 50523ba..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
-Copyright (c) 2005-2015, John Hurst
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*! \file    MXFTypes.h
-    \version $Id: MXFTypes.h,v 1.38 2015/10/12 15:30:46 jhurst Exp $
-    \brief   MXF objects
-*/
-
-#ifndef _MXFTYPES_H_
-#define _MXFTYPES_H_
-
-#include "KLV.h"
-#include <list>
-#include <vector>
-#include <set>
-#include <map>
-#include <wchar.h>
-
-// used with TLVReader::Read*
-//
-// these are used below to manufacture arguments
-#define OBJ_READ_ARGS(s,l) m_Dict->Type(MDD_##s##_##l), &l
-#define OBJ_WRITE_ARGS(s,l) m_Dict->Type(MDD_##s##_##l), &l
-#define OBJ_READ_ARGS_OPT(s,l) m_Dict->Type(MDD_##s##_##l), &l.get()
-#define OBJ_WRITE_ARGS_OPT(s,l) m_Dict->Type(MDD_##s##_##l), &l.get()
-#define OBJ_TYPE_ARGS(t) m_Dict->Type(MDD_##t).ul
-
-
-namespace ASDCP
-{
-  namespace MXF
-    {
-      typedef std::pair<ui32_t, ui32_t> ItemInfo;
-      typedef std::map<TagValue, ItemInfo> TagMap;
-
-      //      
-      class TLVReader : public Kumu::MemIOReader
-       {
-
-         TagMap         m_ElementMap;
-         IPrimerLookup* m_Lookup;
-
-         TLVReader();
-         ASDCP_NO_COPY_CONSTRUCT(TLVReader);
-         bool FindTL(const MDDEntry&);
-
-       public:
-         TLVReader(const byte_t* p, ui32_t c, IPrimerLookup* = 0);
-         Result_t ReadObject(const MDDEntry&, Kumu::IArchive*);
-         Result_t ReadUi8(const MDDEntry&, ui8_t*);
-         Result_t ReadUi16(const MDDEntry&, ui16_t*);
-         Result_t ReadUi32(const MDDEntry&, ui32_t*);
-         Result_t ReadUi64(const MDDEntry&, ui64_t*);
-       };
-
-      //      
-      class TLVWriter : public Kumu::MemIOWriter
-       {
-
-         TagMap         m_ElementMap;
-         IPrimerLookup* m_Lookup;
-
-         TLVWriter();
-         ASDCP_NO_COPY_CONSTRUCT(TLVWriter);
-         Result_t WriteTag(const MDDEntry&);
-
-       public:
-         TLVWriter(byte_t* p, ui32_t c, IPrimerLookup* = 0);
-         Result_t WriteObject(const MDDEntry&, Kumu::IArchive*);
-         Result_t WriteUi8(const MDDEntry&, ui8_t*);
-         Result_t WriteUi16(const MDDEntry&, ui16_t*);
-         Result_t WriteUi32(const MDDEntry&, ui32_t*);
-         Result_t WriteUi64(const MDDEntry&, ui64_t*);
-       };
-
-      //
-      template <class ContainerType>
-       class FixedSizeItemCollection : public ContainerType, public Kumu::IArchive
-       {
-       public:
-         FixedSizeItemCollection() {}
-         virtual ~FixedSizeItemCollection() {}
-
-         ui32_t ItemSize() const {
-           typename ContainerType::value_type tmp_item;
-           return tmp_item.ArchiveLength();
-         }
-
-         bool HasValue() const { return ! this->empty(); }
-
-         ui32_t ArchiveLength() const {
-           return ( sizeof(ui32_t) * 2 ) +  ( this->size() * this->ItemSize() );
-         }
-
-         bool Archive(Kumu::MemIOWriter* Writer) const {
-           if ( ! Writer->WriteUi32BE(this->size()) ) return false;
-           if ( ! Writer->WriteUi32BE(this->ItemSize()) ) return false;
-           if ( this->empty() ) return true;
-           
-           typename ContainerType::const_iterator i;
-           bool result = true;
-           for ( i = this->begin(); i != this->end() && result; ++i )
-             {
-               result = i->Archive(Writer);
-             }
-
-           return result;
-         }
-
-         //
-         bool Unarchive(Kumu::MemIOReader* Reader) {
-           ui32_t item_count, item_size;
-           if ( ! Reader->ReadUi32BE(&item_count) ) return false;
-           if ( ! Reader->ReadUi32BE(&item_size) ) return false;
-
-           if ( item_count > 0 )
-             {
-               if ( this->ItemSize() != item_size ) return false;
-             }
-
-           bool result = true;
-           for ( ui32_t i = 0; i < item_count && result; ++i )
-             {
-               typename ContainerType::value_type tmp_item;
-               result = tmp_item.Unarchive(Reader);
-
-               if ( result )
-                 {
-                   this->push_back(tmp_item);
-                 }
-             }
-
-           return result;
-         }
-
-         void Dump(FILE* stream = 0, ui32_t = 0) {
-           char identbuf[IdentBufferLen];
-
-           if ( stream == 0 )
-             {
-               stream = stderr;
-             }
-           
-           typename ContainerType::const_iterator i;
-           for ( i = this->begin(); i != this->end(); ++i )
-             {
-               fprintf(stream, "  %s\n", (*i).EncodeString(identbuf, IdentBufferLen));
-             }
-         }
-       };
-
-
-      template <class item_type>
-       class PushSet : public std::set<item_type>
-      {
-      public:
-       PushSet() {}
-       virtual ~PushSet() {}
-       void push_back(const item_type& item) { this->insert(item); }
-      };
-
-      template <class ItemType>
-       class Batch : public FixedSizeItemCollection<PushSet<ItemType> >
-      {
-      public:
-       Batch() {}
-       virtual ~Batch() {}
-      };
-
-      template <class ItemType>
-       class Array : public FixedSizeItemCollection<std::vector<ItemType> >
-      {
-      public:
-       Array() {}
-       virtual ~Array() {}
-      };
-
-      //
-      template <class T>
-       class SimpleArray : public std::list<T>, public Kumu::IArchive
-       {
-       public:
-         SimpleArray() {}
-         virtual ~SimpleArray() {}
-
-         //
-         bool Unarchive(Kumu::MemIOReader* Reader)
-           {
-             bool result = true;
-
-             while ( Reader->Remainder() > 0 && result )
-               {
-                 T Tmp;
-                 result = Tmp.Unarchive(Reader);
-
-                 if ( result )
-                   {
-                     this->push_back(Tmp);
-                   }
-               }
-
-             return result;
-           }
-
-         inline bool HasValue() const { return ! this->empty(); }
-
-         ui32_t ArchiveLength() const {
-           ui32_t arch_size = 0;
-
-           typename std::list<T>::const_iterator l_i = this->begin();
-
-           for ( ; l_i != this->end(); l_i++ )
-             arch_size += l_i->ArchiveLength();
-           
-           return arch_size;
-         }
-
-         //
-         bool Archive(Kumu::MemIOWriter* Writer) const {
-           bool result = true;
-           typename std::list<T>::const_iterator l_i = this->begin();
-
-           for ( ; l_i != this->end() && result; l_i++ )
-             result = (*l_i).Archive(Writer);
-
-           return result;
-         }
-
-         //
-         void Dump(FILE* stream = 0, ui32_t = 0)
-           {
-             char identbuf[IdentBufferLen];
-
-             if ( stream == 0 )
-               stream = stderr;
-
-             typename std::list<T>::iterator i = this->begin();
-             for ( ; i != this->end(); i++ )
-               fprintf(stream, "  %s\n", (*i).EncodeString(identbuf, IdentBufferLen));
-           }
-       };
-
-      //
-    class ISO8String : public std::string, public Kumu::IArchive
-       {
-       public:
-         ISO8String() {}
-         ISO8String(const char*);
-         ISO8String(const std::string&);
-         ~ISO8String() {}
-
-         const ISO8String& operator=(const char*);
-         const ISO8String& operator=(const std::string&);
-
-         const char* EncodeString(char* str_buf, ui32_t buf_len) const;
-         inline virtual bool HasValue() const { return ! empty(); }
-         inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t) + size(); }
-         virtual bool Unarchive(Kumu::MemIOReader* Reader);
-         virtual bool Archive(Kumu::MemIOWriter* Writer) const;
-       };
-
-      //
-    class UTF16String : public std::string, public Kumu::IArchive
-       {
-       public:
-         UTF16String() {}
-         UTF16String(const char*);
-         UTF16String(const std::string&);
-         ~UTF16String() {}
-
-         const UTF16String& operator=(const char*);
-         const UTF16String& operator=(const std::string&);
-
-         const char* EncodeString(char* str_buf, ui32_t buf_len) const;
-         inline virtual bool HasValue() const { return ! empty(); }
-         inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t) + size(); }
-         virtual bool Unarchive(Kumu::MemIOReader* Reader);
-         virtual bool Archive(Kumu::MemIOWriter* Writer) const;
-       };
-
-      //
-      class Rational : public ASDCP::Rational, public Kumu::IArchive
-       {
-       public:
-         Rational() {}
-         ~Rational() {}
-
-         Rational(const Rational& rhs) : ASDCP::Rational(), IArchive() {
-           Numerator = rhs.Numerator;
-           Denominator = rhs.Denominator;
-         }
-
-         const Rational& operator=(const Rational& rhs) {
-           Numerator = rhs.Numerator;
-           Denominator = rhs.Denominator;
-           return *this;
-         }
-
-         Rational(const ASDCP::Rational& rhs) {
-           Numerator = rhs.Numerator;
-           Denominator = rhs.Denominator;
-         }
-
-         const Rational& operator=(const ASDCP::Rational& rhs) {
-           Numerator = rhs.Numerator;
-           Denominator = rhs.Denominator;
-           return *this;
-         }
-
-         //
-         inline const char* EncodeString(char* str_buf, ui32_t buf_len) const {
-           snprintf(str_buf, buf_len, "%d/%d", Numerator, Denominator);
-           return str_buf;
-         }
-
-         inline virtual bool Unarchive(Kumu::MemIOReader* Reader) {
-           if ( ! Reader->ReadUi32BE((ui32_t*)&Numerator) ) return false;
-           if ( ! Reader->ReadUi32BE((ui32_t*)&Denominator) ) return false;
-           return true;
-         }
-
-         inline virtual bool HasValue() const { return true; }
-         inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t)*2; }
-
-         inline virtual bool Archive(Kumu::MemIOWriter* Writer) const {
-           if ( ! Writer->WriteUi32BE((ui32_t)Numerator) ) return false;
-           if ( ! Writer->WriteUi32BE((ui32_t)Denominator) ) return false;
-           return true;
-         }
-       };
-
-      //
-      class VersionType : public Kumu::IArchive
-       {
-       public:
-         enum Release_t { RL_UNKNOWN, RL_RELEASE, RL_DEVELOPMENT, RL_PATCHED, RL_BETA, RL_PRIVATE, RL_MAX };
-         ui16_t Major;
-         ui16_t Minor;
-         ui16_t Patch;
-         ui16_t Build;
-         Release_t Release;
-
-         VersionType() : Major(0), Minor(0), Patch(0), Build(0), Release(RL_UNKNOWN) {}
-         VersionType(const VersionType& rhs) { Copy(rhs); }
-         virtual ~VersionType() {}
-
-         const VersionType& operator=(const VersionType& rhs) { Copy(rhs); return *this; }
-         void Copy(const VersionType& rhs) {
-           Major = rhs.Major;
-           Minor = rhs.Minor;
-           Patch = rhs.Patch;
-           Build = rhs.Build;
-           Release = rhs.Release;
-         }
-
-         void Dump(FILE* = 0);
-
-         const char* EncodeString(char* str_buf, ui32_t buf_len) const {
-           snprintf(str_buf, buf_len, "%hu.%hu.%hu.%hur%hu", Major, Minor, Patch, Build, ui16_t(Release));
-           return str_buf;
-         }
-
-         virtual bool Unarchive(Kumu::MemIOReader* Reader) {
-           if ( ! Reader->ReadUi16BE(&Major) ) return false;
-           if ( ! Reader->ReadUi16BE(&Minor) ) return false;
-           if ( ! Reader->ReadUi16BE(&Patch) ) return false;
-           if ( ! Reader->ReadUi16BE(&Build) ) return false;
-           ui16_t tmp_release;
-           if ( ! Reader->ReadUi16BE(&tmp_release) ) return false;
-           Release = (Release_t)tmp_release;
-           return true;
-         }
-
-         inline virtual bool HasValue() const { return true; }
-         inline virtual ui32_t ArchiveLength() const { return sizeof(ui16_t)*5; }
-
-         virtual bool Archive(Kumu::MemIOWriter* Writer) const {
-           if ( ! Writer->WriteUi16BE(Major) ) return false;
-           if ( ! Writer->WriteUi16BE(Minor) ) return false;
-           if ( ! Writer->WriteUi16BE(Patch) ) return false;
-           if ( ! Writer->WriteUi16BE(Build) ) return false;
-           if ( ! Writer->WriteUi16BE((ui16_t)(Release & 0x0000ffffL)) ) return false;
-           return true;
-         }
-       };
-
-      /*
-       The RGBALayout type shall be a fixed-size 8 element sequence with a total length
-       of 16 bytes, where each element shall consist of the RGBAComponent type with the
-       following fields:
-
-       Code (UInt8): Enumerated value specifying component (i.e., component identifier).
-       "0" is the layout terminator.
-
-       Depth (UInt8): Integer specifying the number of bits occupied (see also G.2.26) 
-         1->32 indicates integer depth
-         253 = HALF (floating point 16-bit value)
-         254 = IEEE floating point 32-bit value
-         255 = IEEE floating point 64-bit value
-         0 = RGBALayout terminator
-
-       A Fill component indicates unused bits. After the components have been specified,
-       the remaining Code and Size fields shall be set to zero (0).
-
-       For each component in the Pixel, one of the following Codes or the terminator
-       shall be specified (explained below):
-
-       Code    ASCII
-
-      */
-      struct RGBALayoutTableEntry
-      {
-       byte_t code;
-       char symbol;
-       const char* label;
-      };
-
-      struct RGBALayoutTableEntry const RGBALayoutTable[] = {
-       { 0x52, 'R', "Red component" },
-       { 0x47, 'G', "Green component" },
-       { 0x42, 'B', "Blue component" },
-       { 0x41, 'A', "Alpha component" },
-       { 0x72, 'r', "Red component (LSBs)" },
-       { 0x67, 'g', "Green component (LSBs)" },
-       { 0x62, 'b', "Blue component (LSBs)" },
-       { 0x61, 'a', "Alpha component (LSBs)" },
-       { 0x46, 'F', "Fill component" },
-       { 0x50, 'P', "Palette code" },
-       { 0x55, 'U', "Color Difference Sample (e.g. U, Cb, I etc.)" },
-       { 0x56, 'V', "Color Difference Sample (e.g. V, Cr, Q etc.)" },
-       { 0x57, 'W', "Composite Video" },
-       { 0x58, 'X', "Non co-sited luma component" },
-       { 0x59, 'Y', "Luma component" },
-       { 0x5a, 'Z', "Depth component (SMPTE ST 268 compatible)" },
-       { 0x75, 'u', "Color Difference Sample (e.g. U, Cb, I etc.) (LSBs)" },
-       { 0x76, 'v', "Color Difference Sample (e.g. V, Cr, Q etc.) (LSBs)" },
-       { 0x77, 'w', "Composite Video (LSBs)" },
-       { 0x78, 'x', "Non co-sited luma component (LSBs)" },
-       { 0x79, 'y', "Luma component (LSBs)" },
-       { 0x7a, 'z', "Depth component (LSBs) (SMPTE ST 268 compatible)" },
-       { 0xd8, 'X', "The DCDM X color component (see SMPTE ST 428-1 X')" },
-       { 0xd9, 'Y', "The DCDM Y color component (see SMPTE ST 428-1 Y')" },
-       { 0xda, 'Z', "The DCDM Z color component (see SMPTE ST 428-1 Z')" },
-       { 0x00, '_', "Terminator" }
-      };
-
-
-      size_t const RGBAValueLength = 16;
-
-      byte_t const RGBAValue_RGB_10[RGBAValueLength] = { 'R', 10, 'G', 10, 'B', 10, 0, 0 };
-      byte_t const RGBAValue_RGB_8[RGBAValueLength]  = { 'R', 8,  'G', 8,  'B', 8,  0, 0 };
-      byte_t const RGBAValue_YUV_10[RGBAValueLength] = { 'Y', 10, 'U', 10, 'V', 10, 0, 0 };
-      byte_t const RGBAValue_YUV_8[RGBAValueLength]  = { 'Y', 8,  'U', 8,  'V', 8,  0, 0 };
-      byte_t const RGBAValue_DCDM[RGBAValueLength] = { 0xd8, 10, 0xd9, 10, 0xda, 10, 0, 0 };
-
-
-      class RGBALayout : public Kumu::IArchive
-       {
-         byte_t m_value[RGBAValueLength];
-
-       public:
-         RGBALayout();
-         RGBALayout(const byte_t* value);
-         ~RGBALayout();
-
-         RGBALayout(const RGBALayout& rhs) { Set(rhs.m_value); }
-         const RGBALayout& operator=(const RGBALayout& rhs) { Set(rhs.m_value); return *this; }
-         
-         void Set(const byte_t* value) {
-           memcpy(m_value, value, RGBAValueLength);
-         }
-
-         const char* EncodeString(char* buf, ui32_t buf_len) const;
-
-         bool HasValue() const { return true; }
-         ui32_t ArchiveLength() const { return RGBAValueLength; }
-
-         bool Archive(Kumu::MemIOWriter* Writer) const {
-           return Writer->WriteRaw(m_value, RGBAValueLength);
-         }
-
-         bool Unarchive(Kumu::MemIOReader* Reader) {
-           if ( Reader->Remainder() < RGBAValueLength )
-             {
-               return false;
-             }
-
-           memcpy(m_value, Reader->CurrentData(), RGBAValueLength);
-           Reader->SkipOffset(RGBAValueLength);
-           return true;
-         }
-       };
-
-
-      //
-      class Raw : public Kumu::ByteString
-       {
-       public:
-         Raw();
-         Raw(const Raw& rhs) : Kumu::ByteString() { Copy(rhs); }
-         virtual ~Raw();
-
-         const Raw& operator=(const Raw& rhs) { Copy(rhs); return *this; }
-         void Copy(const Raw& rhs) {
-           if ( KM_SUCCESS(Capacity(rhs.Length())) )
-             {
-               Set(rhs);
-             }
-         }
-
-         //
-          virtual bool Unarchive(Kumu::MemIOReader* Reader);
-         virtual bool Archive(Kumu::MemIOWriter* Writer) const;
-         const char* EncodeString(char* str_buf, ui32_t buf_len) const;
-       };
-
-    } // namespace MXF
-} // namespace ASDCP
-
-
-#endif //_MXFTYPES_H_
-
-//
-// end MXFTypes.h
-//