X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FMXF.cpp;h=bc7bec2c9986826e1f95054df68930b1c194f2b8;hb=9f267e9656c2a5f2986b7ab29aeeec48143c76e1;hp=4ba82cd28a393a50ca781ab63a80101b3c66e70b;hpb=e69fe859d8723724ac972bb70de51f8c6ce1699a;p=asdcplib.git diff --git a/src/MXF.cpp b/src/MXF.cpp index 4ba82cd..bc7bec2 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2005-2009, John Hurst +Copyright (c) 2005-2012, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -189,7 +189,7 @@ public: } // - void AddPacket(InterchangeObject* ThePacket) + void AddPacket(InterchangeObject* ThePacket) // takes ownership { assert(ThePacket); m_Map.insert(std::map::value_type(ThePacket->InstanceUID, ThePacket)); @@ -267,7 +267,7 @@ ASDCP::MXF::Partition::~Partition() { } -// +// takes ownership void ASDCP::MXF::Partition::AddChildObject(InterchangeObject* Object) { @@ -420,7 +420,9 @@ public: // -ASDCP::MXF::Primer::Primer(const Dictionary*& d) : m_LocalTag(0xff), m_Dict(d) {} +ASDCP::MXF::Primer::Primer(const Dictionary*& d) : m_LocalTag(0xff), m_Dict(d) { + m_UL = m_Dict->ul(MDD_Primer); +} // ASDCP::MXF::Primer::~Primer() {} @@ -486,7 +488,7 @@ ASDCP::MXF::Primer::WriteToBuffer(ASDCP::FrameBuffer& Buffer) if ( ASDCP_SUCCESS(result) ) { ui32_t packet_length = MemWRT.Length(); - result = WriteKLToBuffer(Buffer, m_Dict->ul(MDD_Primer), packet_length); + result = WriteKLToBuffer(Buffer, packet_length); if ( ASDCP_SUCCESS(result) ) Buffer.Size(Buffer.Size() + packet_length); @@ -578,6 +580,31 @@ ASDCP::MXF::Primer::Dump(FILE* stream) //------------------------------------------------------------------------------------------ // +// +ASDCP::MXF::Preface::Preface(const Dictionary*& d) : + InterchangeObject(d), m_Dict(d), Version(258), ObjectModelVersion(0) +{ + assert(m_Dict); + m_UL = m_Dict->Type(MDD_Preface).ul; +} + +// +void +ASDCP::MXF::Preface::Copy(const Preface& rhs) +{ + InterchangeObject::Copy(rhs); + + LastModifiedDate = rhs.LastModifiedDate; + Version = rhs.Version; + ObjectModelVersion = rhs.ObjectModelVersion; + PrimaryPackage = rhs.PrimaryPackage; + Identifications = rhs.Identifications; + ContentStorage = rhs.ContentStorage; + OperationalPattern = rhs.OperationalPattern; + EssenceContainers = rhs.EssenceContainers; + DMSchemes = rhs.DMSchemes; +} + // ASDCP::Result_t ASDCP::MXF::Preface::InitFromTLVSet(TLVReader& TLVSet) @@ -616,8 +643,6 @@ ASDCP::MXF::Preface::WriteToTLVSet(TLVWriter& TLVSet) ASDCP::Result_t ASDCP::MXF::Preface::InitFromBuffer(const byte_t* p, ui32_t l) { - assert(m_Dict); - m_Typeinfo = &(m_Dict->Type(MDD_Preface)); return InterchangeObject::InitFromBuffer(p, l); } @@ -625,8 +650,6 @@ ASDCP::MXF::Preface::InitFromBuffer(const byte_t* p, ui32_t l) ASDCP::Result_t ASDCP::MXF::Preface::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - assert(m_Dict); - m_Typeinfo = &(m_Dict->Type(MDD_Preface)); return InterchangeObject::WriteToBuffer(Buffer); } @@ -814,7 +837,7 @@ ASDCP::MXF::OPAtomHeader::InitFromBuffer(const byte_t* p, ui32_t l) } else { - m_PacketList->AddPacket(object); + m_PacketList->AddPacket(object); // takes ownership if ( object->IsA(m_Dict->ul(MDD_Preface)) && m_Preface == 0 ) m_Preface = (Preface*)object; @@ -879,6 +902,9 @@ ASDCP::MXF::OPAtomHeader::GetSourcePackage() return 0; } +// +ASDCP::MXF::RIP& +ASDCP::MXF::OPAtomHeader::GetRIP() { return m_RIP; } // ASDCP::Result_t @@ -1070,7 +1096,7 @@ ASDCP::MXF::OPAtomIndexFooter::InitFromBuffer(const byte_t* p, ui32_t l) if ( ASDCP_SUCCESS(result) ) { - m_PacketList->AddPacket(object); + m_PacketList->AddPacket(object); // takes ownership } else { @@ -1159,6 +1185,31 @@ ASDCP::MXF::OPAtomIndexFooter::Dump(FILE* stream) (*i)->Dump(stream); } +ASDCP::Result_t +ASDCP::MXF::OPAtomIndexFooter::GetMDObjectByID(const UUID& ObjectID, InterchangeObject** Object) +{ + return m_PacketList->GetMDObjectByID(ObjectID, Object); +} + +// +ASDCP::Result_t +ASDCP::MXF::OPAtomIndexFooter::GetMDObjectByType(const byte_t* ObjectID, InterchangeObject** Object) +{ + InterchangeObject* TmpObject; + + if ( Object == 0 ) + Object = &TmpObject; + + return m_PacketList->GetMDObjectByType(ObjectID, Object); +} + +// +ASDCP::Result_t +ASDCP::MXF::OPAtomIndexFooter::GetMDObjectsByType(const byte_t* ObjectID, std::list& ObjectList) +{ + return m_PacketList->GetMDObjectsByType(ObjectID, ObjectList); +} + // ASDCP::Result_t ASDCP::MXF::OPAtomIndexFooter::Lookup(ui32_t frame_num, IndexTableSegment::IndexEntry& Entry) const @@ -1261,6 +1312,15 @@ ASDCP::MXF::OPAtomIndexFooter::PushIndexEntry(const IndexTableSegment::IndexEntr //------------------------------------------------------------------------------------------ // +// +void +ASDCP::MXF::InterchangeObject::Copy(const InterchangeObject& rhs) +{ + m_UL = rhs.m_UL; + InstanceUID = rhs.InstanceUID; + GenerationUID = rhs.GenerationUID; +} + // ASDCP::Result_t ASDCP::MXF::InterchangeObject::InitFromTLVSet(TLVReader& TLVSet) @@ -1288,13 +1348,9 @@ ASDCP::MXF::InterchangeObject::InitFromBuffer(const byte_t* p, ui32_t l) ASDCP_TEST_NULL(p); Result_t result = RESULT_FALSE; - if ( m_Typeinfo == 0 ) - { - result = KLVPacket::InitFromBuffer(p, l); - } - else + if ( m_UL.HasValue() ) { - result = KLVPacket::InitFromBuffer(p, l, m_Typeinfo->ul); + result = KLVPacket::InitFromBuffer(p, l, m_UL); if ( ASDCP_SUCCESS(result) ) { @@ -1302,6 +1358,10 @@ ASDCP::MXF::InterchangeObject::InitFromBuffer(const byte_t* p, ui32_t l) result = InitFromTLVSet(MemRDR); } } + else + { + result = KLVPacket::InitFromBuffer(p, l); + } return result; } @@ -1310,7 +1370,7 @@ ASDCP::MXF::InterchangeObject::InitFromBuffer(const byte_t* p, ui32_t l) ASDCP::Result_t ASDCP::MXF::InterchangeObject::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { - if ( m_Typeinfo == 0 ) + if ( ! m_UL.HasValue() ) return RESULT_STATE; TLVWriter MemWRT(Buffer.Data() + kl_length, Buffer.Capacity() - kl_length, m_Lookup); @@ -1319,7 +1379,7 @@ ASDCP::MXF::InterchangeObject::WriteToBuffer(ASDCP::FrameBuffer& Buffer) if ( ASDCP_SUCCESS(result) ) { ui32_t packet_length = MemWRT.Length(); - result = WriteKLToBuffer(Buffer, m_Typeinfo->ul, packet_length); + result = WriteKLToBuffer(Buffer, packet_length); if ( ASDCP_SUCCESS(result) ) Buffer.Size(Buffer.Size() + packet_length);