X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FMXFTypes.h;h=c49fed9b6f07b267e1f5de0621865dc7c65a4db2;hb=f4061a21fffad4fdf8dbb2f193f0f0960b25421c;hp=3bfa03d067dcc202514ee48f113d057c5217e5e1;hpb=976a32de62b29ed688abecdebd6cb57f3ed299e7;p=asdcplib.git diff --git a/src/MXFTypes.h b/src/MXFTypes.h index 3bfa03d..c49fed9 100755 --- a/src/MXFTypes.h +++ b/src/MXFTypes.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2005-2015, John Hurst +Copyright (c) 2005-2016, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -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; }; @@ -352,6 +352,157 @@ namespace ASDCP } }; + // + class LineMapPair : public Kumu::IArchive + { + public: + ui32_t First; + ui32_t Second; + + LineMapPair() : First(0), Second() {} + ~LineMapPair() {} + + LineMapPair(const ui32_t& first, const ui32_t& second) : IArchive() { + First = first; + Second = second; + } + + LineMapPair(const LineMapPair& rhs) : IArchive() { + First = rhs.First; + Second = rhs.Second; + } + + const LineMapPair& operator=(const LineMapPair& rhs) { + First = rhs.First; + Second = rhs.Second; + return *this; + } + + // + inline const char* EncodeString(char* str_buf, ui32_t buf_len) const { + snprintf(str_buf, buf_len, "%d,%d", First, Second); + return str_buf; + } + + inline virtual bool Unarchive(Kumu::MemIOReader* Reader) { + ui32_t n; + 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; + } + + inline virtual bool HasValue() const { return true; } + inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t)*4; } + + inline virtual bool Archive(Kumu::MemIOWriter* Writer) const { + 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 {