X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FMXFTypes.h;h=c49fed9b6f07b267e1f5de0621865dc7c65a4db2;hb=f4061a21fffad4fdf8dbb2f193f0f0960b25421c;hp=48dbf3f928bec243b01917a29963d218a8977abc;hpb=8fd602770d89acb171dbd878d8737ead85aa35d3;p=asdcplib.git diff --git a/src/MXFTypes.h b/src/MXFTypes.h index 48dbf3f..c49fed9 100755 --- a/src/MXFTypes.h +++ b/src/MXFTypes.h @@ -112,12 +112,12 @@ namespace ASDCP bool HasValue() const { return ! this->empty(); } ui32_t ArchiveLength() const { - return ( sizeof(ui32_t) * 2 ) + ( this->size() * this->ItemSize() ); + return ( sizeof(ui32_t) * 2 ) + ( (ui32_t)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 ( ! Writer->WriteUi32BE((ui32_t)this->size()) ) return false; + if ( ! Writer->WriteUi32BE((ui32_t)this->ItemSize()) ) return false; if ( this->empty() ) return true; typename ContainerType::const_iterator i; @@ -277,7 +277,7 @@ namespace ASDCP 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(); } + inline virtual ui32_t ArchiveLength() const { return (ui32_t)(sizeof(ui32_t) + size()); } virtual bool Unarchive(Kumu::MemIOReader* Reader); virtual bool Archive(Kumu::MemIOWriter* Writer) const; }; @@ -296,7 +296,7 @@ namespace ASDCP 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(); } + inline virtual ui32_t ArchiveLength() const { return (ui32_t)(sizeof(ui32_t) + size()); } virtual bool Unarchive(Kumu::MemIOReader* Reader); virtual bool Archive(Kumu::MemIOWriter* Writer) const; }; @@ -359,7 +359,7 @@ namespace ASDCP ui32_t First; ui32_t Second; - LineMapPair() {} + LineMapPair() : First(0), Second() {} ~LineMapPair() {} LineMapPair(const ui32_t& first, const ui32_t& second) : IArchive() { @@ -387,9 +387,9 @@ namespace ASDCP inline virtual bool Unarchive(Kumu::MemIOReader* Reader) { ui32_t n; if ( ! Reader->ReadUi32BE(&n) ) return false; - if ( n != 4 ) return false; - if ( ! Reader->ReadUi32BE(&n) ) return false; if ( n != 2 ) return false; + if ( ! Reader->ReadUi32BE(&n) ) return false; + if ( n != 4 ) return false; if ( ! Reader->ReadUi32BE((ui32_t*)&First) ) return false; if ( ! Reader->ReadUi32BE((ui32_t*)&Second) ) return false; return true; @@ -399,14 +399,110 @@ namespace ASDCP inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t)*4; } inline virtual bool Archive(Kumu::MemIOWriter* Writer) const { - if ( ! Writer->WriteUi32BE(4UL) ) return false; if ( ! Writer->WriteUi32BE(2UL) ) return false; + if ( ! Writer->WriteUi32BE(4UL) ) return false; if ( ! Writer->WriteUi32BE((ui32_t)First) ) return false; if ( ! Writer->WriteUi32BE((ui32_t)Second) ) return false; return true; } }; + // + class ColorPrimary : public Kumu::IArchive + { + public: + ui16_t X; + ui16_t Y; + + ColorPrimary() : X(0), Y(0) {} + ~ColorPrimary() {} + + ColorPrimary(const ui16_t& x, const ui16_t& y) : X(x), Y(y) {} + + ColorPrimary(const ColorPrimary& rhs) { Copy(rhs); } + const ColorPrimary& operator=(const ColorPrimary& rhs) { Copy(rhs); return *this; } + + void Copy(const ColorPrimary& rhs) { + X = rhs.X; + Y = rhs.Y; + } + + // + inline const char* EncodeString(char* str_buf, ui32_t buf_len) const { + snprintf(str_buf, buf_len, "%d,%d", X, Y); + return str_buf; + } + + inline virtual bool Unarchive(Kumu::MemIOReader* Reader) { + if ( ! Reader->ReadUi16BE((ui16_t*)&X) ) return false; + if ( ! Reader->ReadUi16BE((ui16_t*)&Y) ) return false; + return true; + } + + inline virtual bool HasValue() const { return X || Y; } + inline virtual ui32_t ArchiveLength() const { return sizeof(ui16_t)*2; } + + inline virtual bool Archive(Kumu::MemIOWriter* Writer) const { + if ( ! Writer->WriteUi16BE((ui16_t)X) ) return false; + if ( ! Writer->WriteUi16BE((ui16_t)Y) ) return false; + return true; + } + }; + + // + class ThreeColorPrimaries : public Kumu::IArchive + { + public: + ColorPrimary First; + ColorPrimary Second; + ColorPrimary Third; + + ThreeColorPrimaries() {} + ~ThreeColorPrimaries() {} + + ThreeColorPrimaries(const ColorPrimary& first, const ColorPrimary& second, const ColorPrimary& third) : + First(first), Second(second), Third(third) {} + + ThreeColorPrimaries(const ThreeColorPrimaries& rhs) { Copy(rhs); } + const ThreeColorPrimaries& operator=(const ThreeColorPrimaries& rhs) { Copy(rhs); return *this; } + + void Copy(const ThreeColorPrimaries& rhs) { + First = rhs.First; + Second = rhs.Second; + Third = rhs.Third; + } + + // + inline const char* EncodeString(char* str_buf, ui32_t buf_len) const { + snprintf(str_buf, buf_len, "%d,%d;%d,%d;%d,%d", First.X, First.Y, Second.X, Second.Y, Third.X, Third.Y); + return str_buf; + } + + inline virtual bool Unarchive(Kumu::MemIOReader* Reader) { + First.Unarchive(Reader); + Second.Unarchive(Reader); + Third.Unarchive(Reader); + return true; + } + + inline virtual bool HasValue() const { + return First.HasValue() || Second.HasValue() || Third.HasValue(); + } + + inline virtual ui32_t ArchiveLength() const { + return First.ArchiveLength() + + Second.ArchiveLength() + + Third.ArchiveLength(); + } + + inline virtual bool Archive(Kumu::MemIOWriter* Writer) const { + First.Archive(Writer); + Second.Archive(Writer); + Third.Archive(Writer); + return true; + } + }; + // class VersionType : public Kumu::IArchive {