From 9bfe9676115531eb76649e1ebd5e14b904b53ae2 Mon Sep 17 00:00:00 2001 From: jhurst Date: Sat, 11 Mar 2006 01:43:02 +0000 Subject: metadata reformed... --- src/h__Writer.cpp | 516 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 265 insertions(+), 251 deletions(-) (limited to 'src/h__Writer.cpp') diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp index 7af5710..cd51391 100755 --- a/src/h__Writer.cpp +++ b/src/h__Writer.cpp @@ -33,14 +33,19 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "MemIO.h" #include "Timecode.h" #include "KLV.h" -#include "MDD.h" -#include using namespace ASDCP; using namespace ASDCP::MXF; +// a magic number identifying asdcplib +#ifndef WM_BUILD_NUMBER +#define WM_BUILD_NUMBER 0x4A48 +#endif + + -ASDCP::h__Writer::h__Writer() : m_FramesWritten(0), m_StreamOffset(0) +// +ASDCP::h__Writer::h__Writer() : m_EssenceDescriptor(0), m_FramesWritten(0), m_StreamOffset(0) { } @@ -48,200 +53,264 @@ ASDCP::h__Writer::~h__Writer() { } -// standard method of writing the header of a new MXF file -Result_t -ASDCP::h__Writer::WriteMXFHeader(EssenceType_t EssenceType, ASDCP::Rational& EditRate, - ui32_t TCFrameRate, ui32_t BytesPerEditUnit) -{ -#if 0 - // write the stream metadata - m_Metadata = new Metadata(); - assert(m_Metadata); - assert(m_Metadata->m_Object); - if ( m_Info.EncryptedEssence ) - { - UL DMSUL(CryptoFrameworkUL_Data); - m_Metadata->AddDMScheme(DMSUL); - } +const byte_t PictDD_Data[SMPTE_UL_LENGTH] = { + 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, + 0x01, 0x03, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 }; - // Set the OP label - // If we are writing OP-Atom we write the header as OP1a initially as another process - // may try to read the file before it is complete and then it will NOT be a valid OP-Atom file - m_Metadata->SetOP(OP1aUL); +const byte_t SoundDD_Data[SMPTE_UL_LENGTH] = { + 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, + 0x01, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00 }; - // Build the Material Package - // DRAGONS: We should really try and determine the UMID type rather than cop-out! - UMID PackageUMID; - PackageUMID.MakeUMID(0x0d); // mixed type +const byte_t TCDD_Data[SMPTE_UL_LENGTH] = { + 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, + 0x01, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00 }; - m_MaterialPackage = m_Metadata->AddMaterialPackage("AS-DCP Material Package", PackageUMID); - m_Metadata->SetPrimaryPackage(m_MaterialPackage); // This will be overwritten for OP-Atom - - TrackPtr MPTimecodeTrack = m_MaterialPackage->AddTimecodeTrack(EditRate); - m_MPTimecode = MPTimecodeTrack->AddTimecodeComponent(TCFrameRate, 0, 0); +const byte_t DMDD_Data[SMPTE_UL_LENGTH] = { + 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, + 0x01, 0x03, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00 }; - TrackPtr FPTimecodeTrack = 0; - mxflib::UUID assetUUID(m_Info.AssetUUID); - UMID EssenceUMID; +// +// add DMS CryptographicFramework entry to source package +void +AddDMScrypt(Partition& HeaderPart, SourcePackage& Package, WriterInfo& Descr, const UL& WrappingUL) +{ + // Essence Track + StaticTrack* NewTrack = new StaticTrack; + HeaderPart.AddChildObject(NewTrack); + Package.Tracks.push_back(NewTrack->InstanceUID); + NewTrack->TrackName = "Descriptive Track"; + NewTrack->TrackID = 3; + + Sequence* Seq = new Sequence; + HeaderPart.AddChildObject(Seq); + NewTrack->Sequence = Seq->InstanceUID; + Seq->DataDefinition = UL(DMDD_Data); + + DMSegment* Segment = new DMSegment; + HeaderPart.AddChildObject(Segment); + Seq->StructuralComponents.push_back(Segment->InstanceUID); + Segment->EventComment = "AS-DCP KLV Encryption"; - switch ( EssenceType ) - { - case ESS_MPEG2_VES: - PackageUMID.MakeUMID(0x0f, assetUUID); - m_FilePackage = m_Metadata->AddFilePackage(1, MPEG_PACKAGE_LABEL, PackageUMID); - m_MPTrack = m_MaterialPackage->AddPictureTrack(EditRate); - m_FPTrack = m_FilePackage->AddPictureTrack(0, EditRate); - break; - - case ESS_JPEG_2000: - PackageUMID.MakeUMID(0x0f, assetUUID); - m_FilePackage = m_Metadata->AddFilePackage(1, JP2K_PACKAGE_LABEL, PackageUMID); - m_MPTrack = m_MaterialPackage->AddPictureTrack(EditRate); - m_FPTrack = m_FilePackage->AddPictureTrack(0, EditRate); - break; - - case ESS_PCM_24b_48k: - PackageUMID.MakeUMID(0x0f, assetUUID); - m_FilePackage = m_Metadata->AddFilePackage(1, PCM_PACKAGE_LABEL, PackageUMID); - m_MPTrack = m_MaterialPackage->AddSoundTrack(EditRate); - m_FPTrack = m_FilePackage->AddSoundTrack(0, EditRate); - break; - - default: return RESULT_RAW_ESS; - } + CryptographicFramework* CFW = new CryptographicFramework; + HeaderPart.AddChildObject(CFW); + Segment->DMFramework = CFW->InstanceUID; + + CryptographicContext* Context = new CryptographicContext; + HeaderPart.AddChildObject(Context); + CFW->ContextSR = Context->InstanceUID; + + Context->ContextID.Set(Descr.ContextID); + Context->SourceEssenceContainer = WrappingUL; // ?????? + Context->CipherAlgorithm.Set(CipherAlgorithm_AES); + Context->MICAlgorithm.Set( Descr.UsesHMAC ? MICAlgorithm_HMAC_SHA1 : MICAlgorithm_NONE ); + Context->CryptographicKeyID.Set(Descr.CryptographicKeyID); +} - // Add an essence element - FPTimecodeTrack = m_FilePackage->AddTimecodeTrack(EditRate); - m_FPTimecode = FPTimecodeTrack->AddTimecodeComponent(TCFrameRate, 0/* NDF */, - tc_to_frames(TCFrameRate, 1, 0, 0, 0) ); - - // Add a single Component to this Track of the Material Package - m_MPClip = m_MPTrack->AddSourceClip(); - - // Add a single Component to this Track of the File Package - m_FPClip = m_FPTrack->AddSourceClip(); - const byte_t* SourceEssenceContainerLabel = 0; +// +Result_t +ASDCP::h__Writer::WriteMXFHeader(const std::string& PackageLabel, const UL& WrappingUL, + const MXF::Rational& EditRate, + ui32_t TCFrameRate, ui32_t BytesPerEditUnit) +{ + ASDCP_TEST_NULL(m_EssenceDescriptor); - // Frame wrapping - if ( m_Info.EncryptedEssence ) - { - switch ( EssenceType ) - { - case ESS_MPEG2_VES: - SourceEssenceContainerLabel = WrappingUL_Data_MPEG2_VES; - break; - - case ESS_JPEG_2000: - SourceEssenceContainerLabel = WrappingUL_Data_JPEG_2000; - break; - - case ESS_PCM_24b_48k: - SourceEssenceContainerLabel = WrappingUL_Data_PCM_24b_48k; - break; - - default: - return RESULT_RAW_ESS; - } - } + m_HeaderPart.m_Primer.ClearTagList(); + m_HeaderPart.m_Preface = new Preface; + m_HeaderPart.AddChildObject(m_HeaderPart.m_Preface); - mem_ptr